Monitorovanie postgres v Openshift

Dobrý deň, obyvatelia Habra!

Dnes vám chcem povedať, ako sme veľmi chceli monitorovať postgres a ešte niekoľko entít vnútri klastrov OpenShift a ako sme to dosiahli.

Na vstupe sme mali:

  • OpenShift
  • Helm
  • Prometheus


Pre prácu s aplikáciou v jave to bolo celkom jednoduché a prehľadné, a ak to mám byť presnejší, takto:

1) Pridanie do build.gradle

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

2) Spustenie prometheus s konfiguráciou

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

3) Pridanie zobrazenia v Grafana

Všetko bolo celkom jednoduché a prozaické, až kým nenastal okamih monitorovať databázy, ktoré sú vedľa nás v namespaci (áno, to je zlé, nikto tak nerobí, ale stáva sa to).

Ako to funguje?

Okrem podu s postgres a vlastne prometheus potrebujeme ešte jednu entitu - exportér.

Exportér v abstraktnom ponímaní je agent, ktorý zbiera metriky z aplikácie alebo dokonca servera. Exportér pre postgres je napísaný v Go, funguje na princípe spúšťania sql skriptov v databáze a následne získava výsledky, ktoré predáva prometheus. To takisto umožňuje rozširovať zbierané metriky, pridávaním vlastných.

Deployujeme ho takto (príklad deployment.yaml, bez záväzkov):


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

Takisto pre neho potrebujeme službu a image stream.

Po nasadení si veľmi želáme, aby sa všetci videli navzájom.

Pridáme do konfigurácie prometheusa takýto kúsok:

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

A tu to všetko začalo fungovať, zostáva to všetko pridať do Grafany a užívať si výsledok.

Okrem možnosti pridávať vlastné dotazy, v prometheus je možné upravovať nastavenia a zbierať cieľove metriky, ktoré potrebujeme.

Rovnakým spôsobom to bolo urobené pre:

  • Kafka
  • Elasticsearch
  • Mongo

P.S. Všetky údaje o názvoch, portoch a ostatnom sú vymyslené a nemajú žiadnu informačnú hodnotu.

Užitočné odkazy:
Zoznam rôznych exportérov

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster