rsyslog 写入 postgres。rsyslog 进程 CPU 使用率非常高,postgres CPU 使用率非常低

rsyslog 写入 postgres。rsyslog 进程 CPU 使用率非常高,postgres CPU 使用率非常低

我使用 rsyslog 将 dns 数据写入 postgres。这些消息总是很短且彼此相似:<ip of host making dns request> <dns request> 我使用正则表达式从请求者那里提取 ip,从请求那里提取 FQDN。

rsyslog 的 CPU 使用率始终为 40%-55%,而 postgres 的 CPU 使用率仅为 0.5%-2.5%。(rsyslog 和 postgres 在同一台主机上)

有没有办法通过将更多的工作负载转移到 postgres 来降低 rsyslog cpu 的使用率?我尝试将queue.size从 50,000 更改为 1,000,但似乎没有什么区别。

template(name="sql-syslog" type="list" option.sql="on") {
  constant(value="INSERT INTO tablename (request_time, server, ip, request) values ('")
  property(name="timereported" dateformat="pgsql")
  constant(value="','")
  property(name="fromhost")
  constant(value="','")
  property(name="msg"
    regex.type="ERE"
    regex.submatch="1"
    regex.expression="([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}) (.*\\.) (.*)$"
    regex.nomatchmode="DFLT"
  )
  constant(value="','")
    property(name="msg"
    regex.type="ERE"
    regex.submatch="2"
    regex.expression="([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}) (.*\\.) (.*)$"
    regex.nomatchmode="DFLT"
    )
  )
  constant(value="')")
}

# load module
module(load="ompgsql")

action(type="ompgsql" server="dbhost"
       user="dbuser" pass="dbpass"
       db="dbname"
       template="sql-syslog"
       queue.size="1000"
       queue.type="LinkedList"
       queue.filename="dbq"
       queue.workerthreads="5"
       queue.workerthreadMinimumMessages="500"
       queue.timeoutWorkerthreadShutdown="1000"
       queue.timeoutEnqueue="10000")

答案1

由于消息通过 syslog 传输到 PostGreSQL,因此您必须调整 rsyslog。

复杂的正则表达式需要处理 - 它们按顺序逐行处理 - 直到完成最后一次匹配。

那里的正则表达式看起来相当复杂 - 尝试使其更简单 - 也许您可以将 DNS 日志重定向到自己的系统日志设备(local2?)并将该完整的设备记录到 PostGreSQL。

或者让 DNS 直接记录到 PostGreSQL - 如果可能的话。

相关内容