【问题标题】:extract/filter syslog-ng log on linux在 linux 上提取/过滤 syslog-ng 日志
【发布时间】:2022-12-15 07:23:59
【问题描述】:

我已将 syslog-ng 配置为从另一台机器接收日志,日志每分钟都会出现一次,但包含如何从行数据中过滤不需要的消息?

例子: date=2021-06-01 time=10:01:01 ABC="1" cde=2 Xyz="aaa" name=UK
date=2021-06-01 time=10:01:02 ABC="3" cde=5 name=USA date=2021-06-01 time=10:01:03 ABC="4" cde=2

syslog-ng 的输出需要如下所示:

2020-06-01/data-20200601.log:

`date=2021-06-01 time=10:01:01 ABC="1" cde=2 Xyz="aaa" name=UK `

date=2021-06-01 time=10:01:02 ABC="3" cde=5 XyZ="" name=USA

date=2021-06-01 time=10:01:03 ABC="4" cde=2 XyZ="" name=""

基于 KEY= 的平均过滤器,如果缺少 KEY= 的值应该用“”记录(这样丢失的值就不会向左移动),所以我可以稍后根据需要进行过滤:

我尝试使用 awk 和 sed 进行解析,但系统日志“data-20200601.log”生成的日志文件的大小约为 10GB,我花了很长时间才获得此输出

2021-06-01,10:01:01,1,2,aaa,UK  

2021-06-01,10:01:02,3,5,,USA   

2021-06-01,10:01:03,4,,,,

【问题讨论】:

    标签: syslog-ng


    【解决方案1】:

    syslog-ng 有一个名为 kv-parser() 的解析器,它会将所有此类键=值部分提取到 syslog-ng 名称-值对中。

    log {
        source(some_source);
        parser { kv-parser(); };
        destination { file("this_is_where_all_logs_go" template("${name} ${ABC}")); };
    };
    

    在模板部分,如您所见,您可以使用正常的 syslog-ng 语法引用提取的名称-值对。

    您甚至可以使用 $(format-json)、$(format-welf) 等将一系列名称-值对格式化为 JSON 或其他结构化格式。

    【讨论】:

      猜你喜欢
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多