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 ES콘솔의 Kibana URL을 클릭해 들어가 확인하면 된다.