
Saludos a todos.
No encontré en línea una guía general sobre la registración y la recolección de métricas de servicios de terceros en sistemas desplegados en . Publico mi solución. Este artículo asume que ya tienes una y otros servicios funcionando. Como ejemplo de fuente de datos de un servicio stateful externo, se utilizará una base de datos en un contenedor . La empresa utiliza un gestor de paquetes , más adelante habrá ejemplos sobre este. Para toda la solución, preparamos nuestro propio chart, que incluye charts anidados de todos los servicios utilizados.
Registro
Muchas empresas utilizan la pila de tecnologías + + , abreviada como ELK. En nuestro caso, no es necesario indexar el contenido, por lo que he aplicado una solución más ligera . Está disponible como un paquete Helm, lo añadimos como subchart modificando los valores para ingress y pv según nuestro sistema.
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"
Para enviar logs a la instancia VPS KVM .
Es necesario instalar este complemento en todos los hosts desde los cuales deseas recibir logs. Hay varias formas de indicarle al demonio cómo usar el complemento. Selecciono el controlador en el archivo yaml , que es parte de playbook.
postgres.yaml
- name: Ejecutar contenedores
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:
Métricas
Se recolectan métricas de PostgreSQL mediante para . Continuación del archivo mencionado anteriormente playbook.
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 de los nombres de los servicios stateful externos, los definiremos a través de 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 configuración de Prometheus para obtener datos de postgres_exporter se realiza modificando los valores en el subchart.
values.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
Para visualizar los datos obtenidos, instale el Dashboard correspondiente en
y configure las fuentes de datos. También se puede hacer a través de los valores en el subchart de Grafana.
Cómo se ve esto

Espero que este breve artículo le haya ayudado a comprender las ideas principales contenidas en esta solución y le ahorre tiempo al configurar la monitorización y el registro de servicios externos para Loki/Prometheus en el clúster de Kubernetes.
Fuente: habr.com
