Monitorování a protokolování externích služeb do clusteru Kubernetes

Monitorování a protokolování externích služeb do clusteru Kubernetes

Dobré pro všechny.

Na internetu jsem nenašel zobecněného průvodce protokolováním a shromažďováním metrik ze služeb třetích stran do systémů nasazených v Kubernetes. Posílám své řešení. Tento článek předpokládá, že již máte práci Prometheus a další služby. Jako příklad zdroje dat pro externí stavovou službu bude použit DBMS PostgreSQL v kontejneru přístavní dělník. Společnost používá správce balíčků Kormidlo, níže v textu na to budou příklady. Pro celé řešení připravujeme vlastní graf, který obsahuje vnořené grafy všech využívaných služeb.

Protokolování

Mnoho společností používá ke shromažďování, prohlížení a centralizaci protokolů řadu technologií Elastickýsearch + Logstash + kibana, zkráceně ELK. V našem případě není potřeba obsah indexovat a použil jsem odlehčenější Loki. Je k dispozici jako balíček Helm, přidali jsme jej jako podkartu změnou hodnot pro ingress a pv, aby vyhovovaly našemu systému.

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

Chcete-li odeslat protokoly do instance Loki použití Ovladač protokolování Loki Docker.

Tento doplněk musíte nainstalovat na všechno přístavní dělník hostitelů, od kterých chcete přijímat protokoly. Existuje několik způsobů, jak sdělit démonovi, jak používat výplň. Vyberu ovladač v yaml Docker Compose, která je součástí Možná playbook.

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

kde loki_url: kube-loki.example.domain/loki/api/v1/push

Metriky

Metriky se shromažďují z PostgreSQL pomocí postgres_exporter pro Prometheus. Pokračování výše uvedeného souboru Možná playbook.

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

Pro větší přehlednost budeme názvy externích stavových služeb psát pomocí 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 }}

Konfigurace Prometheus pro příjem dat postgres_exporter se provádí úpravou hodnot v podgrafu.

hodnoty.yaml

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

Pro vizualizaci přijatých dat nainstalujte příslušný Dashboard
grafana a konfigurovat zdroje dat. To lze také provést prostřednictvím hodnot v podgrafu Grafana.

Jak to vypadá
Monitorování a protokolování externích služeb do clusteru Kubernetes

Doufám, že vám tento krátký článek pomohl pochopit hlavní myšlenky tohoto řešení a ušetřil vám čas při nastavování monitorování a protokolování externích služeb pro Loki/Prometheus v clusteru Kubernetes.

Zdroj: www.habr.com

Přidat komentář