*Stack 구성
1)Logstash: 로그를 받아서 해당 로그를 elasticsearch 로 전달 하는 역할 을 한다.
2)Redis: filebeat 에서 전송한 로그를 redis의 list형태로 저장하여 logstash 로 보내는 mq 의 역할을 한다
3)Elasticsearch : 로그를 저장, 검색 인덱싱 하는 과정을 한다.
4)Kibana: nginx proxy 를 통하여 전달되는 웹인터페이스로 각 로그를 유저가 볼 수 있게 가시화 하는 역할을 한다.
5)Filebeat:각각의 target 이되는 서버는 로그를 filebeat 를 이용하여 logstash 에 로그를 보낸다. 로그를 전달하는 agent 역할을 한다
*설피 필요 패키지 다운 로그 및 시간 동기화
본격적인 설치 과정에 앞서, 설치에 필요한 패키지 및 시간 동기화를 진행 한다.
[root@localhost ~]# yum install wget net-tools gcc rdate unzipepel-release epel* -y && rdate -s time.bora.net
* Install Redis
메세지큐의 역할을 하는 redis를 서버형태로 설치 한다.
[root@localhost ~]# cd /usr/local/
[root@localhost local]# wget http://download.redis.io/releases/redis-3.2.6.tar.gz
[root@localhost local]# tar xvzf redis-3.2.6.tar.gz
[root@localhost local]# mv redis-3.2.6 redis
[root@localhost local]# cd redis/deps/
[root@localhost local]# make geohash-int hiredis jemalloc linenoise lua
[root@localhost src]# cd ../src && make && make install
[root@localhost src]# cd ../utils/
[root@localhost utils]# ./install_server.sh
[root@localhost utils]# /etc/init.d/redis_6379 start
외부에서 redis에 로그를 전달 할 수 있도록 공인아이피도 bind 지시자에 추가 해 준다.
[root@localhost utils]# vi /etc/redis/6379.conf
bind 127.0.0.1 1.1.1.1(공인아이피)
[root@pp_log src]# /etc/init.d/redis_6379 restart
[root@pp_log src]# netstat -nltp | grep redis
tcp 0 0 1.1.1.1:6379 0.0.0.0:* LISTEN 4890/redis-server 1
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4890/redis-server 1
* Install Java 8
Elasticsearch, Logstash 는 java 기반으로 동작 하기 때문에 openJDK 를 이용하여 설치한다.
[root@localhost utils]# cd ~
[root@plocalhost _log ~]# cd ~ && wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm"
[root@pp_log ~]# yum -y localinstall jdk-8u73-linux-x64.rpm && rm -rf ~/jdk-8u*-linux-x64.rpm && java -version
java version "1.8.0_73"
* Install es5
Elasticsearch5 패키지 저장소를 등록후 Elasticsearch5를 설치 한다. 하위 버전과 다르게 해당 repo 등록시
kibana,logstash 등도 동일한 버전으로 설치 가능 하게 제공 된다.
[root@localhost ~]# rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
[root@localhost ~]# echo '[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md' | sudo tee /etc/yum.repos.d/elasticsearch.repo
[root@localhost ~]# yum -y install elasticsearch
elasticsearch.yml 파일을 수정하여, elasticsearch가 binding 될 아이피를 설정 한다.
해당 과정에서는 별도의 cluster 없이 진행 하기 때문에 locashot 로 설정 한다.
[root@localhost ~]# vi /etc/elasticsearch/elasticsearch.yml
54 # network.host: 192.168.0.1
55 network.host: localhost
[root@localhost ~]# systemctl start elasticsearch && systemctl enable elasticsearch
[root@localhost ~]# curl http://localhost:9200
{
"name" : "ecJIf0x",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "scfl5q7HQuGmfiZc-fvsRA",
"version" : {
"number" : "5.1.1",
"build_hash" : "5395e21",
"build_date" : "2016-12-06T12:36:15.409Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
* Install kibana5
es5 설치전 등록된 repo 를 이용하여 , kibana5 를 설치 한다.
[root@localhost ~]# yum -y install kibana
[root@localhost ~]# vi /etc/kibana/kibana.yml
5 # server.host: "0.0.0.0"
6 server.host: localhost
[root@localhost ~]# systemctl start kibana && systemctl enable kibana
* Install nginx
kibana 는 별도의 인증이 없기 때문에 nginx proxy 를 통하여 nginx 로 접근 하며, nginx 의 웹 인증을 이용하여 프록시 설정을 아래와 같이 진행 한다.
[root@localhost ~]# yum -y install nginx httpd-tools
[root@localhost ~]# htpasswd -c /etc/nginx/htpasswd.users admin
New password:
Re-type new password:
Adding password for user admin
[root@localhost ~]# vi /etc/nginx/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
location / {
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:5601;
}
[root@localhost ~]# systemctl start nginx && systemctl enable nginx
* Install logstash5
logstash도 동일하게 설정된 es5 repo 를 이용하여, logstash5 를 yum 으로 설치 한다.
[root@localhost ~]# yum list | grep logstash
logstash.noarch 1:5.1.1-1 elasticsearch-5.x
[root@localhost ~]# yum install logstash
* Configure Logstash
[root@localhost ~]# vi /etc/logstash/conf.d/11-redis-input.conf
input {
redis {
host => '1.1.1.1'
port => '6379'
data_type => 'list'
key => 'filebeat'
type => "redis-input"
}
}
[root@localhost ~]# vim /etc/logstash/conf.d/14-syslog-filter.conf
filter {
if [type] == "syslog" {
grok {
match => [ "message", "%{SYSLOGTIMESTAMP:syslog_timestamp}%{SPACE}%{WORD:syslog_hostname}%{SPACE}%{DATA:syslog_program}\:%{SPACE}%{GREEDYDATA:syslog_message}" ]
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
}
}
[root@localhost ~]# vi /etc/logstash/conf.d/13-el5-output.conf
output {
elasticsearch {
hosts => "localhost:9200"
}
}
모든 설정이 끝나면 아래와 같이 logstash 를 재시작 한다.
[root@localhost tls]# systemctl restart logstash && systemctl enable logstash
정상적으로 logstash 가 실행 된다면 아래와 같이 정상적으로 로그를 확인 할 수 있다.
[root@localhost src]# tail -f /var/log/logstash/logstash-plain.log
[2016-12-24T21:45:32,148][INFO ][logstash.pipeline ] Pipeline main started
[2016-12-24T21:45:32,176][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
*filebeat install ,configuration
해당 데모 에서는 ELK 서버 자체의 syslog 를 수집 하기 위해 ELK 서버 자체에 filebeat 를 설치 하여, 로그를 전송 하게 한다.
[root@localhost src]# yum -y install filebeat
[root@localhost src]# vi /etc/filebeat/filebeat.yml
#=========================== Filebeat prospectors =============================
filebeat.prospectors:
# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
# Below are the prospector specific configurations.
- input_type: log
# Paths that should be crawled and fetched. Glob based paths.
paths:
#- /var/log/*.log
- /var/log/messages
#- c:\programdata\elasticsearch\logs\*
document_type: syslog
.. 생략..
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
# Optional protocol and basic auth credentials.
#protocol: "https"
#username: "elastic"
#password: "changeme"
#----------------------------- redis output --------------------------------
output.redis:
# Boolean flag to enable or disable the output module.
enabled: true
# The list of Redis servers to connect to. If load balancing is enabled, the
# events are distributed to the servers in the list. If one server becomes
# unreachable, the events are distributed to the reachable servers only.
hosts: ["1.1.1.1:6379"]
# The Redis port to use if hosts does not contain a port number. The default
# is 6379.
port: 6379
[root@localhost tls]# systemctl restart filebeat
*kibana setting
웹 브라우저를 통하여 kibana 를 접속 하면 처음 접속시 index pattern 이 등록 된것이 없기 때문에 아래와 같이 index pattern
설정 부분으로 들어 온다. index 는 logstash-* 로 설정 후 생성 한다.
정상적으로 될 경우 아래와 같이 필드를 확인 할 수 있다.
Discovery 를 통하여 로그를 확인 할 수 있다.
기본적인 메뉴는 하위 버전과 유사 하며, 설정 방법도 동일하다.
반응형
'Elastic Stack' 카테고리의 다른 글
Logstash Drop filter (1) | 2018.07.22 |
---|---|
Logging every shell command to elastic stack (0) | 2018.05.20 |
Elasticsearch5, Logstash5, and Kibana5 (ELK5 Stack) install CentOS 7 (10) | 2016.12.20 |
netflow 데이터를 이용한 elk 설정 (3) | 2016.12.19 |
logstash 패턴을 이용한 ELK 파싱(nginx access log,nginx access log + geoip) (0) | 2016.12.14 |