2017-03-27 4 views
2

Kubernetes(ミニキューブ)環境でのログ処理と解析にELKスタック(elasticsearch、logsash、kibana)を使用しています。ログをキャプチャするために、私はfilebeatを使用しています。ログはfilebeatからelasticsearchに正常に伝播され、木場で見ることができます。KubernetesでELKスタックを実行しているFilebeatがログのポッド名を取得しない

私の問題は、ログレコードを発行している実際のポッドのポッド名を取得できないということです。むしろ、ログファイルを収集しているファイルビートのpodnameを取得するだけで、ログレコードを生成しているpodの名前は取得しません。 (Kibanaで見て)

私はfilebeatから得ることができる情報がある

  • beat.hostname:このフィールドの値はfilebeatポッド名です
  • beat.name:値がfilebeatポッドです
  • ホストに名前を付ける:値はfilebeatポッド名

である私もfilebeat/logstash/elasticsearchから通って流れKibanaでコンテナ情報を識別/見ることができます:

  • アプリ:値である
  • ソース-json.log {容器-IDログ}値が/hostfs/var/lib/docker/containers/{log-container-id}-json.logあります

上記のように、私はコンテナーIDを取得できますが、ポッド名は取得できないようです。

状況を緩和するために、実際のログメッセージにpod-nameを埋め込み、そこから解析することもできますが、実際のポッド名を出力するようにファイルビートを構成することができます。

ログにkubernetes(minikube)ポッド名を取り込むようにファイルビート(または他のコンポーネント)を設定する方法はありますか?以下に示されている

ConfigMap:

私の現在のfilebeat構成は下に表示され

apiVersion: v1 
kind: ConfigMap 
metadata: 
    name: filebeat 
    namespace: logging 
    labels: 
    component: filebeat 
data: 
    filebeat.yml: | 
    filebeat.prospectors: 

    - input_type: log 
     tags: 
     - host 
     paths: 
     - "/hostfs/var/log" 
     - "/hostfs/var/log/*" 
     - "/hostfs/var/log/*/*" 
     exclude_files: 
     - '\.[0-9]$' 
     - '\.[0-9]\.gz$' 

    - input_type: log 
     tags: 
     - docker 
     paths: 
     - /hostfs/var/lib/docker/containers/*/*-json.log 
     json: 
     keys_under_root: false 
     message_key: log 
     add_error_key: true 
     multiline: 
     pattern: '^[[:space:]]+|^Caused by:' 
     negate: false 
     match: after 

    output.logstash: 
     hosts: ["logstash:5044"] 

    logging.level: info 

DamemonSetを以下に示します。

apiVersion: extensions/v1beta1 
kind: DaemonSet 
metadata: 
    name: filebeat 
    namespace: logging 
spec: 
    template: 
    metadata: 
     labels: 
     component: filebeat 
    spec: 
     containers: 
     - name: filebeat 
     image: giantswarm/filebeat:5.2.2 
     imagePullPolicy: IfNotPresent 
     resources: 
      limits: 
      cpu: 100m 
      requests: 
      cpu: 100m 
     volumeMounts: 
     - name: config 
      mountPath: /etc/filebeat 
      readOnly: true 
     - name: hostfs-var-lib-docker-containers 
      mountPath: /hostfs/var/lib/docker/containers 
      readOnly: true 
     - name: hostfs-var-log 
      mountPath: /hostfs/var/log 
      readOnly: true 
     volumes: 
     - name: config 
     configMap: 
      name: filebeat 
     - name: hostfs-var-log 
     hostPath: 
      path: /var/log 
     - name: hostfs-var-lib-docker-containers 
     hostPath: 
     path: /var/lib/docker/containers 

答えて

1

免責事項:私はビートの開発者

あなたがしたいことはまだfilebeatではサポートされていませんが、間違いなく、それは我々が何らかの努力をしたいものなので、この種のマッピングをサポートする将来のリリースを期待することができます。

一方、あなたのアプローチは正しいと思います。あなたは必要な情報をログに追加してelasticsearchに入れることができます

1

名前空間に特定のポッドのグループを割り当てることで、あなたが探しているものが得られました。ネームスペース、ポッド名、コンテナ名の組み合わせ。生成されたログにも含まれており、ファイルビートでパイプされています。 image

関連する問題