Monitorización e rexistro de servizos externos no clúster de Kubernetes

Monitorización e rexistro de servizos externos no clúster de Kubernetes

Moita sorte a todos.

Non atopei unha guía xeralizada en liña sobre o rexistro e recompilación de métricas de servizos de terceiros en sistemas implantados en Kubernetes. Estou publicando a miña solución. Este artigo asume que xa tes un traballo Prometeu e outros servizos. Como exemplo de fonte de datos para un servizo externo con estado, empregarase un DBMS PostgreSQL nun recipiente Estivador. A empresa usa un xestor de paquetes Leme, a continuación no texto haberá exemplos sobre el. Para toda a solución, estamos preparando o noso propio gráfico, que inclúe gráficos anidados de todos os servizos utilizados.

Rexistro

Moitas empresas usan unha pila de tecnoloxías para recoller, ver e centralizar rexistros Elasticsearch + logstash + kibana, abreviado como ELK. No noso caso, non hai que indexar o contido e usei un máis lixeiro Loki. Está dispoñible como paquete Helm, engadímolo como un subgráfico modificando os valores de entrada e pv para adaptalo ao noso sistema.

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

Para enviar rexistros a unha instancia Loki uso Controlador de rexistro de Loki Docker.

Debes instalar este complemento en todo Estivador hosts dos que desexa recibir rexistros. Hai varias formas de indicarlle ao daemon como usar o recheo. Selecciono o controlador en yaml Docker Compose, que forma parte Ansible libro de xogos.

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

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

Métricas

As métricas recóllense de PostgreSQL mediante postgres_exporter para Prometeu. Continuación do ficheiro anterior Ansible libro de xogos.

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

Para maior claridade, escribiremos os nomes dos servizos externos con estado usando 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 }}

A configuración de Prometheus para recibir datos de postgres_exporter realízase editando os valores no subgráfico.

valores.yaml

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

Para visualizar os datos recibidos, instale o Dashboard adecuado
grafana e configurar fontes de datos. Isto tamén se pode facer a través dos valores do subgráfico Grafana.

Como parece
Monitorización e rexistro de servizos externos no clúster de Kubernetes

Espero que este breve artigo che axude a comprender as ideas principais desta solución e che aforre tempo ao configurar o seguimento e o rexistro de servizos externos para Loki/Prometheus nun clúster de Kubernetes.

Fonte: www.habr.com

Engadir un comentario