
حظا موفقا للجميع.
لم أجد دليلاً عامًا عبر الإنترنت حول تسجيل وجمع المقاييس من خدمات الجهات الخارجية في الأنظمة المنشورة فيها . أنا نشر الحل الخاص بي. تفترض هذه المقالة أن لديك بالفعل عملاً وغيرها من الخدمات. كمثال لمصدر بيانات لخدمة خارجية ذات حالة، سيتم استخدام نظام إدارة قواعد البيانات (DBMS). في حاوية . تستخدم الشركة مدير الحزم ، أدناه في النص ستكون هناك أمثلة عليه. بالنسبة للحل بأكمله، نقوم بإعداد المخطط الخاص بنا، والذي يتضمن مخططات متداخلة لجميع الخدمات المستخدمة.
تسجيل
تستخدم العديد من الشركات مجموعة من التقنيات لجمع السجلات وعرضها ومركزيتها + + ، والمختصر كـ ELK. في حالتنا، ليست هناك حاجة لفهرسة المحتوى ولقد استخدمت خفيفًا أكثر . وهي متوفرة كحزمة Helm، وقد أضفناها كمخطط فرعي عن طريق تغيير قيم الدخول وpv لتناسب نظامنا.
value.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"
لإرسال السجلات إلى مثيل استخدم .
يجب عليك تثبيت هذه الإضافة على كل شيء المضيفين الذين تريد تلقي السجلات منهم. هناك عدة طرق لإخبار البرنامج الخفي بكيفية استخدام الحشو. قمت باختيار السائق في yaml ، وهو جزء من كتاب اللعب.
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 باستخدام إلى . استمرار الملف أعلاه كتاب اللعب.
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"
...
لمزيد من الوضوح، سنكتب أسماء الخدمات ذات الحالة الخارجية باستخدام نقاط النهاية.
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 عن طريق تحرير القيم في المخطط الفرعي.
value.yaml
scrape_configs:
...
- job_name: postgres-exporter
static_configs:
- targets:
- postgres-exporter.applicationnamespace.svc.cluster.local:9187
labels:
alias: postgres
...
لتصور البيانات المستلمة، قم بتثبيت لوحة المعلومات المناسبة فيها
وتكوين مصادر البيانات. ويمكن القيام بذلك أيضًا من خلال القيم الموجودة في مخطط Grafana الفرعي.
ما يبدو عليه

آمل أن تساعدك هذه المقالة القصيرة على فهم الأفكار الرئيسية وراء هذا الحل وتوفير وقتك عند إعداد مراقبة وتسجيل الخدمات الخارجية لـ Loki/Prometheus في مجموعة Kubernetes.
المصدر: www.habr.com
