input - filter - output 의 파이프 라인 구조로 플러그인을 통해 다양한 데이터 가공 및 입출력이 가능하다.
# 설치
# Java(JDK or JRE) 설치가 되어 있어야 한다.
# 다운로드 후 압축 풀기
# https://www.elastic.co/downloads/logstash
# 윈도우 기준 설명
# 설정을 커맨드에 명시하여 실행하는 경우
# 표준 입력으로 데이터를 입력 받아 필터없이 표준 출력으로 데이터를 출력하는 설정
bin\logstash.bat -e 'input { stdin {} } output { stdout {} }'
# 설정 파일 만들기
vim logstash.conf
input {
# 파일 내용이 변경되는 경우
# file 의 필드 별 설정(@version 및 @timestamp 필드는 기본 적용)
file {
# type 필드 => 정해진 값은 없고 정해서 사용하면 됨
type => "textlog"
# tag 필드 => 태그를 달 수 있다.
tags => ["tag1", "tag2", "tag3"]
# 커스텀 필드를 추가 할 수 있다.
# hash(key=>value 형태)
add_field => {
"name" => "mypc"
"ip" => "127.0.0.1"
}
# path 필드 => 로그 파일이 있는 절대 경로 명시
path => "C:/ysoftman/*.log"
# 파일 처음부터 변경 부분 검색(디폴트 end)
start_position => "beginning"
# 파일 상태 체크 주기 설정 (디폴트1초)
stat_interval => 1
# 1시간으로 이전 수정된 파일은 수집에서 제외 (디폴트 86400 (하루))
ignore_older => 3600
# 인코딩 명시(기본 UTF-8 로 취급)
codec => plain {
charset => "EUC-KR"
}
}
}
filter {
grok {
# 메시지 필드에 test 나 testing 스트링이 있다면
match => { "message" => ["test" , "testing"] }
# 위 조건이 참이면 ysoftman 태그 추가
# 위 조건에 맞지 않으면 _grokparsefailure 태그가 자동으로 추가된다.
add_tag => [ "ysoftman" ]
}
# _grokparsefailure 태그가 있다면 drop (output 으로 전달되지 않는다.)
#if "_grokparsefailure" in [tags] {
# drop {}
#}
# _grokparsefailure 태그만 지우기
mutate {
remove_tag => ["_grokparsefailure"]
}
}
output {
# elasticsearch 서버의 주소 명시
elasticsearch {
# 해당 호스트로 전송
hosts => ["localhost:9200"]
}
# 디버깅을 위해 표준 출력 표시
stdout {
# rubydebug 형식의 보기 좋은 json 포맷으로 표시
codec => rubydebug
}
}
# 설정 파일 사용하여 실행하는 경우
bin\logstash.bat agent -f logstash.conf
bin\logstash.bat agent -f logstash.conf
# 이제 지정 경로의 파일에 변화가 있다면 변경된 내용이 elasticsearch 전송되고, 콘솔에 다음과 같이 출력된다.
{
"message" => "ysoftman test message...\r",
"@version" => "1",
"@timestamp" => "2016-06-01T07:32:46.249Z",
"path" => "C:/ysoftman/ysoftman.log",
"host" => "ysoftman",
"type" => "textlog",
"name" => "mypc",
"ip" => "127.0.0.1",
"tags" => [
[0] "tag1",
[1] "tag2",
[2] "tag3",
[3] "ysoftman"
]
}
# ElasticSearch(Kibana) 를 통해 추가된 로그 확인해보기
http://localhost:5601
# 플러그인 관련{
"message" => "ysoftman test message...\r",
"@version" => "1",
"@timestamp" => "2016-06-01T07:32:46.249Z",
"path" => "C:/ysoftman/ysoftman.log",
"host" => "ysoftman",
"type" => "textlog",
"name" => "mypc",
"ip" => "127.0.0.1",
"tags" => [
[0] "tag1",
[1] "tag2",
[2] "tag3",
[3] "ysoftman"
]
}
# ElasticSearch(Kibana) 를 통해 추가된 로그 확인해보기
http://localhost:5601
# 설치된 플러그인 버전정보 보기
bin\plugin.bat list --verbose
# 설치된 플러그인 모두 업데이트(잘못되면 logstash 다시 설치해야함)
bin\plugin.bat update
# 예) file 플러그인 설치하기
bin\plugin.bat install logstash-input-file
참고
https://www.elastic.co/guide/en/logstash/current/config-examples.html
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html
https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#plugins-filters-grok-match
https://www.elastic.co/guide/en/logstash/current/plugins-filters-drop.html
https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html
comments:
댓글 쓰기