ポッドのサイドカーとしての流暢なビット


最新のアプリケーションでは、ロギング機構があります.同様に、コンテナエンジンはロギングをサポートするように設計されています.コンテナ化されたアプリケーションの最も簡単で最も採用されているロギングメソッドは、標準出力と標準エラーストリームに書き込みます.しかし、コンテナエンジンまたはランタイムによって提供されるネイティブの機能性は、通常完全なログ解決のために十分ではありません.
ログを記録するアーキテクチャには、別のバックエンドが必要です.Kubernetesはログデータのネイティブストレージソリューションを提供しません.代わりに、多くのログ記録ソリューションはKubernetesと統合します.
この記事では、目標は、標準的な出力ログを収集し、集中的な店に出荷することです.ログコレクタは、ポッド内のサイドカーとして、またはクラスタ内のデーモンとして設定できます.

アーキテクチャ
fluentビットは、podから標準出力ログを収集して出荷するために使用されます.これは、オープンソースのログプロセッサと出荷者は、パフォーマンスを念頭に置いて設計されています:低CPUとメモリ使用量とハイスループット.オープンソース時系列データベースの流入dbは,ログの集中化ストアとして使用される.


設定:

待って!ポッドからstdoutログにアクセスする方法?
標準出力ログは/var/log/pods/{NAMESPACE}_{POD_NAME}_{POD_ID}/{CONTAINER_NAME}/*.log ファイル.我々は、ちょうど上記の場所に存在するすべてのログファイルを尾する必要があります.

フルビットの設定
FluentビットConfigテンプレートを保持するためにConfigMapが作成されます.
apiVersion: v1
kind: ConfigMap
metadata:
  name: fluent-bit-config-template
data:
  fluent-bit-template.conf: |
    [INPUT]
      Name tail
      Path /var/log/pods/${NAMESPACE}_${POD_NAME}_${POD_ID}/${CONTAINER_NAME}/*.log
    [OUTPUT]
      Name          influxdb
      Match         *
      Host          ${INFLUX_HOST}
      Port          ${INFLUX_PORT}
      Database      ${INFLUX_DB}
      Sequence_Tag  _seq
      http_token    ${INFLUX_TOKEN}
      Bucket        ${INFLUX_BUCKET}
      Org           ${INFLUX_ORG}

への流暢なビット接続
EncrypXDBのアクセス構成と資格情報を含む秘密オブジェクトが作成されます.
apiVersion: v1
kind: Secret
metadata:
  name: influx-db-cred
data:
  INFLUX_HOST: <<TO_BE_UPDATED>>
  INFLUX_PORT: <<TO_BE_UPDATED>>
  INFLUX_DB: <<TO_BE_UPDATED>>
  INFLUX_TOKEN: <<TO_BE_UPDATED>>
  INFLUX_BUCKET: <<TO_BE_UPDATED>>
  INFLUX_ORG: <<TO_BE_UPDATED>>

サイドカーとしての流暢ビット実行のためのPOD構成
ボリュームは、Fluentビット設定ファイルテンプレート、実際のテンプレートファイルを保持するために使用されます.ホストに存在するpodログはサイドカーにマウントされます.
  volumes:
  - name: fluent-bit-config-template
    configMap:
      name: fluent-bit-config-template
      defaultMode: 0777
  - name: app-log
    hostPath:
      path: /var/log/pods
      type: Directory
  - name: fluent-bit-config
    emptyDir: {}
有効なfluentビット設定ファイルが定義されたテンプレートから生成されます.すべての必要な詳細と資格情報は、テンプレートからfluentビット設定ファイルを準備するinitコンテナに注入されます.K 8 S下のAPIを使用して、pod情報が公開されます.
  initContainers:
  - name: fluent-bit-config-manager
    image: busybox:latest
    volumeMounts:
      - mountPath: /fluent-bit-template.conf
        name: fluent-bit-config-template
        subPath: fluent-bit-template.conf
      - mountPath: /conf
        name: fluent-bit-config
    envFrom:
    - secretRef:
        name: influx-db-cred
    env:
    - name: POD_ID
      valueFrom:
        fieldRef:
          fieldPath: metadata.uid
    - name: POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
    - name: NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
    - name: CONTAINER_NAME
      value: *container1
    command: ["/bin/sh"]
    args:
    - -c
    - eval "echo \"$(cat /fluent-bit-template.conf)\"" > /conf/fluent-bit.conf
流暢なビットサイドカーコンテナは、PODと生成された設定ファイルによって作成されたログファイルへのアクセスを必要とします.両方のボリュームを使用してサイドカーにマウントされます.
  - name: fluent
    image: fluent/fluent-bit:1.8
    volumeMounts:
      - mountPath: /fluent-bit/etc/fluent-bit.conf
        name: fluent-bit-config
        subPath: fluent-bit.conf
      - mountPath: /var/log/pods
        name: app-log

InfluxDBダッシュボードのログの視覚化
構成されたバケツにクエリを実行すると、サイドカーによって出荷されたすべてのログを含む結果セットが返されます.


次は何ですか.
  • 流暢なビットによってサポートされる異なる入力と出力プラグインを調査してください.
  • パーサとフィルタを使ってログを整形する
  • 独自の流暢なビットプラグインを構築する
  • クラスタ内のエラー発生として流暢ビットを実行します.
  • Here すべてのマニフェストはセットアップに使用されます.