본문 바로가기
infra/ELK

[ELK] ELK Stack을 구축해 보자 - 로그 파일 수집하기

by hjhello423 2019. 12. 28.


이전에는 FileBeat의 module을 사용하여 nginx의 로그를 수집해 보았습니다.

그런데 module이 지원하는 방식이 아닌 형태의 로그를 수집해야 할 때는 어떻게 해야 할까요?

이번에는 FileBeat를 이용하여 로그파일을 읽고 Logstash, Elasticsearch를 거쳐 Kibana에서 확인하는 과정까지 진행해 보도록 하겠습니다.

이번에 진행하는 로그 수집은 상세한 부분까지 설정하여 진행하지 않고 모든 로그를 수집하고 ES에 전달하여 Kibana에서 확인만 할 수 있는 정도의 아주 간단한 수준으로 진행합니다.


로그 파일 지정

우리가 읽어 들이고 수집할 로그 파일이 필요합니다.

저는 임시로 간단한 스프링 부트 application을 만들고 이 application에서 생성되는 로그를 수집해보려 합니다.

이번 포스팅에서는 로그를 정형화하는 과정을 진행하지 않으므로 어떤 형태의 로그든 상관없으니 로그가 쌓이는 파일만 있으면 됩니다.

 


FileBeat 설정

FileBeat가 log파일에서 log를 수집하고 수집한 데이터를 logstash로 전달하도록 구성해 보겠습니다.

 

일단 이전 포스팅에서 enable 했던 Nginx의 module을 disable 하겠습니다.

filebeat modules disable nginx
filebeat modules list

그럼 이제 세팅을 해보도록 하겠습니다. 매우 간단한 설정만 하면 됩니다.

저는 rpm으로 설치를 진행해서 설정 파일이 /etc/filebeat/filebeat.yml에 있습니다.

설정은 매우 간단합니다.

 

input 항목에 FileBeat가 수집할 정보를 적어주면 됩니다.

log파일을 수집할 것이기 때문에 type은 log로 지정하고, 수집할 대상인 log파일의 절대 경로를 넣어줍니다.

 

output에서 우리는 Logstash를 이용할 것이기 때문에 기본으로 지정되어 있는 ES로의 직접 output을 모두 주석 처리해주었습니다.

Logstash로의 output을 지정해주면 됩니다. Logstash가 설치된 서버의 IP 정보를 입력해 주세요

#=========================== Filebeat inputs =============================

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/itsme/springApp/spring.log

#================================ Outputs =====================================

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

#----------------------------- Logstash output --------------------------------
output.logstash:
  hosts: ["localhost:5044"]

이제 Logstash를 재시작합니다.

systemctl restart filebeat.service

만약 debug가 필요하면 아래의 명령어를 입력하여 확인하면 됩니다.

filebeat -e -d "*"

 


Logstash 설정

이번엔 FileBeat에서 전달받은 데이터를 수집, 정형화하고 ES로 전달하는 과정을 설정해 보겠습니다.

Logstash의 설정 파일은 /etc/logstash/conf.d 경로에 생성해야 합니다. 아마 처음 Logstash를 설치했다면 이 경로에 설정 파일이 없을 것입니다.

/etc/logstash 경로에 있는 logstash.conf의 샘플 파일을 복사해서 사용하면 됩니다.

/etc/logstash/conf.d/logstash.conf 파일을 아래와 같이 설정하였습니다.

 

input에는 Beat에서 들어오는 log 데이터를 수집하도록 설정하였습니다.

filter는 input 한 log 데이터를 정형화하는 과정을 설정할 수 있습니다. 이 부분은 범위가 벗어나기 때문에 다음 포스팅에 정리하도록 하겠습니다.

output는 수집하고 정형화한 데이터를 ES로 전달하도록 설정하였습니다.

input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

Logstash 서비스 restart를 합니다.

systemctl restart logstash.service

 


이제 모든 설정이 끝났습니다.

ES와 Kibana는 별다른 설정 없이 확인만 진행하면 됩니다.

Kibana에서 index pattern을 생성하고 Discover 항목에서 확인하면 수집한 log정보를 message항목에서 확인할 수 있습니다.

 


참조

https://logz.io/blog/debug-logstash/

반응형

댓글