Nomad 이벤트 스트림 모니터링

Nomad 이벤트 스트림 모니터링 (Monitor Nomad's event stream)

Nomad의 이벤트 스트림을 통해 작업, 할당, 평가, 배포, 노드 변경 사항을 거의 실시간으로 구독하는 방법을 알아봐요.

출처: 문서

본문

이벤트 스트림은 Job, Allocation, Evaluation, Deployment, Node의 변경 사항을 거의 실시간으로 구독할 수 있는 방법을 제공해요. Nomad의 유한 상태 머신(FSM)을 통해 Nomad에서 상태 변경이 발생할 때마다 업데이트된 각 객체에 대한 일련의 이벤트가 생성돼요.

현재 Nomad 사용자는 클러스터에서 최근에 어떤 작업이 발생했는지에 대한 멘탈 모델을 구축하기 위해 여러 단계를 거쳐야 해요. 개별 로그 문은 종종 Nomad 내 작업 단위와 관련된 작은 정보 조각만 제공해요. 로그는 다른 관련 없는 로그와 함께 끼어들어가 있을 수도 있어서, 사용자가 식별하려는 문제를 이해하고 맥락을 구축하는 과정을 복잡하게 만들어요. 로그 문은 발생한 더 작은 작업에 지나치게 특화되어 있어 로그나 작업 주변의 더 큰 맥락이 놓치거나 추론하기 어려울 수도 있어요.

또 다른 불편한 점은 로그 문의 가치가 조직이 로그를 관리하는 방식에 달려 있다는 거예요. 외부 로그 집계기를 가진 대규모 팀은 파일을 수동으로 훑어보며 문제를 디버깅하는 소규모 팀보다 표준 로깅에서 더 많은 가치를 발견해요. 오늘날 운영자는 /v1/nodes, /v1/evaluations, /v1/allocations, 그리고 다시 /v1/nodes를 Nomad API로 조합해 정확히 무슨 일이 일어났는지 파악하려 할 수 있어요.

이 복잡한 워크플로우는 고객과 사용자에게 Nomad 클러스터를 가장 잘 모니터링하고 디버깅하는 방법에 대한 처방적 지침이 부족하게 만들었어요. nomad-firehose 같은 타사 도구도 Nomad 내 변경 사항에 반응하기 위해 엔드포인트를 지속적으로 스크랩해 이 문제를 해결하려 등장했어요.

이벤트 스트림은 Nomad에서 이벤트 스트림을 수신하기 위한 일급(first-class) 솔루션을 제공하며, 사용자에게 클러스터가 기본적으로 어떻게 운영되는지에 대한 훨씬 더 나은 이해를 제공해요.

이벤트 스트림에 접근하기

이벤트 스트림은 현재 API에 존재하므로, 사용자는 아래 명령으로 새 이벤트 스트림 엔드포인트에 접근할 수 있어요.

$ curl -s -v -N http://127.0.0.1:4646/v1/event/stream

모든 또는 특정 이벤트 구독하기

필터 키를 지정해 특정 토픽을 필터링해요. 이 예시는 특정 노드의 ID와 관련된 Node 이벤트만 듣고, 모든 Deployment 이벤트와 web이라는 이름의 작업과 관련된 Job 이벤트도 듣는 예시예요.

$ curl -s -v -N \
  --data-urlencode "topic=Node:ccc4ce56-7f0a-4124-b8b1-a4015aa82c40" \
  --data-urlencode "topic=Deployment" \
  --data-urlencode "topic=Job:web" \
  http://127.0.0.1:4646/v1/event/stream

이벤트에는 무엇이 들어 있나요?

각 이벤트에는 Topic, Type, Key, Namespace, FilterKeys, Index, Payload가 포함돼요. Payload의 내용은 이벤트 토픽에 따라 달라요. Node 토픽의 이벤트는 Node 객체를 포함해요. 예를 들어:

{
  "Topic": "Node",
  "Type": "NodeRegistration",
  "Key": "afb9c810-d701-875a-b2a6-f2631d7c2f60",
  "Namespace": "",
  "FilterKeys": null,
  "Index": 7,
  "Payload": {
    "Node": {
      "//": "...entire node object"
    }
  }
}

이벤트 스트림을 사용한 개발

Nomad의 이벤트 스트림을 사용할 수 있는 몇 가지 패턴을 소개할게요.

  • 모든 또는 일부 클러스터 이벤트 구독하기
  • SRE로서 정규 디버깅 및 모니터링 워크플로우에 추가 도구를 추가해 클러스터의 질적 상태와 건강을 파악하기
  • 특정 작업 배포가 평가에서 배포로 업그레이드되는 과정을 추적하고 스케줄러 경로의 차단 요소를 발견하기
  • 배포 알림을 보내는 Slack 봇 통합 구축하기 - https://github.com/drewbailey/nomad-deploy-notifier

더 알아보기 (Learn more)