Маніторынг postgres усярэдзіне Openshift

Добрага часу сутак жыхары Хабра!

Сёння жадаю распавесці вам, як нам вельмі жадалася маніторыць postgres і яшчэ пару сутнасцяў усярэдзіне кластара OpenShift і як мы гэта зрабілі.

На ўваходзе мелі:

  • Пераключэнне
  • шлем
  • Праметэй


Для працы з java дадаткам усё было даволі проста і празрыста, а калі быць дакладней, то:

1) Даданне ў build.gradle

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

2) Запуск prometheus з канфігурацыяй

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

3) Даданне адлюстравання ў Grafana

Усё даволі проста і празаічна было датуль, пакуль не наступіў момант маніторыць базы, якія знаходзяцца ў нас побач у неймспейсе (так, гэта дрэнна, ніхто так не робіць, але бывае рознае).

Як гэта працуе?

Акрамя пода з postgres і ўласна prometheus нам неабходна яшчэ адна сутнасць - exporter.

Экспарцёр у адцягненым паняцці гэта агент, які збірае метрыкі ў дадатку ці нават сервера. Для postgres exporter напісаны на Go, працуе па прынцыпе запуску ўнутры sql скрыптоў на базе і далей атрыманыя вынікі забірае prometheus. Гэта гэтак жа дазваляе пашыраць збіраныя метрыкі, дадаючы свае.

Дэплоім яго вось такім чынам ( прыклад deployment.yaml, ні да чаго не які абавязвае):


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

Гэтак жа для яго спатрэбіўся сэрвіс і імэйджстрым

Пасля дэплою нам вельмі хочацца, каб усе адно аднаго бачылі.

Дадаем у канфіг праметэя такі кавалачак:

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

І вось тут тое ўсё зарабіла, засталося дадаць усё гэта дабро ў графану і атрымліваць асалоду ад вынікам.

Акрамя магчымасці дадаваць свае запыты, у prometheus можна змяняць наладу, збіраючы больш таргетавана неабходныя метрыкі.

Аналагічным спосабам было зроблена для:

  • Кафка
  • Elasticsearch
  • Монго

PS Усе дадзеныя па імёнах, партам і астатняму ўзяты са столі і не нясуць ніякай інфармацыі.

Карысныя спасылкі:
Спіс розных экспарцёраў

Крыніца: habr.com

Дадаць каментар