
God dag allihopa.
Jag har inte kunnat hitta en generell guide för loggning och insamling av metrik från externa tjänster i system som är deployerade i . Jag publicerar min lösning. Denna artikel förutsätter att du redan har en fungerande och andra tjänster. Som exempel på en datakälla från en extern stateful-tjänst kommer en databas att användas i en container . Företaget använder en paketchef , nedan kommer det att finnas exempel på denna. För hela lösningen förbereder vi en egen chart som inkluderar inbäddade charts för alla använda tjänster.
Loggning
Många företag använder en teknikstack för insamling och centralisering av loggar + + , förkortat ELK. I vårt fall finns det inget behov av att indexera innehållet, och jag använde en lättare . Den är tillgänglig som en Helm-paket, vi har lagt till den som en subchart och ändrat värden för ingress och pv för vårt system.
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"
För att skicka loggar till instansen VPS KVM. .
Måste detta tillägg installeras på alla värdar där du vill ta emot loggar. Det finns flera sätt att ange för demon hur man använder tillägget. Jag väljer drivrutinen i yaml , som är en del av playbooken.
postgres.yaml
- name: Kör containrar
docker_compose:
project_name: main-postgres
definition:
version: '3.7'
services:
p:
image: "{{ postgres_version }}"
container_name: postgresql
restart: alltid
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 }}"
...
där loki_url:
Mätvärden
Metrik samlas in från PostgreSQL med hjälp av för . Fortsättning av ovanstående fil playbooken.
postgres.yaml
...
pexp:
image: "wrouesnel/postgres_exporter"
container_name: pexporter
restart: om-inte-stoppad
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"
...
För att göra namnen på externa stateful-tjänster mer tydliga skriver vi dem via 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 }}
Konfiguration av Prometheus för att hämta data från postgres_exporter görs genom att redigera values i subchart.
values.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
För att visualisera de erhållna data, installera den lämpliga Dashboarden i
och konfigurera datakällorna. Detta kan också göras via values i subchart Grafana.
Hur det ser ut

Jag hoppas att den här korta artikeln har hjälpt dig att förstå de grundläggande idéerna bakom denna lösning och sparar tid när du konfigurerar övervakning och loggning av externa tjänster för Loki/Prometheus i Kubernetes-klustret.
Källa: habr.com
