Добрага часу сутак жыхары Хабра!
Сёння жадаю распавесці вам, як нам вельмі жадалася маніторыць 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 нам неабходна яшчэ адна сутнасць - 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 можна змяняць наладу, збіраючы больш таргетавана неабходныя метрыкі.
Аналагічным спосабам было зроблена для:
- Кафка
- Elasticsearch
- Монго
PS Усе дадзеныя па імёнах, партам і астатняму ўзяты са столі і не нясуць ніякай інфармацыі.
Карысныя спасылкі:
Крыніца: habr.com