【问题标题】:Check comments on Wordpress with SQL query and Nagios使用 SQL 查询和 Nagios 检查 Wordpress 上的评论
【发布时间】:2019-11-17 04:30:42
【问题描述】:

对于我的家庭作业项目,我需要使用 Nagios 服务器监督 Web 服务器和 wordpress 网站。两者都是 LAMP Debian 9 服务器,一切都已设置并正常工作。

我正在使用 Nagios XI 和 MariaDB 以及默认的 wordpress 数据库说明 here

对于最后一部分,我需要检查过去 4 小时内发布的所有 cmets,以避免垃圾邮件活动。我需要在过去 4 小时内为 4 个 cmets 设置警告阈值,并在过去 4 小时内为 10 个 cmets 设置一个严重阈值。

我找到了 Nagios 的 check_mysql_query.pl 插件。 但是我有点迷失了,因为使用 SQL 查询来完成这项工作。根据wordpress doc,我尝试类似:

SELECT comment-date FROM wp-comments WHERE comment-data > ($current_time - 4h00)

我想提取过去 4 小时添加到数据库的新评论数。

我不知道($current_time - 4h00) 的语法

对于我的插件命令,我有类似的东西:

./check_mysql_query.pl -H 192.168.0.1 -u user -p password -d wordpress -q mysqlquery -w 4 -c 10

这就是我所在的地方,但是方法是免费的,所以如果你知道这个命令是如何完成的(请提供一些基本解释),那就太好了。但是,如果您知道其他方法可以做到这一点,我也很乐意看到它们。谢谢。

【问题讨论】:

  • 我们不知道您的架构。请提供结构、样本数据、所需输出。
  • Data Base 的结构是 wordpress 网站的默认结构,DB 名称是 wordpress link 所以 cmets 存储在 wp_cmets 表中。我不知道我需要什么输出来做上面描述的事情,这是我的观点(对不起,我是一个 SQL 初学者)。

标签: mysql sql wordpress mariadb nagios


【解决方案1】:

好的,在 Ярослав Машко 的帮助下,我找到了完美的指挥官。它所显示的内容是过去 4 小时内发布的 cmets 列表。这并不完全是需要,因为 Nagios 插件无法使用它来设置阈值警报。因此,为了获得过去四个小时内的 cmets 数量,我在 SQL 请求中放置了一个 count()。这对我来说是个好方法:

SELECT COUNT(c.comment_date) FROM wp_comments as c where hour(timediff( localtime(), c.comment_date ) ) < 4;

我已将其放入 check_mysql_query 插件(Nagios XI 中的原生插件)中,并且运行良好。感谢您的支持。

【讨论】:

    【解决方案2】:

    我没有时间检查所有 Wordpress 数据库架构。但从您的 SQL 查询来看,我认为您需要关注

    select comment-date
    from wp-comments
    where hour( localtime() - comment-date ) < 4
    ;
    

    更新

    必须补充说我不知道​​ MySQL 语法。正确的应该是

    select comment-date
    from wp-comments
    where hour(timediff( localtime(), comment-date ) ) < 4
    ;
    

    【讨论】:

    • 谢谢你,可能是这样,但输出真的是随机的:MariaDB [wordpress]&gt; SELECT comment_date FROM wp_comments WHERE hour( localtime() - comment_date ) &lt; 4; 如果我输入五次,我得到3 rows in set -- 2 rows in set 1 warning -- 2 rows in set 1 warning -- @987654327 @ -- Empty set, 4 warnings
    • 奇怪时间的原因是你不能用简单的算术可靠地减去日期时间值。
    【解决方案3】:

    这将计算过去 4 小时内 cmets 如何归属于用户 123:

    SELECT COUNT(*)
        FROM wp_comments
        WHERE comment_date > NOW() - INTERVAL 4 HOUR
          AND user_id = 123;
    

    (警告:没有看到SHOW CREATE TABLE,我无法确定存在哪些列。如果您真的在表名和列名中使用破折号(-),请务必在此类名称周围加上反引号。)

    0h400 不为 MySQL 所知。

    MySQL 有NOW(),这可能就是你所说的$current_time

    日期时间算术最好通过我在上述 SQL 中展示的模式来完成。

    【讨论】:

    • 非常感谢您的回答,但当我阅读您的回答时,我正在完善 Ярослав Машко 的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多