Проверьте комментарии к Wordpress с запросом SQL и Nagios

Для моего домашнего проекта мне нужно контролировать веб-сервер и веб-сайт wordpress на нем с сервером Nagios. Оба сервера LAMP Debian 9, все настроено и работает.

Я использую Nagios XI и MariaDB с базой данных wordpress по умолчанию, объясняющей здесь.

В последней части мне нужно проверить все комментарии, опубликованные за последние 4 часа, чтобы избежать спам-кампании. Мне нужно установить порог предупреждения на 4 комментария за последние 4 часа и критический порог на 10 комментариев за последние 4 часа.

Я нашел плагин check_mysql_query.pl для Nagios. Но я немного растерялся, чтобы сделать это с помощью SQL-запроса. Согласно документу wordpress, я пытаюсь что-то вроде:

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

Вот где я, но этот метод бесплатный, поэтому, если вы знаете, как выполнить эту команду (с некоторыми пояснениями, пожалуйста), это здорово. Но если вы знаете другие способы сделать это, я тоже был бы рад их увидеть. Спасибо.

мы не знаем вашей схемы. Пожалуйста, предоставьте структуру, образцы данных, желаемый результат.

user14063792468 07.07.2019 13:44

Структура базы данных является структурой по умолчанию для веб-сайта wordpress, а имя базы данных — wordpress связь, поэтому комментарии хранятся в таблице wp_comments. Я не знаю, какой вывод мне нужен, чтобы сделать то, что описано выше, это моя точка зрения (извините, я новичок в SQL).

Adrien 07.07.2019 15:56
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
937
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

У меня нет времени проверять всю схему базы данных 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]> SELECT comment_date FROM wp_comments WHERE hour( localtime() - comment_date ) < 4; если я ввожу пять раз, я получаю 3 rows in set -- 2 rows in set 1 warning -- 2 rows in set 1 warning -- 1 rows in set 3 warning -- Empty set, 4 warnings

Adrien 07.07.2019 19:47

Причина странного времени в том, что вы не можете надежно вычитать значения даты и времени с помощью простой арифметики.

Rick James 08.07.2019 15:50

Это будет подсчитывать, как комментарии относятся к пользователю 123 за последние 4 часа:

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.

Большое спасибо за ваш ответ, но я заканчивал улучшать ответ Ярослава Машко, когда читал ваш.

Adrien 08.07.2019 14:50
Ответ принят как подходящий

Хорошо, с помощью Ярослава Машко я нашел идеальную команду. То, что было одобрено, выдает список комментариев, опубликованных за последние 4 часа. В этом не было необходимости, потому что плагины Nagios не могли использовать пороговое предупреждение. Итак, чтобы получить количество комментариев за последние четыре часа, я добавил count() в SQL-запрос. Это хороший способ для меня:

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

Я поместил это в плагин check_mysql_query (встроенный в Nagios XI), и он работает нормально. Спасибо за вашу поддержку.

Другие вопросы по теме