본문 바로가기

윈도우 개발환경

엘라스틱서치(ELK)로 만드는 모니터링 시스템; 4. Logstash - 통합, 운영

엘라스틱서치(ELK)로 만드는 모니터링 시스템

1. Elasticsearch, Kibana

2. Metricbeat - 시스템관리

3. Filebeat - App Log수집

4. Logstash - 통합, 운영

 

5. Logstash를 이용한 log 수집

Beats는 Elasticsearch나 Logstash에 모두 연결할 수 있기 때문에 지금까지는 Beats에서 Elasticsearch로 직접 Log를 전송하는 방법을 사용하였다. Beats에서 Log를 직접 전송하면

 

  • 설정이 Logstash를 사용할 때 보다 단순하기 때문에
  • 처음 설치하면서 생길 수 있는 네트워크 문제, 설정 문제, 등의 해결이 쉽고,
  • Log가 Elasticsearch로 도달할 때까지 거쳐야 할 중간 단계가 짧기 때문에,
  • Log를 더 빠르게 Elasticsearch에서 확인할 수 있는 장점이 있다.

출처) elastic.co

그래서, 개발환경이라면 Logstash가 없는 쪽이 유리하다. 반면 Logstash를 사용하면

 

  • 디스크에 저장되는 Logstash의 버퍼를 이용하여 데이터 흐름의 속도를 조절하거나,
  • Logstash의 Node 수를 늘려 처리를 분산하거나, 장애를 방지할 수도 있고,
  • S3, DB, MQ에서 데이터를 가져오거나 보낼 수도 있고
  • 조건을 설정해서 필요한 데이터만 처리하는 등

보다 복잡한 데이터처리 파이프라인을 구축할 수 있다. 따라서, 특정시간, 특정날짜에 데이터가 몰려서 발생할 수 있는 문제를 해결하고, 개발하면서 분산 저장된 정보를 한 곳으로 모으면서 필요한 정보만 선별하는 등의 복잡한 단계가 필요한 운영환경에서는 Logstash를 사용하는 쪽이 유리하다.

 

출처) elastic.co

a. Logstash 실행

먼저, 앞에서 실행한 Elasticsearch와 같은 버전의 logstash 이미지를 내려받는다. 물론 바로 run해도 상관없다.

 

docker pull docker.elastic.co/logstash/logstash:7.17.23

 

Logstash는 pipeline이 설정되어 있지 않으면 바로 종료되기 때문에,  Logstash를 실행하려면 최소 하나의 pipeline설정이 필요하다. Elastic의 Beats로 수집한 정보를 네트워크 5044 포트로 받도록 설정하는 pipeline설정이 공홈에 예제로 나와 있으므로 hosts정보와 index정보만 필요에 따라 수정하면 간단하게 바로 사용할 수 있다. 아래 내용을 아무 이름의 .yml파일로 저장하고 docker로 실행할 때 공유할 pipeline폴더에 넣어 둔다.

 

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}" 
  }
}

 

Logstash실행을 위해서는 몇 가지 고려해야 할 설정이 있는데, 대표적으로

  1. --net옵션: Elasticsearch를 docker name으로 접속할 수 있게 하려면 같은 --net를 지정하면 된다.
  2. -p옵션: Beats가 같은 docker 네트워크에서 동작하지 않는 경우 Beats데이터 전송용 포트를 열어야 한다.
  3. -v옵션: pipeline설정을 docker환경 밖에서 설정할 수 있게 pipeline폴더를 호스트의 폴더로 사용하는 것이 좋다.

을 변경해서 사용한다. Beats 포트를 pipeline설정에서 사용한 5044로 하고

 

docker run --name logstash -it --net elk-net -p 5044:5044 -v /c/Users/webia/works/pipeline:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:7.17.23

 

명령을 사용하면 Logstash가 실행되는 것을 확인할 수 있다.

 


b. Beats 연결

Beats의 정보를 Elasticsearch에서 Logstash로 보내기 위해서는 설정파일의 output만 수정하면 된다. 예를 들어 Filebeat의 경우 filebeat.yml파일을 열어 보면, 

 

# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  # hosts: ["http://192.168.59.102:9200"]

  # Protocol - either `http` (default) or `https`.
  #protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  #username: "elastic"
  #password: "changeme"

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

  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

  # Certificate for SSL client authentication
  #ssl.certificate: "/etc/pki/client/cert.pem"

  # Client Certificate Key
  #ssl.key: "/etc/pki/client/cert.key"

 

Elasticsearch Output밑에 Logstash Output이 보이는데 Logstash로 보내기 위해 Elasticsearch Output을 다시 코멘트로 막고 Logstash부분의 코멘트로 막힌 부분을 푼 다음 hosts명에 Docker name을 사용하면 Logstash를 통해 Log가 전달되는 것을 Kibana에서 확인할 수 있다.

c. Logstash의 활용 예

Logstash를 사용하면 4가지 종류의 Beats를 사용해서 수집하는 방법 외에도 아래와 같이 Kafka를 통해 비동기적으로 정보를 수집하는 구성, Kaftka의 앞단에 Logstash를 설치해서 수집 데이터를 조절하는 방법, TCP, UDP, HTTP 등의 다른 경로를 통해 수집하는 방법 등을 사용해 복합적인 구성이 가능하다.

 

출처) elastic.co

보다 많은 정보는 아래 공홈의 문서를 참고하면 된다.

 

Logstash Reference [8.15] | Elastic

 

www.elastic.co