【问题标题】:syslog-ng return original value when mapping does not exists当映射不存在时,syslog-ng 返回原始值
【发布时间】:2022-01-14 17:33:37
【问题描述】:

我正在使用 syslog-ng 来收集 json 消息并向 slack 发送警报

json 消息中有一个参数,其中包含我从中接收 json 消息的路由器的 IP 地址,我想将 IP 地址转换为路由器主机名

我正在使用两个解析器 1) 解析 json 2) 用路由器主机名替换 IP 地址:

parser p_json {
    json-parser(prefix(".json."));
};

parser p_acd_router {
    add-contextual-data(selector("${.json.router_ip}"), database("host_map.csv"), prefix(".meta_router."));
};

到目前为止,一切正常。 你好, 当我收到来自路由器的日志消息并且我在 csv 文件中没有 IP_to_Hostname 映射时遇到问题。在这种情况下,我只是在系统日志消息中得到空白。如果映射不存在,可以选择返回默认值,但我更愿意返回原始值(IP 地址)

如果存在映射,则将 IP 地址转换为主机名 >> 有效 如果映射不存在,返回原IP地址>>不知道怎么设置

这甚至受支持吗?
谢谢

【问题讨论】:

    标签: syslog syslog-ng


    【解决方案1】:

    您可以为add-contextual-data() 设置default-selector("UNKNOWN") 选项,并在您的CSV 文件中添加一条ID 为UNKNOWN 的记录,并在设置.meta_router.hostname 时使用以下值:${.json.router_ip}

    TLDR:CSV 文件中也支持模板。


    注意:如果您的 IP 可以反向解析,您可以只使用 $(dns-resolve-ip) 模板函数,而不是维护完整的 CSV 数据库:

    https://github.com/syslog-ng/syslog-ng/pull/3046

    【讨论】:

    • 完美,谢谢! (在这种情况下,IP 无法解析,因此需要第一种解决方案)
    猜你喜欢
    • 2022-01-14
    • 2015-05-04
    • 1970-01-01
    • 2017-06-03
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2019-10-22
    相关资源
    最近更新 更多