Überwachung und Protokollierung externer Dienste im Kubernetes-Cluster.

Überwachung und Protokollierung externer Dienste im Kubernetes-Cluster.

Hallo zusammen.

Ich habe im Netz keine allgemeine Anleitung für das Logging und das Sammeln von Metriken aus externen Diensten in bereitgestellte Systeme gefunden. KubernetesIch veröffentliche meine Lösung. Dieser Artikel setzt voraus, dass Sie bereits ein funktionierendes Prometheus und andere Dienste haben. Als Beispiel für eine Datenquelle eines externen Stateful-Services wird eine Datenbank verwendet. PostgreSQL im Container DockerIn der Firma wird ein Paketmanager verwendet. HelmNachfolgend finden Sie Beispiele dafür. Für die gesamte Lösung erstellen wir unser eigenes Chart, das alle verwendeten Dienste mit enthaltenen Charts umfasst.

Protokollierung

Viele Unternehmen nutzen einen Technologiestack für das Sammeln, Betrachten und Zentralisieren von Logs. Elasticsearch + Logstash + Kibana, abgekürzt ELK. In unserem Fall ist es nicht notwendig, den Inhalt zu indizieren, und ich habe eine leichtere Lösung angewendet. LokiEs ist als Helm-Paket verfügbar, und wir haben es als Subchart hinzugefügt, indem wir die Werte für Ingress und PV an unser System angepasst haben.

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"

Um Logs an die Instanz zu senden, Loki VPS KVM Loki Docker Logging Driver.

muss dieses Plugin auf allen Docker Hosts, von denen Sie Protokolle erhalten möchten. Es gibt mehrere Möglichkeiten, dem Daemon anzugeben, wie das Add-on verwendet werden soll. Ich wähle den Treiber in YAML aus. Docker Compose, das Teil von Ansible Playbook.

postgres.yaml

    - name: Container ausführen
      docker_compose:
        project_name: main-postgres
        definition:
          version: '3.7'
          services:
            p:
              image: "{{ postgres_version }}"
              container_name: postgresql
              restart: immer
              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 }}"
...

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

Metriken

Metriken werden von PostgreSQL mithilfe von postgres_exporter für Prometheus. Fortsetzung der oben genannten Datei Ansible Playbook.

postgres.yaml

...
            pexp:
              image: "wrouesnel/postgres_exporter"
              container_name: pexporter
              restart: es sei denn, gestoppt
              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"
...

Um die externen stateful-Services besser zu veranschaulichen, definieren wir sie über 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 }}

Die Konfiguration von Prometheus zur Erfassung der Daten von postgres_exporter erfolgt durch Anpassung der values im Subchart.

values.yaml

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

Um die gesammelten Daten zu visualisieren, installieren Sie das entsprechende Dashboard in
Grafana und konfigurieren Sie die Datenquellen. Dies kann auch über die values im Subchart Grafana erfolgen.

So sieht das aus
Überwachung und Protokollierung externer Dienste im Kubernetes-Cluster.

Ich hoffe, dass dieser kurze Artikel Ihnen geholfen hat, die grundlegenden Ideen hinter dieser Lösung zu verstehen, und dass er Ihnen Zeit bei der Einrichtung von Monitoring und Logging für externe Services mit Loki/Prometheus im Kubernetes-Cluster spart.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster