엔지니어링

Logstash 또는 Kafka에서 Metricbeat을 통해 Elastic Stack 모니터링하기

이전 블로그 게시물에서는 Metricbeat를 사용하여 Elastic Stack을 모니터링하는 새로운 방법을 소개해드렸습니다. Metricbeat를 사용하여 Elastic Stack 제품에 대한 모니터링 정보를 외부적으로 수집하면 해당 제품 모니터링의 안정성이 향상됩니다. 또한 모니터링 데이터를 Elasticsearch 모니터링 클러스터로 라우팅하는 방법을 유연하게 선택할 수 있습니다. 이 블로그 게시물에서는 사용자가 Metricbeat에서 수집한 모니터링 데이터를 Logstash 또는 Kafka를 통해 모니터링 클러스터로 라우팅하는 방법을 설명하면서 두 번째 이점을 좀 더 자세히 알아보겠습니다. 비즈니스 데이터를 위한 Metricbeat 구성에서 이미 Logstash 또는 Kafka 출력을 사용하고 있는 경우 계속해서 해당 출력을 Elastic Stack 모니터링 데이터를 라우팅하는 데도 사용할 수 있습니다.

이전 블로그 게시물에 이어서 설명하겠습니다. 이전 블로그 게시물에서는 다음과 같이 Metricbeat를 사용하여 Elastic Stack 제품을 모니터링하는 아키텍처를 소개했습니다.


각 Metricbeat 인스턴스는 Elastic Stack 제품의 인스턴스 하나 또는 노드 하나를 모니터링합니다. 이를 위해서는 올바른 Metricbeat 모듈(*-xpack 구성 변형)을 활성화해야 합니다. 예를 들어 Logstash 노드를 모니터링하려면 logstash-xpack 모듈을 활성화해야 합니다.

이 아키텍처에서는 모든 Metricbeat 인스턴스가 데이터를 모니터링 클러스터로 전송합니다. 이는 Metricbeat 호스트와 모니터링 클러스터 호스트 간에 네트워크 연결이 필요함을 의미합니다.

그러나 Elasticsearch의 수신 지점 수를 최소화하는 것이 좋을 때도 있습니다. 즉, Metricbeat 인스턴스에서 수집한 모든 스택 모니터링 트래픽을 Logstash 인스턴스로 보낸 다음 해당 데이터를 모니터링 클러스터로 전달하는 것이 더 바람직할 수 있습니다. 이 블로그 게시물에서는 Metricbeat를 사용한 스택 모니터링에서 이러한 아키텍처를 구현하는 방법을 살펴보겠습니다.

스택 모니터링 데이터 흐름에 Logstash 추가

먼저 Metricbeat로부터 스택 모니터링 데이터를 수신하여 모니터링 클러스터로 전달하는 Logstash 파이프라인을 설정하겠습니다. 이 파이프라인은 아래에 나와 있으며 각 부분에 대한 주석이 추가되어 있습니다.

input {
  beats {
    port => 5044
  }
}
filter {
  # 전체 Beats 버전 호환성을 위한 보일러플레이트
  mutate {
    rename => { "[@metadata][id]" => "[@metadata][_id]" }
  }
}
output {
  if [@metadata][index] =~ /^.monitoring-*/ {
    # 스택 모니터링 데이터를 Elasticsearch 모니터링 클러스터로 라우팅
    if [@metadata][_id] {
      elasticsearch {
        index => "%{[@metadata][index]}-%{+YYYY.MM.dd}"
        document_id => "%{[@metadata][_id]}"
        hosts => ["https://node1:9200"]
      }
    } else {
      elasticsearch{
        index => "%{[@metadata][index]}-%{+YYYY.MM.dd}"
        hosts => ["https://node1:9200"]
      }
    }
  } else {
    # 비스택 모니터링 데이터를 라우팅
  }
}

개괄적으로 이 파이프라인은 다음을 수행합니다.

  • Beats 입력 플러그인을 사용하여 Metricbeat가 전송한 스택 모니터링 데이터를 읽습니다.
  • Elasticsearch 출력 플러그인을 사용하여 스택 모니터링 데이터를 모니터링 클러스터로 전송합니다.

파이프라인의 출력 섹션에서 if-else 래더 구문을 확인하세요. 상위 if-elsesystem 모듈을 활성화한 경우 스택 모니터링을 위한 데이터를 monitoring-* 인덱스로 색인하여 동일한 Metricbeat 인스턴스가 수집한 다른 데이터와 분리할 수 있게 합니다.

스택 모니터링 데이터에 대한 if 절 안에는 중첩된 if-else 문이 있습니다. 이렇게 구성하면 데이터를 모니터링 클러스터로 색인하는 경우 Metricbeat로부터 수신되는 스택 모니터링 데이터 이벤트의 모든 ID(설정된 경우)가 _id 필드로 전달됩니다. 특히 Elasticsearch 샤드 모니터링 데이터를 올바르게 색인화하려면 이 구성이 필수적입니다. 이 구성이 없으면 Elasticsearch의 스택 모니터링 UI는 시간이 지남에 따라 증가하는 샤드 수를 올바르게 표시하지 못합니다.

Logstash로 전송하도록 Metricbeat 구성

Logstash 파이프라인을 설정한 후에는 데이터를 직접 모니터링 클러스터로 전송하는 것이 아니라 Logstash 호스트로 전송하도록 Metricbeat 인스턴스를 설정해야 합니다.

output.logstash:
  hosts: [ "logstash_hostname:5044" ]

이 설정의 변형으로 Metricbeat와 Logstash 사이에 Kafka를 추가할 수 있습니다. 이 경우 Logstash 파이프라인은 Beats 입력 플러그인 대신 Kafka 입력 플러그인을 사용하는 것을 제외하면 위와 거의 동일한 모습입니다. 이에 따라 데이터를 Logstash 클러스터 대신 Kafka 클러스터로 보내도록 Metricbeat 인스턴스를 구성합니다.

결론

Elastic Stack 모니터링 데이터를 Metricbeat에서 Logstash(또는 Kafka)를 통해 Elasticsearch로 라우팅하는 방법을 확실하게 이해하는 데 이 블로그가 도움이 되셨기를 바랍니다. 또한 Elastic Stack 제품에 대한 모니터링 데이터를 외부적으로 수집할 때 Metricbeat를 사용하면 어떤 유연성을 얻을 수 있는지도 명확하게 보여드렸기를 바랍니다. 

이 설정과 관련하여 질문이 있거나 문제가 발생한 경우 언제든 discuss.elastic.co에 글을 남겨주세요. 스택 모니터링으로 얻을 수 있는 이점이 궁금하시다면 대화식 데모로 이동하여 직접 확인해 보세요.