مراقبة وتسجيل الخدمات الخارجية لمجموعة Kubernetes

مراقبة وتسجيل الخدمات الخارجية لمجموعة Kubernetes

حظا موفقا للجميع.

لم أجد دليلاً عامًا عبر الإنترنت حول تسجيل وجمع المقاييس من خدمات الجهات الخارجية في الأنظمة المنشورة فيها Kubernetes. أنا نشر الحل الخاص بي. تفترض هذه المقالة أن لديك بالفعل عملاً محب العمل وغيرها من الخدمات. كمثال لمصدر بيانات لخدمة خارجية ذات حالة، سيتم استخدام نظام إدارة قواعد البيانات (DBMS). كيو في حاوية عامل في حوض السفن. تستخدم الشركة مدير الحزم قاد، أدناه في النص ستكون هناك أمثلة عليه. بالنسبة للحل بأكمله، نقوم بإعداد المخطط الخاص بنا، والذي يتضمن مخططات متداخلة لجميع الخدمات المستخدمة.

تسجيل

تستخدم العديد من الشركات مجموعة من التقنيات لجمع السجلات وعرضها ومركزيتها Elasticsearch + Logstash + كيبانا، والمختصر كـ 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"

لإرسال السجلات إلى مثيل لوكي استخدم برنامج تشغيل تسجيل Loki Docker.

يجب عليك تثبيت هذه الإضافة على كل شيء عامل في حوض السفن المضيفين الذين تريد تلقي السجلات منهم. هناك عدة طرق لإخبار البرنامج الخفي بكيفية استخدام الحشو. قمت باختيار السائق في yaml دوكر يؤلف، وهو جزء من Ansible كتاب اللعب.

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: kube-loki.example.domain/loki/api/v1/push

المقاييس

يتم جمع المقاييس من PostgreSQL باستخدام postgres_exporter إلى محب العمل. استمرار الملف أعلاه Ansible كتاب اللعب.

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 الفرعي.

ما يبدو عليه
مراقبة وتسجيل الخدمات الخارجية لمجموعة Kubernetes

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

المصدر: www.habr.com

إضافة تعليق