[ELK] logstash
###개요###
- 자바 기반으로 다양한 로그들을 수집하고 처리해서 내보낼수 있음.
- 다양한 플러그인(input, filter, output) 을 제공하고 있는 것이 최대의 장점.
###기본 실행###
logstash -f <conf file>
###Conf 파일 내 구조###
- input, output 은 필수파라미터, filter 는 옵션
- input 은 데이터소스에서 가져오는 플러그인
- filter는 해당 데이터를 원하는 대로 변경하는 플러그인
- output 은 Data Destination 으로 변경된 데이터를 쓰는 플러그인
간단하게 Apache acesslog 를 가져와서 JSON으로 변환하는 작업을 해보자.
first-pipeline.conf
input {
file {
path => "/home/system/logs/test/access-2016-02-03.log"
start_position => beginning
}
}
filter {
grok {
match => { "message" => "%{COMMONAPACHELOG}"}
}
geoip{
source => "clientip"
}
}
output {
stdout{ codec => json }
elasticsearch{}
}
- file input plugin 의 기본 동작은 beginning 으로 지정
- unix의 tail -f와 동일. 특정 위치를 지정해서 logstash 의 파일에 대한 처리 시작 위치를 지정 할 수 있다.
grok filter plugin
- 인입되는 데이터의 패턴을 찾아서 특정 필드들로 맵핑 변환
- 패턴을 설정 해야 한다.
- Apache accesslog 패턴 지정 :
{%COMBINEDAPACHELOG%}
geoip filter plugin
- IP 필드를 지정하면, 해당 IP를 통해서 지역 정보를 추출해 주는 작업
###Check conf file###
./logstash -f ./first-pipeline.conf --configtest
- conf file 을 기반으로 작업이 수행되기 때문에 유효한지를 검사해야 한다.
###결과###
- 아래의 결과를 보면, apache accesslog 로 들어오는 raw string 을 특정 필드로 맵핑된것을 볼 수 있다.
- 또한 geoip 항목을 보면, 어디에서 접속했는지에 대한 위치정보를 가져와서 보여주고 있다.
- 아래의 예제는 output 항목을 stdout 으로 설정했고 codec을 json으로 설정해서 아래와 같이 json 형식으로 보여지고 있다.
- 다양한 output plugin을 지정해서 다른 분석 시스템이나, 데이터베이스로 로그를 보낼 수 있다.
{
"message": "127.0.0.1 - - [03/Feb/2016:14:43:58 +0900] \"POST /test/web HTTP/1.1\" 200 22410",
"@version": "1",
"@timestamp": "2016-02-03T05:43:59.585Z",
"path": "/home/system/logs/test/access-2016-02-03.log",
"host": "0.0.0.0",
"clientip": "127.0.0.1",
"ident": "-",
"auth": "-",
"timestamp": "03/Feb/2016:14:43:58 +0900",
"verb": "POST",
"request": "/test/web",
"httpversion": "1.1",
"response": "200",
"bytes": "22410",
"geoip": {
"ip": "127.0.0.1",
"country_code2": "KR",
"country_code3": "KOR",
"country_name": "Korea, Republic of",
"continent_code": "AS",
"region_name": "13",
"city_name": "Seongnam",
"latitude": 37.43860000000001,
"longitude": 127.13780000000003,
"timezone": "Asia/Seoul",
"real_region_name": "Kyonggi-do",
"location": [127.13780000000003, 37.43860000000001]
}
}
References