Övervakning och loggning av externa tjänster till Kubernetes-klustret

Övervakning och loggning av externa tjänster till Kubernetes-klustret

Lycka till allihopa.

Jag har inte hittat en generaliserad guide online om att logga och samla in mätvärden från tredjepartstjänster till system som används i Kubernetes. Jag lägger upp min lösning. Den här artikeln förutsätter att du redan har en fungerande Prometheus och andra tjänster. Som ett exempel på en datakälla för en extern tillståndstjänst kommer ett DBMS att användas PostgreSQL i en behållare Hamnarbetare. Företaget använder en pakethanterare Helm, nedan i texten kommer det att finnas exempel på det. För hela lösningen förbereder vi ett eget diagram, som inkluderar kapslade diagram över alla tjänster som används.

Skogsavverkning

Många företag använder en hög med teknik för att samla in, visa och centralisera loggar Elasticsearch + Logstash + Kibana, förkortat ELK. I vårt fall finns det inget behov av att indexera innehållet och jag använde en mer lättviktig Loke. Det är tillgängligt som ett Helm-paket, vi lade till det som ett underdiagram genom att ändra värdena för ingress och pv för att passa vårt system.

värden.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"

För att skicka loggar till en instans Loke använda Loki Docker Logging Driver.

Du måste installera detta tillägg på allt Hamnarbetare värdar som du vill ta emot loggar från. Det finns flera sätt att berätta för demonen hur man använder stoppningen. Jag väljer drivrutinen i yaml Docker komponera, som är en del av Ansible lekbok.

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

där loki_url: kube-loki.example.domain/loki/api/v1/push

Metrik

Mätvärden samlas in från PostgreSQL med hjälp av postgres_exporter för Prometheus. Fortsättning på ovanstående fil Ansible lekbok.

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

För större tydlighet kommer vi att skriva namnen på externa tillståndsbaserade tjänster med 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 }}

Att konfigurera Prometheus för att ta emot postgres_exporter-data görs genom att redigera värden i underdiagrammet.

värden.yaml

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

För att visualisera mottagen data, installera lämplig Dashboard i
grafana och konfigurera datakällor. Detta kan också göras genom värden i Grafanas deldiagram.

Hur ser det ut
Övervakning och loggning av externa tjänster till Kubernetes-klustret

Jag hoppas att den här korta artikeln hjälpte dig att förstå huvudidéerna bakom denna lösning och sparade tid när du satte upp övervakning och loggning av externa tjänster för Loki/Prometheus i ett Kubernetes-kluster.

Källa: will.com

Lägg en kommentar