Prometheus veritabanımdaki eksik verilerde nasıl sorun giderebilirim?


13

Prometheus'u , çalışan altyapıyla ilgili ayrıntılı metrikleri toplamak için izleme iş akışlarıma kademeli olarak entegre ediyorum .

Bu sırada, sık sık tuhaf bir sorunla karşılaştığımı fark ettim: Bazen Prometheus'un veri çekmesi gereken bir ihracatçı yanıt vermiyor. Belki bir ağ yanlış yapılandırması nedeniyle - artık erişilebilir değil - ya da sadece ihracatçı çöktüğü için.

Sebep ne olursa olsun, Prometheus'da görmeyi beklediğim bazı verilerin eksik olduğunu ve dizide belirli bir süre için hiçbir şey olmadığını görüyorum. Bazen, bir ihracatçı başarısız olur (zaman aşımı?) Başkalarının da başarısız olmasına neden olur (ilk zaman aşımı tüm işi üst düzey zaman aşımının üzerine itti? Sadece spekülasyon).

Verilerdeki boşluk

Tek gördüğüm, yukarıdaki görselleştirmede gösterildiği gibi serideki bir boşluk. Bu olduğunda günlükte hiçbir şey yoktur. Prometheus öz ölçümleri de oldukça kısır görünüyor. Ben sadece Prometheus ne yaptığını çoğaltmak ve nerede kırıldığını görmek için el ile başvurmak zorunda kaldı. Bu çok rahatsız edici. Daha iyi bir yol olmalı! Gerçek zamanlı uyarılara ihtiyacım olmasa da, en azından bir ihracatçının veri teslim edemediğini görmek istiyorum. Bir boolean "hey verilerinizi kontrol edin" bayrağı bile bir başlangıç ​​olacaktır.

İhracatçılardan veri alamama konusunda Prometheus hakkında nasıl anlamlı bilgiler edinebilirim? Prometheus veri toplama işlemini manuel olarak yapmak zorunda kalmadan boşlukların neden olduğunu nasıl anlayabilirim? Bu bağlamda, belki de Prometheus'un ötesinde veri toplamalarını izlemeye genişletildiğinde bile mantıklı uygulamalar nelerdir?


Sorunla ilgili günlük girişleriniz veya uyarılarınız / hatalarınız var mı?
kenorb

Hiçbir şey, sadece veri serilerinde bir boşluk görüyorum. Prometheus çıktısı beklemedeki değişiklikleri her birkaç dakikada bir ve normalde kaydetmeyle ilgili normal normal satırlara sahiptir (bakmak için bazı gizli günlükleri kaçırmadıkça).
Sander

Biz de bu sorunla karşı karşıyayız. @Sander sebebini bulabildin mi?
Deepak N

@DepakN hayır, maalesef buraya eklemek için yararlı bir fikrim yok. Prometheus kullanırken bir ağrı noktası olmaya devam ediyor.
Sander

Yanıtlar:


5

Ben bir metrik üzerinde böyle bir rateşey ile uyarı bir tür yapabilirsiniz düşünüyorum :

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 }}%",
}

Ana fikir, metrik hız 3 dakika boyunca 0 olduğunda, uygun metrik adı ve hangi ihracatçının hangi ihracatçıdan geldiğini size doğru bilgi vermesi gerektiğini belirten bir etiketle uyarmaktır.

İhracatçı tarafından izlenecek doğru metriğin seçilmesi karmaşık olabilir, daha fazla bilgi olmadan vakumdan daha iyi bir tavsiye vermek zordur.
Bu blog yazısı daha genel bir tespit için de ilham kaynağı olabilir.


oran, belirli bir sayaç için saniyedeki hızı hesaplar. Bunun, metriklerin kazınma oranı ile ilgisi yoktur (-> scrape_interval). Örneğiniz, verilen sayaç (metrik_adı) 3 dakika boyunca artmazsa, muhtemelen OP'nin istediği şey değilse uyarır.
Johannes 'balık' Ziemke

@ Johannes'fish'Ziemke Bu yüzden doğru metriği bulmak karmaşık olabilir. timeÖrneğin, bir düğüm dışa aktarıcısında metriği kullanmak gerekir . Bir ihracatçı başarısız olduğunda uyarmak için daha iyi bir yol varsa, bir cevap eklemek için çekinmeyin
Tensibai

@ Johannes'fish'Ziemke devops.se btw'ye hoş geldiniz :)
Tensibai

1

Boşluğa neden olabilecek birkaç neden var. Büyük olasılıkla ihracatçıya ulaşılamıyor, bu durumda zaman upçizelgeleri 0 olacaktır. Bu konuda bununla ilgili uyarı yapabilirsiniz ( https://prometheus.io/docs/alerting/rules/#templating adresinden alınmıştır ):

# 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.",
  }

Durum sayfasında ayrıca bir hata mesajı da dahil olduğunu görmelisiniz. Maalesef geçmiş hatayı görmenin bir yolu yok, ancak bunu izlemek için bir sorun var: https://github.com/prometheus/prometheus/issues/2820

Prometheus sunucunuz da aşırı yüklenebilir, bu da kazıma işleminin durmasına neden olur ve bu da boşlukları açıklar. Bu durumda Storage needs throttling. Scrapes and rule evaluations will be skipped., günlükteki hataları ve prometheus_target_skipped_scrapes_totalmetriklerdeki artışları görmelisiniz . Bu konuda da uyarmalısınız, örneğin:

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

1

Gördüğünüz aynı sorun olup olmadığından emin değilim. Ancak, GC ayarlarını özel olarak ayarlamayan Java uygulamaları için bu rastgele boşlukları gördük. Yani veri toplama durduğunda boşluklar görüyorduk, çünkü JVM Tam GC yaparken örneğin etkinliği durdu. Java kullanıyorsanız bu olabilir. Düzeltmemiz, veri toplamadaki bu zaman boşluklarını önlemek için G1 çöp toplayıcısını (Java 8+) GC etkinliğinin uzunluğu üzerinde belirtilen bir sınırla açıkça kullanmaktı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.