Uptime Monitoring with Heartbeat and the Elastic Stack | Elastic Blog
엔지니어링

Heartbeat와 Elastic Stack을 사용한 가동 시간 모니터링

Elastic Stack 6.5 릴리즈와 함께 Heartbeat 정식 출시를 발표하게 되어 기쁩니다. 2017년 1월에 베타로 처음 도입된 Heartbeat는 다른 Beat(MetricbeatFilebeatWinlogbeat 등)와 유사한 경량 데이터 수집기이지만 가동 시간 모니터링용으로 설계되었습니다.

Heartbeat는 네트워크 내부 또는 외부에서 사용할 수 있습니다. 원하는 HTTP, TCP 또는 ICMP 엔드포인트에 대한 네트워크 액세스만 있으면 되며, 모니터링할 URL 목록을 Heartbeat에 제공하는 것만큼 간단하게 구성할 수 있습니다. Heartbeat는 정기적으로 확인 작업을 수행하여 엔드포인트가 가동 중인지 또는 중단되었는지 확인하고, 다른 유용한 메트릭과 함께 이 정보를 Elasticsearch에 보고합니다. 이 정보는 턴키 가동 시간 모니터링을 위해 사전 구축된 Kibana 대시보드에 자동으로 표시됩니다.

Elastic Stack에서 Heartbeat를 설정하고 사용하는 방법을 자세히 살펴보겠습니다.

Heartbeat 설치

Heartbeat를 설치하려면 고객 플랫폼용으로 미리 빌드된 실행 파일을 다운로드하고 추출해야 합니다. 이 예에서는 macOS를 사용하지만 Elastic에서는 다른 많은 운영 체제를 지원하므로 고객 시스템에 맞는 명령을 사용하면 됩니다.

최신 버전의 Heartbeat를 다운로드하고 압축을 풉니다.

curl -l -O https://artifacts.elastic.co/downloads/beats/heartbeat/heartbeat-6.5.0-darwin-x86_64.tar.gz
tar xzvf heartbeat-6.5.0-darwin-x86_64.tar.gz

가동 시간 모니터링 구성

Heartbeat는 URL 목록이 있어야 어떤 서비스를 확인해야 하는지 알 수 있습니다. 이 구성은 /heartbeat 폴더 아래에 heartbeat.yml 파일에 지정되어 있습니다. 다음은 Heartbeat를 사용해 여러 차례에 걸쳐 수행하는 HTTP 확인 작업의 예로, 10초 간격으로 실행됩니다.

# Configure monitors
heartbeat.monitors:
- type: http
  # List or urls to query
  urls:
        - "https://www.elastic.co"
        - "https://discuss.elastic.co"
  # Configure task schedule
  schedule: '@every 10s'

Heartbeat는 HTTP/S 모니터링 외에도 TCP 및 ICMP 확인 작업을 수행할 수 있으므로 사용자는 여러 계층의 서비스를 심도 있게 파악할 수 있습니다. Heartbeat에서는 확인 계층을 추가로 정의할 수도 있습니다. 예를 들어 HTTP/S 모니터링에서는 응답 코드, 본문 및 헤더를 확인할 수 있고, TCP 모니터링에서는 포트 확인 및 문자열 확인 작업을 정의할 수도 있습니다.

heartbeat.monitors:
- type: http
# List or urls to query
  urls: ["http://localhost:9200"]
  # request details:
  check.request:
       method: GET
  check.response:
       body: "You Know, for Search"
# Configure task schedule
  schedule: '@every 10s'

다음은 HTTP 본문 확인에 대한 예제입니다. 여기서 Heartbeat는 http://localhost:9200에서 "You Know, for Search" 문자열(구성에 지정된 유일한 URL)을 찾습니다.

모든 Heartbeat 모니터링에서 name, timeoutschedule과 같은 추가 파라미터를 정의할 수 있습니다. 전체 구성 지침은 Heartbeat 구성 설명서에서 확인할 수 있습니다.

구성의 마지막 단계는 Heartbeat 출력(데이터를 보낼 위치)을 설정하는 것입니다. 지원되는 출력에는 자가 관리형 Elasticsearch 클러스터, Elastic Cloud, Logstash 등이 있습니다. 이 예제에서는 Heartbeat 데이터를 로컬 Elasticsearch 인스턴스("localhost:9200")로 보냅니다.

output.elasticsearch:
# Array of hosts to connect to.
  hosts: ["localhost:9200"]
 # Optional protocol and basic auth credentials.
 #protocol: "https"
 username: "elastic"
  password: "changeme"

전체 구성이 들어 있는 예제 파일은 heart.reference.yml 파일에서 찾을 수 있습니다.

처음으로 Heartbeat 시작

Heartbeat는 사전 구축된 대시보드와 함께 제공되므로 처음 사용하실 때부터 유용한 가치를 즐기실 수 있습니다. 다음 명령을 사용하여 대시보드를 설정하고 Heartbeat를 실행하십시오.

Kibana에서 Heartbeat 대시보드를 설정하려면 다음 명령을 수행하십시오(선택 사항이며 한 번만 실행하면 됨).

./heartbeat setup --dashboards

Heartbeat를 실행하려면 다음 명령을 수행하십시오.

./heartbeat -e

Heartbeat는 실행되기 시작하면 사용자가 구성한 URL 목록을 확인하고, Elastic Stack으로 정보를 다시 보내고, Kibana 대시보드를 미리 채웁니다.

Kibana에서 가동 시간 데이터 시각화

Kibana를 열 때 Heartbeat 인덱스(기본적으로 Heartbeat-*)를 선택하면 [Discover] 탭에 Heartbeat 정보가 표시됩니다.

여러 대시보드 중에 Heartbeat가 전송한 모든 정보로 채워진 [Heartbeat HTTP Monitoring] 대시보드가 있습니다.

이것이 기본 Heartbeat 대시보드입니다.

왼쪽 위 모서리를 보면 Heartbeat로 모니터링한 모든 엔드포인트 목록이 해당 응답 시간과 함께 표시된 표가 있습니다. 오른쪽 위에는 모니터링 상태 코드의 요약이 표시되어 있으며, 그 아래에는 모니터링 가동 또는 중단 퍼센트, 시간 경과에 따른 응답 시간, 시간 경과에 따른 확인 횟수를 나타내는 추가 그래프가 표시됩니다.

Heartbeat 대시보드는 대화형입니다. 기본 Heartbeat 대시보드에서는 모니터링 중단 섹션(오른쪽 위 모서리에 있는 HTTP 모니터링 상태 원형 차트의 빨간색 슬라이스)을 클릭하여 특정 엔드포인트가 가동 상태인지 중단 상태인지 쉽게 탐지할 수 있습니다. 이 섹션을 클릭하면 대시보드에 필터가 적용되고, 가동 중단된 모니터링만 표시됩니다.

Heartbeat Kibana 대시보드 및 시각화를 필요에 맞게 사용자 정의할 수 있습니다. 사용자 정의 작업을 시작하려면 대시보드 오른쪽 위에 있는 [Edit] 버튼을 클릭하고, 개별 시각화에서 기어를 클릭한 다음, [Edit Visualization]을 선택하면 됩니다. 또한 Heartbeat 데이터를 기반으로 새로운 시각화를 생성하고, Heartbeat 메트릭을 다른 로그, 메트릭 및 APM 데이터 소스와 결합한 다음, 원하는 운영 대시보드에 추가할 수 있습니다.

Heartbeat 데이터를 다른 운영 데이터 소스와 결합

Heartbeat 데이터를 Metricbeat, Filebeat 및 APM과 같은 추가 데이터 소스와 결합하면 가동 중단을 추적할 때 중요한 정보를 얻을 수 있습니다. Heartbeat는 특정 서비스가 중단되었을 때 알려주며, Metricbeat와 APM은 잠재적인 용의자를 제공할 수 있습니다. 따라서 MTTR을 크게 개선하고, 모든 사람이 일반적인 전략 회의 시 ‘서로 비난’하는 데 열을 올리는 대신 필요한 곳을 살펴보는 데 집중하도록 할 수 있습니다.

로깅, 메트릭 및 APM 솔루션에 대해 자세히 알아보려면 솔루션 페이지로 이동하십시오.

다음은 Heartbeat(위의 두 패널)와 Metricbeat(아래 두 패널)의 메트릭을 결합한 Kibana 대시보드의 예제입니다.

  • 왼쪽을 보면 Heartbeat가 엔드포인트가 중단된 것을 탐지할 때마다 Metricbeat는 Nginx 모듈을 통해 오류 수가 증가하는 것을 탐지한다는 것을 알 수 있습니다.
  • 오른쪽을 보면 HTTP 핑 시간이 늘어날 때마다 Metricbeat는 NGINX 서버에서 요청률이 증가하는 것을 탐지한다는 것을 알 수 있습니다.

이러한 우연의 일치를 관찰하면 요청률의 급격한 증가로 Nginx 오류가 트리거되고, 이로 인해 Heartbeat 확인 작업이 실패한다는 결론을 내릴 수 있습니다.

알림 및 이상 징후 탐색

알림 기능을 사용하면 Heartbeat 모니터링 데이터를 기반으로 가동 중단 또는 성능 저하 시 알림 및 통지를 받을 수 있습니다. 또한 Elastic Stack 머신 러닝 기능을 사용하면 Heartbeat 데이터의 시계열 분석을 기반으로 이상 징후를 탐지할 수 있습니다. 자세한 내용은 제 Heartbeat 블로그에서 확인하십시오.

요약

모니터링은 어려운 작업이 될 수 있습니다. 문제를 신속하게 식별하고, 알리고, 해결해야 합니다. 현재 애플리케이션 및 인프라 전반에서 가시성을 확보하기 위해 여러 개의 서로 다른 도구를 사용하고 있다면 그 작업은 훨씬 더 어려워질 것입니다.

Heartbeat는 Elastic Stack의 기존 로그, 메트릭 및 APM 기능에 더해 효과적인 가동 시간 모니터링 기능을 제공합니다. 단독으로 사용하거나 Elasticsearch의 다른 귀중한 운영 데이터 소스와 결합하여 사용하면 이 기능을 충분히 활용할 수 있습니다!

Heartbeat 리소스

오늘 내용은 여기까지입니다. 이 개요가 도움이 되었기를 바랍니다. 시작하려면 Heartbeat를 다운로드하고 설명서를 통해 이 기능에 대해 자세히 알아보시기 바랍니다. Heartbeat를 경험하는 가장 빠른 방법 중 하나는 가동 시간 데이터를 Elastic CloudElasticsearch Service(이러한 프로젝트 개발자의 호스팅형 Elasticsearch 및 Kibana 제품)로 전송하는 것입니다.

질문이 있으시면 Heartbeat 토론 포럼에 문의를 남겨주시고 문제나 개선 요청 사항이 있으시면 Gitub에 남겨주시기 바랍니다.