監控並將外部服務記錄到 Kubernetes 叢集

監控並將外部服務記錄到 Kubernetes 叢集

祝大家好運。

我還沒有找到關於將第三方服務的指標記錄和收集到部署在的系統中的通用指南 Kubernetes。 我正在發布我的解決方案。 本文假設您已經有一個可用的 普羅米修斯 和其他服務。 作為外部有狀態服務的資料來源的範例,將使用 DBMS PostgreSQL的 在容器中 碼頭工人。 公司使用套件管理器 ,下文中會有相關範例。 對於整個解決方案,我們正在準備自己的圖表,其中包括所有使用的服務的巢狀圖表。

記錄

許多公司使用一堆技術來收集、查看和集中日誌 Elasticsearch + Logstash + 基巴納,縮寫為ELK。 在我們的例子中,不需要對內容進行索引,我使用了更輕量級的 洛基。 它可以作為 Helm 套件提供,我們透過更改 ingress 和 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撰寫,這是一部分 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 從 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 資料是透過編輯子圖中的值來完成的。

值.yaml

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

若要視覺化接收到的數據,請安裝適當的儀表板
格拉法納 並配置資料來源。 這也可以透過 Grafana 子圖中的值來完成。

看起來如何
監控並將外部服務記錄到 Kubernetes 叢集

我希望這篇簡短的文章可以幫助您了解該解決方案背後的主要思想,並在 Kubernetes 叢集中為 Loki/Prometheus 設定外部服務的監控和日誌記錄時節省您的時間。

來源: www.habr.com

添加評論