Monitoring postgres binnen Openshift

Goeie dei ynwenners fan Habr!

Hjoed wol ik jo fertelle hoe't wy postgres en in pear oare entiteiten yn 'e OpenShift-kluster wirklik wolle kontrolearje en hoe't wy it diene.

By de yngong hienen se:

  • Openshift
  • Roer
  • Prometheus


Om te wurkjen mei in Java-applikaasje wie alles frij ienfâldich en transparant, of om krekter te wêzen:

1) Tafoegje oan build.gradle

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

2) Run prometheus mei konfiguraasje

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

3) In werjefte tafoegje oan Grafana

Alles wie frij ienfâldich en prozaïsk oant it momint kaam om de bases te kontrolearjen dy't tichtby yn ús nammeromte lizze (ja, dit is min, gjinien docht dit, mar der bart ferskate dingen).

Hoe wurket it?

Neist de pod mei postgres en prometheus sels, hawwe wy noch ien entiteit nedich - eksporteur.

In eksporteur yn in abstrakt konsept is in agint dy't metriken sammelet fan in applikaasje of sels in server. Foar postgres-eksporteur is it skreaun yn Go, it wurket op it prinsipe fan it útfieren fan SQL-skripts yn 'e databank en dan nimt prometheus de resultaten krigen. Hjirmei kinne jo ek de sammele metriken útwreidzje troch jo eigen ta te foegjen.

Litte wy it sa ynsette (foarbyld deployment.yaml, net-binend):


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

It frege ek in tsjinst en imagestream

Nei ynset wolle wy echt dat elkenien inoar sjocht.

Foegje it folgjende stik ta oan de Prometheus-konfiguraasje:

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

En doe wurke alles, alles wat oerbliuwt is al dit spul oan 'e grafana ta te foegjen en genietsje fan it resultaat.

Neist de mooglikheid om jo eigen fragen ta te foegjen, kinne jo de ynstellings yn prometheus feroarje, mear rjochte metriken sammelje.

Dit waard dien op in fergelykbere manier foar:

  • Kafka
  • Elastyskesearch
  • Mongo

PS Alle gegevens oer nammen, havens en de rest wurdt út 'e loft helle en befettet gjin ynformaasje.

Nuttige links:
List fan ferskate eksporteurs

Boarne: www.habr.com

Add a comment