Συλλογή μετρικών: Προμηθέας, Grafana
Συλλογή μετρικών: Προμηθέας, Grafana
1) Σκοπός και πλαίσιο
Το έργο του βρόχου μετρήσεων είναι η αξιόπιστη συλλογή και αποθήκευση χρονοσειρών, η παροχή γρήγορου PromQL για RCA, ειδοποιήσεις SLO και κατανοητά ταμπλό. Βασικό ζεύγος: Προμηθέας (scrape-store query) και Grafana (απεικόνιση, ειδοποιήσεις, σημειώσεις απελευθέρωσης). Για μακρά αποθήκευση και παγκόσμια ερώτηση - Θάνος/Φλοιός/Μιμίρ.
2) Μοντέλο δεδομένων και σημασιολογία
Σειρά = μετρική ονομασία + σύνολο ετικετών (κλειδί = τιμή).
Τύποι: μετρητής, μετρητής, ιστόγραμμα, περίληψη (σε prod - πιο συχνά ιστογράμμα).
- RED (API): «ρυθμός», «σφάλματα», «διάρκεια» (ιστογράμματα).
- ΧΡΗΣΙΜΟΠΟΙΗΣΗ (ресурсы): Χρησιμοποίηση, κορεσμός, σφάλματα (CPU/RAM/Disk/Net).
- Ονομασία: 'namespace _ system _ metric _ unit' (για παράδειγμα, 'http _ server _ requests _ total', 'db _ connections _ current').
Αντι- καρδινότητα: ελαχιστοποίηση των διαφορετικών τιμών ετικέτας (χωρίς user_id request_id στην ετικέτα).
3) Έκθεση και ανακάλυψη υπηρεσίας
Εξαγωγείς: node_exporter, kube-state-metrics, cAdvisor, DB/Queues (postgres_exporter, redis_exporter, kafka_exporter).
Ιθαγενείς υπηρεσίες: βιβλιοθήκες πελατών (Go/Java/Node/Python) → '/μετρήσεις '.
Υπηρεσία Discovery: Kubernetes, EC2/ASG, πρόξενος, στατικά αρχεία.
yaml global:
scrape_interval: 15s evaluation_interval: 15s scrape_configs:
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs: [{ role: node }]
relabel_configs:
- action: labelmap regex: __meta_kubernetes_node_label_(.+)
- job_name: 'apps'
kubernetes_sd_configs: [{ role: pod }]
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep regex: "true"
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
target_label: __metrics_path__
regex: (.+)
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
target_label: __address__
regex: (.+)
replacement: $1
Σημειώσεις του λοβού:
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"
4) Ιστογράμματα και καθυστέρηση
Χρήση ρητών κουβάδων για SLO σας:- Ιστός/API: '[10ms, 25,50,100,200,400,800,1600]'
- Πληρωμές/πληρωμές: προσθήκη ουράς στα 5-10.
promql histogram_quantile(0. 95,
sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)
Με υποδείγματα (εάν είναι ενεργοποιημένα):
promql histogram_quantile(0. 95,
sum by (le, route) (rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m]))
)
5) Κανόνες καταγραφής
Μείωση βαρέων αιτημάτων, τυποποίηση SLI.
yaml groups:
- name: api_sli interval: 30s rules:
- record: job:http:success_ratio:rate5m expr: sum(rate(http_requests_total{status!~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
- record: job:http:duration_p95:5m expr: histogram_quantile(0. 95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
6) SLO και προειδοποιήσεις (καύση πολλαπλών παραθύρων)
SLO 99. 9% Επιτυχής Requests/30d.
yaml groups:
- name: slo_burn rules:
- alert: ErrorBudgetBurnHighShort expr: (1 - job:http:success_ratio:rate5m) > (1 - 0. 999) 14 for: 5m labels: { severity: critical }
annotations: { summary: "Fast burn >14x for 5m" }
- alert: ErrorBudgetBurnHighLong expr: (1 - job:http:success_ratio:rate5m) > (1 - 0. 999) 6 for: 1h labels: { severity: critical }
annotations: { summary: "Long burn >6x for 1h" }
Alertmanager (απλουστευμένο):
yaml route:
receiver: pager group_by: ["service"]
receivers:
- name: pager slack_configs:
- channel: "#oncall"
send_resolved: true
7) Υγιεινή και οικονομία του σήματος
Οι ονομασίες ετικετών είναι σταθερές και τυποποιημένες: 'service', 'env', 'region', 'route', 'code', 'version'.
Περιορισμός της πληθικότητας: Οι μετρήσεις με «διαδρομή» πρέπει να χρησιμοποιούν μοτίβο «http». διαδρομή "(όχι πλήρης URL).
Λογική δειγματοληψία - σε ίχνη. στις μετρήσεις - χωρίς user_id.
Ιδιότητες απελευθέρωσης ('service. έκδοση ") είναι χρήσιμες για τη σύγκριση παλαιών/νέων εκδόσεων.
8) Κλιμάκωση και HA
Prometheus - κάθετα και με ξύδι-στόχο:- Δύο Prometheus (A/B) αποσύρουν τους ίδιους στόχους (οι καταχωρίσεις HA → αντιγράφονται).
- Θάνος: Sidecar σε κάθε Προμηθέα, Store + Query για παγκόσμια ερωτήματα και μακροχρόνια αποθήκευση (S3/GCS).
- Εναλλακτική λύση: Cortex/Mimir (απομακρυσμένη γραφή, πολυπλοκότητα, οριζόντια κλιμάκωση).
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
Τοπική διατήρηση TSDB:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h
9) Grafana: ταμπλό, προειδοποιήσεις, σημειώσεις
Τυποποιημένα ταμπλό:1. Επισκόπηση της πλατφόρμας (SLO/RED, προϋπολογισμός σφαλμάτων).
2. API by Route (RPS/5xx/p95, σύγκριση «έκδοση»).
3. Συστάδα/Κόμβοι (επίπεδο ελέγχου, κορεσμός).
4. DB/Cache/Queues (lag/locks/hit ratio/backlog).
5. Per - Release (πριν/μετά, release notations from CI).
Grafana Alerting: ενεργοποιήσεις στο PromQL, περιστροφές εφημερίας, mute-times «παράθυρα απελευθέρωσης».
Σχολιασμοί: Το CI προσθέτει μια εκδήλωση κυκλοφορίας με την εικόνα 'commit'. ετικέτα ", αναφορά στον αγωγό.
10) Kubernetes: τι να μετρήσετε
Επίπεδο ελέγχου: 'apiserver _ request _ total', etcd leader/fsync, καθυστέρηση προγραμματιστή.
Φόρτος εργασίας: επανεκκίνηση, 'container _ cpu _ cfs _ throttled _ seconds _ total', OOM, εν αναμονή/έξωση, παραβιάσεις PDB.
Δίκτυο: drops, conntrack, 'kube-proxy' σφάλματα.
Ποσοστώσεις/όρια: Αιτήσεις έναντι ορίων, HPA/VPA, κορεσμός κόμβων.
11) DB/κρύπτες/ουρές αναμονής: σήματα κλειδιά
PostgreSQL/MySQL: 'συνδέσεις', 'κλειδαριές', 'αδιέξοδο _ σύνολο', 'xact _ commit/rollback', καθυστέρηση αντιγραφής.
Redis: αναλογία επιτυχίας, 'εξώσεις', καθυστέρηση 'στιγμιαία _ ops _ per _ sec'.
Kafka/RabbitMQ: καταναλωτική υστέρηση, μη συσκευασμένη, ISR, χρήση δίσκων.
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000
Postgres replication lag max(pg_replication_lag_seconds) > 2
12) Ασφάλεια και πολυπλοκότητα
RBAC προς Prometheus/Grafana, datasource-permishens.
Αλυσίδα TLS/mTLS κατά την είσοδο/μεταξύ κατασκευαστικών στοιχείων.
απομόνωση ενοικιαστή: χωριστό σήμα Προμηθέα ή ενοικιαστή στο Cortex/Mimir· όρια σειράς και αιτήσεων.
Απόρρητα σε καταχωρίσεις/κοινοποιήσεις - απαγορευμένα (χρησιμοποιήστε ταυτότητα εισιτηρίου και όχι PII).
13) Ενσωμάτωση με εκλύσεις και αυτόματες ανατροπές
Κανόνες SLO → PropertyTemplate (Argo Rollouts) ή CI-gate.
Όταν ενεργοποιούνται προειδοποιήσεις εγκαυμάτων - παύση/ανατροπή καναριού; στο ημερολόγιο/σχολιασμό - σύνδεσμος προς την απελευθέρωση.
Σύγκριση σταθερής και καναρινικής έκδοσης μέσω της ετικέτας «έκδοση».
14) Τυπικά σφάλματα (αντίγραφα)
Μη ελεγχόμενη πληθικότητα ετικετών (user_id, url. πλήρη, δυναμικά κλειδιά).
Αναμειγνύονται το prod και το στάδιο στο ίδιο σύμπλεγμα χωρίς το 'env' label.
Μόνο περιτύπωμα χωρίς RED/USE. χωρίς p95/p99 ιστογράμματα.
Καταχωρίσεις για υλικό χωρίς δέσμευση στο θόρυβο SLO.
Έλλειψη κανόνων καταγραφής → «βαρέων» αιτημάτων σε περιστατικά παραγωγής.
Δεν υπάρχουν σημειώσεις απελευθέρωσης → είναι δύσκολο να συγκριθούν οι αλλαγές και η υποβάθμιση.
15) Κατάλογος ελέγχου εφαρμογής (0-45 ημέρες)
0- 10 ηµέρες
Node/kube-state/cAdvisor exports· «/μετρήσεις »στις υπηρεσίες.
Βασικά ταμπλό RED/USE, τυποποιημένοι κουβάδες ιστογράμματος.
Συμπεριλάβετε σημειώσεις απελευθέρωσης από τον ΚΚΠ.
11-25 ημέρες
Κανόνες καταγραφής για SLI· ειδοποιήσεις εγκαυμάτων πολλαπλών παραθύρων.
HA Prometheus (διπλό ξύρισμα), αντίγραφο ασφαλείας ρυθμίσεων GitOps.
Συναγερμός: διαδρομές/αθόρυβος τρόπος/περιστροφές εφημερίας.
26-45 ημέρες
Απομακρυσμένη γραφή σε Thanos/Cortex/Mimir, μακροπρόθεσμη αποθήκευση.
Βελτιστοποίηση της πληθικότητας, όρια σειράς, αιτήματα.
Εκπομπές αερίων SLO και ενσωμάτωση αυτόματης ανατροπής.
16) Μετρήσεις διάρκειας
Κάλυψη RED/USE για βασικές υπηρεσίες ≥ 95%.
Μέσος χρόνος εκτέλεσης «βαρέων» PromQL <2 s (p95) λόγω των κανόνων καταγραφής.
Η αναλογία χρήσιμων/θορυβωδών προειδοποιήσεων είναι> 3:1.
Καρδινότητα υπό έλεγχο: <10M ενεργές παρτίδες ανά σμήνος, χωρίς ακίδες.
Το 100% των απελευθερώσεων σημειώνονται στην Grafana και συσχετίζονται μετρήσεις πριν/μετά.
17) Χρήσιμα αποσπάσματα
Σταθερή έναντι σύγκριση καναρινιού κατά έκδοση
promql histogram_quantile(0. 95,
sum by (le, version) (rate(http_request_duration_seconds_bucket{version=~"stable canary"}[5m]))
)
5xx Σφάλματα κατά διαδρομή
promql topk(5,
sum by (route) (rate(http_requests_total{status=~"5.."}[5m]))
)
κορεσμός CPU δοχείου
promql rate(container_cpu_cfs_throttled_seconds_total[5m]) > 0. 1
Σχέση μετρικών με κομμάτια (Ενεργοποιημένα υποδείγματα)
promql sum (rate (http_request_duration_seconds_bucket[5m])) by (le) # clickable to the track
18) Συμπέρασμα
Το Prometheus + Grafana είναι το de facto πρότυπο για τις μετρήσεις. Νίκη σημασιολογίας και πειθαρχίας: RED/USE, τακτοποιημένες ετικέτες, ιστογράμματα για SLO, κανόνες καταγραφής και καταχωρίσεις SLO. Προσθέστε HA και μακροχρόνια αποθήκευση, σημειώσεις απελευθέρωσης και ενσωμάτωση με auto-rollbacks - και έχετε ένα γρήγορο, κλιμακωτό και οικονομικό μετρικό βρόχο που σας βοηθά να πάρετε αποφάσεις στις πωλήσεις.