
Buongiorno a tutti.
Non ho trovato in rete una guida generale sulla registrazione e la raccolta di metriche dai servizi esterni nei sistemi distribuiti in . Pubblico la mia soluzione. Questo articolo presuppone che abbiate già un e altri servizi. Come esempio di origine dei dati per un servizio stateful esterno utilizzeremo un DBMS in un contenitore . In azienda utilizziamo un gestore di pacchetti , di seguito ci saranno esempi su di esso. Per tutta la soluzione prepariamo il nostro chart, comprendente chart nidificati di tutti i servizi utilizzati.
Registrazione
Molte aziende utilizzano un stack tecnologico per la raccolta e la visualizzazione e centralizzazione dei log + + , abbreviato in ELK. Nel nostro caso non c'è necessità di indicizzare il contenuto e ho applicato una soluzione più leggera . È disponibile come pacchetto Helm, lo abbiamo aggiunto come subchart modificando values per ingress e pv per il nostro 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"
Per inviare i log all'istanza usiamo .
È necessario installare questo plugin su tutti i nodi da cui si desidera ricevere i log. Ci sono diversi modi per indicare al demone come utilizzare il plugin. Seleziono il driver nel file yaml , che fa parte del playbook.
postgres.yaml
- name: Esegui contenitori
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:
Metriche
Le metriche vengono raccolte da PostgreSQL utilizzando per . Continuazione del file sopra menzionato 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"
...
Per una maggiore chiarezza dei nomi dei servizi stateful esterni, li definiremo tramite 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 ottenere dati da postgres_exporter avviene modificando i valori nel subchart.
values.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
Per visualizzare i dati ottenuti, installa il Dashboard corrispondente in
e configura le fonti di dati. Questo può essere fatto anche tramite i valori nel subchart di Grafana.
Come appare

Spero che questo breve articolo ti abbia aiutato a comprendere le idee principali alla base di questa soluzione e ti farà risparmiare tempo nella configurazione del monitoraggio e della registrazione dei servizi esterni per Loki/Prometheus nel cluster Kubernetes.
Fonte: habr.com
