การตรวจสอบและบันทึกบริการภายนอกไปยังคลัสเตอร์ Kubernetes

การตรวจสอบและบันทึกบริการภายนอกไปยังคลัสเตอร์ Kubernetes

ขอให้ทุกคนโชคดี

ฉันไม่พบคำแนะนำทั่วไปทางออนไลน์เกี่ยวกับการบันทึกและรวบรวมตัวชี้วัดจากบริการของบุคคลที่สามเข้าสู่ระบบที่ใช้งาน Kubernetes. ฉันกำลังโพสต์วิธีแก้ปัญหาของฉัน บทความนี้อนุมานว่าคุณมีงานทำอยู่แล้ว โพร และบริการอื่นๆ เพื่อเป็นตัวอย่างของแหล่งข้อมูลสำหรับบริการ stateful ภายนอก DBMS จะถูกนำมาใช้ PostgreSQL ในภาชนะ นักเทียบท่า. บริษัทใช้ตัวจัดการแพ็คเกจ หางเสือด้านล่างในข้อความจะมีตัวอย่างอยู่ สำหรับโซลูชันทั้งหมด เรากำลังเตรียมแผนภูมิของเราเอง ซึ่งรวมถึงแผนภูมิแบบซ้อนของบริการทั้งหมดที่ใช้

การบันทึก

บริษัทหลายแห่งใช้เทคโนโลยีมากมายเพื่อรวบรวม ดู และรวมศูนย์บันทึก ElasticSearch + Logstash + kibanaย่อว่า ELK ในกรณีของเรา ไม่จำเป็นต้องจัดทำดัชนีเนื้อหา และฉันใช้แบบน้ำหนักเบากว่านี้ โลกิ. มีให้เลือกใช้งานเป็นแพ็คเกจ Helm เราได้เพิ่มเป็นแผนภูมิย่อยโดยการเปลี่ยนค่าทางเข้าและ pv ให้เหมาะสมกับระบบของเรา

ค่านิยม.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 Docker Composeซึ่งเป็นส่วนหนึ่งของ เบิ้ล หนังสือเล่น

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 สำหรับ โพร. ความต่อเนื่องของไฟล์ข้างต้น เบิ้ล หนังสือเล่น

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 ทำได้โดยการแก้ไขค่าในแผนภูมิย่อย

ค่านิยม.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

ที่มา: will.com

เพิ่มความคิดเห็น