
Добър ден на всички.
Не намерих в мрежата обобщено ръководство за логиране и събиране на метрики от външни услуги в разширени системи в . Публикувам моето решение. Тази статия предполага, че вече имате работещ и други услуги. Като пример за източник на данни от външен stateful-сервис ще се използва СУБД в контейнера . В компанията се използва пакетен мениджър , по-долу ще има примери за него. За цялото решение подготвяме собствен чарт, включващ вложени чарти на всички използвани услуги.
Логиране
Много компании използват технологичен стек + + , съкратено ELK, за събиране, преглед и централизация на логовете. В нашия случай няма нужда да се индексира съдържание и приложих по-лека . Тя е налична под формата на Helm пакет, добавихме я като subchart, променяйки стойностите за ingress и pv според нашата система.
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"
За изпращане на логовете на инстанс VPS KVM .
Необходимо е да инсталирате това допълнение на всички хостове, от които желаете да получавате логове. Има няколко начина да посочите на демона как да използва допълнението. Изборът на драйвера правя в yaml , който е част от playbook.
postgres.yaml
- name: Run containers
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 }}"
...
където loki_url:
Метрики
Метриките се събират от PostgreSQL с помощта на за . Продължение на гореспоменатия файл 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"
...
За по-добра видимост на имената на външните stateful услуги, ще ги опишем чрез точки за достъп.
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 }}
Настройването на Prometheus за получаване на данни от postgres_exporter се извършва чрез корекция на values в subchart.
values.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
За визуализация на получените данни, инсталирайте съответния Dashboard в
и настройте източниците на данни. Това може да се направи и чрез values в subchart Grafana.
Как изглежда това

Надявам се, че тази кратка статия ви е помогнала да разберете основните идеи, залегнали в това решение, и ще ви спести време при настройката на мониторинга и логването на външни услуги за Loki/Prometheus в Kubernetes клъстера.
Източник: habr.com
