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
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.
| Feld | Wert |
|---|---|
| URL | http://<TSE 호스트>:7800/prometheus |
| Access | Server (Proxy) |
| Auth | Basic Auth — tse / <PP_TSE_PASSWORD> |
| HTTP-Methode | POST 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.
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
| Prometheus | TSE |
|---|---|
__name__-Label | Metrikname |
| Andere Labels | Tags |
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·Pfad | Zweck |
|---|---|
POST /prometheus/api/v1/write | remote_write-Empfang |
GET·POST /prometheus/api/v1/query | Instant-Query |
GET·POST /prometheus/api/v1/query_range | Range-Query (start·end·step) |
GET /prometheus/api/v1/labels | Liste der Labelnamen |
GET /prometheus/api/v1/label/{name}/values | Liste der Labelwerte |
GET·POST /prometheus/api/v1/series | Serien-Matching (match[]) |
GET /prometheus/api/v1/status/buildinfo | Erkennung 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
| Kategorie | Unterstützt |
|---|---|
| Selektoren | bare · Matcher (= != =~ !~) · __name__-Matcher · Range-Selektor ([5m], Einheit ms s m h d w y) |
| Arithmetik | Zahlenliterale · unäres - · Klammern · + - * / (scalar∘scalar, vector∘scalar, vector∘vector 1-to-1) |
| Vergleiche | == != > < >= <= (+ bool) |
| Funktionen | rate irate increase delta · abs clamp_min clamp_max · histogram_quantile |
| Aggregationen | sum 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
| Kategorie | Nicht unterstützt |
|---|---|
| Vektor-Matching | on(…) · ignoring(…) · group_left · group_right |
| Mengenoperationen | and · or · unless |
| Zeitfunktionen | *_over_time · predict_linear · holt_winters |
| Transformationen | Subquery (expr[5m:1m]) · @-Modifier · offset |
| Sonstiges | scalar() vector() label_replace() label_join() sort() sort_desc() absent() |
| Protokoll | remote_read · remote_write 2.0 · Exemplars · Native Histogramm |
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.
| Was | Wie unterscheidet es sich |
|---|---|
rate·increase-Extrapolation | Extrapoliert 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 |
| Skalarvergleich | Wird immer als 0·1 ausgewertet (Prometheus verlangt bool). 3 > 2 wird direkt zu 1 |
Siehe auch
- TQL und JDBC-Treiber — der native TSE-Weg
- Dashboards in PlantPulse Dashboard erstellen — gebündeltes PlantPulse Dashboard
- Zeitreihen-Engine Übersicht — Unterschiede zur Datenbank