Netdata 将所有内容记录到 mysql 日志中

Netdata 将所有内容记录到 mysql 日志中

由于我为服务器上的所有查询启用了 mariadb 日志,因此使用 Netdata 每秒都会显示这些查询:

SHOW GLOBAL VARIABLES LIKE 'max_connections'
11 Query     SHOW GLOBAL STATUS
11 Query     commit

我不得不说它没有帮助我投资服务器上发生的事情,因为它污染了我的记录。

有没有办法避免每秒记录这种查询?

答案1

虽然可能更明智的做法是指出数据库的具体问题,而不是试图清理日志(我建议使用 grep 或 sed)。但这是一个过度设计的解决方案,它将一劳永逸地解决您的日志记录问题。

我们将把 mysql 日志重定向到 fifo 管道,该管道将由 syslog-ng 读取和过滤。

为此,转到存储 general-log-file 的文件夹,删除/重命名原始日志,并使用以下命令在其位置创建一个 fifo 管道:

mkfifo mysql-general.log

检查你的 my.cnf 是否指向该文件:

[mysqld]
general-log-file = /path/to/your/log/mysql-general.log

然后,配置您的/etc/syslog-ng/syslog-ng.confcentos 7 实际上需要先安装它)读取 FIFO 管道并根据需要进行过滤,同时将结果写入最终文件。

这是一个适合您需要的示例配置:

source s_mysql_general_log { pipe("/path/to/your/log/mysql-general.log" program_override("mysql-general-log")); };
filter f_mysql_general_log { not match("^SHOW GLOBAL VARIABLES LIKE 'max_connections'") and not match("^11 Query     SHOW GLOBAL STATUS") and not match("^11 Query     commit"); };
destination d_mysql_general_log { file("/var/log/mysql-general.log"); }
log { source(s_mysql_general_log); filter(f_mysql_general_log); destination(d_mysql_general_log); flags(final);   };

因此,您将获得/var/log/mysql-general.log没有您不喜欢的查询的文件……稍后我将尝试发布此解决方案的 systemd 版本

相关内容