Performance
rsyslog 寫入 postgres。rsyslog 程序非常高的 cpu,postgres 非常低的 cpu
我正在使用 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 - 如果可能的話。