0

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

我添加了两个修改过滤器(见下文)。第一个只是验证修改过滤器是否有效。它检查logkey 是否存在,如果找到则设置属性。这样可行。第二个修改过滤器是我真正想要做的。据说它会将log_processed.Level值从ERRto重写,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
4

1 回答 1

0

我设法利用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

于 2020-05-07T16:51:52.050 回答