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