LINUX.ORG.RU

Что нынче принято использовать для мониторинга и оповещениях о проблемах?

 ,


1

3

Извиняюсь, если вопрос совсем нубский - я программист, которому сравнительно недавно приходится много заниматься и администрированием :)

Вот есть инварианты «на серверах с БД должно быть свободно не менее 20 Гб места» и прочие в таком стиле, всего штук 15-20. Нужно следить за такими инвариантами и если они нарушаются, рассылать sms/email, дескать «чуваки, место на диске скоро закончится». Понятно, что всегда можно свое навелосипедить, но наверняка есть готовые решения. Есть ли такие и какое именно из них вы бы посоветовали? Nagios например подойдет или он совсем не про то?

Если предпочитаешь конф. файлы - Icinga2 твой выбор. Синтаксис - прелесть. Можно обойтись без агента на клиентских машинах, SNMP хватит на всё. Если будут нужны скрипты для какого-нибудь специфического мониторинга, вроде описанного - пиши, у меня есть. Ещё есть новая веб-морда (icingaweb2) - классная вещь.

Если палец к мышке прирос и не пугает страшненький веб-интерфейс - можно использовать Zabbix, монструозное псевдо-энтерпрайз творение отечественных прогеров.

nbw ★★★ ()
Последнее исправление: nbw (всего исправлений: 1)

Nagios например подойдет или он совсем не про то?

Вполне подойдёт. Та-же проверка свободного места там из коробки есть (может даже в дефолтном конфиге настроена). Сами конфиги маленько страшноваты, с непривычки может понадобиться какое-то время что-бы разобраться, но жить можно.
Собственные проверки пишутся элементарно на любимом ЯПе (это просто исполняемые файлы которые должны в stdout выпукнуть должным образом сформированную строку с результатами проверки).
В общем Ngios это один из торадиционных вариантов мониторинга. Ещё есть его форк (забыл название), который вроде с гладиаторскими игрищами и вавилонскими блудницами.

MrClon ★★★★★ ()

Подпишусь за Nagios. Для него есть модули к Puppet, если там все правильно осилить, то все будет вообще само мониториться, писать тебе письма и звонить по телефону без всяких телодвижений с твоей стороны.

alex_the_v ★★ ()
Ответ на: комментарий от nbw

После конфигов Icinga2 Nagios вспоминается с содроганием.

Я запилил себе скрипт, который из DNS берет записи ТХТ для всех хостов и строит icinga2 hosts.conf файл. Всё! Остальное автоматом подхватывается из Apply ... { ... }

TXT record:

lnx-image-dvlp.domain.com place=Room/Rack/Unit disks=/,/opt,/opt/mqm,/var/mqm,/var/mqm/log;3;1 services=TSM_client/1501/tcp,MQ14/1414/tcp,smtp,ftp access=Linux_by_ssh notify=sms/sysadmins include= vars.raid = «aacraid»

#!/bin/sh

while read FQDN DATA; do

# check if line commented and skip
  if echo "$FQDN" | grep -q '#'; then
        continue
  fi

  echo "/*                      ---------                     */"
  echo ""

# parse DATA line
SHORTNAME=`echo "$FQDN" | cut -d'.' -f1-2`
 SERVICES=`echo "$DATA" | grep -o 'services=[^ "]*'|sed 's/^[^=]*=//; s/,/ /g'`
   ACCESS=`echo "$DATA" | grep -o 'access=[^ "]*'  |sed 's/^[^=]*=//; s/,/ /g'`
    DISKS=`echo "$DATA" | grep -o 'disks=[^ "]*'   |sed 's/^[^=]*=//; s/,/ /g'`
    PLACE=`echo "$DATA" | grep -o 'place=[^ "]*'   |sed 's/^[^=]*=//; s/,/ /g'`
   NOTIFY=`echo "$DATA" | grep -o 'notify=[^ "]*'  |sed 's/^[^=]*=//; s/,/ /g'`
  INCLUDE=`echo "$DATA" | grep -o 'include=.*$'    |sed 's/^[^=]*=//'`

    echo "object Host \"$SHORTNAME\" {"
    echo "  import \"generic-host\""
    echo ""
    echo "   address = \"$FQDN\""
    echo ""
    echo "   vars.os = \"$ACCESS\""
    echo ""
    echo "   vars.place = \"$PLACE\""
    echo ""
    echo -n "$INCLUDE"
    echo ""


    # define services
    for SRV in $SERVICES; do
        # service defined as triple NAME/PORT/PROTOCOL
        if echo "$SRV" | grep -q '/'; then
                    s=`echo "$SRV" | cut -d'/' -f1`
                 port=`echo "$SRV" | cut -d'/' -f2`
                proto=`echo "$SRV" | cut -d'/' -f3`
        else
                # for well known services (defined like SMTP for example)
                # looking for port number in /etc/services
                s="$SRV"
                port=`awk -vs="$s" '$1 == s {split($2,a,"/"); print a[1]; exit}' /etc/services`
                proto='tcp'
       fi
       if [ "$s" = "http" ]; then
        # HTTP treated specially
                echo "   vars.http_vhosts[\"$SHORTNAME Web\"] = {"
                echo "       http_vhost = \"$FQDN\""
                echo "       http_uri = \"/\""
                echo "   }"
                echo ""
       elif [ "$s" = "dns" ]; then
        # DNS treated specially
                echo "   vars.dns_check[\"$s\"] = {"
                echo "        dns_expected_answer = \"$proto\""
                echo "   }"
                echo ""
       else
        # udp may try additional parameters (not tested yet)
           if [ -n "$port" ]; then
               echo "   vars.${proto}_check[\"$s\"] = {"
               echo "       ${proto}_port = \"$port\""
               echo "   }"
               echo ""
          fi
       fi
    done

        # define disks
        for d in $DISKS; do
                w=$(echo "$d" | awk -F';' '{print $2}')
                c=$(echo "$d" | awk -F';' '{print $3}')
                d=$(echo "$d" | awk -F';' '{print $1}')
                [ -z "$w" ] && w="10"
                [ -z "$c" ] && c="5"
                echo "   vars.disks_by_ssh[\"disk $d\"] = {"
                echo "       disk_partitions = \"$d\""
                echo "       disk_warning = \"${w}%\""
                echo "       disk_critical = \"${c}%\""
                echo "   }"
        done

        # define notifications
    for NTFY in $NOTIFY; do
        how=mail
        who=icingadmins
        if echo "$NTFY" | grep -q '/'; then
                 how=`echo "$NTFY" | cut -d'/' -f1`
                 who=`echo "$NTFY" | cut -d'/' -f2`
        fi

        echo "   vars.notification[\"$how\"] = {"
        echo "      groups = [ \"$who\" ]"
        echo "   }"
    done

    echo "}"
    echo ""

done

Результат для этой одной записи

/*                      ---------                     */

object Host "lnx-image-dvlp.domain" {
  import "generic-host"

   address = "lnx-image-dvlp.domain.com"

   vars.os = "Linux_by_ssh"

   vars.place = "Room/Rack/Unit"

   vars.raid = "aacraid"

   vars.tcp_check["TSM_client"] = {
       tcp_port = "1501"
   }

   vars.tcp_check["MQ14"] = {
       tcp_port = "1414"
   }

   vars.tcp_check["smtp"] = {
       tcp_port = "25"
   }

   vars.tcp_check["ftp"] = {
       tcp_port = "21"
   }

   vars.disks_by_ssh["disk /"] = {
       disk_partitions = "/"
       disk_warning = "10%"
       disk_critical = "5%"
   }
   vars.disks_by_ssh["disk /opt"] = {
       disk_partitions = "/opt"
       disk_warning = "10%"
       disk_critical = "5%"
   }
   vars.disks_by_ssh["disk /opt/mqm"] = {
       disk_partitions = "/opt/mqm"
       disk_warning = "10%"
       disk_critical = "5%"
   }
   vars.disks_by_ssh["disk /var/mqm"] = {
       disk_partitions = "/var/mqm"
       disk_warning = "10%"
       disk_critical = "5%"
   }
   vars.disks_by_ssh["disk /var/mqm/log"] = {
       disk_partitions = "/var/mqm/log"
       disk_warning = "3%"
       disk_critical = "1%"
   }
   vars.notification["sms"] = {
      groups = [ "sysadmins" ]
   }
}

Сервисы подхватываются по этим переменным определенным в host'e

most-fucktum ()

Nagios подходит вполне.

Много плагинов, легко писать свои/править чужие. По поводу SMS не знаю даже, не юзал никогда для рассылки SMS.

Amet13 ★★★★★ ()
Ответ на: комментарий от anonymous

net.tcp.listen, net.udp.listen

не наличие сервиса мониторить, а сам сервис. то есть торчит у меня приложение JMXом в белый свет, и отдает мониторинговый MBean в котором все метрики всех запущенных сервисов. этот ваш заббикс уже перестал сходить с ума когда внутри этого бина два сервиса с одинаковым именем, но запущенные на разных портах?

vostrik ★★★☆ ()