
Hallo zusammen.
Ich habe im Netz keine allgemeine Anleitung für das Logging und das Sammeln von Metriken aus externen Diensten in bereitgestellte Systeme gefunden. Ich veröffentliche meine Lösung. Dieser Artikel setzt voraus, dass Sie bereits ein funktionierendes und andere Dienste haben. Als Beispiel für eine Datenquelle eines externen Stateful-Services wird eine Datenbank verwendet. im Container In der Firma wird ein Paketmanager verwendet. Nachfolgend finden Sie Beispiele dafür. Für die gesamte Lösung erstellen wir unser eigenes Chart, das alle verwendeten Dienste mit enthaltenen Charts umfasst.
Protokollierung
Viele Unternehmen nutzen einen Technologiestack für das Sammeln, Betrachten und Zentralisieren von Logs. + + , abgekürzt ELK. In unserem Fall ist es nicht notwendig, den Inhalt zu indizieren, und ich habe eine leichtere Lösung angewendet. Es ist als Helm-Paket verfügbar, und wir haben es als Subchart hinzugefügt, indem wir die Werte für Ingress und PV an unser System angepasst haben.
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"
Um Logs an die Instanz zu senden, VPS KVM .
muss dieses Plugin auf allen Hosts, von denen Sie Protokolle erhalten möchten. Es gibt mehrere Möglichkeiten, dem Daemon anzugeben, wie das Add-on verwendet werden soll. Ich wähle den Treiber in YAML aus. , das Teil von Playbook.
postgres.yaml
- name: Container ausführen
docker_compose:
project_name: main-postgres
definition:
version: '3.7'
services:
p:
image: "{{ postgres_version }}"
container_name: postgresql
restart: immer
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 }}"
...
wo loki_url:
Metriken
Metriken werden von PostgreSQL mithilfe von für . Fortsetzung der oben genannten Datei Playbook.
postgres.yaml
...
pexp:
image: "wrouesnel/postgres_exporter"
container_name: pexporter
restart: es sei denn, gestoppt
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"
...
Um die externen stateful-Services besser zu veranschaulichen, definieren wir sie über 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 }}
Die Konfiguration von Prometheus zur Erfassung der Daten von postgres_exporter erfolgt durch Anpassung der values im Subchart.
values.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
Um die gesammelten Daten zu visualisieren, installieren Sie das entsprechende Dashboard in
und konfigurieren Sie die Datenquellen. Dies kann auch über die values im Subchart Grafana erfolgen.
So sieht das aus

Ich hoffe, dass dieser kurze Artikel Ihnen geholfen hat, die grundlegenden Ideen hinter dieser Lösung zu verstehen, und dass er Ihnen Zeit bei der Einrichtung von Monitoring und Logging für externe Services mit Loki/Prometheus im Kubernetes-Cluster spart.
Quelle: habr.com
