
Guten Tag zusammen.
Ich habe im Internet keine allgemeine Anleitung zum Logging und zur Sammlung von Metriken von Drittanbieterdiensten in Systeme gefunden, die in bereitgestellt sind. Ich veröffentliche meine Lösung. Dieser Artikel setzt voraus, dass Sie bereits einen funktionierenden und andere Dienste haben. Als Beispiel für die Datenquelle eines externen Stateful-Services verwenden wir die Datenbank in einem Container . Im Unternehmen wird der Paketmanager verwendet. Im Folgenden finden Sie Beispiele dafür. Für die gesamte Lösung bereiten wir unser eigenes Chart vor, das verschachtelte Charts aller verwendeten Dienste umfasst.
Protokollierung
Viele Unternehmen verwenden zur Sammlung, Ansicht und Zentralisierung von Logs den Technologie-Stack + + , kurz ELK. In unserem Fall ist es nicht erforderlich, den Inhalt zu indexieren, und ich habe eine leichtere Lösung angewendet, . Es ist als Helm-Paket verfügbar, wir haben es als Subchart hinzugefügt und die Werte für Ingress und PV an unser System angepasst.
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 eine Instanz verwenden wir .
zu senden, müssen Sie dieses Add-on auf allen Hosts installieren, von denen Sie Logs erhalten möchten. Es gibt mehrere Möglichkeiten, dem Daemon anzugeben, wie das Add-on verwendet werden soll. Ich wähle den Treiber im YAML aus, , der Teil von Playbook ist.
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: 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 }}"
...
wo loki_url:
Metriken
Die Metriken werden mithilfe von für gesammelt. Fortsetzung der oben genannten Datei Playbook ist.
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"
...
Um die Namen externer Stateful-Services anschaulicher zu machen, 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 von Daten vom postgres_exporter erfolgt durch Anpassungen 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
...
Zur Visualisierung der gesammelten Daten installieren Sie das entsprechende Dashboard in
und konfigurieren Sie die Datenquellen. Das kann auch über die values im Subchart Grafana erfolgen.
Wie es aussieht

Ich hoffe, dass dieser kurze Artikel Ihnen geholfen hat, die grundlegenden Ideen hinter dieser Lösung zu verstehen und Zeit bei der Einrichtung der Überwachung und Protokollierung externer Dienste für Loki/Prometheus im Kubernetes-Cluster zu sparen.
Quelle: habr.com
