比较IP阵列和rsyslog

时间:2019-01-03 12:34:08

标签: arrays json jq lookup-tables rsyslog

在日志文件中存储有一个IP列表(其数量每隔几分钟更改一次)。日志文件仅包含唯一IP(排序-u):

IP-Pool.log [Example]:
192.168.1.1
192.168.1.2
10.1.1.0
.
.

我想用rsyslog过滤发生的连接事件并按以下顺序对它们进行排序:

  • $ msg包含一个IP数组[IP-Pool-List]的事件
  • $ msg不包含Array [IP-Pool-List]的任何IP的事件

因此,我必须将IP放入一个数组中,以便可以对它们进行比较,但是我还没有找到一种方法。

if $msg contains 'connection-event-id' then {

  if $msg contains 'Array[IP-Pool-List] then {
    -/var/log/event_contains_ip.log      
    STOP
  }
  else{
   -/var/log/event_doesnt_contain_ip.log
   STOP
  }

}

由于文件每隔几分钟更改一次,我还必须重新启动rsyslogd服务以刷新阵列[IP-Pool-List]吗?

是否可以使用rsyslog解决此问题,或者有更简单/更好的方法来做到这一点?

编辑

我使用crontab和inotifywait来使IP-Pool-File保持最新。

@reboot inotifywait -q -m -e modify /var/log/client-ips.log | 
while read -r filename events; do sort -u /var/log/client-ips.log 
-o /var/log/ips-unique.log ;done

我还通过邮件发送到“ rsyslog-community”询问了此问题,其联系邮件列在rsyslog文档(https://lists.adiscon.net/mailman/listinfo/rsyslog)的底部 他们给我建议使用“查找表”来解决此问题。当前正在阅读如何正确使用它们。由于我学习速度较慢,因此需要一段时间。

编辑2

一个新的计划开始形成:

  • 要启动Lookup-Table,我需要创建一个JSON-File, 包含我将用来构建过滤器的值
  • 每当将新IP添加到JSON文件时,都使用“ reload_lookup_table”或“ JQ”更新JSON文件。 IP池列表。
  • 使用RSYSLOG查找表过滤给定的IP,并拆分 结果分成两个单独的日志文件| Match.log | NoMatch.log

希望它会以这种方式工作。

新年快乐 和平使者

0 个答案:

没有答案