Добър ден на жителите на Хабра!
Днес искам да ви разкажа как много искахме да наблюдаваме 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
