Selamat siang, warga Habr!
Hari ini saya ingin memberi tahu Anda bagaimana kami benar-benar ingin memantau postgres dan beberapa entitas lain di dalam cluster OpenShift dan bagaimana kami melakukannya.
Di pintu masuk mereka memiliki:
- Bukahift
- Kemudi
- Prometheus
Untuk bekerja dengan aplikasi java, semuanya cukup sederhana dan transparan, atau lebih tepatnya:
1) Menambahkan ke build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) Jalankan prometheus dengan konfigurasi
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'
3) Menambahkan tampilan ke Grafana
Semuanya cukup sederhana dan membosankan sampai tiba saatnya untuk memantau pangkalan yang terletak di dekatnya di namespace kami (ya, ini buruk, tidak ada yang melakukan ini, tetapi hal berbeda terjadi).
Bagaimana cara kerjanya?
Selain pod dengan postgres dan prometheus itu sendiri, kita memerlukan entitas lain - eksportir.
Eksportir dalam konsep abstrak adalah agen yang mengumpulkan metrik dari suatu aplikasi atau bahkan server. Untuk postgres eksportir, ditulis dalam Go, ia bekerja berdasarkan prinsip menjalankan skrip SQL di dalam database dan kemudian prometheus mengambil hasil yang diperoleh. Ini juga memungkinkan Anda memperluas metrik yang dikumpulkan dengan menambahkan metrik Anda sendiri.
Mari kita terapkan seperti ini (contoh deployment.yaml, tidak mengikat):
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres-exporter
labels:
app: {{ .Values.name }}
monitoring: prometheus
spec:
serviceName: {{ .Values.name }}
replicas: 1
revisionHistoryLimit: 5
template:
metadata:
labels:
app: postgres-exporter
monitoring: prometheus
spec:
containers:
- env:
- name: DATA_SOURCE_URI
value: postgresdb:5432/pstgr?sslmode=disable
- name: DATA_SOURCE_USER
value: postgres
- name: DATA_SOURCE_PASS
value: postgres
resources:
limits:
cpu: 100m
memory: 50Mi
requests:
cpu: 100m
memory: 50Mi
livenessProbe:
tcpSocket:
port: metrics
initialDelaySeconds: 30
periodSeconds: 30
readinessProbe:
tcpSocket:
port: metrics
initialDelaySeconds: 10
periodSeconds: 30
image: exporter
name: postgres-exporter
ports:
- containerPort: 9187
name: metrics
Itu juga membutuhkan layanan dan imagestream
Setelah penerapan, kami sangat ingin semua orang dapat bertemu satu sama lain.
Tambahkan bagian berikut ke konfigurasi Prometheus:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
Dan kemudian semuanya berfungsi, yang tersisa hanyalah menambahkan semua bahan ini ke grafana dan menikmati hasilnya.
Selain kemampuan untuk menambahkan kueri Anda sendiri, Anda dapat mengubah pengaturan di prometheus, mengumpulkan metrik yang lebih bertarget.
Hal ini dilakukan dengan cara serupa untuk:
- Kafka
- Elasticsearch
- Mongo
PS Semua data nama, port dan selebihnya diambil dari udara dan tidak mengandung informasi apapun.
Tautan yang bermanfaat:
Sumber: www.habr.com