Openshift рднрд┐рддреНрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджреИ

рд╢реБрдн рджрд┐рди, рд╣рдмреНрд░реБрдХрд╛ рдмрд╛рд╕рд┐рдиреНрджрд╛рд╣рд░реВ!

рдЖрдЬ рдо рддрдкрд╛рдИрд▓рд╛рдИ рдмрддрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рд╣рд╛рдореА рдХрд╕рд░реА рд╡рд╛рд╕реНрддрд╡рдореИ postgres рд░ OpenShift рдХреНрд▓рд╕реНрдЯрд░ рднрд┐рддреНрд░рдХрд╛ рдЕрдиреНрдп рд╕рдВрд╕реНрдерд╛рд╣рд░реВрдХреЛ рдПрдХ рдЬреЛрдбреАрд▓рд╛рдИ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рд░ рд╣рд╛рдореАрд▓реЗ рдпреЛ рдХрд╕рд░реА рдЧрд░реНрдпреМрдВред

рдкреНрд░рд╡реЗрд╢рджреНрд╡рд╛рд░рдорд╛ рддрд┐рдиреАрд╣рд░реВ рдерд┐рдП:

  • рдУрдкрдирд╢рд┐рдлреНрдЯ
  • рд╣реЗрд▓рдореЗрдЯ
  • Prometheus


рдЬрд╛рднрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди, рд╕рдмреИ рдХреБрд░рд╛ рдПрдХрджрдо рд╕рд░рд▓ рд░ рдкрд╛рд░рджрд░реНрд╢реА рдерд┐рдпреЛ, рд╡рд╛ рдердк рд╕рдЯреАрдХ рд╣реБрди:

1) build.gradle рдорд╛ рдердкреНрджреИ

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

реи) рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╕рд╛рде рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН

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

3) Grafana рдорд╛ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдердкреНрджреИ

рд╣рд╛рдореНрд░реЛ рдиреЗрдорд╕реНрдкреЗрд╕рдорд╛ рдирдЬрд┐рдХреИ рдЕрд╡рд╕реНрдерд┐рдд рдЖрдзрд╛рд░рд╣рд░реВ рдЕрдиреБрдЧрдорди рдЧрд░реНрдиреЗ рдХреНрд╖рдг рдирдЖрдПрд╕рдореНрдо рд╕рдмреИ рдХреБрд░рд╛ рдПрдХрджрдо рд╕рд░рд▓ рд░ рдкреНрд░реЛрд╕рд╛рдЗрдХ рдерд┐рдпреЛ (рд╣реЛ, рдпреЛ рдЦрд░рд╛рдм рдЫ, рдХрд╕реИрд▓реЗ рдпреЛ рдЧрд░реНрджреИрди, рддрд░ рдлрд░рдХ рдЪреАрдЬрд╣рд░реВ рд╣реБрдиреНрдЫрдиреН)ред

рдпрд╕реНрд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ?

рдкреЛрд╖реНрдЯрдЧреНрд░реЗрд╕ рд░ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕рдХреЛ рд╕рд╛рде рдкреЛрдбрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рд╛рдореАрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдПрдХрд╛рдЗ рдЪрд╛рд╣рд┐рдиреНрдЫ - рдирд┐рд░реНрдпрд╛рддрдХрд░реНрддрд╛ред

рдПрдХ рдЕрдореВрд░реНрдд рдЕрд╡рдзрд╛рд░рдгрд╛ рдорд╛ рдПрдХ рдирд┐рд░реНрдпрд╛рддрдХ рдПрдХ рдПрдЬреЗрдиреНрдЯ рд╣реЛ рдЬрд╕рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛ рд╕рд░реНрднрд░рдмрд╛рдЯ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрджрдЫред рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдирд┐рд░реНрдпрд╛рддрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рдпреЛ Go рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ, рдпрд╕рд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕ рднрд┐рддреНрд░ SQL рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдЪрд▓рд╛рдЙрдиреЗ рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рд▓рд┐рдиреНрдЫред рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рддрдкрд╛рдЗрдБрдХреЛ рдЖрдлреНрдиреИ рдердкреЗрд░ рд╕рдВрдХрд▓рд┐рдд рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рдпрд╕рд▓рд╛рдИ рдпрд╕рд░реА рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реМрдВ (рдЙрджрд╛рд╣рд░рдг deployment.yaml, non-binding):


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

рдпрд╕рд▓рд╛рдИ рд╕реЗрд╡рд╛ рд░ рдЫрд╡рд┐ рдкреНрд░рд╡рд╛рд╣ рдкрдирд┐ рдЖрд╡рд╢реНрдпрдХ рдерд┐рдпреЛ

рддреИрдирд╛рддреА рдкрдЫрд┐, рд╣рд╛рдореА рд╡рд╛рд╕реНрддрд╡рдореИ рд╕рдмреИрд▓реЗ рдПрдХрдЕрд░реНрдХрд╛рд▓рд╛рдИ рд╣реЗрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред

Prometheus рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдирд┐рдореНрди рдЯреБрдХреНрд░рд╛ рдердкреНрдиреБрд╣реЛрд╕реН:

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

рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╕рдмреИ рдХреБрд░рд╛рд▓реЗ рдХрд╛рдо рдЧрд░реНрдпреЛ, рдпреЛ рд╕рдмреИ рдЪреАрдЬрд╣рд░реВ рдЧреНрд░рд╛рдлрд╛рдирд╛рдорд╛ рдердкреНрди рд░ рдкрд░рд┐рдгрд╛рдордХреЛ рдЖрдирдиреНрдж рд▓рд┐рди рдмрд╛рдБрдХреА рдЫред

рддрдкрд╛рдЗрдБрдХреЛ рдЖрдлреНрдиреИ рдкреНрд░рд╢реНрдирд╣рд░реВ рдердкреНрдиреЗ рдХреНрд╖рдорддрд╛рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рддрдкрд╛рдЗрдБ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕рдорд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдердк рд▓рдХреНрд╖рд┐рдд рдореЗрдЯреНрд░рд┐рдХрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрджреИред

рдпреЛ рдПрдХ рд╕рдорд╛рди рддрд░рд┐рдХрд╛рдорд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ:

  • рдХрд╛рдлрдХрд╛
  • Elasticsearch
  • рдореЛрдиреНрдЧреЛ

P.S. рдирд╛рдо, рдкреЛрд░реНрдЯ рд░ рдмрд╛рдБрдХреА рд╕рдмреИ рдбрд╛рдЯрд╛ рд╣рд╛рд╡рд╛рдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рд╣реЛ рд░ рдХреБрдиреИ рдЬрд╛рдирдХрд╛рд░реА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИрдиред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХрд╣рд░реВ:
рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрдпрд╛рддрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди