본문 바로가기

이것저것

[모니터링] blackbox 기본 ipv4 사용하기

 

전에 서버 모니터링을 위해 세팅을 진행했다.

https://2-ofus.tistory.com/entry/모니터링-Prometheus-Blackbox-Exporter로-API-상태-모니터링-및-슬랙-알림-구축하기

 

[모니터링] Prometheus + Blackbox Exporter로 API 상태 모니터링 및 슬랙 알림 구축하기

서버를 모니터링해야하는 경우가 있다. 만약 모니터링하면서 관리하는 서버가 1개가 아니라 여러개라면?각 서버의 대시보드(관리용)에 접속해서 상태 체크?각 서버의 API 응답 체크를 위해 포스

2-ofus.tistory.com

 

그러다 문제가 발생했는데, 서버는 살아있는데 자꾸 API 동작이 안된다고 알람이 너무 자주 오는거다. blackbox 로그를 살펴보니 ipv6로 접속을 시도하다가 timeout 5s가 걸려서 자꾸 알람이 발생하는 것이었다. 내가 모니터링하는 서버는 ipv6를 지원하지 않는데 이걸 해결하자.

DNS timeout 발생 이미지
슬랙 FIRING 알람 내역

 

위 이미지를 보면 DNS Looup Duration이 5초로 되어 있다. Probe Duration 때문에 알람이 발생한게 아니라 DNS 찾다가 문제가 발생하는 것이다.

 


blackbox exporter는 기본 ipv6 먼저 지원

내가 모니터링할 서버의 ipv6 지원과 상관없이 blackbox는 ipv6를 먼저 시도한다. 그리고 ipv6 실패하면 ipv4를 시도하는 방식으로 기본 동작하기 때문에 발생한다. blackbox의 로그를 보면 Success, Failure 로그 모두 보면 다 ipv6로 시작하는 것을 볼 수 있다. 

IPv6를 먼저 시도해서 성공하면 문제가 없는데, 해당 네트워크 또는 서버에서 IPv6 지원이 불완전한 경우 불필요한 지연(timeout)이 발생할 수 있으며, Blackbox 환경에서 잘못된 경보(FIRING)나 DNS timeout 문제가 발생한다. 

 

동작 방식 차이

방식 설명
IPv6 -> IPv4 Fallback 기본적으로 먼저 IPv6로 접속을 시도하고, 실패 시 일정 시간 후 IPv4 시도
IPv4 우선 IPv6를 시도하지 않고, 처음부터 IPv4 주소로 시도

 

문제 발생 시 증상

항목 IPv6 우선 시 IPv4 우선 시
IPv6 미지원 서버 DNS 응답이 없어 timeout(5초)까지 대기 후 IPv4 시도 -> 느림 바로 IPv4 성공
네트워크 차단 외부 IPv6 라우팅이 안되는 경우도 fallback까지 대기 IPv4만 사용하므로 문제 없음
blackbox나 curl timeout i/o timeout, no route to host 등 자주 발생 안정적인 요청 수행

 

서버의 IPv6 지원 여부 확인

$ dig +short AAAA <도메인 주소>

# 예시
$ dig _short AAAA google.com
2404:6800:400a:80e::200e

 

 

blackbox exporter ipv4 우선 지원 적용

docker로 blackbox를 동작시켰으니, 다음 내용을 추가하면 된다.

항목 내용
preferred_ip_protocol: "ipv4" 해당 설정은 IPv4 또는 IPv6 중 무엇을 사용할지를 지정
IPv4로 설정하면, 우선적으로 IPv4로 DNS를 해석하고 연결을 시도
IPv6로 설정하면, IPv6 주소가 먼저 시도
ip_protocol_fallback: false 선호하는 프로토콜(IP 버전)로 실패했을 경우, 다른 버전으로 재시도할지 설정
false이면: 선호 프로토콜 실패 시 절대 fallback 하지 않음(예: IPv4만 시도하고 실패하면 종료)
true이면: 선호 프로토콜이 실패하면 다른 프로토콜로 재시도함(예: IPv4 실패 후 IPv6 시도)
modules:
  http_2xx:
    prober: http
    timeout: 5s
    http:
      method: GET
      no_follow_redirects: false
      headers:
        User-Agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.4 Safari/605.1.15"
        Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        Accept-Encoding: "gzip, deflate, br"
        Accept-Language: "ko-KR,ko;q=0.9"
      tls_config:
        insecure_skip_verify: true
      preferred_ip_protocol: "ip4"
      ip_protocol_fallback: false

 

위 내용이 잘 적용되었는지 확인은 기존에 했던 것처럼 blackbox Success, Failure 로그를 보면 기존과 달리 IPv6 시도를 안하는 것을 보면 된다.


정리

blackbox는 기본적으로 IPv6 우선적으로 지원하기 때문에 IPv4 기본 설정을 따로 추가해줘야 한다. 무조건 해당 적용을 하는 것이 아니라, 모니터링 할 서버가 IPv4만 지원할 경우 해주는게 좋다.