Performance

rsyslog 寫入 postgres。rsyslog 程序非常高的 cpu,postgres 非常低的 cpu

  • November 29, 2018

我正在使用 rsyslog 將 dns 數據寫入 postgres。消息總是很短並且彼此相似:<ip of host making dns request> <dns request> 我使用正則表達式從請求者中提取 ip,從請求中提取 FQDN。

rsyslog 一直是 40%-55% cpu 使用率,而 postgres 只有 0.5%-2.5% cpu。(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")

由於消息通過 syslog 傳遞到 PostGreSQL,因此您必須調整 rsyslog。

複雜的正則表達式需要處理 - 它們按順序處理 - 逐行 - 直到最後一個匹配完成。

您那裡的正則表達式看起來很複雜-嘗試使其更容易-也許您可以將DNS日誌重定向到自己的系統日誌設備(local2?)並將整個設備記錄到PostGreSQL。

或者讓 DNS 直接登錄到 PostGreSQL - 如果可能的話。

引用自:https://serverfault.com/questions/941748