Monitoreo y registro de servicios externos en el clúster de Kubernetes

Monitoreo y registro de servicios externos en el clúster de Kubernetes

Bien por todos.

No he encontrado una guía generalizada en línea sobre cómo registrar y recopilar métricas de servicios de terceros en sistemas implementados en Kubernetes. Estoy publicando mi solución. Este artículo asume que ya tienes un trabajo Prometeo y otros servicios. Como ejemplo de fuente de datos para un servicio con estado externo, se utilizará un DBMS PostgreSQL en un contenedor Docker. La empresa utiliza un administrador de paquetes. Casco, a continuación en el texto habrá ejemplos al respecto. Para toda la solución, estamos preparando nuestro propio gráfico, que incluye gráficos anidados de todos los servicios utilizados.

Inicio sesión

Muchas empresas utilizan una serie de tecnologías para recopilar, ver y centralizar registros. Elasticsearch + Logstash + kibana, abreviado como ELK. En nuestro caso, no es necesario indexar el contenido y utilicé un formato más ligero. Loki. Está disponible como paquete Helm, lo agregamos como un subgráfico cambiando los valores de ingreso y pv para adaptarlo a nuestro 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 registros a una instancia Loki utilizar Controlador de registro Loki Docker.

Debes instalar este complemento en todo. Docker hosts de los que desea recibir registros. Hay varias formas de decirle al demonio cómo usar el relleno. Selecciono el controlador en yaml Docker Compose, que es parte de Ansible libro de jugadas.

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

donde loki_url: kube-loki.ejemplo.dominio/loki/api/v1/push

Métrica

Las métricas se recopilan de PostgreSQL usando postgres_exportador para Prometeo. Continuación del archivo anterior. Ansible libro de jugadas.

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 mayor claridad, escribiremos los nombres de los servicios con estado externos que utilizan Endpoints.

servicio-postgres.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 configuración de Prometheus para recibir datos de postgres_exporter se realiza editando los valores en el 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 los datos recibidos, instale el Panel apropiado en
Grafana y configurar fuentes de datos. Esto también se puede hacer a través de valores en el subgráfico de Grafana.

Como se ve
Monitoreo y registro de servicios externos en el clúster de Kubernetes

Espero que este breve artículo le haya ayudado a comprender las ideas principales detrás de esta solución y le haya ahorrado tiempo al configurar el monitoreo y el registro de servicios externos para Loki/Prometheus en un clúster de Kubernetes.

Fuente: habr.com

Añadir un comentario