เช“เชชเชจเชถเชฟเชซเซเชŸเชจเซ€ เช…เช‚เชฆเชฐ เชชเซ‹เชธเซเชŸเช—เซเชฐเชฟเชธเชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเซเช‚

เชถเซเชญ เชฆเชฟเชตเชธ, เชนเซ‡เชฌเชฐเชจเชพ เชฐเชนเซ‡เชตเชพเชธเซ€เช“!

เช†เชœเซ‡ เชนเซเช‚ เชคเชฎเชจเซ‡ เชœเชฃเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เช…เชฎเซ‡ เช–เชฐเซ‡เช–เชฐ เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชธ เช…เชจเซ‡ เช“เชชเชจเชถเชฟเชซเซเชŸ เช•เซเชฒเชธเซเชŸเชฐเชจเซ€ เช…เช‚เชฆเชฐเชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เช…เชจเซเชฏ เชธเช‚เชธเซเชฅเชพเช“เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเชตเชพ เชฎเชพเช—เซ€เช เช›เซ€เช เช…เชจเซ‡ เช…เชฎเซ‡ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเซเชฏเซเช‚.

เชชเซเชฐเชตเซ‡เชถเชฆเซเชตเชพเชฐ เชชเชฐ เชคเซ‡เชฎเชจเซ€ เชชเชพเชธเซ‡ เชนเชคเซเช‚:

  • เช“เชชเชจเชถเชฟเชซเซเชŸ
  • เชนเซ‡เชฒเซเชฎ
  • เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ


เชœเชพเชตเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฌเชงเซเช‚ เชเช•เชฆเชฎ เชธเชฐเชณ เช…เชจเซ‡ เชชเชพเชฐเชฆเชฐเซเชถเช• เชนเชคเซเช‚, เช…เชฅเชตเชพ เชตเชงเซ เชšเซ‹เช•เซเช•เชธ เชฌเชจเชตเชพ เชฎเชพเชŸเซ‡:

1) build.gradle เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเซเช‚

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

2) เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ เชšเชฒเชพเชตเซ‹

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

3) Grafana เชฎเชพเช‚ เชกเชฟเชธเซเชชเซเชฒเซ‡ เช‰เชฎเซ‡เชฐเชตเซเช‚

เช…เชฎเชพเชฐเชพ เชจเซ‡เชฎเชธเซเชชเซ‡เชธเชฎเชพเช‚ เชจเชœเซ€เช•เชฎเชพเช‚ เช†เชตเซ‡เชฒเชพ เชชเชพเชฏเชพ เชชเชฐ เชจเชœเชฐ เชฐเชพเช–เชตเชพเชจเซ€ เช•เซเชทเชฃ เชจ เช†เชตเซ‡ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชฌเชงเซเช‚ เชเช•เชฆเชฎ เชธเชฐเชณ เช…เชจเซ‡ เช…เชธเซเชชเชทเซเชŸ เชนเชคเซเช‚ (เชนเชพ, เช† เช–เชฐเชพเชฌ เช›เซ‡, เช•เซ‹เชˆ เช† เช•เชฐเชคเซเช‚ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชœเซเชฆเซ€ เชœเซเชฆเซ€ เชตเชธเซเชคเซเช“ เชฅเชพเชฏ เช›เซ‡).

เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡?

เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชธ เช…เชจเซ‡ เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ เชธเชพเชฅเซ‡ เชชเซ‹เชก เช‰เชชเชฐเชพเช‚เชค, เช…เชฎเชจเซ‡ เชเช• เชตเชงเซ เชเชจเซเชŸเชฟเชŸเซ€เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ - เชจเชฟเช•เชพเชธเช•เชพเชฐ.

เช…เชฎเซ‚เชฐเซเชค เช–เซเชฏเชพเชฒเชฎเชพเช‚ เชจเชฟเช•เชพเชธเช•เชพเชฐ เช เชเชœเชจเซเชŸ เช›เซ‡ เชœเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช…เชฅเชตเชพ เชธเชฐเซเชตเชฐเชฎเชพเช‚เชฅเซ€ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชธ เชเช•เซเชธเชชเซ‹เชฐเซเชŸเชฐ เชฎเชพเชŸเซ‡, เชคเซ‡ เช—เซ‹เชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒเซเช‚ เช›เซ‡, เชคเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เช…เช‚เชฆเชฐ SQL เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเชตเชพเชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชค เชชเชฐ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเช›เซ€ เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ เชชเซเชฐเชพเชชเซเชค เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชฒเซ‡ เช›เซ‡. เช† เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเชพ เชชเซ‹เชคเชพเชจเชพ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡ เชเช•เชคเซเชฐเชฟเชค เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธเชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเชตเชพเชจเซ€ เชชเชฃ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเซ€เช (เช‰เชฆเชพเชนเชฐเชฃ 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

เช…เชจเซ‡ เชชเช›เซ€ เชฌเชงเซเช‚ เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚, เชœเซ‡ เชฌเชพเช•เซ€ เช›เซ‡ เชคเซ‡ เช† เชฌเชงเซ€ เชธเชพเชฎเช—เซเชฐเซ€เชจเซ‡ เช—เซเชฐเชพเชซเชจเชพเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเชจเซ‹ เช†เชจเช‚เชฆ เชฎเชพเชฃเชตเชพเชจเซเช‚ เช›เซ‡.

เชคเชฎเชพเชฐเซ€ เชชเซ‹เชคเชพเชจเซ€ เช•เซเชตเซ‡เชฐเซ€เช เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เช‰เชชเชฐเชพเช‚เชค, เชคเชฎเซ‡ เชตเชงเซ เชฒเช•เซเชทเชฟเชค เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€เชจเซ‡, เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธเชฎเชพเช‚ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชฌเชฆเชฒเซ€ เชถเช•เซ‹ เช›เซ‹.

เช† เช† เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เชฐเซ€เชคเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚:

  • เช•เชพเชซเช•เชพ
  • เชธเซเชฅเชฟเชคเชฟเชธเซเชฅเชพเชชเช• เชถเซ‹เชง
  • เชฎเซ‹เช—เซ‹

PS เชจเชพเชฎเซ‹, เชฌเช‚เชฆเชฐเซ‹ เช…เชจเซ‡ เชฌเชพเช•เซ€เชจเซ‹ เชคเชฎเชพเชฎ เชกเซ‡เชŸเชพ เชนเชตเชพเชฎเชพเช‚เชฅเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เช•เซ‹เชˆ เชฎเชพเชนเชฟเชคเซ€ เชจเชฅเซ€.

เช‰เชชเชฏเซ‹เช—เซ€ เชฒเชฟเช‚เช•เซเชธ:
เชตเชฟเชตเชฟเชง เชจเชฟเช•เชพเชธเช•เชพเชฐเซ‹เชจเซ€ เชฏเชพเชฆเซ€

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹