Overvåking og logging av eksterne tjenester til Kubernetes-klyngen

Overvåking og logging av eksterne tjenester til Kubernetes-klyngen

Lykke til alle sammen.

Jeg har ikke funnet en generell veiledning på nettet om logging og innsamling av beregninger fra tredjepartstjenester til systemer som er distribuert i Kubernetes. Jeg legger ut løsningen min. Denne artikkelen forutsetter at du allerede har en fungerende Prometheus og andre tjenester. Som et eksempel på en datakilde for en ekstern stateful tjeneste vil en DBMS bli brukt PostgreSQL i en beholder Docker. Bedriften bruker en pakkebehandler Helm, nedenfor i teksten vil det være eksempler på den. For hele løsningen utarbeider vi vårt eget diagram, som inkluderer nestede diagrammer over alle tjenestene som brukes.

Hogst

Mange bedrifter bruker en haug med teknologier for å samle inn, vise og sentralisere logger Elasticsearch + Logstash + kibana, forkortet til ELK. I vårt tilfelle er det ikke nødvendig å indeksere innholdet, og jeg brukte en mer lettvekter Loki. Den er tilgjengelig som en Helm-pakke, vi la den til som et underdiagram ved å endre verdiene for ingress og pv for å passe til systemet vårt.

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

For å sende logger til en forekomst Loki bruk Loki Docker Logging Driver.

Du må installere dette tillegget på alt Docker verter du ønsker å motta logger fra. Det er flere måter å fortelle demonen hvordan den skal bruke polstringen. Jeg velger driveren i yaml Docker komponere, som er en del Ansible lekebok.

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

Beregninger

Beregninger samles inn fra PostgreSQL ved hjelp av postgres_exporter for Prometheus. Fortsettelse av filen ovenfor Ansible lekebok.

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 klarhet vil vi skrive navnene på eksterne stateful tjenester ved hjelp av 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 }}

Konfigurering av Prometheus for å motta postgres_exporter-data gjøres ved å redigere verdier i underdiagrammet.

verdier.yaml

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

For å visualisere de mottatte dataene, installer passende Dashboard i
grafana og konfigurere datakilder. Dette kan også gjøres gjennom verdier i Grafana-underdiagrammet.

Hvordan ser det ut?
Overvåking og logging av eksterne tjenester til Kubernetes-klyngen

Jeg håper denne korte artikkelen hjalp deg med å forstå hovedideene bak denne løsningen og sparte deg for tid når du satte opp overvåking og logging av eksterne tjenester for Loki/Prometheus i en Kubernetes-klynge.

Kilde: www.habr.com

Legg til en kommentar