Использование фильтра Fluent Bit Modify в свойствах Kubernetes - PullRequest
0 голосов
/ 06 мая 2020

Я использую Fluent Bit (1.3.11) для сбора журналов из контейнеров, работающих на k8s. Что я хотел бы сделать, так это некоторую базовую c обработку с использованием фильтров Fluent Bit Modify (т.е. стандартизировать имена уровней журнала).

Я добавил два фильтра модификации (см. Ниже). Первый - просто проверить, работают ли фильтры модификации. Он проверяет наличие ключа log и устанавливает свойство, если оно найдено. Это работает. Второй фильтр модификации - это то, что я на самом деле пытаюсь сделать. Он якобы переписывает значение log_processed.Level с ERR на Error, но я не мог заставить его работать. После некоторых экспериментов я думаю, что ни один из фильтров, у которых есть условие, зависящее от свойств log_processed.* или kubernetes.* (добавленных фильтром kubernetes), не работает.

Есть ли рекомендуемый / рабочий способ изменения журналов идёт из Kubernetes?


 [FILTER]
        Name                kubernetes
        Match               kube.*
        Kube_URL            https://kubernetes.default.svc:443
        Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token
        Kube_Tag_Prefix     kube.var.log.containers.
        Merge_Log           On
        Merge_Log_Key       log_processed

        K8S-Logging.Parser  On
        K8S-Logging.Exclude Off

    [FILTER] 
        Name        modify
        Match       kube.*

        Condition   Key_exists log

        Set         my.custom.prop modify-filter-applied

    [FILTER]
        NAME        modify
        Match       kube.*

        Condition   Key_value_equals log_processed.Level ERR

        Set         log_processed.Level Error

1 Ответ

0 голосов
/ 07 мая 2020

Мне удалось использовать Lua фильтр для изменения записей.

[FILTER]
    Name                lua
    Match               kube.*
    script              levelRewrite.lua
    call                level_rewrite
function level_rewrite(tag, timestamp, record)
    for key, val in pairs(record) do
        if key == "log_processed" then
            if val["level"] == "I" then
                val["level"] = "Info"
                -- return code 2 is supported in Fluent Bit v.1.4.3+
                return 2, timestamp, record
            end
        end
    end

    return 0, 0, 0
end

...