ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ ΠΆΠΈΡΠ΅Π»ΠΈ Π₯Π°Π±ΡΠ°!
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΠΌ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ postgres ΠΈ Π΅ΡΠ΅ ΠΏΠ°ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° OpenShift ΠΈ ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ.
ΠΠ° Π²Ρ ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π»ΠΈ:
- Openshift
- Helm
- Prometheus
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅ Π±ΡΠ»ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ, Π° Π΅ΡΠ»ΠΈ Π±ΡΡΡ ΡΠΎΡΠ½Π΅Π΅, ΡΠΎ:
1) ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) ΠΠ°ΠΏΡΡΠΊ prometheus Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'
3) ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Grafana
ΠΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΡΠΎΠ·Π°ΠΈΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΡΡΡΠΏΠΈΠ» ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ Π±Π°Π·Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Ρ Π½Π°Ρ ΡΡΠ΄ΠΎΠΌ Π² Π½Π΅ΠΉΠΌΡΠΏΠ΅ΠΉΡΠ΅ ( Π΄Π°, ΡΡΠΎ ΠΏΠ»ΠΎΡ ΠΎ, Π½ΠΈΠΊΡΠΎ ΡΠ°ΠΊ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ, Π½ΠΎ Π±ΡΠ²Π°Π΅Ρ ΡΠ°Π·Π½ΠΎΠ΅).
ΠΠ°ΠΊ ΠΆΠ΅ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ?
ΠΡΠΎΠΌΠ΅ ΠΏΠΎΠ΄Π° Ρ postgres ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ prometheus Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΡΡΠ½ΠΎΡΡΡ β exporter.
ΠΠΊΡΠΏΠΎΡΡΠ΅Ρ Π² ΠΎΡΠ²Π»Π΅ΡΠ΅Π½Π½ΠΎΠΌ ΠΏΠΎΠ½ΡΡΠΈΠΈ ΡΡΠΎ Π°Π³Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ»Ρ postgres exporter Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Go, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π·Π°ΠΏΡΡΠΊΠ° Π²Π½ΡΡΡΠΈ sql ΡΠΊΡΠΈΠΏΡΠΎΠ² Π½Π° Π±Π°Π·Π΅ ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π·Π°Π±ΠΈΡΠ°Π΅Ρ prometheus. ΠΡΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΡΡΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΡΠ²ΠΎΠΈ.
ΠΠ΅ΠΏΠ»ΠΎΠΈΠΌ Π΅Π³ΠΎ Π²ΠΎΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ( ΠΏΡΠΈΠΌΠ΅Ρ deployment.yaml, Π½ΠΈ ΠΊ ΡΠ΅ΠΌΡ Π½Π΅ ΠΎΠ±ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ):
---
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
Π’Π°ΠΊ ΠΆΠ΅ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΈ ΠΈΠΌΠ΅ΠΉΠ΄ΠΆΡΡΡΠΈΠΌ
ΠΠΎΡΠ»Π΅ Π΄Π΅ΠΏΠ»ΠΎΡ Π½Π°ΠΌ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π° Π²ΠΈΠ΄Π΅Π»ΠΈ.
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΠΏΡΠΎΠΌΠ΅ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΊΡΡΠΎΡΠ΅ΠΊ:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
Π Π²ΠΎΡ ΡΡΡ ΡΠΎ Π²ΡΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΠΎΡΡΠ°Π»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΡΠ΅ ΡΡΠΎ Π΄ΠΎΠ±ΡΠΎ Π² Π³ΡΠ°ΡΠ°Π½Ρ ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°ΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ.
ΠΡΠΎΠΌΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π°ΠΏΡΠΎΡΡ, Π² prometheus ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ, ΡΠΎΠ±ΠΈΡΠ°Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠ³Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π»Ρ:
- Kafka
- Elasticsearch
- Mongo
P.S. ΠΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ, ΠΏΠΎΡΡΠ°ΠΌ ΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌΡ Π²Π·ΡΡΡ Ρ ΠΏΠΎΡΠΎΠ»ΠΊΠ° ΠΈ Π½Π΅ Π½Π΅ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ:
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com