0

目前我正在使用 Path_Key 添加文件路径。我正在尝试获取 Path_key 中存在的多个变量。

/var/log/containers/**Application_Name**-**Application_Version**.log

是否可以从现有字段映射中提取这些值?

4

1 回答 1

0

要提取用于Tag其中的值非常简单,您将有如下输入:

[INPUT]
    Name  tail
    Path  /var/log/containers/*-*.log
    Path_Key  filename
    Tag <appname>.<appversion>
    Tag_Regex  /(?<appname>[^-]+)-(?<appversion>[^.]+).log$

Tag_Regex用于设置<appname>和可用于设置的<appversion>变量Tag


至于在日志条目的字段中设置这些类型的值,我找不到任何“本机”方法来做到这一点。但是,我能够通过使用Lua 过滤器来实现类似的效果:

[INPUT]
    Name  tail
    Path  /var/log/containers/*-*.log
    Path_Key  filename

[FILTER]
    Name  lua
    Match  *
    script  helper.lua
    call  extract_app_fields

它调用文件中的extract_app_fields函数helper.lua

function extract_app_fields(tag, timestamp, record)
    retcode = 0
    filename = record['filename']
    
    if filename ~= nil then
        appname = filename('/([^-]+)-[^.]+\.log')
        appversion = filename('/[^-]+-([^.]+)\.log')
        
        if appname ~= nil then
            record['appname'] = appname
            retcode = 2
        end
        
        if appversion ~= nil then
            record['appversion'] = appversion
            retcode = 2
        end
    end
    
    return retcode, timestamp, record
end

extract_app_fields函数从 中提取appname和并更新 中的字段,如果它们可以确定的话。appversionfilenamerecord

注意:我是 Lua 新手,所以使用 Lua 可能有更好的方法。

于 2020-12-08T07:18:09.770 回答