在 Kubernetes 属性上使用 Fluent Bit 修改过滤器

Using Fluent Bit Modify Filter on Kubernetes properties

我正在使用 Fluent Bit (1.3.11) 从 k8s 上的容器 运行 收集日志。我想做的是使用 Fluent Bit Modify 过滤器进行一些基本处理(即标准化日志级别名称)。

我添加了两个修改过滤器(见下文)。第一个只是验证修改过滤器是否有效。它检查 log 键是否存在,如果找到则设置 属性。这样可行。 第二个修改过滤器是我实际想要做的。它应该将 log_processed.Level 值从 ERR 重写为 Error 但我无法让它真正起作用。经过一些试验后,我认为 none 的过滤器具有取决于 log_processed.*kubernetes.* 属性(由 kubernetes 过滤器添加)的条件。

是否有 recommended/working 修改来自 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

我设法利用 Lua filter 修改记录。

[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