Pagsubaybay sa mga postgres sa loob ng Openshift

Magandang araw, mga residente ng Habr!

Ngayon gusto kong sabihin sa iyo kung paano namin gustong subaybayan ang mga postgres at ilang iba pang entity sa loob ng OpenShift cluster at kung paano namin ito ginawa.

Sa pasukan ay mayroon silang:

  • Nagbukas
  • timon
  • Promiteyus


Upang gumana sa isang java application, ang lahat ay medyo simple at transparent, o upang maging mas tumpak:

1) Pagdaragdag sa build.gradle

 implementation "io.micrometer:micrometer-registry-prometheus"

2) Patakbuhin ang prometheus na may configuration

 - job_name: 'job-name'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    kubernetes_sd_configs:
    - role: pod
      namespaces:
        names: 
          - 'name'

3) Pagdaragdag ng isang display sa Grafana

Ang lahat ay medyo simple at prosaic hanggang sa dumating ang sandali upang subaybayan ang mga base na matatagpuan malapit sa aming namespace (oo, ito ay masama, walang gumagawa nito, ngunit iba't ibang mga bagay ang nangyayari).

Paano ito gumagana?

Bilang karagdagan sa pod na may mga postgres at prometheus mismo, kailangan namin ng isa pang entity - exporter.

Ang isang exporter sa abstract na konsepto ay isang ahente na nangongolekta ng mga sukatan mula sa isang application o kahit isang server. Para sa postgres exporter, ito ay nakasulat sa Go, ito ay gumagana sa prinsipyo ng pagpapatakbo ng mga SQL script sa loob ng database at pagkatapos ay kinukuha ng prometheus ang mga resultang nakuha. Nagbibigay-daan din ito sa iyo na palawakin ang mga nakolektang sukatan sa pamamagitan ng pagdaragdag ng iyong sarili.

I-deploy natin ito nang ganito (halimbawa deployment.yaml, non-binding):


---
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

Nangangailangan din ito ng serbisyo at imagestream

Pagkatapos ng deployment, gusto talaga naming makita ng lahat ang isa't isa.

Idagdag ang sumusunod na piraso sa Prometheus config:

  - job_name: 'postgres_exporter'
    metrics_path: '/metrics'
    scrape_interval: 5s
    dns_sd_configs:
    - names:
      - 'postgres-exporter'
      type: 'A'
      port: 9187

At pagkatapos ay gumana ang lahat, ang natitira ay idagdag ang lahat ng bagay na ito sa grafana at tamasahin ang resulta.

Bilang karagdagan sa kakayahang magdagdag ng sarili mong mga query, maaari mong baguhin ang mga setting sa prometheus, nangongolekta ng mas naka-target na sukatan.

Ginawa ito sa katulad na paraan para sa:

  • Kafka
  • Elasticsearch
  • Mongo

PS Lahat ng data sa mga pangalan, port at iba pa ay kinuha mula sa himpapawid at hindi naglalaman ng anumang impormasyon.

Mga kapaki-pakinabang na link:
Listahan ng iba't ibang mga exporter

Pinagmulan: www.habr.com

Magdagdag ng komento