Fluent-bit Match не работает, за исключением *

Я использую контейнеры 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 для достижения этой цели?

Дополнительная информация:

  • Версия Fluent Bit: AWS_FOR_FLUENT_BIT_VERSION 2.32.2.20240627
  • Настройка AWS Fargate
  • Использование контейнеров log_router

Обновление – 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

Обратите внимание, что Stack Overflow предназначен для вопросов по программированию. Вместо этого рассмотрите возможность задать вопросы системному администратору на serverfault.com.

Jonas 22.07.2024 12:06

разместил serverfault.com/questions/1162871/…

Umair 22.07.2024 12:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поработав над этим, я наконец нашел решение. Вот моя рабочая конфигурация, которая передает данные в 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. Возможно, это правильный ответ, но было бы очень полезно предоставить дополнительные пояснения к вашему коду, чтобы разработчики могли понять ваши рассуждения. Это особенно полезно для новых разработчиков, которые не так хорошо знакомы с синтаксисом или пытаются понять концепции. Не могли бы вы отредактировать свой ответ, включив в него дополнительную информацию на благо сообщества?

Jeremy Caney 30.07.2024 20:23

Другие вопросы по теме