Postgresql - 监控 moniter - 监控日志

监控日志,之前介绍过一个第三方工具,pgbadger。非常的好用。

这次介绍其他的方法。1. 通过ELK监控日志。2. 借助filebeats,kafka,自己编写的监控脚本。

通过ELK监控日志

说是监控日志,其实ELK主要的功能是对文件进行收集和统计。比如某个数据库的错,在一段时间出现的次数。

1. 首先搭建kafka,logstash,kibana,ElasticSearch服务。

此处省略。

2. 在每个数据库服务器中,配置filebeats读取pg_log,并发送至kafka。

3. logstash作为kafka的消费者,读取PGLOG日志,并将日志格式化。将格式化好的数据插入到elasticsearch。

4. 将kibana配置好,展示es中的内容。

这时,我们可以通过kibana,展示所有服务器的pg log。延迟基本可以控制在1分钟(这要看硬件配置和压力大小)。我们30台服务器,平均每分钟数据库产生一万行日志。延迟基本可以保持在3--5秒内。

分享一下目前我们在使用的logstash解析日志的匹配

LOGLEVEL (PANIC|FATAL|LOG|ERROR|WARNING|NOTICE|INFO|DEBUG|DETAIL|STATEMENT|HINT|CONTEXT)
ACTION (%{DATA}:)
DUR (\d+\.\d+)
PGIPORHOST (?:%{IPORHOST}|\[local\])
PGUSER (?:%{DATA})
PGPREFIX %{DATESTAMP:timestamp} %{WORD:TZ} \[%{NUMBER:processid}\]\: (?<sessionlinenumber>\[\d+\-\d+\]) user=%{DATA:dbuser},db=%{DATA:dbname}?(%{PGIPORHOST:agentip})? %{LOGLEVEL:loglevel}:
POSTGRES %{PGPREFIX}%{SPACE}?(((duration: ?(%{DUR:postgres_duration:float}) ms)%{SPACE}?%{ACTION}%{SPACE}%{GREEDYDATA:postgres_message})|((%{ACTION:action})?({SPACE})?%{GREEDYDATA:postgres_message}))

对日志的监控。

因为ELK是对日志的收集和统计,我自己借助了kafka中的日志消息用python写了一个对日志的监控,当日单条错误大于20次时(只是针对于目前环境,针对于应用长时间报错),发送邮件告警。

1. 从kafka中读取日志。

2. 将日志做匹配,只过滤出错误日志。

3. 将错误日志记录到数据库。

4. 当有错误日志的时候,计算当日的错误数量,并记录到统计表中。

5. 当日单个错误数量超过20个时,发送告警。

6. 第二天将前日的错误日志记录通过cron job挪到 历史表中。并清空前日记录。

有兴趣的朋友,可以通过github查看代码。

https://github.com/chuckchen1222/parse_pglog

猜你喜欢

转载自blog.csdn.net/chuckchen1222/article/details/82993603
今日推荐