Nadzor postgres znotraj Openshift

Dober dan, prebivalci Habbra!

Danes vam želim povedati, kako smo si želeli spremljati postgres in še nekaj entitet znotraj OpenShift klasterja ter kako smo to naredili.

Na voljo smo imeli:

  • OpenShift
  • Helm
  • Prometheus


Za delovanje z java aplikacijo je bilo vse precej preprosto in pregledno, natančneje:

1) Dodatek v build.gradle

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

2) Zagon prometheusa s konfiguracijo

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

3) Dodajanje prikaza v Grafano

Vse je bilo kar preprosto in banalno, dokler ni prišel trenutek, ko smo morali spremljati baze, ki se nahajajo ob nas v imenskem prostoru (da, to je slabo, nihče tako ne dela, a včasih se zgodi).

Kako to deluje?

Poleg poda s postgres in samega prometheusa potrebujemo še eno entiteto — exporter.

Exporter v splošnem pomenu je agent, ki zbira metrike iz aplikacije ali celo strežnika. Za postgres exporter, napisan v Go, deluje na principu izvajanja SQL skript znotraj baze in nato prometheus pobira pridobljene rezultate. To prav tako omogoča širitev zbranih metrik, če dodamo svoje.

Delo upravljamo na naslednji način (primer deployment.yaml, brez obveznosti):


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

Potrebovali smo tudi storitev in imidž stream.

Po implementaciji si želimo, da se vse entitete lahko vidijo med seboj.

V konfiguracijo prometheusa dodamo takšen kos:

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

In tu je vse zaživelo, ostalo je le še, da vse to dodamo v Grafano in uživamo v rezultatu.

Poleg možnosti dodajanja svojih poizvedb lahko v prometheusu spremenite nastavitve za zbiranje bolj ciljno usmerjenih potrebnih metrik.

Na podoben način je bilo storjeno za:

  • Kafka
  • Elasticsearch
  • Mongo

P.S. Vsi podatki o imenih, vratih in ostalem so izmišljeni in ne nosijo nobenih informacij.

izvorna koda
Seznam različnih izvoznikov

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster