/ / Fluentd tworzy znacznik na podstawie wartości pola - mongodb, kubernetes, fluentd

Fluentd tworzy znacznik na podstawie wartości pola - mongodb, kubernetes, fluentd

mam Kubernetes klaster, w którym próbuję agregować dzienniki kontenerów na węzłach i wysyłać je do MongoDB. Jednak muszę mieć możliwość wysyłania rekordów dziennika do różnych serwerów MongoDB na podstawie wartości zapisanych w dzienniku.

Używam płynny plugin-kubernetes_metadata_filter wtyczka do dołączania dodatkowych informacji z Kubernetes do rekordu dziennika. Jednym z tych pól jest kubernetes_namespace_name. Czy można użyć tego pola do utworzenia tagu, którego mogę użyć do dopasowania wtyczki wyjściowej mongodb.

Na przykład. Poniżej używam tylko jednego wyjścia, ale pomysł polega na tym, aby mieć wiele i pozwolić płynnie wysyłać dzienniki do bazy danych mongodb na podstawie wartości w polu kubernetes_namespace_name:

<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>

Odpowiedzi:

0 dla odpowiedzi № 1

zamiast używać tagu, możesz użyć treści wiadomości do filtrowania za pomocą Fluentda grep filtr. Możesz dodać filtr po meta filtrze danych kubernetes i przed spłaszczeniem danych. Umożliwia to określenie klucza nazwa_przestrzeni_podstawowej kubernetes, a następnie trasowanie zgodnie z podaną wartością. Ponieważ możesz mieć dodatkowe dane wyjściowe MongoDB, użycie etykiet może pomóc w rozdzieleniu przepływów pracy procesu.

Dokumentacja: https://docs.fluentd.org/v0.12/articles/filter_grep

Przykład:

<filter kubernetes.**>
@type grep
<regexp>
key kubernetes_namespace_name
pattern cool
</regexp>
</filter>

<YOUR MONGO CONFIG HERE>