ΠΠΎΠ±ΡΡ Π΄Π΅Π½ Π½Π° ΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Π₯Π°Π±ΡΠ°!
ΠΠ½Π΅Ρ ΠΈΡΠΊΠ°ΠΌ Π΄Π° Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ°Ρ ΠΌΠ΅ Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΠΌΠ΅ 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 Π΅ΠΊΡΠΏΠΎΡΡΠ΅ΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° 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 ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅, ΡΡΠ±ΠΈΡΠ°ΠΉΠΊΠΈ ΠΏΠΎ-ΡΠ΅Π»Π΅Π½Π°ΡΠΎΡΠ΅Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ.
ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π±Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ Π·Π°:
- Kafka
- Elasticsearch
- Mongo
P.S. ΠΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΡΠ°, ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΎΡΠΎ ΡΠ° ΠΈΠ·ΠΌΠΈΡΠ»Π΅Π½ΠΈ ΠΈ Π½Π΅ Π½ΠΎΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΠΎΠ»Π΅Π·Π½ΠΈ Π²ΡΡΠ·ΠΊΠΈ:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
