Для клиентов

Логин:
Пароль:

Загруженность

09.05.2019 - 19.05.2019

Календарь

Ссылки по теме

Zabbix - мониторинг обновлений Wordpress

Заметки на полях

При поддержке множества сайтов с разными плагинами, темами и открытыми CMS, такими как Wordpress, часто встает проблема своевременного обновления. Автоматически обновлять - не всегда хорошая идея, а вот узнавать о том, что обновление появилось - очень полезно. Для мониторинга этого (как и многого другого) подходит Zabbix - система мониторинга IT-ресурсов.

Однако, штатного функционала для связки Wordpress с Zabbix-ом нет. Приходится придумывать. Не углубляясь в историю придумывания решения, выдаю готовую схему.

Описание общей схемы

Zabbix периодически (в моем случае раз в 10 часов) запрашивает у Wordpress сколько обновлений доступно. При изменении числа обновлений (плагинов, тем, ядра), выдается предупреждение администратору.

Настройки на стороне Wordpress.

Для того, чтобы wordpress отдавал сведения о доступных обновлениях, помещаем туда файл zabbix-wordpress.php со следующим содержанием:

<?php
require('wp-load.php');
require('wp-admin/includes/update.php');

// from wp_get_update_data() function
    $counts = array( 'plugins' => 0, 'themes' => 0, 'wordpress' => 0, 'translations' => 0 );
 
    $update_plugins = get_site_transient( 'update_plugins' );
    if ( ! empty( $update_plugins->response ) )
        $counts['plugins'] = count( $update_plugins->response );

    $update_themes = get_site_transient( 'update_themes' );
    if ( ! empty( $update_themes->response ) )
        $counts['themes'] = count( $update_themes->response );
 
    if (  function_exists( 'get_core_updates' ) ) {
        $update_wordpress = get_core_updates( array('dismissed' => false) );
        if ( ! empty( $update_wordpress ) && ! in_array( $update_wordpress[0]->response, array('development', 'latest') ) )
            $counts['wordpress'] = 1;
    }
   
    $r=$counts;
   

if ( (!isset($_GET['k'])) or (!isset($r[$_GET['k']])) ) {
    foreach ($r as $k=>$l) {
        echo $k.": ".$l."\n";
    }
} else {
    echo $r[$_GET['k']];
}
?>

Этот файл при помощи встроенного инструментария собирает сведения о доступных обновлениях и выдает их или все сразу, или по одному из ключей: plugins, themes, wordpress, translations

Настройки на стороне Zabbix-клиента

На стороне клиента Zabbix, который будет запрашивать данные с сайта и потом передават их на сервер Zabbix необходимо внести в файл новый параметр:

UserParameter=mywebsite.wp.updates[*],curl -s http://my.web.site/zabbix-wordpress.php?k=$1

Конечно же не забыв указать правильный адрес вашего сайта, и при необходимости путь к curl

Настройки на стороне Zabbix-сервера

На стороне сервер остается только прописать нужные вам данные, которые могут быть:

  • mywebsite.wp.updates[themes],
  • mywebsite.wp.updates[plugins],
  • mywebsite.wp.updates[wordpress],
  • mywebsite.wp.updates[translations]

И установить необходимые тригеры и действия. Они вполне подходят под общую схему.

Лично я в качестве триггера указал изменение значения доступных обновлений: {zclient:mywebsite.wp.update[plugins].diff(0)}>0 особо рьяные любители того, чтобы у них было все самое свежее, могут настроить так, что наличие неустановленных обновлений zabbix будет считать "проблемой", а когда кол-во обновлений будет нулевым автоматически проблему закрывать.

Развитие и улучшения

В качестве резвития и улучшения этой схемы отмечу, что в качестве параметра можно передавать не только значение типа обновлений, но и адрес сайта. Это будет полезно, когда необходимо мониторить много сайтов на Wordpress одним Zabbix-ом. В этом случае на клиенте надо будет прописать пользовательский параметр такого вида:

UserParameter=wp.updates[*],curl -s $1/zabbix-wordpress.php?k=$2

Вызывать такой параметр надо будет строкой: wp.updates[http://my.web.site,wordpress]

 

Со временем будут решения для Joomla, Битрикс и других CMS.

ФИО*:
email*:
Отзыв*:
Код*