ELK 에서 로그스태시를 사용하는 방법에 대해 알아보겠다.
로그스태시는 ELK에서 로그를 적절한 전처리를 하고난 이후에 ES로 전송을 해주는 역할을 한다.
ELK의 구조는 여러가지 형태로 구성이 가능한데, ELK의 목적을 생각했을 때, ES와 Kibana는 일반적으로 거의 포함되어 있다.
해당 가이드는 개념에 대한 설명보다, 실습 위주로 작성되어 있다.
logstash는 특정 로그의 형태를 전처리하여 ES의 특정 필드로 밀어 넣어주는 기능을 한다. 이런 기능은 filebeat도 하고 있는데, filebeat가 logstash보다 더 경량화 되어 있고 더 적은 전처리 기능을 가진다.
일반적으로 로그는 일정한 패턴을 가지도록 만들어진다.
GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"
위의 예시를 보면 [호출하는 HTTP 메서드][path] [HTTP-protocol][status] ... ... 의 형태를 지니고 있다.
로그스태시는 이러한 패턴을 가지고 아래와 같은 형태의 ES doc으로 변환해준다. (완전히 저렇게 나오지는 않고 예시입니다.)
{
HTTP: "GET",
path: "/style2.css",
HTTP-protocol: "HTTP/1.1"",
status: 200
... ...
}
https://www.elastic.co/kr/downloads/logstash
위 사이트에서 설치하고 압축을 풀면 설치완료입니다.
LogStash 공식가이드에서는 처음부터 filebeat로부터 로그 내용을 전송받는 내용으로 가이드를 주고 있으므로 filebeat도 설치한다.
https://www.elastic.co/kr/downloads/beats/filebeat
https://download.elastic.co/demos/logstash/gettingstarted/logstash-tutorial.log.gz
위 링크를 통해 설치 후 적절한 디렉토리에 옮겨두세요. 저는 logs라는 폴더를 beat가 들어있는 폴더에 생성했습니다.
filebeat.inputs:
- type: log
paths:
- /path/to/file/logstash-tutorial.log
output.logstash:
hosts: ["localhost:5044"]
filebeat.yml 의 내용을 모두 지우고 위와 같이 작성하세요.
/path/to/file 이라고 적힌 부분은 다운받은 실제로그가 있는 경로로 수정하세요.(저는 ./logs/logstash-tutorial.log)
sudo ./filebeat -e -c filebeat.yml -d "publish"
위 명령어를 통해 filebeat를 실행하면, yml에 적힌 내용대로 log 파일을 input으로 받아 logstash로 output을 주는 filebeat 어플리케이션이 실행됩니다.
Exiting: error loading config file: config file ("{beatname}.yml") must be
owned by the beat user (uid=501) or root
위와 같은 에러 발생 시 아래와 같이 yml 파일의 권한 수정
chmod go-w /etc/{beatname}/{beatname}.yml
위 명령어는 본인의 환경에 맞게 수정하셔야 합니다.
logstash 폴더에 first-pipeline.conf 라는 파일을 생성하고, 아래와 같은 내용을 작성합니다.
input {
beats {
port => "5044"
}
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
#
output {
stdout { codec => rubydebug }
}
위 내용을 해석하면, beats로 부터 input을 받아오고, output으로는 stdout 으로 콘솔창에 띄워주겠다는 뜻입니다.
bin/logstash -f first-pipeline.conf --config.reload.automatic
위 명령어를 통해 logstash를 실행할 수 있습니다. 이 명령어는 first-pipeline.conf라는 conf파일을 가지고 logstash를 실행하라는 뜻입니다. 그리고 --config.reload.automatic는 config 파일을 수정했을 때 자동으로 reload되도록 해주는 설정입니다.
{
"@timestamp" => 2017-11-09T01:44:20.071Z,
"offset" => 325,
"@version" => "1",
"beat" => {
"name" => "My-MacBook-Pro.local",
"hostname" => "My-MacBook-Pro.local",
"version" => "6.0.0"
},
"host" => "My-MacBook-Pro.local",
"prospector" => {
"type" => "log"
},
"input" => {
"type" => "log"
},
"source" => "/path/to/file/logstash-tutorial.log",
"message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1\" 200 203023 \"http://semicomplete.com/presentations/logstash-monitorama-2013/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
"tags" => [
[0] "beats_input_codec_plain_applied"
]
}
...
위와 같이 결과가 json과 비슷한 형태로 logstash의 콘솔에 나온다면 정상적으로 처리되었다는 뜻입니다.
로그파일을 변경했을 때, logstash의 콘솔 창의 내용이 새롭게 reload되어서 나온다면 변경사항이 적절히 적용된다는 뜻입니다.
저는 날짜를 2025인 내용을 추가해서 작성해 보았습니다.
위와 같이 잘 반영된 것을 확인할 수 있었습니다.
다음 번에는 elastic search에 index 하는 것 까지 실습해보겠습니다.
정보 감사합니다.