syslog-ng return 映射不存在时的原始值

syslog-ng return original value when mapping does not exists

我正在使用 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 映射。在这种情况下,我只是在系统日志消息中得到空白 space 。如果映射不存在,可以选择 return 默认值,但我更愿意 return 原始值(IP 地址)

如果存在映射,则将 IP 地址转换为主机名 >> 有效 如果映射不存在,return原始IP地址>>不知道如何设置

这甚至受支持吗?
谢谢

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

TLDR:CSV 文件也支持模板。


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

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