Prometheus 데이터베이스에서 누락 된 데이터 문제를 어떻게 해결합니까?


13

인프라 실행에 대한 자세한 지표를 수집하기 위해 Prometheus 를 모니터링 워크 플로 에 점차 통합했습니다 .

이 과정에서 나는 종종 독특한 문제가 발생하는 것을 발견했다. 때로는 Prometheus가 데이터를 가져와야하는 수출업자가 응답하지 않는 경우가있다. 네트워크 구성 오류로 인해 더 이상 액세스 할 수 없거나 내보내기가 중단되었을 수 있습니다.

그 이유가 무엇이든, 나는 Prometheus에서 볼 것으로 예상되는 일부 데이터가 누락되어 있고 특정 기간 동안 시리즈에 아무것도 없습니다. 때로는 한 수출 업체가 실패 (타이밍?)하면 다른 수출 업체도 실패하는 것처럼 보입니다 (처음 시간 초과로 인해 전체 작업이 최상위 시간 초과를 초과했거나 추측 만하는 경우).

데이터 갭

위의 시각화에서 볼 수 있듯이 시리즈에 차이가 있습니다. 이 경우 로그에 아무 것도 없습니다. 프로 메테우스 자체 측정법도 상당히 불분명합니다. 나는 방금 프로 메테우스가하고있는 것을 수동으로 복제하려고 시도하고 그것이 어디에서 깨지는지를보아야했습니다. 이것은 짜증나 다. 더 좋은 방법이 있어야합니다! 실시간 알림은 필요하지 않지만 적어도 수출 업체가 데이터를 제공하지 못한 것을 확인하고 싶습니다. 부울 "데이터 확인"플래그조차 시작될 것입니다.

수출업자로부터 데이터를 얻지 못한 Prometheus에 대한 의미있는 정보는 어떻게 얻습니까? Prometheus 데이터 수집에 대한 수동 시뮬레이션을 수행하지 않고 차이가 존재하는 이유를 어떻게 알 수 있습니까? 이와 관련하여 Prometheus 이외의 일반적인 데이터 수집 모니터링까지 확장 될 수있는 합리적인 방법은 무엇입니까?


문제와 관련된 로그 항목 또는 경고 / 오류가 있습니까?
kenorb

아무것도, 나는 단지 데이터 시리즈에서 차이를 본다. Prometheus 출력에는 몇 분마다 보류중인 변경 사항을 저장하는 일반적인 규칙이 있습니다 (숨겨진 로그를 놓치지 않는 한).
Sander

우리는 또한이 문제에 직면하고 있습니다. @ 샌더는 원인을 찾을 수 있었습니까?
Deepak N

@DeepakN 아니요, 불행히도 여기에 추가 할 유용한 통찰력이 없습니다. Prometheus를 사용할 때 통증이 남아 있습니다.
Sander

답변:


5

rate다음과 같이 메트릭에 대해 일종의 경고를 할 수 있다고 생각합니다 .

ALERT DropInMetricsFromExporter
  IF rate(<metric_name>[1m]) == 0
  FOR 3m
  ANNOTATIONS {
    summary = "Rate of metrics is 0 {{ $labels.<your_label> }}",
    description = "Rate of metric dropped, actually: {{ $value }}%",
}

주요 아이디어는 메트릭 비율이 3 분 동안 0 일 때마다 적절한 메트릭 이름과 정확한 정보를 제공해야하는 내보내기를 알려주는 레이블을 사용하여 경고하는 것입니다.

수출 업체가 모니터링 할 올바른 측정 항목을 선택하는 것은 복잡 할 수 있습니다.
블로그 게시물 은보다 일반적인 탐지에도 영감을 줄 수 있습니다.


rate 주어진 카운터에 대한 초당 비율을 계산합니다. 이는 메트릭이 스크랩되는 속도 (-> scrape_interval)와 아무 관련이 없습니다. 주어진 카운터 (metric_name)가 3 분 동안 증가하지 않으면 OP가 원하지 않는 경우 경고가 표시됩니다.
Johannes '물고기'Ziemke

@ Johannes'fish'Ziemke 그것이 올바른 메트릭을 찾는 것이 복잡 할 수 있다고 말한 이유입니다. time예를 들어 노드 내보내기 에서 메트릭을 사용하면 됩니다. 수출 실패에 대해 경고하는 더 좋은 방법이 있다면, 답변을 추가하십시오
Tensibai

@ Johannes'fish'Ziemke devops.se btw에 오신 것을 환영합니다 :)
Tensibai

1

차이를 유발할 수있는 몇 가지 이유가 있습니다. 대부분의 경우 수출국에 연락 할 수없는 경우에는 up시계열이 0이됩니다. https://prometheus.io/docs/alerting/rules/#templating 에서 가져온 다음과 같이 경고 할 수 있습니다 .

# Alert for any instance that is unreachable for >5 minutes.
ALERT InstanceDown
  IF up == 0
  FOR 5m
  LABELS { severity = "page" }
  ANNOTATIONS {
    summary = "Instance {{ $labels.instance }} down",
    description = "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.",
  }

상태 페이지에서 오류 메시지를 포함하여 다운되었음을 알 수 있습니다. 불행히도 과거 오류를 볼 수있는 방법은 없지만 이것을 추적하는 문제가 있습니다 : https://github.com/prometheus/prometheus/issues/2820

Prometheus 서버가 오버로드되어 스크래핑이 중지되어 간격이 설명 될 수도 있습니다. 이 경우 Storage needs throttling. Scrapes and rule evaluations will be skipped.로그에 오류 가 표시 되고 prometheus_target_skipped_scrapes_total메트릭이 증가합니다 . 예를 들어 다음과 같이 경고해야합니다.

ALERT PrometheusSkipsScrapes
  IF rate(prometheus_target_skipped_scrapes_total[2m]) > 0
  FOR 5m

1

이것이 당신이보고있는 것과 같은 문제인지 확실하지 않습니다. 그러나 우리는 GC 설정을 구체적으로 설정하지 않은 Java 응용 프로그램에 대한 이러한 임의의 격차를 보았습니다. 이는 JVM이 전체 GC를 수행하는 동안 인스턴스의 활동이 중지되어 데이터 수집이 중지 될 때 차이가 있음을 의미합니다. Java를 사용하는 경우이 문제가 발생할 수 있습니다. 이 수정 사항은 데이터 콜렉션에서 이러한 시간 간격을 방지하기 위해 GC 활동 길이에 대해 지정된 제한과 함께 G1 가비지 콜렉터 (Java 8+)를 명시 적으로 사용했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.