AWS Elastisearch + Logstash + Kibana 를 이용한 로그분석 환경 구성하기(part 2)

Install logstash

logstash

logstash는 시스템로그, 어플리케이션로그 등 거의 모든 종류의 로그를 수집해 처리하고 전송 할 수 있는 오픈소스 툴이다. 본 문서에서는 nginx웹서버의 access log를 Amazon ES에 저장하는 방법을 설명한다. file,redis,mongodb등 수많은 Output plugin들을 지원하므로 각 환경에 대한 전송방법은 logstash 공식메뉴얼https://www.elastic.co/guide/en/logstash/current/output-plugins.html를 참고한다.

jdk설치

http://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 java다운로드 받아 설치.


public signing key 다운로드 및 설치

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

logstash 레포지토리 등록

/etc/yum.repos.d/디렉토리에 logstash.repo파일을 만들어 다음내용을 추가한다.

[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=https://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

logstash 설치

yum으로 간단하게 설치가 된다.

yum install logstash

Amazon_ES 연동을 위한 플러그인 설치

AWS Elasticsearch에 데이터를 로딩하기 위해서는 logstash-output-amazon_es라는 이름의 logstash Output 플러그인이 필요하다. 보다 자세한 내용은 logstash-output-amazon_es의 github page https://github.com/awslabs/logstash-output-amazon_es에서 확인 할 수 있다.

설치는 다음 명령어로 손쉽게 설치가 가능하다.

/opt/logstash/bin/plugin install logstash-output-amazon_es

Nginx 로그포멧 설정

Amazon ES에 nginx의 access log를 로딩하기 위해 로그포멧을 json형태로 변경한다. 로그포멧 변경은 /etc/nginx/nginx.conf 파일 log_format부분에 다음 내용을 추가한다.

log_format json_format '{"time": "$time_iso8601", '
                    '"remote_addr": "$remote_addr", '
                    '"remote_user": "$remote_user", '
                    '"body_bytes_sent": $body_bytes_sent, '
                    '"request_time": $request_time, '
                    '"status": $status, '
                    '"request": "$request", '
                    '"request_method": "$request_method", '
                    '"http_referrer": "$http_referer", '
                    '"http_user_agent": "$http_user_agent"}';

access_log  /var/log/nginx/access.log  json_format;

logstash 설정

/etc/logstash/conf.d/logstash.conf을 만들고 다음과 같이 수정한다.

  • input : 수집할 데이터 소스에 대해 정의해 준다. apache, nginx 등의 로그 파일을 데이터 소스로 사용할 경우 file을 이용하여 데이터를 수집한다.
  • filter : input에서 수집한 데이터를 가공하기 위한 패턴을 기술.
  • output : input으로 부터 수집된 데이터의 전송에 대한 정의.
input {
    file {
        path => "/var/log/nginx/access.log" # nginx access log의 절대경로
        type => nginx
        codec => json
    }
}
output {
    amazon_es {
        hosts => ["search-test-lab-n6tnyeqif2zfyha77vvnvvd45i.ap-northeast-1.es.amazonaws.com"] # 생성한 Amazon ES Endpoint주소
        region => "ap-northeast-1" # 리전
        index => "nginx.access-logs-%{+YYYY.MM.dd}" # 인덱스 이름
    }
}

logstash 구동

service logstash start

logstash데몬이 구동되면 Amazon ES로 nginx 로그를 전송하게 된다. 이후에 Amazon ES콘솔에서 다음 그림과 같이 나타날 것이다.
Amazon-Elasticsearch-Service-Management-Console-2016-06-28-16-40-44

다음으로 Amazon ES콘솔의 Kibana URL을 클릭해 들어가 확인하면 된다.

댓글 남기기