본문 바로가기

Develop/Study

ELK (ElasticSearch + Logstash + Kibana) 구성

출처 - http://tallstory83.blogspot.kr/2016/06/elk-elasticsearch-logstash-kibana_35.html


ELK (ElasticSearch + Logstash + Kibana) 구성


Elasticsearch와 Logstash를 사용한 로그 수집 및 분석을 위한 환경 구축 절차 정리

nginx 로그를 수집하는 예제로 진행


설치 정보
  - 사용 OS: ubuntu 14.04 Server
  - 프로그램
    .Elasticsearch 2.3.3
    .Kibana 4.5.1
    .Logstash 2.3.2


사전 준비
  1. Java 1.8 설치
    Elasticsearch를 실행하기 위해서는 java가 우선 설치되어 있어야 됨.
    참고: http://tallstory83.blogspot.kr/2016/06/ubuntu-oracle-java.html

  2. nginx 설치
    수집용 nginx log 작성을 위해 설치 
    $ sudo apt-get install nginx


ELK  Stack 구성
  테스트를 위한 구성으로, 모두 standalone으로 동작하도록 구성함
  logstash와 nginx, elasticsearch가 모두 하나의 OS 위에 설치된 것으로 구성
  설치는 모두 사용자 홈디렉토리를 기준으로 작업

  1. Elasticsearch 설치
    Elasticsearch 다운로드
1
2
3
$ cd ~
$ wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/zip/elasticsearch/2.3.3/elasticsearch-2.3.3.zip
$ unzip elasticsearch-2.3.3.zip


    Elasticsearch 실행
1
2
$ cd elasticsearch-2.3.3/bin
$ ./elasticsearch


    Elasticsearch 실행 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
$ curl http://localhost:9200/
{
  "name" : "Quincy Harker",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.3.3",
    "build_hash" : "218bdf10790eef486ff2c41a3df5cfa32dadcfde",
    "build_timestamp" : "2016-05-17T15:40:04Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}


  2. logstash 설치
    2.1 nginx 로그 접근 권한 변경
      logstash가 nginx의 log를 읽을 수 있도록 log 권한 변경

      임시 수정 방법: log 다시 작성시 권한 변경 됨.
1
$ sudo chmod 644 /var/log/*.log


      영구 수정 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
size 10M
missingok
rotate 52
compress
delaycompress
notifempty
create 0644 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi \
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}


      2.2 logstash 설치 / nginx log용 설정파일 작성
1
2
3
4
$ wget https://download.elastic.co/logstash/logstash/logstash-2.3.2.tar.gz
$ tar zxvf logstash-2.3.2.tar.gz
$ cd logstash-2.3.2
$ mkdir etc


      nginx.conf에 아래 내용 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
$ cat ./etc/nginx.conf
input {
    file {
        type => "nginx"
        start_position => "beginning"
        path => [ "/var/log/nginx/*.log" ]
    }
}
filter {
    if [type] == "nginx" {
        # NGINX access log entry
        grok {
            match => [ "message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}"]
            overwrite => [ "message" ]
        }
 
        mutate {
            convert => ["response", "integer"]
            convert => ["bytes", "integer"]
            convert => ["responsetime", "float"]
        }
 
        geoip {
            source => "clientip"
            target => "geoip"
            add_tag => [ "nginx-geoip" ]
        }
 
        date {
            match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
            remove_field => [ "timestamp" ]
        }.,
 
        useragent {
            source => "agent"
        }
 
        # NGINX error log
        grok {
            match => [ "message" , "(?<timestamp>%{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY}[- ]%{TIME}) \[%{LOGLEVEL:severity}\] %{POSINT:pid}#%{NUMBER}: %{GREEDYDATA:errormessage}(?:, client: (?<client>%{IP}|%{HOSTNAME}))(?:, server: %{IPORHOST:server})(?:, request: %{QS:request})?(?:, upstream: \"%{URI:upstream}\")?(?:, host: %{QS:host})?(?:, referrer: \"%{URI:referrer}\")"]
            overwrite => [ "message" ]
        }
 
        geoip {
            source => "client"
            target => "geoip"
            add_tag => [ "nginx-geoip" ]
        }
 
        date {
            match => [ "timestamp" , "YYYY/MM/dd HH:mm:ss" ]
            remove_field => [ "timestamp" ]
        }
    }
}
 
output {
    stdout { }
    elasticsearch { hosts =>  ["localhost:9200"] }
}
</client></timestamp>


      logstash 실행
1
$ ./bin/logstash -f etc/nginx.conf


  3. kibana 설치
1
2
3
4
$ wget https://download.elastic.co/kibana/kibana/kibana-4.5.1-linux-x64.tar.gz
$ tar zxvf kibana-4.5.1-linux-x64.tar.gz
$ cd ./kibana-4.5.1-linux-x64/bin
$ ./kibana

    kibana기본 설정을 사용하면 localhost:9200 의 elasticsearch에 연결 되도록 되어있다.
    설정파일: ./kibana-4.5.1-linux-x64/config/kibana.yml
    필드:
    # The Elasticsearch instance to use for all your queries.
    # elasticsearch.url: "http://localhost:9200" 

    Browser를 사용해 http://localhost:5601/ 에 연결하면, 아래 Status 화면을 확인 할 수 있다. 
 



    Dashboard를 접근하려면 아래 주소로 연결한다.
    http://localhost:5601/app/kibana#/dashboard


'Develop > Study' 카테고리의 다른 글

HTML 코드 작성규칙  (0) 2019.07.03
소스 내 주석  (0) 2018.11.02
GNB 란  (0) 2016.10.24
웹표준 코딩의 장점  (0) 2016.10.24
특수문자, 용어 등  (0) 2016.10.24