
Een goede dag voor iedereen.
Ik kon online geen algemeen overzicht vinden van het loggen en het verzamelen van metrics van externe services in systemen die zijn uitgerold in . Ik publiceer mijn oplossing. Dit artikel gaat ervan uit dat je al een werkende en andere diensten hebt. Als voorbeeld van een gegevensbron van een externe stateful-service zal een database gebruikt worden de container . In het bedrijf wordt de pakketbeheerder gebruikt , hieronder staan voorbeelden ervan. Voor de hele oplossing bereiden we onze eigen chart voor, inclusief geneste charts van alle gebruikte diensten.
Logging
Veel bedrijven gebruiken voor het verzamelen, bekijken en centraliseren van logs een technologie-stack + + , in het kort ELK. In ons geval is er geen behoefte om de inhoud te indexeren en heb ik een lichtere versie toegepast, . Het is beschikbaar als een Helm-pakket en we hebben het als subchart toegevoegd door de waarden voor ingress en pv aan te passen aan ons systeem.
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"
Om logs naar de instance te verzenden gebruik van .
Moet deze plug-in op alle hosts worden geĆÆnstalleerd waarvan je logs wilt ontvangen. Er zijn verschillende manieren om de daemon aan te geven hoe de plug-in gebruikt moet worden. Ik geef de keuze van de driver aan in yaml , dat onderdeel is van playbook.
postgres.yaml
- name: Container draaien
docker_compose:
project_name: main-postgres
definition:
version: '3.7'
services:
p:
image: "{{ postgres_version }}"
container_name: postgresql
restart: altijd
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 }}"
...
waar loki_url:
Statistieken
Metrics worden verzameld van PostgreSQL met behulp van voor . Voortzetting van het bovenstaande bestand 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"
...
Voor een beter inzicht in de namen van externe stateful-services, zullen we ze via Endpoints definiƫren.
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 }}
De configuratie van Prometheus voor het ophalen van gegevens van de postgres_exporter wordt gemaakt door de waarden in de subchart aan te passen.
values.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
Om de verkregen gegevens te visualiseren, installeert u het bijbehorende Dashboard in
en configureert u de gegevensbronnen. Dit kan ook gedaan worden via de waarden in de subchart Grafana.
Hoe het eruit ziet

Ik hoop dat dit korte artikel u heeft geholpen de basisideeƫn achter deze oplossing te begrijpen en dat het tijd zal besparen bij het instellen van monitoring en logging van externe services voor Loki/Prometheus in een Kubernetes-cluster.
Bron: habr.com
