外部サービスの監視と Kubernetes クラスターへのログ記録

外部サービスの監視と Kubernetes クラスターへのログ記録

皆さんの幸運を祈ります。

サードパーティのサービスからデプロイされたシステムへのメトリクスのログ記録と収集に関する一般的なガイドをオンラインで見つけることができませんでした。 Kubernetes。 私の解決策を投稿しています。 この記事は、すでに動作するものがあることを前提としています。 プロメテウス およびその他のサービス。 外部ステートフル サービスのデータ ソースの例として、DBMS が使用されます。 PostgreSQL コンテナ内 デッカー。 会社はパッケージマネージャーを使用しています ヘルメット、本文の下に例があります。 ソリューション全体として、使用されるすべてのサービスのネストされたグラフを含む独自のグラフを準備中です。

ロギング

多くの企業は、ログの収集、表示、一元化に一連のテクノロジーを使用しています。 Elasticsearch + ログスタッシュ + キバナ、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でドライバーを選択します ドッカーの作成の一部である 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 }}

postgres_exporter データを受信するように Prometheus を構成するには、サブチャートの値を編集します。

値.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 の外部サービスの監視とログ記録を設定する際の時間を節約するのに役立つことを願っています。

出所: habr.com

コメントを追加します