Giám sát và ghi nhật ký các dịch vụ bên ngoài vào cụm Kubernetes

Giám sát và ghi nhật ký các dịch vụ bên ngoài vào cụm Kubernetes

Chúc mọi người may mắn.

Tôi chưa tìm thấy hướng dẫn tổng quát trực tuyến về cách ghi nhật ký và thu thập số liệu từ các dịch vụ của bên thứ ba vào các hệ thống được triển khai trong Kubernetes. Tôi đang đăng giải pháp của mình. Bài viết này giả định rằng bạn đã có một Prometheus và các dịch vụ khác. Ví dụ về nguồn dữ liệu cho dịch vụ trạng thái bên ngoài, DBMS sẽ được sử dụng PostgreSQL trong một thùng chứa phu bến tàu. Công ty sử dụng trình quản lý gói Quản lý, bên dưới văn bản sẽ có ví dụ về nó. Đối với toàn bộ giải pháp, chúng tôi đang chuẩn bị biểu đồ của riêng mình, bao gồm các biểu đồ lồng nhau của tất cả các dịch vụ được sử dụng.

ghi nhật ký

Nhiều công ty sử dụng nhiều công nghệ để thu thập, xem và tập trung nhật ký Elasticsearch + Logstash + kibana, viết tắt là ELK. Trong trường hợp của chúng tôi, không cần lập chỉ mục nội dung và tôi đã sử dụng một công cụ nhẹ hơn Loki. Nó có sẵn dưới dạng gói Helm, chúng tôi đã thêm nó dưới dạng biểu đồ con bằng cách thay đổi các giá trị cho ingress và pv cho phù hợp với hệ thống của chúng tôi.

giá trị.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"

Để gửi nhật ký đến một phiên bản Loki sử dụng Trình điều khiển ghi nhật ký Docker của Loki.

Bạn phải cài đặt tiện ích bổ sung này trên mọi thứ phu bến tàu máy chủ mà bạn muốn nhận nhật ký từ đó. Có một số cách để yêu cầu daemon cách sử dụng phần đệm. Tôi chọn trình điều khiển trong yaml Docker Soạn, là một phần của Có khả năng sách vở.

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 }}"
...

nơi loki_url: kube-loki.example.domain/loki/api/v1/push

Số liệu

Số liệu được thu thập từ PostgreSQL bằng cách sử dụng postgres_exporter cho Prometheus. Tiếp tục file trên Có khả năng sách vở.

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"
...

Để rõ ràng hơn, chúng tôi sẽ viết tên của các dịch vụ có trạng thái bên ngoài bằng cách sử dụng Điểm cuối.

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 }}

Việc định cấu hình Prometheus để nhận dữ liệu postgres_exporter được thực hiện bằng cách chỉnh sửa các giá trị trong biểu đồ con.

giá trị.yaml

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

Để trực quan hóa dữ liệu đã nhận, hãy cài đặt Bảng điều khiển thích hợp trong
grafana và cấu hình các nguồn dữ liệu. Điều này cũng có thể được thực hiện thông qua các giá trị trong biểu đồ con Grafana.

Nó trông như thế nào
Giám sát và ghi nhật ký các dịch vụ bên ngoài vào cụm Kubernetes

Tôi hy vọng bài viết ngắn này đã giúp bạn hiểu được những ý tưởng chính đằng sau giải pháp này và giúp bạn tiết kiệm thời gian khi thiết lập giám sát và ghi nhật ký các dịch vụ bên ngoài cho Loki/Prometheus trong cụm Kubernetes.

Nguồn: www.habr.com

Thêm một lời nhận xét