เด’เดฐเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดฌเดพเดนเตเดฏ เดธเต‡เดตเดจเด™เตเด™เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฒเต‹เด—เต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด’เดฐเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดฌเดพเดนเตเดฏ เดธเต‡เดตเดจเด™เตเด™เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฒเต‹เด—เต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เด†เดถเด‚เดธเด•เตพ เดจเต‡เดฐเตเดจเตเดจเต.

เดฎเต‚เดจเตเดจเดพเด‚ เด•เด•เตเดทเดฟ เดธเต‡เดตเดจเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฟเดจเตเดฏเดธเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดฎเต†เดŸเตเดฐเดฟเด•เตโ€Œเดธเต เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด“เตบเดฒเตˆเดจเดฟเตฝ เด’เดฐเต เดธเดพเดฎเดพเดจเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเดšเตเดš เด—เตˆเดกเต เดžเดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ. เด•เตเดฌเต‡เตผเดจเต†เดฑเตเดฑเต. เดžเดพเตป เดŽเดจเตเดฑเต† เดชเดฐเดฟเดนเดพเดฐเด‚ เดชเต‹เดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เด’เดฐเต เดœเต‹เดฒเดฟ เด‰เดฃเตเดŸเต†เดจเตเดจเต เดˆ เดฒเต‡เด–เดจเด‚ เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต เดชเตเดฐเต‡เดพเดฎเดฟเดคเตเดคเดฟเดฏเดธเต เด•เต‚เดŸเดพเดคเต† เดฎเดฑเตเดฑเต เดธเต‡เดตเดจเด™เตเด™เดณเตเด‚. เด’เดฐเต เดฌเดพเดนเตเดฏ เดธเตโ€Œเดฑเตเดฑเต‡เดฑเตเดฑเตโ€Œเดซเตเตพ เดธเต‡เดตเดจเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เด’เดฐเต เดกเดพเดฑเตเดฑ เด‰เดฑเดตเดฟเดŸเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฏเดฟ, เด’เดฐเต DBMS เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ PostgreSQL เดŽเดจเตเดจเต€ เด’เดฐเต เด•เดฃเตเดŸเต†เดฏเตเดจเดฑเดฟเตฝ เดกเต‹เด•เตเด•เตผ. เด•เดฎเตเดชเดจเดฟ เด’เดฐเต เดชเดพเด•เตเด•เต‡เดœเต เดฎเดพเดจเต‡เดœเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดนเต†เตฝเด‚, เดคเดพเดดเต† เดตเดพเดšเด•เดคเตเดคเดฟเตฝ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเด•เตเด‚. เดฎเตเดดเตเดตเตป เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเดฟเดจเตเด‚, เด‰เดชเดฏเต‹เด—เดฟเดšเตเดš เดŽเดฒเตเดฒเดพ เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เดจเต†เดธเตเดฑเตเดฑเดกเต เดšเดพเตผเดŸเตเดŸเตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจ เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดšเดพเตผเดŸเตเดŸเต เดžเด™เตเด™เตพ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเด•เดฏเดพเดฃเต.

เดฒเต‹เด—เดฟเด‚เด—เต

เดฒเต‹เด—เตเด•เตพ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเตเด‚ เด•เต‡เดจเตเดฆเตเดฐเต€เด•เตƒเดคเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเดฒ เด•เดฎเตเดชเดจเดฟเด•เดณเตเด‚ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเด•เดณเตเดŸเต† เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเดธเต†เดฐเตเดšเตเดšเต + Logstash + เด•เดฟเดฌเดพเดจ, ELK เดŽเดจเตเดจเต เดšเตเดฐเตเด•เตเด•เดฟ. เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด‰เดณเตเดณเดŸเด•เตเด•เด‚ เดธเต‚เดšเดฟเด•เดฏเดฟเดฒเดพเด•เตเด•เต‡เดฃเตเดŸ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ, เดžเดพเตป เด•เต‚เดŸเตเดคเตฝ เดญเดพเดฐเด‚ เด•เตเดฑเดžเตเดžเดคเดพเดฃเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดคเต เดฒเต‹เดฏเดฟ. เด‡เดคเต เด’เดฐเต เดนเต†เตฝเด‚ เดชเดพเด•เตเด•เต‡เดœเดพเดฏเดฟ เดฒเดญเตเดฏเดฎเดพเดฃเต, เดžเด™เตเด™เดณเตเดŸเต† เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‡เตปเด—เตเดฐเต†เดธเต, เดชเดฟเดตเดฟ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเดฟเด•เตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เตพ เด‡เดคเต เด’เดฐเต เด‰เดชเดšเดพเตผเดŸเตเดŸเดพเดฏเดฟ เดšเต‡เตผเดคเตเดคเต.

เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ.yaml

ingress:
  enabled: true
  annotations:
     kubernetes.io/ingress.class: nginx
  hosts:
    - host: kube-loki.example.domain
      paths: 
        - /
  tls: []

....

persistence:
  type: pvc
  enabled: true
  accessModes:
    - ReadWriteOnce
  size: 100Gi
  finalizers:
    - kubernetes.io/pvc-protection
  existingClaim: "pv-loki"

เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เดพเตป เดฒเต‹เดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• เดฒเต‹เด•เดฟ เดกเต‹เด•เตเด•เตผ เดฒเต‹เด—เดฟเด‚เด—เต เดกเตเดฐเตˆเดตเตผ.

เดŽเดฒเตเดฒเดพเดคเตเดคเดฟเดฒเตเด‚ เดจเดฟเด™เตเด™เตพ เดˆ เด†เดกเต-เด“เตบ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดฃเด‚ เดกเต‹เด•เตเด•เตผ เดจเดฟเด™เตเด™เตพ เดฒเต‹เด—เตเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจ เดนเต‹เดธเตเดฑเตเดฑเตเด•เตพ. เดชเดพเดกเดฟเด‚เด—เต เดŽเด™เตเด™เดจเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดกเต†เดฎเดจเต‹เดŸเต เดชเดฑเดฏเดพเตป เดจเดฟเดฐเดตเดงเดฟ เดฎเดพเตผเด—เด™เตเด™เดณเตเดฃเตเดŸเต. เดžเดพเตป yaml เตฝ เดกเตเดฐเตˆเดตเตผ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเต เดกเต‹เด•เตเด•เตผ เดฐเดšเดฟเด•เตเด•เตเด•, เดเดคเต เดญเดพเด—เดฎเดพเดฃเต เด…เดธเดพเดงเตเดฏเด‚ เดชเตเดฒเต‡เดฌเตเด•เตเด•เต.

postgres.yaml

    - name: Run containers
      docker_compose:
        project_name: main-postgres
        definition:
          version: '3.7'
          services:
            p:
              image: "{{ postgres_version }}"
              container_name: postgresql
              restart: always
              volumes:
                - "{{ postgres_dir }}/data:/var/lib/postgresql/data"
                - "{{ postgres_dir }}/postgres_init_scripts:/docker-entrypoint-initdb.d"
              environment:
                POSTGRES_PASSWORD: {{ postgres_pass }}
                POSTGRES_USER: {{ postgres_user }}
              ports:
                - "{{ postgres_ip }}:{{ postgres_port }}:5432"
              logging:
                driver: "loki"
                options:
                  loki-url: "{{ loki_url }}"
                  loki-batch-size: "{{ loki_batch_size }}"
                  loki-retries: "{{ loki_retries }}"
...

เดŽเดตเดฟเดŸเต† loki_url: kube-loki.example.domain/loki/api/v1/push

เดฎเต†เดŸเตเดฐเดฟเด•เตเดธเต

PostgreSQL-เตฝ เดจเดฟเดจเตเดจเต เดฎเต†เดŸเตเดฐเดฟเด•เตโ€Œเดธเต เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเต postgres_exporter เดตเต‡เดฃเตเดŸเดฟ เดชเตเดฐเต‡เดพเดฎเดฟเดคเตเดคเดฟเดฏเดธเต. เดฎเตเด•เดณเดฟเดฒเต† เดซเดฏเดฒเดฟเดจเตเดฑเต† เดคเตเดŸเตผเดšเตเดš เด…เดธเดพเดงเตเดฏเด‚ เดชเตเดฒเต‡เดฌเตเด•เตเด•เต.

postgres.yaml

...
            pexp:
              image: "wrouesnel/postgres_exporter"
              container_name: pexporter
              restart: unless-stopped
              environment:
                DATA_SOURCE_NAME: "postgresql://{{ postgres_user }}:{{ postgres_pass }}@p:5432/postgres?sslmode=disable"
              ports:
                - "{{ postgres_ip }}:{{ postgres_exporter_port }}:9187"
              logging:
                driver: "json-file"
                options:
                  max-size: "5m"
...

เด•เต‚เดŸเตเดคเตฝ เดตเตเดฏเด•เตเดคเดคเดฏเตเด•เตเด•เดพเดฏเดฟ, เดŽเตปเดกเต เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดฌเดพเดนเตเดฏ เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเตเดซเตเตพ เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต† เดชเต‡เดฐเตเด•เตพ เดŽเดดเตเดคเตเด‚.

postgres-service.yaml

apiVersion: v1
kind: Endpoints
metadata:
  name: postgres-exporter
subsets:
  - addresses:
      - ip: {{ .Values.service.postgres.ip }}
    ports:
      - port: {{ .Values.service.postgres.port }}
        protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-exporter
  labels:
    chart:  "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
spec:
  ports:
    - protocol: TCP
      port: {{ .Values.service.postgres.port }}
      targetPort: {{ .Values.service.postgres.port }}

เดชเต‹เดธเตเดฑเตเดฑเตโ€Œเด—เตเดฐเต†เดธเต_เดŽเด•เตโ€Œเดธเตโ€Œเดชเต‹เตผเดŸเตเดŸเตผ เดกเดพเดฑเตเดฑ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดชเตเดฐเต‹เดฎเดฟเดคเตเดฏเต‚เดธเดฟเดจเต† เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดธเดฌเตโ€ŒเดšเดพเตผเดŸเตเดŸเดฟเดฒเต† เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†เดฏเดพเดฃเต.

เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ.yaml

scrape_configs:
...
  - job_name: postgres-exporter
    static_configs:
      - targets: 
         - postgres-exporter.applicationnamespace.svc.cluster.local:9187
        labels:
          alias: postgres
...

เดฒเดญเดฟเดšเตเดš เดกเดพเดฑเตเดฑ เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด‰เดšเดฟเดคเดฎเดพเดฏ เดกเดพเดทเตเดฌเต‹เตผเดกเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•
เด—เตเดฐเดพเดซเดพเดจ เด•เต‚เดŸเดพเดคเต† เดกเดพเดฑเตเดฑ เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•. เด—เตเดฐเดพเดซเดพเดจ เด‰เดชเดšเดพเตผเดŸเตเดŸเดฟเดฒเต† เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเดฟเดฒเต‚เดŸเต†เดฏเตเด‚ เด‡เดคเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚.

เด…เดคเต เด•เดพเดดเตเดšเตเดšเดฏเตเด•เต เดŽเดจเตเดคเต เดชเต‡เดพเดฒเต†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚
เด’เดฐเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดฌเดพเดนเตเดฏ เดธเต‡เดตเดจเด™เตเด™เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฒเต‹เด—เต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดˆ เดšเต†เดฑเดฟเดฏ เดฒเต‡เด–เดจเด‚ เดˆ เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเดฟเดจเต เดชเดฟเดจเตเดจเดฟเดฒเต† เดชเตเดฐเดงเดพเดจ เด†เดถเดฏเด™เตเด™เตพ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดฒเต‹เด•เตเด•เดฟ/เดชเตเดฐเต‹เดฎเดฟเดคเตเดฏเต‚เดธเดฟเดจเดพเดฏเดฟ เดฌเดพเดนเตเดฏ เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต† เดจเดฟเดฐเต€เด•เตเดทเดฃเดตเตเด‚ เดฒเต‹เด—เดฟเด‚เด—เตเด‚ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเดฎเดฏเด‚ เดฒเดพเดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเตเดตเต†เดจเตเดจเต เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•