Monitoraggio e registrazione di servizi esterni nel cluster Kubernetes

Monitoraggio e registrazione di servizi esterni nel cluster Kubernetes

Buona fortuna a tutti.

Non ho trovato una guida generalizzata online sulla registrazione e sulla raccolta di parametri da servizi di terze parti nei sistemi distribuiti kubernetes. Sto pubblicando la mia soluzione. Questo articolo presuppone che tu abbia già un file working Prometeo e altri servizi. Come esempio di origine dati per un servizio con stato esterno, verrà utilizzato un DBMS PostgreSQL in un contenitore docker. L'azienda utilizza un gestore di pacchetti Casco, di seguito nel testo ci saranno esempi a riguardo. Per l'intera soluzione stiamo preparando un nostro grafico, che comprende grafici annidati di tutti i servizi utilizzati.

Registrazione

Molte aziende utilizzano una serie di tecnologie per raccogliere, visualizzare e centralizzare i log elasticsearch + Logstash + kibana, abbreviato in ELK. Nel nostro caso non c'è bisogno di indicizzare il contenuto e ho utilizzato una struttura più leggera Loki. È disponibile come pacchetto Helm, lo abbiamo aggiunto come grafico secondario modificando i valori di ingresso e pv per adattarli al nostro sistema.

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

Per inviare log a un'istanza Loki utilizzare Driver di registrazione Loki Docker.

Devi installare questo componente aggiuntivo su tutto docker host da cui desideri ricevere i log. Esistono diversi modi per dire al demone come utilizzare il riempimento. Seleziono il driver in yaml Docker Compose, di cui fa parte ansible libro di gioco.

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

dove loki_url: kube-loki.esempio.dominio/loki/api/v1/push

Metrica

Le metriche vengono raccolte da PostgreSQL utilizzando postgres_exporter per Prometeo. Continuazione del file precedente ansible libro di gioco.

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

Per maggiore chiarezza scriveremo i nomi dei servizi stateful esterni utilizzando 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 }}

La configurazione di Prometheus per ricevere i dati postgres_exporter viene effettuata modificando i valori nel sottografico.

valori.yaml

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

Per visualizzare i dati ricevuti installare l'apposita Dashboard in
graminacee e configurare le origini dati. Questo può essere fatto anche attraverso i valori nel sottoschema Grafana.

Che aspetto ha
Monitoraggio e registrazione di servizi esterni nel cluster Kubernetes

Spero che questo breve articolo ti abbia aiutato a comprendere le idee principali alla base di questa soluzione e ti abbia fatto risparmiare tempo durante la configurazione del monitoraggio e della registrazione dei servizi esterni per Loki/Prometheus in un cluster Kubernetes.

Fonte: habr.com

Aggiungi un commento