Следење и евидентирање на надворешни услуги во кластерот Kubernetes

Следење и евидентирање на надворешни услуги во кластерот Kubernetes

Со среќа на сите.

Не најдов генерализиран водич на интернет за најавување и собирање метрики од услуги од трети страни во системи распоредени во Кубернети. Го објавувам моето решение. Оваа статија претпоставува дека веќе имате работа Прометеј и други услуги. Како пример за извор на податоци за надворешна државна услуга, ќе се користи DBMS PostgreSQL во контејнер пристанишен работник. Компанијата користи менаџер на пакети кормилото, подолу во текстот ќе има примери на него. За целото решение подготвуваме сопствена табела, која вклучува вгнездени графикони на сите користени услуги.

Сеча

Многу компании користат куп технологии за собирање, прегледување и централизирање на дневниците Еластична пребарување + Логсташ + кибана, скратено како ЕЛК. Во нашиот случај, нема потреба да се индексира содржината и користев повеќе лесен Локи. Достапно е како пакет Helm, го додадовме како поттабела со менување на вредностите за влез и pv за да одговараат на нашиот систем.

вредности.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"

За да испратите дневници на пример Локи користат Возач за сеча на Loki Docker.

Мора да го инсталирате овој додаток на сè пристанишен работник хостови од кои сакате да примате дневници. Постојат неколку начини да му кажете на демонот како да го користи подлогата. Го избирам драјверот во yaml Докер Компонирај, кој е дел Ansible игротека.

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 за Прометеј. Продолжување на горната датотека Ansible игротека.

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

За поголема јасност, ќе ги напишеме имињата на надворешните државни услуги користејќи Endpoints.

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

Конфигурирањето на Prometheus да прима податоци за postgres_exporter се врши со уредување на вредностите во потграфот.

вредности.yaml

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

За да ги визуелизирате примените податоци, инсталирајте ја соодветната табла
Графана и конфигурирајте ги изворите на податоци. Ова може да се направи и преку вредностите во потграфот Графана.

Како изгледа
Следење и евидентирање на надворешни услуги во кластерот Kubernetes

Се надевам дека оваа кратка статија ви помогна да ги разберете главните идеи зад ова решение и ви заштеди време кога поставувате следење и евидентирање на надворешни услуги за Loki/Prometheus во кластерот Kubernetes.

Извор: www.habr.com

Додадете коментар