Bonan tagon, loĝantoj de Habr!
Hodiaŭ mi volas rakonti al vi, kiel ni vere volis monitori postgres kaj kelkajn aliajn entojn en la OpenShift-grupo kaj kiel ni faris ĝin.
Ĉe la enirejo ili havis:
- Malferma deĵoro
- Kasko
- Prometeo
Por labori kun java aplikaĵo, ĉio estis sufiĉe simpla kaj travidebla, aŭ por esti pli preciza:
1) Aldonante al build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) Rulu prometheus kun agordo
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'
3) Aldonante ekranon al Grafana
Ĉio estis sufiĉe simpla kaj proza ĝis venis la momento por kontroli la bazojn, kiuj troviĝas proksime en nia nomspaco (jes, tio estas malbona, neniu faras tion, sed malsamaj aferoj okazas).
Kiel ĝi funkcias?
Krom la pod kun postgres kaj prometheus mem, ni bezonas unu plian enton - eksportilon.
Eksportanto en abstrakta koncepto estas agento, kiu kolektas metrikojn de aplikaĵo aŭ eĉ servilo. Por postgres-eksportisto, ĝi estas skribita en Go, ĝi funkcias laŭ la principo ruli SQL-skriptojn ene de la datumbazo kaj tiam prometheus prenas la rezultojn akiritajn. Ĉi tio ankaŭ permesas vin pligrandigi la kolektitajn metrikojn aldonante viajn proprajn.
Ni disfaldu ĝin tiel (ekzemplo deployment.yaml, ne-liga):
---
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
Ĝi ankaŭ postulis servon kaj bildfluon
Post deplojo, ni vere volas, ke ĉiuj vidu unu la alian.
Aldonu la sekvan pecon al la agordo de Prometheus:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
Kaj tiam ĉio funkciis, restas nur aldoni ĉiujn ĉi aĵojn al la grafana kaj ĝui la rezulton.
Krom la kapablo aldoni viajn proprajn demandojn, vi povas ŝanĝi la agordojn en prometheus, kolektante pli celitajn metrikojn.
Ĉi tio estis farita en simila maniero por:
- Kafka
- Elasta esploro
- Mongo
PS Ĉiuj datumoj pri nomoj, havenoj kaj la resto estas prenitaj de la aero kaj ne enhavas ajnan informon.
Utilaj ligoj:
fonto: www.habr.com