Monitorování a logování externích služeb v Kubernetes clustoru

Monitorování a logování externích služeb v Kubernetes clustoru

Dobrý den všem.

Nenašel jsem na internetu obecného průvodce pro logování a sběr metrik z externích služeb do systémů nasazených v Kubernetes. Publikuji své řešení. Tento článek předpokládá, že již máte funkční Prometheus a další služby. Jako příklad zdroje dat externího stateful-servisu bude používána databáze PostgreSQL v kontejneru Docker. Ve firmě používáme balíčkovací manažer Helm, níže budou příklady v něm. Pro celé řešení připravujeme vlastní chart, který obsahuje vložené charty všech používaných služeb.

Logování

Mnoho firem používá pro sběr a prohlížení a centralizaci logů technologický stack Elasticsearch + Logstash + kibana, zkráceně ELK. V našem případě není potřeba indexovat obsah, a já jsem použil lehčí Loki. Je dostupný ve formě balíčku Helm, přidali jsme jej jako subchart a změnili hodnoty pro ingress a pv pro náš systém.

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

Pro odesílání logů na instanci Loki VPS KVM Loki Docker Logging Driver.

Je nutné nainstalovat toto rozšíření na všechny Docker servery, ze kterých chcete získávat logy. Existuje několik způsobů, jak říct démonovi, jak používat rozšíření. Výběr ovladače provádím v yaml Docker Compose, který je součástí Ansible playbooku.

postgres.yaml

    - name: Spustit kontejnery
      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

Sběr metrik z PostgreSQL pomocí postgres_exporter pro Prometheus. Pokračování výše uvedeného souboru Ansible playbooku.

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 lepší přehled názvů externích stateful služeb je napišme je prostřednictvím 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 }}

Nastavení Promethea pro zajištění dat postgres_exporter se provádí úpravou values v subchartu.

values.yaml

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

Pro vizualizaci získaných dat nainstalujte odpovídající Dashboard v
Grafana a nastavte datové zdroje. To lze také provést prostřednictvím values v subchartu Grafana.

Jak to vypadá
Monitorování a logování externích služeb v Kubernetes clustoru

Doufám, že vám tento stručný článek pomohl pochopit základní myšlenky obsažené v tomto řešení a ušetří vám čas při nastavování monitorování a logování externích služeb pro Loki/Prometheus v Kubernetes clusterech.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster