ΠΠΎΠ±ΡΡ Π΄Π΅Π½, ΠΆΠΈΡΠ΅Π»ΠΈ Π½Π° Π₯Π°Π±Ρ!
ΠΠ½Π΅Ρ ΠΈΡΠΊΠ°ΠΌ Π΄Π° Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΈΡΠΊΠ°Ρ ΠΌΠ΅ Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΠΌΠ΅ postgres ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΡΠ³ΠΈ ΠΎΠ±Π΅ΠΊΡΠ° Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift ΠΈ ΠΊΠ°ΠΊ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅.
ΠΠ° Π²Ρ ΠΎΠ΄Π° ΠΈΠΌΠ°Ρ Π°:
- ΠΡΠ²Π°ΡΡΠ½Π΅
- Π¨Π»Π΅ΠΌ
- ΠΡΠΎΠΌΠ΅ΡΠ΅ΠΉ
ΠΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Ρ 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, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ ΡΡΠ±Π΅ΠΊΡ - ΠΈΠ·Π½ΠΎΡΠΈΡΠ΅Π».
ΠΠ·Π½ΠΎΡΠΈΡΠ΅Π»ΡΡ Π² Π°Π±ΡΡΡΠ°ΠΊΡΠ½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π΅ Π°Π³Π΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ±ΠΈΡΠ° ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΡΡΡΠ²ΡΡ. ΠΠ° 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
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΡΠ»ΡΠ³Π° ΠΈ ΠΏΠΎΡΠΎΠΊ ΠΎΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
Π‘Π»Π΅Π΄ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΈΡΠΊΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΡΡ.
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠ°ΡΡ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Prometheus:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
Π ΡΠΎΠ³Π°Π²Π° Π²ΡΠΈΡΠΊΠΎ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠΈ, Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΡΠ°Π²Π°, Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π½Π΅ΡΠ° ΠΊΡΠΌ Π³ΡΠ°ΡΠ°Π½Π° ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΡΠ»Π°Π΄ΠΈΡΠ΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°.
Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π² prometheus, ΡΡΠ±ΠΈΡΠ°ΠΉΠΊΠΈ ΠΏΠΎ-Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ.
Π’ΠΎΠ²Π° Π±Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½ Π·Π°:
- ΠΠ°ΡΠΊΠ°
- Elasticsearch
- ΠΠΎΠ½Π³ΠΎ
PS ΠΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΈΠΌΠ΅Π½Π°, ΠΏΠΎΡΡΠΎΠ²Π΅ ΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΎΡΠΎ ΡΠ° Π²Π·Π΅ΡΠΈ ΠΎΡ Π²ΡΠ·Π΄ΡΡ Π° ΠΈ Π½Π΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΠΎΠ»Π΅Π·Π½ΠΈ Π²ΡΡΠ·ΠΊΠΈ:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com