노드에 컨테이너 로그를 집계하여 MongoDB
에 보내려고하는 Kubernetes
클러스터가 있습니다. 그러나 로그 레코드의 값을 기반으로 다른 MongoDB 서버에 로그 레코드를 보낼 수 있어야합니다.Fluentd는 필드 값을 기반으로 태그를 만듭니다.
Kubernetes의 추가 정보를 로그 레코드에 첨부하기 위해 fluent-plugin-kubernetes_metadata_filter 플러그인을 사용하고 있습니다. 해당 입력란 중 하나는 kubernetes_namespace_name
입니다. 이 필드를 사용하여 mongodb 출력 플러그인과 일치시킬 수있는 태그를 만들 수 있습니까?
예를 들면. 난 단지 하나 개의 출력을 사용하고 있지만, 아이디어는 필드 kubernetes_namespace_name
의 값에 따라 그 MongoDB를 데이터베이스에 로그를 보내 여러 있고 유창하게하는 것입니다 아래 :
<source>
@type tail
@label @KUBERNETES
path /var/log/containers/*.log
pos_file /var/log/es-containers.log.pos
time_format %Y-%m-%dT%H:%M:%S
tag kubernetes.*
format json
keep_time_key true
read_from_head true
</source>
<label @KUBERNETES>
<filter kubernetes.**>
@type kubernetes_metadata
kubernetes_url "#{ENV['K8S_HOST_URL']}"
bearer_token_file /var/run/secrets/kubernetes.io/serviceaccount/token
ca_file /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
include_namespace_id true
</filter>
<filter kubernetes.**>
@type flatten_hash
separator _
</filter>
# < Tag 'kubernetes.namespace.default' is created here somehow >
<match kubernetes.namespace.default>
@type mongo
host "#{ENV['MONGO_HOST']}"
port "#{ENV['MONGO_PORT']}"
database "#{ENV['MONGO_DATABASE']}"
collection "#{ENV['MONGO_COLLECTION']}"
capped
capped_size 1024m
user "#{ENV['MONGO_USER']}"
password "#{ENV['MONGO_PASSWORD']}"
time_key time
flush_interval 10s
</match>
</label>
그래서 당신은 내가 한 소스와 여러 라벨 그것의 자신의 흐름과 각을 가질 필요가 있다는 것을 의미? – amofasser
구성에 상당한 의존성이있을 것입니다.하지만이 방법이 효과가 있습니다. –