25

Позвольте мне начать с того, что мне запретили включать автоматические обновления на наших серверах Ubuntu как для безопасности, так и для обычных пакетов.

Когда я захожу на любой из моих четырех серверов Ubuntu, приветственное сообщение содержит следующее:

39 packages can be updated.
26 updates are security updates.

Однако, когда я запускаю плагин Nagios, который отслеживает APT, я получаю:

% /usr/lib/nagios/plugins/check_apt
APT WARNING: 33 packages available for upgrade (0 critical updates). 

Мне нужно знать, как правильно определять наличие ожидающих обновлений безопасности и регулярных обновлений. Как только я смогу это сделать, я планирую написать сценарий Nagios, который будет возвращать WARNING для ожидающих регулярных обновлений и CRITICAL для ожидающих обновлений безопасности.

Кто-нибудь знает, как обнаружить эти два состояния?

4 ответа4

31

Оказывается, что число ожидающих регулярных обновлений может быть найдено с помощью:

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 1

А количество ожидающих обновлений безопасности можно узнать с помощью:

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 2

В конце концов, мой плагин Nagios был следующим:

#!/bin/sh
#
# Standard Nagios plugin return codes.
STATUS_OK=0
STATUS_WARNING=1
STATUS_CRITICAL=2
STATUS_UNKNOWN=3

# Query pending updates.
updates=$(/usr/lib/update-notifier/apt-check 2>&1)
if [ $? -ne 0 ]; then
    echo "Querying pending updates failed."
    exit $STATUS_UNKNOWN
fi

# Check for the case where there are no updates.
if [ "$updates" = "0;0" ]; then
    echo "All packages are up-to-date."
    exit $STATUS_OK
fi

# Check for pending security updates.
pending=$(echo "${updates}" | cut -d ";" -f 2)
if [ "$pending" != "0" ]; then
    echo "${pending} security update(s) pending."
    exit $STATUS_CRITICAL
fi

# Check for pending non-security updates.
pending=$(echo "${updates}" | cut -d ";" -f 1)
if [ "$pending" != "0" ]; then
    echo "${pending} non-security update(s) pending."
    exit $STATUS_WARNING
fi

# If we've gotten here, we did something wrong since our "0;0" check should have
# matched at the very least.
echo "Script failed, manual intervention required."
exit $STATUS_UNKNOWN
12

Плагин Nagios /usr/lib/nagios/plugins/check_apt определяет критические обновления в Ubuntu из-за того, как он обнаруживает критические обновления через apt сочетании с тем, как публикуются некритические обновления Ubuntu. Более подробную информацию можно найти здесь: https://bugs.launchpad.net/bugs/1031680

Вместо этого можно использовать /usr/lib/update-notifier/apt-check .

0

Как только Nagios сообщит, что у вас есть обновления для системы безопасности, вы получите список необходимых обновлений.

grep security /etc/apt/sources.list > /tmp/security.list
sudo apt-get upgrade -oDir::Etc::Sourcelist=/tmp/security.list -s

Вы также можете использовать эти команды, переданные в wc -l для подсчета, но ответы, приведенные выше, вероятно, более эффективны и подходят для сценария Nagios.

0

Почему бы просто не использовать команду apt-get ?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .