
Goddag alle.
Jeg har ikke fundet en generel vejledning til logning og indsamling af målinger fra tredjepartstjenester til systemer, der er implementeret i . Jeg publicerer min løsning. Denne artikel forudsætter, at du allerede har et fungerende og andre tjenester. Som eksempel på en datakilde fra en ekstern stateful-tjeneste vil vi bruge en database i en container . I virksomheden bruges en pakkehåndtering , nedenfor vil der være eksempler på det. Til hele løsningen forbereder vi et eget chart, der inkluderer indlejrede charts for alle de anvendte tjenester.
Logføring
Mange virksomheder bruger en stak teknologier til at indsamle, se og centralisere logs, + + , kort sagt ELK. I vores tilfælde er der ikke behov for at indeksere indhold, så jeg anvendte en lettere . Den er tilgængelig som en Helm-pakke, vi har tilføjet den som subchart ved at ændre værdierne for ingress og pv til vores 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"
For at sende logs til instansen bruger vi .
Det er nødvendigt at installere denne tilføjelse på alle værter, hvorfra du ønsker at modtage logs. Der er flere måder at angive for dæmonen, hvordan den skal bruge tilføjelsen. Jeg vælger driveren i yaml , som er en del af playbook.
postgres.yaml
- name: Kør containere
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 }}"
...
hvor loki_url:
Målinger
Målinger indsamles fra PostgreSQL ved hjælp af for . Fortsættelse af ovenstående fil 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"
...
For better visibility of external stateful services, we will define them through 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 }}
Configuring Prometheus to retrieve data from postgres_exporter is done by editing values in the subchart.
values.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
To visualize the obtained data, install the corresponding Dashboard from
and set up the data sources. This can also be done through values in the Grafana subchart.
How it looks

I hope this brief article helped you understand the key concepts laid out in this solution and save time when configuring monitoring and logging for external services with Loki/Prometheus in a Kubernetes cluster.
Kilde: habr.com
