#Logstash란?
공식페이지에서는 data collection engine 라고 소개하고 있다. 즉, 데이터를 수집하여 전달하는 역할을 하는 도구이다.
데이터를 그대로 전달할 수 도 있고, 데이터를 가공하여 전달할 수 있다. 여러 플러그인을 통해 다른 시스템과의 호환성도 좋다.
주로 Elasticsearch와 함께 쓰인다.
#Logstash 설치
https://www.elastic.co/downloads/logstash 에서 다운받아 압축을 푼다. 이게 설치 끝이다.
데이터를 수집하는 역할을 하기 때문에 주로 application server의 로그를 저장한다는 가정하에 각 server에 설치하여 동작하도록 하는 구조이다.
일단 다음 포스팅으로 ELK Stack을 사용하여 web server 의 로그를 저장하는 방법에 대해 작성할 것이다. 지금은 간단히 logstash를 간단히 체험해보는 정도의 예제를 작성하겠다.
#Logstash 설정 및 실행
logstash실행시 jvm이나 logstash 실행시 동작하는 옵션을 지정할 수 있다. /config 폴더에 있는 파일들로 해당 옵션들을 설정할 수 있다.
이번 예제에서는 그냥 기본설정을 사용한다.
logstash실행은 아주 간단하다.
> bin/logstash -f logstash.conf |
-f 옵션으로 지정하는 logstash.conf는 다운로드 받은 파일들중에 없다. 즉 만들어야된다는 것이다.
이 config파일은 어떤 data를 읽어서 어떻게 가공하고 어디로 보내냐를 명시하는 것이다.
다음이 logstash 설정파일의 popeline 구성이다.
logstash config 구조(참조: http://asuraiv.blogspot.kr)
intput {
...
}
filter {
...
}
output {
....
}
|
위 구조가 기본적인 logstash의 설정파일 구조이다. filter는 생략가능하며 input과 output은 필수로 명시해야한다.
input, filter, output 으로 사용할 수 있는 옵션들은 엄청 다양하고 유용한것들이 많다.
이번 예제에서는 아주 간단하게
input: 키보드 입력
filter: JSON
output: 화면 단순 출력
으로 간단하게 logstash를 맛보자.
input {
stdin { }
}
filter {
json {
source => "message"
add_field => { "added-field" => "AA" }
remove_field => [ "tmp" ]
}
}
output {
stdout {
codec => rubydebug { }
}
}
|
위 config에 대한 설명을 하자면,
input: stdin으로 키보드 입력을 받겠다는 의미이다.
filter: 입력받은 데이터를 json으로 자동파싱한다. source로 입력으로 받을 타입을 명시한다. 그리고 add_field로 필드를 추가하고 remove_field로 필드를 삭제한다.
output: rubydebug로 단순 화면 출력을 한다.
> sudo bin/logstash -f logstash.conf
Sending Logstash's logs to /Users/jiminsub/Apps/Dev/logstash-5.1.1/logs which is now configured via log4j2.properties
The stdin plugin is now waiting for input:
[2017-03-13T00:39:05,094][INFO ][logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>500}
[2017-03-13T00:39:05,116][INFO ][logstash.pipeline ] Pipeline main started
[2017-03-13T00:39:05,212][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
#입력값
{"name":"MS Ji","age":33,"tmp":"temp value"}
#출력값
{
"@timestamp" => 2017-03-12T15:39:39.307Z,
"@version" => "1",
"host" => "Minsubsui-MacBook-Pro.local",
"name" => "MS Ji",
"message" => "{\"name\":\"MS Ji\",\"age\":33,\"tmp\":\"temp value\"}",
"added-field" => "AA",
"age" => 33,
"tags" => []
}
|
어떤 옵션들을 사용할 수 있는지 확인은 아래 링크에서 확인 가능하다.
끝
'Big Data > Elastic stack' 카테고리의 다른 글
elastic stack #5 beats 소개 & quickstart (0) | 2017.03.18 |
---|---|
elastic stack #4 kibana 소개 & quick start (0) | 2017.03.14 |
elastic stack #2 elasticsearch 설치 & quick start (0) | 2017.03.12 |
elastic stack #1 elasticsearch 소개 (0) | 2017.03.12 |
geoip 데이터 지도에 표시하기 (2) | 2017.02.07 |