LogStash 사용하기

LogStash 는 Java 기반의 오픈소소 툴로 구조화되지 않은 일반 로그 데이터를 특정 필터로 가공하여 ElasticSearch 와 같은 검색 시스템에 전송해주는 일종의 로그 수집기다.
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

# 이제 지정 경로의 파일에 변화가 있다면 변경된 내용이 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

# 플러그인 관련
# 설치된 플러그인 버전정보 보기
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:

댓글 쓰기