개발

ELK - (ElasticSearch, LogStash, Kibana)

simba 2020. 10. 27. 17:53

참고용으로 보시는걸 추천합니다! 후에 다시 정리해서 올리겠습니다!

 

ELK를 사용한 로그 모니터링 시스템 만들기

 

  • 로그를 생성하는 서버들에 Filebeat를 설치하고, 로그를 집계할 서버에 ELK를 설치한다.
  • Filebeat에서 LogStash로 로그를 전송하고 LogStash에서 한번 필터링을 거친 로그들이 ElasticSearch에 저장된다.
  • 저장 된 로그는 Kibana를 통해서 시각화하여 볼 수 있다.

 

로그스태시란?

모든 로그정보를 수집하여 하나의 저장소(DB, Elasticsearch 등)에 출력해주는 시스템

 

오픈소스 데이터 수집 엔진으로, 실시간 파이프라인 기능을 갖춘 시스템으로, 다양한 입력차원에서 데이터를 수집 및 분석, 가공 및 통합해 다양한 목적지에 저장하는 파이프라인을 구출할 수 있다.

 

 

ElasticSearch 설치

brew install elasticsearch

설치 확인

curl -X GET "localhost:9200/"

 

 

Kibana 설치

brew install kibana

#server.host 외부에서 접근하기 위하여 0.0.0.0 으로 설정

server.host: "0.0.0.0"으로 수정해야함

server.post : 5601 주석 제거

elasticserarch.host: ["http://localhost:9200"] 주석 제거

 

 

 

설치 확인

curl -v [Log 수집 서버 IP]:5601 ( 로컬일 경우 127.0.0.1)

 

LogStash 설치

brew install logstash

logstash -f pipeline.conf

input {
          beats {
          port => "5044"
           }
}

# grok 필터를 활용하여 엑세스로그 한줄을 아래처럼 파싱
# 필터는 apache의 로깅 설정에 의해 만들어지는 파일의 포멧에 맞추어 설정.
filter {
          grok {
                    match => { "message" => ["%{IPORHOST:clientip} (?:-|%{USER:ident}) (?:-|%{USER:auth}) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:httpMethod} %{NOTSPACE:uri}(?: HTTP/%{NUMBER:httpversion})?|-)\" %{NUMBER:responseCode} (?:-|%{NUMBER:bytes}) (?:-|%{NUMBER:bytes2})( \"%{DATA:referrer}\")?( \"%{DATA:user-agent}\")?"] }
                    remove_field => ["timestamp","@version","path","tags","httpversion","bytes2"]
                    }
}

# elasticsearch에 인덱싱 하겟다는 의미
# index 이름에 날짜 형태로 적어주면 인덱싱 하는 시점의 시간에 따라 인덱싱 이름이 자동으로 변경
output {
                             elasticsearch {
                                                  hosts => [ "{elasticsearch ip}:9200" ]
                                                  index => "index-%{+YYYY.MM}"
                                                            }
}

 

Elastic Search Logstash logs

  1. filebeat 설치
curl -L -O <https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-darwin-x86_64.tar.gz> tar xzvf filebeat-7.8.1-darwin-x86_64.tar.gz

cd filebeat-7.8.1-darwin-x86_64/

 

  1. filebeat.yml 수정
output.elasticsearch:
     hosts: ["<es_url>"]
     username: "elastic"
     password: "<password>"
setup.kibana:
     host: "<kibana_url>"
  1. logstash 모듈 활성화 및 구성
/filebeat modules enable logstash
  1. Filebeat 시작
./filebeat setup
./filebeat -e

Nginx

brew install nginx

nginx의 access.log를 위한 파이프 라인

logstash -f pipeline.conf


input {
    file {
        type => ngnix_access
        path => ["/usr/local/Cellar/nginx/1.19.3/logs/access.log"]        
        }
}
filter {
        grok {
            match =>{"message" => "%{COMBINEDAPACHELOG}" }
            }
}
output {
    elasticsearch { hosts => ["192.168.0.134:9200"] }
stdout { codec => rubydebug }
}

elasticsearch 조회

엘라스틱서치에서 어디에 어떻게 저장되는지 알기 위한 명령어

curl -XGET 'localhost:9200/_cat/indices?v'