一千萬個為什麽

搜索

如何解決我的Prometheus數據庫中缺失的數據?



為了收集有關運行基礎架構的詳細指標,我一直在將 Prometheus 逐步集成到我的監控工作流程中。

在此期間,我註意到我經常遇到一個奇怪的問題:有時候普羅米修斯應該從中提取數據的出口商變得沒有反應。也許是因為網絡配置錯誤 - 它不再可用 - 或者僅僅是因為出口商崩潰。

無論其原因如何,我發現我期望在普羅米修斯看到的一些數據不見了,並且在一段時間內系列中沒有任何內容。有時,一個出口商失敗(超時?)似乎也會導致其他人失敗(第一次超時將整個工作推到頂級超時之上?只是猜測)。

Gap in data

我所看到的只是這個系列中的一個缺口,就像上面的可視化所示。發生這種情況時日誌中沒有任何內容。普羅米修斯的自我指標也顯得相當貧瘠。我只是不得不手動嘗試復制普羅米修斯正在做的事情,並看到它破裂的地方。這很令人厭煩。一定會有更好的辦法!雖然我不需要實時警報,但我至少希望能夠看到導出器無法提供數據。即使是一個布爾值“嘿檢查你的數據”標誌將是一個開始。

如何獲得關於Prometheus無法從出口商獲取數據的有意義的信息?我如何理解差距存在的原因,而無需手動模擬Prometheus數據收集?在這方面什麽是明智的做法,甚至可能擴展到普羅米修斯以外的普遍監測數據收集?

轉載註明原文: 如何解決我的Prometheus數據庫中缺失的數據?

一共有 2 個回答:

我認為您可以使用類似下面的方式對度量 rate 進行某種警報:

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

其主要思想是在度量標準速率為0的情況下提醒3分鐘,並使用正確的度量標準名稱和某處的標簽告訴它來自哪個導出器,它應該會提供正確的信息。

選擇出口商監督的正確指標可能很復雜,如果沒有更多的見解,很難從真空中提供更好的建議 這篇博客文章也可能是一個啟發通用檢測。

造成差距的原因有幾個。在這種情況下, 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.",
  }

On the status page you should also see that it's down including an error message. Unfortunately there is no way to see past error but there is an issue to track this: https://github.com/prometheus/prometheus/issues/2820

您的普羅米修斯服務器也可能會過載,導致停止,這也可以解釋差距。在這種情況下,您應該看到存儲需要調節。 Scrapes和規則評估將被跳過。日誌中的錯誤和 prometheus_target_skipped_scrapes_total 指標中的增加。你也應該警惕,例如:

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