You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用负逻辑配置logcheck规则,仅接收指定日志?

实现Logcheck仅接收指定日志(无需忽略规则)

当然可以!这种“只保留我关心的日志、其余全部过滤”的需求,完全可以通过类似egrep的匹配逻辑来实现,甚至不需要写任何忽略规则。下面给你两种实用的方案:

方案1:直接用egrep预过滤日志(最直观)

Logcheck的核心是处理日志并发送符合条件的内容,我们可以在它处理之前,先把日志过滤成仅包含你想要的条目,剩下的直接丢弃。

具体步骤:

  • 第一步:创建你的自定义规则文件,比如/etc/logcheck/wanted.d/my-important-patterns,每一行写一个匹配目标日志的正则表达式,比如:
    # 匹配SSH成功登录日志
    ^sshd\[[0-9]+\]: Accepted publickey for .* from
    # 匹配root用户的CRON任务执行日志
    ^CRON\[[0-9]+\]: \((root)\) CMD
    # 匹配系统启动成功的日志
    ^systemd\[1\]: Started User Manager for UID
    
  • 第二步:修改Logcheck的执行脚本(比如/etc/cron.daily/logcheck,如果是按天运行的话),把原来的日志读取逻辑替换成预过滤后的内容:
    # 先过滤出匹配规则的日志,再传给logcheck处理
    cat /var/log/syslog /var/log/auth.log | egrep -f /etc/logcheck/wanted.d/my-important-patterns | /usr/sbin/logcheck -o
    
    这里的-o参数让Logcheck只输出未被忽略的内容,而我们已经提前过滤掉了不需要的,所以最终只会收到你定义的日志。

方案2:利用Logcheck自带的violations级别(更贴合原生流程)

Logcheck默认有不同的报告级别,其中violations是最高优先级的日志类别。我们可以把所有想要接收的日志都标记为violations,然后让Logcheck只发送这个级别的内容:

  • 第一步:清空或移走默认的violations规则(比如/etc/logcheck/violations.d/下的默认文件),然后在该目录下创建自己的规则文件,比如/etc/logcheck/violations.d/my-custom-rules,内容和方案1的规则一致。
  • 第二步:编辑/etc/logcheck/logcheck.conf,把REPORTLEVEL参数改成:
    REPORTLEVEL="violations"
    
    这样Logcheck会忽略所有非violations级别的日志,只发送你定义的那些条目。

关于egrep -v的补充

你提到的egrep -v是排除匹配内容的逻辑,刚好和我们的需求相反——我们需要的是保留匹配内容,所以直接用egrep(不带-v)就可以实现“只留符合规则的日志”。如果非要用-v的话,理论上可以先定义“所有不需要的日志规则”,然后用egrep -v排除,但这显然不如直接定义需要的规则高效,毕竟你要的日志肯定比不需要的少得多。

测试建议

不管用哪种方案,先手动运行过滤命令测试效果,比如:

cat /var/log/syslog | egrep -f /etc/logcheck/wanted.d/my-important-patterns

确认输出的日志都是你想要接收的,再集成到Logcheck的定时任务里。

内容的提问来源于stack exchange,提问作者pitazzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:59:41