2016-12-22 2 views
1

Ich habe den Moment erreicht, wenn ich meinen Prometheus in kleinere teilen muss. Ich habe darüber gelesen here aber es sagt nichts über Skalierung in Kubernetes. Unten ist mein Setup:Wie Prometheus in kubernetes Umgebung zu skalieren

und es gibt etwa 50 Namespaces, die Tausende von Metriken und ein Strom erzeugt Setup mit einem Prometheus ist nicht genug. Also habe ich beschlossen, es zu drei Instanzen aufgeteilt wie:

Aber nach einer Weile wurde mir klar, dass diese Metriken geschabt von kubernetes_sd_config und es gibt keine Möglichkeit zu sagen, welche Metriken ich durch welche Instanz von prometheus kratzen möchte oder ich falsch liege. Eine Lösung wäre es, den kubernetes-Cluster in einen kleineren Cluster aufzuteilen, aber das ist im Moment zu viel Arbeit.

Also meine Frage ist, wenn es eine Möglichkeit gibt, Prometheus zu sagen, dass ich nur kube state metrics, node exporter oder native Kubernetes Metriken kratzen möchte?

+0

Eine Lösung, die von dem ich thonking ist nicht Anmerkung an Exporteure für prometheus Dienste hinzufügen und für sie – widget

Antwort

1

Skalierung in Kubernetes ist das gleiche wie anderswo. Dies ist eine Frage der Verwendung von Service Discovery und Relabelling, um herauszufinden, was überwacht wird.

Zum Beispiel sollte die Konfiguration für die Node-Exporteure bereits eine separate scrape_config sein, so dass die Aufteilung in einen separaten Prometheus einfach durch Aufteilen der Konfigurationsdatei erfolgen sollte.

+0

welche Art von scrape_config statische Konfiguration konfigurieren sollte ich erstellen? statisch? – widget

+0

Momentan verwende ich kubernetes_sd_config mit Anmerkungen in Diensten. btw ermöglicht die Umbenennung das Filtern von Metriken oder nur von Labels aus Metriken? – widget

+0

also, wie diese separate scrape_config sollte für Node-Exporteur aussehen? Im Moment benutze ich let say default kubernetes_sd_config und der Knotenexporteur wird als Daemonset mit dem Dienst bereitgestellt, der für Prometheus annotiert ist. – widget

2

Eine andere Möglichkeit wäre für eine horizontal skalierbares, verteiltes Prometheus Umsetzung gehen: https://github.com/weaveworks/cortex (NB Ich schrieb diese.)

Es ist nicht bereit für die Prime Zeit noch nicht, aber wir verwenden es intern und immer ziemlich gute Ergebnisse . Es wird mehr Aufwand für die Einrichtung und den Betrieb als der vorgelagerte Prometheus sein, aber es sollte praktisch unbegrenzt skalierbar sein - und außerdem laufen wir es auf Kubernetes, also ist es dort wirklich zu Hause.

Lassen Sie mich wissen, wenn Sie interessiert sind und ich kann Sie gehen, obwohl es einrichten.

0

Ich hatte eine ähnliche Aufgabe für die Föderation. Hier ist, wie ich es tat, folgende @ brian-Brasilien Antwort:

  • Setup ein master prometheus mit config:

scrape_configs: - job_name: dc_prometheus honor_labels: true metrics_path: /federate params: match[]: - '{job="my-kubernetes-job"}' static_configs: - targets: - prometheus-slaveA:9090 - prometheus-slaveB:9090 Sehen Sie, wie Sklaven hier deklariert sind. Es ist ziemlich statisch. Auch der match[] Parameter hier sagt, alle Slave-Metriken zu greifen. Sie müssten schlauer sein als das natürlich.

  • Setup slaves mit diesem speziellen umzuetikettieren:

relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_slave] action: keep regex: slaveA

und ähnlich für slaveB und so weiter.

Jetzt haben Sie für jeden Pod statt der bekannten Annotation prometheus.io/scrape: true|falseprometheus.io/slave: slaveA|slaveB.

Ich beschrieb es mit mehr Details hier: http://devlog.qaraywa.net/?p=176

Verwandte Themen