Overvågning og logning af eksterne tjenester til Kubernetes-klyngen

Overvågning og logning af eksterne tjenester til Kubernetes-klyngen

Held og lykke til alle.

Jeg har ikke fundet en generaliseret vejledning online om logning og indsamling af metrics fra tredjepartstjenester i systemer implementeret i Kubernetes. Jeg poster min løsning. Denne artikel antager, at du allerede har en fungerende Prometheus og andre tjenester. Som et eksempel på en datakilde til en ekstern stateful service vil der blive brugt et DBMS PostgreSQL i en beholder Docker. Virksomheden bruger en pakkehåndtering Helm, nedenfor i teksten vil der være eksempler på det. For hele løsningen er vi ved at udarbejde vores eget diagram, som inkluderer indlejrede diagrammer over alle de anvendte tjenester.

Logning

Mange virksomheder bruger en stak af teknologier til at indsamle, se og centralisere logfiler Elasticsearch + Logstash + Kibana, forkortet til ELK. I vores tilfælde er der ingen grund til at indeksere indholdet, og jeg brugte en mere letvægts Loke. Den er tilgængelig som en Helm-pakke, vi tilføjede den som et underdiagram ved at ændre værdierne for ingress og pv, så de passer til vores system.

værdier.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"

At sende logfiler til en instans Loke brug Loki Docker Logging Driver.

Du skal installere denne tilføjelse på alt Docker værter, som du ønsker at modtage logfiler fra. Der er flere måder at fortælle dæmonen, hvordan man bruger polstringen. Jeg vælger driveren i yaml Docker komponere, som er en del af Ansible spillebog.

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

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

Metrics

Metrics indsamles fra PostgreSQL vha postgres_eksportør for Prometheus. Fortsættelse af ovenstående fil Ansible spillebog.

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

For større klarhed vil vi skrive navnene på eksterne stateful-tjenester ved hjælp af 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 }}

Konfiguration af Prometheus til at modtage postgres_exporter-data udføres ved at redigere værdier i underdiagrammet.

værdier.yaml

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

For at visualisere de modtagne data skal du installere det relevante Dashboard i
grafana og konfigurere datakilder. Dette kan også gøres gennem værdier i Grafana-underdiagrammet.

Hvad det ser ud til
Overvågning og logning af eksterne tjenester til Kubernetes-klyngen

Jeg håber, at denne korte artikel hjalp dig med at forstå hovedideerne bag denne løsning og sparede dig tid, når du opsatte overvågning og logning af eksterne tjenester til Loki/Prometheus i en Kubernetes-klynge.

Kilde: www.habr.com

Tilføj en kommentar