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