
Bonjour à tous.
Je n'ai pas trouvé de guide général sur la journalisation et la collecte de métriques depuis des services tiers dans des systèmes déployés à . Je publie ma solution. Cet article suppose que vous disposez déjà d'un et d'autres services. Comme exemple de source de données d'un service stateful externe, nous utiliserons une base de données le conteneur . Dans l'entreprise, nous utilisons un gestionnaire de paquets , ci-dessous, nous donnerons des exemples avec celui-ci. Pour toute la solution, nous préparons notre propre chart, comprenant des charts imbriqués de tous les services utilisés.
Journalisation
De nombreuses entreprises utilisent une pile technologique pour la collecte, la visualisation et la centralisation des journaux + + , abrégé ELK. Dans notre cas, il n'est pas nécessaire d'indexer le contenu et j'ai appliqué une solution plus légère . Il est disponible sous forme de package Helm, nous l'avons ajouté comme subchart, en modifiant les valeurs pour ingress et pv selon notre système.
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"
Pour envoyer des journaux vers l'instance nous utilisons .
Il est nécessaire d'installer ce plugin sur tous les hôtes à partir desquels vous souhaitez recevoir des journaux. Il existe plusieurs façons d'indiquer au démon comment utiliser le plugin. Je fais le choix du driver dans le yaml , qui fait partie de playbook.
postgres.yaml
- name: Exécuter des conteneurs
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 }}"
...
où loki_url:
Métriques
Les métriques sont collectées à partir de PostgreSQL grâce à pour . Suite du fichier mentionné ci-dessus 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"
...
Pour une meilleure visualisation des noms des services stateful externes, nous les définirons via des 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 }}
La configuration de Prometheus pour obtenir les données de postgres_exporter se fait en modifiant les valeurs dans le sous-chart.
values.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
Pour visualiser les données obtenues, installez le Dashboard adéquat dans
et configurez les sources de données. Cela peut également être fait via les valeurs dans le sous-chart Grafana.
À quoi cela ressemble

J'espère que cet article succinct vous a aidé à comprendre les concepts clés sous-jacents à cette solution et vous fera gagner du temps lors de la configuration de la surveillance et de la journalisation des services externes pour Loki/Prometheus dans le cluster Kubernetes.
Source : habr.com
