Zum Hauptinhalt springen

Prometheus-Integration

Vor der TSE sitzt ein Prometheus-kompatibler Adapter. Ohne separaten Prometheus-Server können Sie Erfassung (remote_write) und Visualisierung (PromQL) direkt im Prometheus-Ökosystem nutzen.

[Prometheus · Grafana Agent] --remote_write--> TSE --> Cassandra
[Grafana (Prometheus 데이터소스)] --PromQL--> TSE
Kein separater Prozess

Der Adapter läuft im selben Prozess wie der Jetty der TSE. Es gibt nichts zu starten und keinen zusätzlichen Port zu öffnen — nur der Pfad /prometheus wird verwendet (TSE-native API ist /api/v1/*). Die Authentifizierung nutzt ebenfalls das Basic Auth der TSE.

1. Werte einspeisen — remote_write​

In prometheus.yml oder der Grafana-Agent-Konfiguration tragen Sie Folgendes ein.

remote_write:
- url: http://<TSE 호스트>:7800/prometheus/api/v1/write
basic_auth:
username: tse
password: "<PP_TSE_PASSWORD>"

Der Body ist snappy-komprimiert + protobuf (remote_write 1.0), und Prometheus bzw. der Agent übernimmt das automatisch. Bei Erfolg erhalten Sie 204, bei fehlerhaftem Body 400 (keine Wiederholung), bei vorübergehenden Störungen 500 (Wiederholung). NaN und ±Inf werden in der Speicherphase verworfen.

2. In Grafana anzeigen​

Wählen Sie als Datenquellentyp Prometheus und füllen Sie es so aus.

FeldWert
URLhttp://<TSE 호스트>:7800/prometheus
AccessServer (Proxy)
AuthBasic Auth — tse / <PP_TSE_PASSWORD>
HTTP-MethodePOST empfohlen

Wenn Sie „Save & Test“ drücken, erkennt Grafana über /prometheus/api/v1/status/buildinfo, dass es sich um Prometheus handelt. Danach können Sie in Panels PromQL direkt verwenden.

Anderer Weg als das gebündelte PlantPulse Dashboard

Die TSE enthält auch ein gebündeltes PlantPulse Dashboard, das ein eigenes Datenquellen-Plugin nutzt. Sie können sich für eines entscheiden — wenn Ihnen PromQL vertraut ist, nehmen Sie dieses hier, wenn Sie vorgefertigte Dashboards nutzen möchten, das gebündelte.

3. Wie wird gemappt​

PrometheusTSE
__name__-LabelMetrikname
Andere LabelsTags
Sample (ts_ms, float64)DataPoint (double, ms)

Die Namensregeln von Prometheus ([a-zA-Z_:][a-zA-Z0-9_:]*) sind mit den TSE-Regeln kompatibel, sodass sie verlustfrei übertragen werden.

4. Endpunkte​

Alle liegen unter /prometheus und folgen der Prometheus-HTTP-API-Spezifikation ({"status":"success","data":…}).

Methode·PfadZweck
POST /prometheus/api/v1/writeremote_write-Empfang
GET·POST /prometheus/api/v1/queryInstant-Query
GET·POST /prometheus/api/v1/query_rangeRange-Query (start·end·step)
GET /prometheus/api/v1/labelsListe der Labelnamen
GET /prometheus/api/v1/label/{name}/valuesListe der Labelwerte
GET·POST /prometheus/api/v1/seriesSerien-Matching (match[])
GET /prometheus/api/v1/status/buildinfoErkennung durch Grafana

Zeit ist Unix-Sekunden (Dezimal möglich) oder RFC3339, step sind 15s·1m·1h·500ms oder Sekunden ohne Einheit. Die Zeitstempel in Antworten sind Sekunden, Werte sind Strings (Prometheus-Konvention).

5. Unterstütztes PromQL​

KategorieUnterstützt
Selektorenbare · Matcher (= != =~ !~) · __name__-Matcher · Range-Selektor ([5m], Einheit ms s m h d w y)
ArithmetikZahlenliterale · unäres - · Klammern · + - * / (scalar∘scalar, vector∘scalar, vector∘vector 1-to-1)
Vergleiche== != > < >= <= (+ bool)
Funktionenrate irate increase delta · abs clamp_min clamp_max · histogram_quantile
Aggregationensum avg min max count + by/without · topk bottomk
rate(errors[5m]) / rate(total[5m])
topk(5, sum(rate(req_total[5m])) by (path))
histogram_quantile(0.95, rate(latency_seconds_bucket[5m]))

6. Nicht unterstützt — wird nicht stillschweigend falsch, sondern mit 400 abgelehnt​

KategorieNicht unterstützt
Vektor-Matchingon(…) · ignoring(…) · group_left · group_right
Mengenoperationenand · or · unless
Zeitfunktionen*_over_time · predict_linear · holt_winters
TransformationenSubquery (expr[5m:1m]) · @-Modifier · offset
Sonstigesscalar() vector() label_replace() label_join() sort() sort_desc() absent()
Protokollremote_read · remote_write 2.0 · Exemplars · Native Histogramm
Nicht unterstützt bedeutet „Fehler“, nicht „falscher Wert“

Nicht unterstützte Syntax wird bei 400 {"status":"error","errorType":"bad_data",…} abgebrochen. Das bedeutet, es wird keine plausible Zahl stillschweigend geliefert — ein Dashboard kann also nicht still lügen.

7. Feine Unterschiede​

Es ist kein vollständiges Prometheus, sondern ein kompatibler Adapter. In der Praxis meist unproblematisch, aber bei präzisen Vergleichen sollten Sie das wissen.

WasWie unterscheidet es sich
rate·increase-ExtrapolationExtrapoliert das Beobachtungsintervall linear über den gesamten Range (die Randextrapolationsbegrenzung von Prometheus ist nicht implementiert) — minimale Unterschiede an Intervallgrenzen
Range-Fenster[t-range, t] beide Enden inklusive (Prometheus ist linksoffen). Lookback bei Instant-Selektoren ist (t-5m, t] identisch und standardmäßig 5 Minuten
/label/<name>/values__name__ ist korrekt, aber andere Labels werden durch globale Tag-Werte grob angenähert — für Autovervollständigung ausreichend
SkalarvergleichWird immer als 0·1 ausgewertet (Prometheus verlangt bool). 3 > 2 wird direkt zu 1

Siehe auch​