Zabbix에서 ALB TargetConnectionErrorCount 값이 계속 1로 유지되는 문제 해결기

개요

AWS ALB(Application Load Balancer)의 TargetConnectionErrorCount 지표를 Zabbix에서 모니터링하던 중, 이상하게도 해당 값이 계속 1로 기록되며 Zabbix의 문제(Problem) 상태가 해제되지 않는 현상이 발생했습니다.

본 글에서는 이 현상의 원인을 분석하고, 전처리 설정을 조정하여 문제를 해결한 과정을 공유합니다.


문제 상황

Zabbix에서 CloudWatch를 통해 ALB의 TargetConnectionErrorCount 지표를 수집하고 있었는데,
다음과 같은 이상 현상이 있었습니다:

  • Zabbix의 히스토리에는 값이 계속 1로 유지
  • ALB는 분명히 문제 없이 동작 중인데도 Zabbix 대시보드에는 ‘Current Problem’이 계속 남아 있음
  • 실제로 CloudWatch 콘솔에서 확인해보니 최근 값은 존재하지 않음 (즉, 오류 없음)

원인 분석

Zabbix에서는 CloudWatch Metric Math 결과에서 다음과 같은 JSONPath를 사용하여 값을 추출하고 있었습니다:

$.[?(@.Label == "TargetConnectionErrorCount")].Values.first().first()

이 JSONPath는 Label"TargetConnectionErrorCount"인 Metric 항목의 Values 배열에서 첫 번째 값을 가져오는 식입니다. 문제는 지표 값이 존재하지 않을 경우 Values: []로 들어오기 때문에, 추출 자체가 실패한다는 점이었습니다.

이런 상황에서 Zabbix의 기본 동작은 다음과 같습니다:

  • 전처리 실패 시 이전 값을 계속 유지
  • 따라서 이전에 수집한 1이라는 값이 그대로 유지되며, 문제 상태가 계속 이어짐

해결 방법

Zabbix에서 전처리 설정을 다음과 같이 변경하였습니다:

전처리(Preprocessing)
1. JSONPath: $.[?(@.Label == "TargetConnectionErrorCount")].Values.first().first()
→ 실패 시 사용자 정의 값 사용: 0

즉, 전처리 실패 시 기본값을 0으로 간주하도록 설정한 것입니다.

그 결과:

  • CloudWatch에서 값이 없는 경우에도 Zabbix가 0으로 인식
  • 트리거 조건 {item.last() > 0}이 false로 평가됨
  • 문제 상태 자동 해제
  • 대시보드에서 해당 이슈 사라짐 ✅

결론 및 교훈

CloudWatch를 통해 수집되는 지표는 값이 없을 경우, 실제로는 정상 상태임에도
Zabbix에서는 전처리 실패 → 이전 값 유지 → 문제 지속이라는 형태로 오탐이 발생할 수 있습니다.

이를 방지하려면:

  • 전처리 단계에서 실패 시 기본값 지정(0 등)은 꼭 설정할 것
  • .first() vs .last()와 같이 JSONPath 선택에도 신중할 것
  • nodata(), change() 조건도 필요에 따라 트리거에 활용할 것

마무리

이번 경험은 Zabbix와 AWS CloudWatch를 연동할 때 정상 상태를 어떻게 인식할지에 대한 중요한 교훈을 줬습니다.
작은 전처리 설정 하나가 모니터링 시스템의 신뢰성에 큰 영향을 줄 수 있다는 점, 꼭 기억하시길 바랍니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다