कुबेरनेट्स क्लस्टर में बाहरी सेवाओं की निगरानी और लॉगिंग

कुबेरनेट्स क्लस्टर में बाहरी सेवाओं की निगरानी और लॉगिंग

सबको सौभाग्य प्राप्त हो।

मुझे तृतीय-पक्ष सेवाओं से तैनात सिस्टम में लॉगिंग और मेट्रिक्स एकत्र करने पर कोई सामान्यीकृत मार्गदर्शिका ऑनलाइन नहीं मिली है Kubernetes. मैं अपना समाधान पोस्ट कर रहा हूं। यह आलेख मानता है कि आपके पास पहले से ही एक कार्य है प्रोमिथेउस और अन्य सेवाएँ। बाहरी स्टेटफुल सेवा के लिए डेटा स्रोत के उदाहरण के रूप में, एक DBMS का उपयोग किया जाएगा पोस्टग्रेएसक्यूएल एक कंटेनर में डाक में काम करनेवाला मज़दूर. कंपनी एक पैकेज मैनेजर का उपयोग करती है पतवार, पाठ में नीचे इस पर उदाहरण होंगे। संपूर्ण समाधान के लिए, हम अपना स्वयं का चार्ट तैयार कर रहे हैं, जिसमें उपयोग की गई सभी सेवाओं के नेस्टेड चार्ट शामिल हैं।

लॉगिंग

कई कंपनियाँ लॉग एकत्र करने, देखने और केंद्रीकृत करने के लिए प्रौद्योगिकियों के ढेर का उपयोग करती हैं Elasticsearch + Logstash + Kibana, संक्षिप्त रूप में ईएलके। हमारे मामले में, सामग्री को अनुक्रमित करने की कोई आवश्यकता नहीं है और मैंने अधिक हल्के वजन का उपयोग किया है लोकी. यह हेल्म पैकेज के रूप में उपलब्ध है, हमने इसे अपने सिस्टम के अनुरूप इनग्रेस और पीवी के मूल्यों को बदलकर एक सबचार्ट के रूप में जोड़ा है।

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"

किसी इंस्टेंस पर लॉग भेजने के लिए लोकी उपयोग लोकी डॉकर लॉगिंग ड्राइवर.

आपको इस ऐड-ऑन को हर चीज़ पर इंस्टॉल करना होगा डाक में काम करनेवाला मज़दूर वे होस्ट जिनसे आप लॉग प्राप्त करना चाहते हैं। डेमॉन को यह बताने के कई तरीके हैं कि पैडिंग का उपयोग कैसे किया जाए। मैं yaml में ड्राइवर का चयन करता हूँ डॉकर लिखें, जो का हिस्सा है Ansible प्लेबुक।

पोस्टग्रेज.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 }}"
...

कहाँ लोकी_यूआरएल: kube-loki.example.domain/loci/api/v1/push

मेट्रिक्स

मेट्रिक्स को PostgreSQL का उपयोग करके एकत्र किया जाता है पोस्टग्रेस_निर्यातक के लिए प्रोमिथेउस. उपरोक्त फ़ाइल की निरंतरता Ansible प्लेबुक।

पोस्टग्रेज.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"
...

अधिक स्पष्टता के लिए, हम एंडपॉइंट्स का उपयोग करके बाहरी स्टेटफुल सेवाओं के नाम लिखेंगे।

पोस्टग्रेस-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 }}

Postgres_exporter डेटा प्राप्त करने के लिए प्रोमेथियस को कॉन्फ़िगर करना उपचार्ट में मानों को संपादित करके किया जाता है।

values.yaml

scrape_configs:
...
  - job_name: postgres-exporter
    static_configs:
      - targets: 
         - postgres-exporter.applicationnamespace.svc.cluster.local:9187
        labels:
          alias: postgres
...

प्राप्त डेटा को विज़ुअलाइज़ करने के लिए, उपयुक्त डैशबोर्ड स्थापित करें
ग्राफाना और डेटा स्रोतों को कॉन्फ़िगर करें। यह ग्राफाना उपचार्ट में मानों के माध्यम से भी किया जा सकता है।

यह कैसा दिखता है
कुबेरनेट्स क्लस्टर में बाहरी सेवाओं की निगरानी और लॉगिंग

मुझे आशा है कि इस संक्षिप्त लेख ने आपको इस समाधान के पीछे के मुख्य विचारों को समझने में मदद की और कुबेरनेट्स क्लस्टर में लोकी/प्रोमेथियस के लिए बाहरी सेवाओं की निगरानी और लॉगिंग स्थापित करते समय आपका समय बचाया।

स्रोत: www.habr.com

एक टिप्पणी जोड़ें