Я использую контейнеры AWS Fargate и log_router со специальной конфигурацией Fluent Bit для маршрутизации журналов. Вот моя текущая конфигурация:
[FILTER]
Name grep
Match cw
Exclude log unwatedtext
[FILTER]
Name modify
Match cw
Remove source
Remove container_id
Remove container_name
Remove ec2_instance_id
Remove ecs_cluster
Remove ecs_task_arn
Remove ecs_task_definition
[OUTPUT]
Name cloudwatch_logs
Match cw
log_key log
region eu-west-1
log_group_name /ecs/container
log_stream_prefix fluent-bit-
auto_create_group On
log_format json/emf
[OUTPUT]
Name s3
bucket mybucket
total_file_size 100M
log_key log
match *
s3_key_format /$TAG/%Y/%m/%d/
use_put_object on
upload_timeout 1M
region eu-west-1
В настоящее время необработанный текст удаляется из выходных данных CloudWatch и S3. Однако я хочу удалить его только для CloudWatch и отправить все логи, в том числе с unwatedtext, на S3.
Как я могу изменить конфигурацию Fluent Bit для достижения этой цели?
Дополнительная информация:
Обновление – 22 июля 24 г.
Я нашел проблему. Любая помощь будет оценена по достоинству Match работает только для *, и я не понимаю, почему это происходит. Вот моя обновленная конфигурация.
Lua-скрипт
function process_record(tag, timestamp, record)
print("Input tag: ", tag)
print("Record: ", record["tag"])
local s3_log = {}
local cw_log = {}
for k, v in pairs(record) do
cw_log[k] = v
cw_log["tag"] = "cw"
s3_log[k] = v
s3_log["tag"] = "s3"
end
print("S3 tag: ", s3_log["tag"])
print("CW tag: ", cw_log["tag"])
print("S3 Log: ", s3_log["log"])
print("CW Log: ", cw_log["log"])
return 2, timestamp, {s3_log, cw_log}
end
конфигурация
[SERVICE]
flush 1
daemon off
log_level debug
[FILTER]
Name lua
Match *
script /append_tag.lua
call process_record
[FILTER]
Name lua
Match $tag cw
script /print.lua
call process_record
[FILTER]
Name rewrite_tag
Match cw
Rule $tag .* cw true
Emitter_Name cw_emitted
[OUTPUT]
Name cloudwatch_logs
Match *cw*
# Match *
# Match_regex ^(cw)$
log_key log
region af-south-1
log_group_name /ecs/log
log_stream_prefix fluent-bit-
auto_create_group On
log_format json/emf
разместил serverfault.com/questions/1162871/…
Поработав над этим, я наконец нашел решение. Вот моя рабочая конфигурация, которая передает данные в cw и s3 и удаляет некоторые журналы для cw.
logDestinations.conf
[FILTER]
Name lua
Match *
script /script.lua
call process_record
[FILTER]
Name rewrite_tag
Match_regex .*demo.*
Rule $tag "^(cw)$" cw.$container_id true
Emitter_Name re_emitted_cw
[FILTER]
Name grep
Match_regex .*cw.*
Exclude tag s3
[FILTER]
Name grep
Match_regex .*cw.*
Exclude log /.*message\":\"remove.*/
[FILTER]
Name grep
Match_regex .*demo.*
Exclude tag cw
[OUTPUT]
Name cloudwatch_logs
Match_regex .*cw.*
log_key log
region af-south-1
log_group_name /ecs/demo
log_stream_prefix fluent-bit-
auto_create_group On
log_format json/emf
[OUTPUT]
bucket s3_bucket
total_file_size 200M
log_key log
Match_regex .*demo.*
s3_key_format /demo/%Y-%m-%d/$TAG/
use_put_object on
upload_timeout 1M
region af-south-1
Name s3
скрипт.lua
function process_record(tag, timestamp, record)
local s3_log = {}
local cw_log = {}
if record["log"] == nil then
record["log"] = record["message"] or "default_log_message"
end
for k, v in pairs(record) do
cw_log[k] = v
cw_log["tag"] = "cw"
s3_log[k] = v
s3_log["tag"] = "s3"
end
return 2, timestamp, {s3_log, cw_log}
end
Докерфайл
FROM cr.fluentbit.io/fluent/fluent-bit
ADD logDestinations.conf /logDestinations.conf
ADD script.lua /script.lua
Благодарим вас за вклад в сообщество Stack Overflow. Возможно, это правильный ответ, но было бы очень полезно предоставить дополнительные пояснения к вашему коду, чтобы разработчики могли понять ваши рассуждения. Это особенно полезно для новых разработчиков, которые не так хорошо знакомы с синтаксисом или пытаются понять концепции. Не могли бы вы отредактировать свой ответ, включив в него дополнительную информацию на благо сообщества?
Обратите внимание, что Stack Overflow предназначен для вопросов по программированию. Вместо этого рассмотрите возможность задать вопросы системному администратору на serverfault.com.