Показаны сообщения с ярлыком nagios. Показать все сообщения
Показаны сообщения с ярлыком nagios. Показать все сообщения

суббота, 22 апреля 2023 г.

Проверка подключения по IPv6 в Nagios

Несколько лет использовал www.google.com в Nagios чтобы проверять "связность" своих серверов с внешним миром по IPv6. На позапрошлой неделе сервера попали в "бан" и проверка перестала работать.

Поскольку www.google.com все же не предназначен для таких проверок, то переделал проверку на использование msftconnecttest.com. Для IPv6 вместо www.msftconnecttest.com нужно использовать ipv6.msftconnecttest.com.

Этот сервис использует Windows чтобы проверить подключение к Internet. Если при скачивании http://ipv6.msftconnecttest.com/connecttest.txt вы получаете строку "Microsoft Connect Test", то все IPv6 работает без ограничений.

$ /usr/lib/nagios/plugins/check_http -6 -H ipv6.msftconnecttest.com -u /connecttest.txt -s 'Microsoft Connect Test'
HTTP OK: HTTP/1.1 200 OK - 537 bytes in 0.012 second response time |time=0.012383s;;;0.000000;10.000000 size=537B;;;0

среда, 14 августа 2013 г.

Расчет критических значений Load Average для системы мониторинга сервера

Сегодня подкручивал настройки Nagios и решил добавить статью по расчету значений лимитов load average для различных конфигураций серверов. Чтобы понимать суть load average я советую прочесть эту статью.

Поскольку лимиты load average зависят от количества доступных ядер процессора, то у различных серверов будут значения будут различаться. Наиболее распространенные варианты конфигурации процессоров:
  • 1 физическое ядро
  • 2 физических ядра
  • 2 физических ядра + hyperthreading (4 виртуальных ядра)
  • 4 физических ядра
  • 4 физических ядра + hyperthreading (8 виртуальных ядер)
Я не буду рассматривать варианты дальше, поскольку там все аналогично. Для себя я определил следующие лимиты, которые по моему мнению не приводят к заметному снижению производительности сервера относительно процессора.

State/Load Average1 min5 min15 min
WarningCPU cores * 2CPU cores * 1.5CPU cores * 1.25
CriticalCPU cores * 4CPU cores * 2CPU cores * 1.5

Поскольку ядро процессора, которое эмулируется hyperthreading, не является полноценным, то такие ядра я исключаю из расчета. Чтобы узнать свое количество физических ядер вы можете выполнить этот скрипт

#!/bin/bash
if [ `grep -c processor /proc/cpuinfo` != 1 ]; then
    grep 'core id' /proc/cpuinfo | sort | uniq | wc -l
else
    echo 1
fi

Готовые значения лимитов для плагина check_load из состава Nagios.

  • Single core: check_load -w 2,1.5,1.25 -c 4,2,1.5
  • Dual core: check_load -w 4,3,2.5 -c 8,4,3
  • Quad core: check_load -w 8,6,5 -c 16,8,6

среда, 11 января 2012 г.

TinyCA: Проверка срока действия сертификатов

Для управления сертификатами использую TinyCA. Недостаток этого решения в том, что об окончании срока действия сертификата узнаешь только тогда, когда он уже окончился.

Чтобы узнавать об этом заранее, я решил набросать небольшой скрипт, который проходится по хранилищу сертификатов и проверяет их "годность" (TinyCA хранит сертификаты в каталоге ~/.TinyCA/CAName/certs).

Выходит, что для проверки достаточно пройтись по всем ~/.TinyCA/CAName/certs/*.pem файлам. Нагуглил скрипт на perl, который проверяет срок действия сертификата. Скрипт завершается с кодом 2, если сертификат просрочен, с кодом 1, если истечет в течении двух недель и с нулевым, если с сертификатом все в порядке.

Далее дописал обвязку для крона, который проверяет сертификаты из ~/.TinyCA/CAName/certs

check-certificate-expire - проверка единичного сертификата
#!/bin/sh

openssl_get_CN_from_file() {
  if [ ! -f "$1" ]; then
    echo "Unable to find file: $1"
    return 1
  fi

  X509_CN=`openssl x509 -in "$1" -noout -subject | perl -pi -e 's/^.*\/?CN=([^\/]*).*$/\1/'`
  echo $X509_CN
}

if [ ! -f "$1" ]; then
  echo "Unable to find file: $1"
  exit 1
fi

check-expire -f /usr/local/etc/check-expire.cfg openssl_x509 -in "$1"

case $? in
  1)
    X509_CN=`openssl_get_CN_from_file "$1"`
    if [ ! -z "$X509_CN" ]; then
      echo "$X509_CN: certificate expires soon"
    else
      echo "$1: certificate expires soon"
    fi
    ;;
  2)
  X509_CN=`openssl_get_CN_from_file "$1"`
  if [ ! -z "$X509_CN" ]; then
    echo "$X509_CN: certificate expired!"
  else
    echo "$1: certificate expired!"
  fi
  ;;
esac

check_tinyca_certs - проверка сертификатов из директории
#!/bin/sh

if [ ! -d "$1" ]; then
  echo "Unable to find directory: $1"
  exit 1
fi

for sslcert in "$1"/*.pem
do
  if [ -f "$sslcert" ]; then
    check-certificate-expire "$sslcert"
  else
    echo "File $sslcert not found"
  fi
done

Конфиг для скрипта check-expire
<class default>
        <expired>
                exit_value 2
        </expired>

        <window>
                inside 2w
                exit_value 1
        </window>
</class>