
Bună ziua tuturor.
Nu am găsit un ghid general pe internet pentru logarea și colectarea metricilor din servicii externe în sisteme desfășurate în . Public acestă soluție. Acest articol presupune că aveți deja un și alte servicii. Ca exemplu de sursă de date pentru un serviciu staționar extern, vom folosi o bază de date în container . Compania folosește un manager de pachete , mai jos vor fi exemple pe acesta. Pentru întregul proiect pregătim un chart propriu, care include charts încrucișate pentru toate serviciile utilizate.
Logare
Multe companii folosesc o suită de tehnologii pentru colectarea, vizualizarea și centralizarea logurilor, cunoscută sub numele de + + , abreviat ELK. În cazul nostru, nu este necesar să indexăm conținutul și am aplicat o soluție mai ușoară. Acesta este disponibil sub formă de pachet Helm, l-am adăugat ca subchart modificând valori pentru ingress și pv pentru sistemul nostru.
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"
Pentru a trimite loguri la instanța folosim .
Este necesar să instalați acest add-on pe toate hosturile de la care doriți să primiți loguri. Există mai multe moduri de a indica demonului cum să utilizeze add-on-ul. Eu aleg driverul în yaml , care este parte din playbook.
postgres.yaml
- name: Rulează 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 }}"
...
unde loki_url:
Metrici
Se colectează metricile din PostgreSQL folosind pentru . Continuarea fișierului menționat mai sus 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"
...
Pentru o mai bună claritate a numelui serviciilor externe stateful, le vom defini prin 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 }}
Configurarea Prometheus pentru a obține date de la postgres_exporter se face prin modificarea valorilor în subchart.
values.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
Pentru vizualizarea datelor obținute, instalați tablou corespunzător în
și configurați sursele de date. Acest lucru se poate face și prin valori în subchart Grafana.
Cum arată asta

Sper că acest scurt articol v-a ajutat să înțelegeți conceptele de bază integrate în această soluție și va economisi timp în configurarea monitorizării și logării serviciilor externe pentru Loki/Prometheus în clusterul Kubernetes.
Sursa: habr.com
