Icinga2 простой вариант


    Про icinga2 пишут почему-то на удивление мало и то, что пишут как-то не создаёт общего концепта. В одном месте пишут как написать скрипт, в другом как установить всё это дело, а что с этим делать потом не ясно.

    Я сам использую icinga где-то с начала 2013 года, тогда ещё была только первая версия и сильно далеко от Nagios'a она не ушла.С выходом второй версии поменялось очень много и для меня выбор очевиден.

    Дальше я хочу рассказать, как это всё быстро установить и, что более интересно, что дальше с этим делать.

    Немного описания


    Icinga2 нужна чтобы наблюдать за состоянием серверов, сервисов, принтеров, роутеров и всего другого где есть линукс или виндовс или даже где нет.

    Если первая версия работала на ядре от Nagios'a, то во второй версии всё было сделано по-новому, чтобы было быстро и красиво. Для этого команде от icinga пришлось переписать ядро и теперь без больших усилий можно сделать либо распределенную систему, либо то-же самое, но к этому добавить еще и кластер.

    Но такое делается для больших сетей (over 10k в одном сегменте). Когда только выходила вторая версия, то я читал, что у них на тестах один сервер мог обрабатывать до 10к обращений в секунду, я столько серверов не держу, поэтому подтвердить не могу.

    Начало и чуть-чуть теории


    В 2013 году мы у нас на фирме решили сделать систему для мониторинга и устанавливать у наших клиентов, беря с них деньги за услуги в случае каких-либо проблем с их системами, встал вопрос, а как собственно попадать на их системы.

    У icinga есть два способа проверять состояние систем — либо активно обращаться к серверам стучась на какой-нибудь порт, либо открыть у себя порт и ждать что туда что-то придёт. Соответственно это называется активный и пассивный методы. В большинстве случаев используется активный способ, хотя мне не понятно почему. Также в интернете в основном встречается описание именно активного опроса.

    Активный режим


    Тут есть несколько вариантов, можно использовать icinga2 director и клиента для виндовс или линукс. После их установки надо писать конфиги или шаблоны для icinga2. В данном случае icinga2 обращается к серверу и выполняет через клиента проверку либо как-то произвольный скприт. Раньше для этого использовался NRPE, как это происходит сейчас я не знаю.

    У активного способа есть два больших минуса, которые собственно всё и решили:

    1. Надо на стороне сервера открывать порты, а если это другая сеть, то и настраивать проброс портов, причем для каждого сервера свой.

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

    Пассивный режим


    В этом случае открываем на стороне icinga2 сервера порт 5667 для NSCA или включаем Icinga2 APi (порт 5665) и просто ждём пока нам придёт состояние какой-либо системы, при этом icinga смотрит, когда статус обновился последний раз и если статус не обновляется какое-то определённое время, то icinga помечает его как неизвестный. Ну и конечно куда-же без ложки дёгтя — если надо проверять роутер или принтер или где-то опрашивать SNMP, то при пассивных опросах это сделать нельзя. Но тут можно написать костыль, один из серверов в этой же сети может опрашивать через SNMP и слать статус в icinga, но для этого надо писать скрипт.

    NSCA это уже в какой-то мере устаревшее решение, но для виндовс систем, пока нету хорошей альтернативы(чтобы не пришлось много делать руками). В линуксе я уже написал некоторое количество скриптов и они обращаются к Icinga2 Api. Совсем недавно я так-же написал библиотеку для node.js (ссылка внизу).

    Установка()


    Как уже было понятно выше, я хочу установить Icinga2 и настроить её в пассивном режиме.
    Для Icinga2 я сделал контейнер (docker).

    Что в контейнере:

    1. Icinga Web 2 — веб интерфейс, где можно смотреть статус
    2. Graphite — чтобы отображались красивые графики
    3. Icinga2 Classic UI — тоже гуи, но с первой версии, чтобы можно было использовать старые программы типа Nagstamon (для виндовс) или adagios (для андроида)
    4.= Интеграция с AD, но оказалось, что она нам не нужна, поэтому я её давно не проверял, может оказаться, что она не работает.
    5. NSCA Server — нужен чтобы принимать метрики с винды или от тех кто использует nsca
    6. Icinga2 API — api от icinga. Можно делать всё — устанавливать статус, добавлять/удалять хосты и сервисы итд.

    Для тех кто никогда не пользовался докером, показываю как установить всё это на убунту (16.04). Сначала ставим докер ну и для удобсва можно ещё и docker-compose.

    sudo apt install docker.io docker-compose -y

    Потом стартуем контейнер с Icinga2 без Active Directory:

    sudo docker run -i -p 80:80 -p 5667:5667 -p 5665:5665 -p 8080:8080 -h monitoring.example.com \
    -v /storage/icingaweb2:/icingaweb2 -v /storage/icinga2:/icinga2conf -v /storage/mysql:/mysql \
    -v /storage/graphite:/var/lib/graphite/whisper \
    -e NOTIFICATION_INTERVAL=0 -e GRAPHITE_HOST=192.168.42.64:8080 \
    -e APIUSER=root -e APIPASS=PASS -e ICINGA_PASS="icinga" \
    -e MAILSERVER="mail.example.com" -e EMAILADDR="user@example.com" -e NSCAPASS="pass" -e NSCAPORT="5667" \
    --name icinga2 -t adito/icinga2

    В описании на hub.docker.com есть вариант запуска с AD, посмотреть можно тут.

    Немного описания для переменных и остального

    Порты:
    80 — это понятно, тут можно всё смотреть
    5667 — NSCA порт, может быть, что нужен он не всем
    5665 — Icinga2 API
    8080 — Страница graphite, должна быть открыта, так как icinga2 обращается к ней чтобы рисовать графики

    Переменные:

    “-h” — название хоста, отображается потом на странице
    “-v /storage…” — хранятся конфиги и дб
    “GRAPHITE_HOST” — это ip сервера где работает контейнер, через этот адрес icinga2 обращается к graphite
    “APIUSER” — это ясно и так. Желательно поменять на что-то типа “0ilkasjdf09123malskdf”
    “APIPASS” — это тоже ясно
    “ICINGA_PASS” — пароль для пользователя “icingaadmin”
    “MAILSERVER” — хост где у вас есть почтовый сервер, у меня стоит exchange в той же сети, поэтому он просто работает как relay
    “EMAILADDR” — адрес который использует icinga2.
    “NSCAPASS” и “NSCAPORT” я думаю понятно.

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

    Доступен по адресу GRAPHITE_HOST:80

    Так-же есть старая версия по GRAPHITE_HOST/icinga2-classicui. Эту версию можно использовать, чтобы подключить к примеру anag и смотреть статус через телефон. Или есть ещё nagstamon это для компьютера, он вроде бы уже может и через Icinga2 API обращаться, опция есть, но я сильно не смотрел.

    Говорю сразу, что лучше использовать их, чем смотреть емайлы, потому что их будет очень много, либо это всё надо очень тонко настраивать.

    Если кому-то не охота работать с контейнером, то можно взять скрипт(нужет icinga2.sh) установки из git репозитория и запустить его, тоже должно работать, только надо пароли поправить, на что-то понадежнее.

    Теперь к контейнеру надо добавить два шаблона один для хоста, а другой для сервисов. Их надо положить в папку /storage/icinga2 которую мы задали при старте контейнера.

    Хост — passive-host.conf — можно назвать как хотите, но должен заканчиваться на .conf

    template Host "passive-host" {
        max_check_attempts = 2
        check_interval          = 300s
        retry_interval          = 200s
        enable_active_checks = true
        enable_passive_checks = true
        check_command = "passive"
        vars.notification["mail"] = {
        groups = [ "icingaadmins" ]
        }
    }

    Сервис:

    template Service "passive-service" {
        max_check_attempts = 2
        check_interval = 300s
        retry_interval = 200s
        enable_active_checks = true
        check_command = "passive"
        vars.notification["mail"] = {
        groups = [ "icingaadmins" ]
        }
    }

    Небольшое описание шаблонов

    Ждёт пока статус придёт два раза, если оба показывают ошибку, то тогда статус меняется на ошибку.

    enable_active_checks = true нужен, чтобы в случае неполучения статуса от сервера поменять его на «неизвестный».

    Если два раза не правильный результат, то шлёт емайл. Кстати по опыту могу сказать, что письма сыпятся без перерыва и очень много, особенно в начале и по ним тоже не всегда ясно какой уже сервис снова заработал, а какой нет. Поэтому я советую использовать nagstamon или же всегда смотреть на станицу.

    Я раньше помню некоторые письма слали сразу в OTRS, которая создавала тикет, тоже было удобно и клиент сразу всё видел.

    Эти два файла надо поместить в папку “/storage/icinga2” и перезапустить контейнер, либо сервис icinga в нём.

    sudo docker exec -it icinga2 service icinga2 restart

    Всё, шаблоны добавлены, теперь можно добавлять системы и всё что надо.

    Что дальше?


    В принципе до этого не было ничего нового, теперь я покажу, почему пассивный вариант лучше.

    Показываю

    Для виндовс


    Для винды есть готовый клинт — nsclient++. Он может работать в обоих вариантах (пассивный и активный) при пассивном он посылает данные через NSCA, в контейнере Icinga2 этот сервис активен и его можно использовать, обращатся надо через порт 5667. Дла виндовс это хороший вариант, так как тут уже есть всё готовое, можно проверять статус сервисов, смотреть eventlog'и, ну и такие вещи как диск, процессор или память. Так-же при желании можно выполнять произвольные скрипты (надо их сначала написать. Я например писал для lsi raid) вывод которых можно посылать через nsca.

    Я уже писал выше, что мы хотели устанавливать icinga у клиентов, но писать конфиги для nsclient++ довольно утомительно и их надо писать для каждого сервера и к тому же на стороне icinga надо тоже писать конфиги.

    Я всё это упростил и написал небольшую программку (тогда я мог только AutoIt), которая может генерировать эти два файла для хоста и icinga. Программа находится ТУТ (скачать можно в релизах), называется “Agen” (Alerts Generator).

    После того, как распаковали, надо подправить config.xml

    <?xml version="1.0" encoding="UTF-16"?>
    <CONFIG>
        <monserver>
            <interval>2</interval>
            <adresse>monitoring.server.local</adresse>
            <password>NSCAPASS</password>
        </monserver>
        <konfiguration>
            <htemplate>passive-host</htemplate>
            <stemplate>passive-service</stemplate>
            <hgruppe>HOSTGROUP</hgruppe>
            <sgruppe>SERVICEGROUP</sgruppe>
        </konfiguration>
    </CONFIG>

    interval — время проверки в минутах
    address — dns или ip icinga cервера
    password — NSCA пароль (который написали выше при создании контейнера)
    htemplate — название шаблона для хоста (было уже выше)
    stemplate — название шаблона для сервисов
    hgroup — группа хостов, если к примеру вы их хотите поделить. К примеру Hosting, DataCenter2 итд или для разных клиентов, как было в моём случае. Можно кстати потом привязать пользователя к одной группе
    sgroup — тоже, что и выше, только для сервисов

    Теперь можно запустить Agen и выбрать папку, где находится source.txt и config.xml. Выглядит это так:



    Часть информации берется из congig.xml, надо только добавить “Host Alias” и “Host Display Name” (будет отображаться на странице).

    Информаци слева берётся из source.txt. Как пользоваться:

    Слева выбираете, что у вас работает на этом сервере. К примеру выбираете “winExchange2013” и “eveExchange2013”, пишете Host Alias (без пробелов) и Host Display Name (можно с пробелами), если нужна к этому конфигурация для icinga, то ставите галочку. После этих манипуляций появятся два файла:

    hostalias.conf — его надо скопировать в контейнер (/storage/icinga2) и перезагрузить icinga
    nsclient.ini — скопировать в папку, где установлен nsclient++

    Что есть в source.txt. Собственно весь Аgen крутится вокруг этого файла, всё делится на две части:
    “win” — виндовс сервисы
    “eve” — события из eventlog

    То есть, если выбрать “winExchange2013”, то в конфиги добавятся все сервисы, которые относятся к Exchange 2013 и будут мониторится. Если к этому выбрать ещё и “EveID Exchange 2013”, то к этому добавятся ещё и события из eventlog’a.

    То есть после того как вы это сделали и надавили окей у вас появятся два файла «nsclient.ini» и «SERVER.conf». После этого надо положить nsclient.ini в папку, где установлен nsclient++, а SERVER.conf добавить к контейнеру (как при сосздании passive-host.conf и passive-service.conf). А после этого надо всё перезагрузить — сервис «nsca» перезапустить, так-же надо перезапустить сервис icinga2.

    Единственный момент, сервисы в source.txt нызываются по немецкий, так что их надо будет переименовать.

    Пример:

    MSExchangeADTopology:Windows_Dienst_Ex_AD_Topology
    MSExchangeADTopology — это часть везде одинаковая, независимо от языка системы, а вот вторая часть уже везде разная.

    Собственно про видновс это всё.

    Линукс


    Тут всё несколько сложнее, так как клиента похожего на nsclient++ нету. Есть три способа, можно установить «send_nsca», потом написать скрипт и через «send_nsca» слать статус, скрипты будут выполняться каждые две минуты по крону.

    Второй способ это слать те же самые данные через icinga2 api. Я напимер использую второй вариант, для этого я использую node.js и для него я сделал модуль, он лежит на npmjs.com.

    Третий способ, это использовать готовые скрипты и всё таки настроить активные опросы. Но тут я не подскажу, так как стараюсь всё таки этого избегать.

    Не смотря на то, что я в работе использую практически только линукс писать скрипты для линукса мне практически не приходиться, так как у нас всё работает через докер.

    Для докера я тоже сделал контейнер, который может видеть (через docker.sock) сколько есть контейнеров на хосте. Также он может создавать для каждого контейнера в icinga2 хост и его потом мониторить. То есть получается динамичный мониторинг. Если контейнер удаляют с докер хоста, то он также удаляется и из мониторинга.

    Заключение


    В принципе выше уже всё сказано, могу лишь добавить, что если кто-то решает, что использовать, то может попробовать. Докер контейнер очень упрощает процесс установки и очень хорошо подходит для попробовать.

    Сама по себе icinga2 довольно проста в настройке и через некоторое время становится всё ясно. Для себя я сделал несколько несколько вещей (которые я выше описал), чтобы упростить использование. Также для тех кто может использовать nodejs может писать для себя скрипты, по ссылке ниже есть библиотека для этого.

    Я особо сильно не люблю углубляться в технические части, всё банально гуглится и находится.

    Ссылки:

    1. Icinga2 Docker — контейнер с образом icinga2 2.6
    1а. Гит репозиторий, если кому-то нужны только скрипты установки icinga2.
    2. Agen — генератор конфигураций для nsclient++
    3. Nsclient++ — клиент для виндовс
    4. dockerhost-monitoring — контейнер, чтобы мониторить состояния всех контейнеров на отдельном докер хосте.
    5. Docker Container NSCA monitoring — старый вариант мониторинга контейнеров(через nsca)
    6. Icinga2 API nodejs — модуль/библиотека для nodejs
    7. aditosnmp — пример опроса snmp. Здесь как раз тот момент, когда приходится опрашивать статус через snmp, а потом слать статус. Надо смотреть «app.js»

    И несколько не в тему, контейнер для бекапа контейнеров и не только — nodebackup. Жалко просто, что я его залил на гитхаб, а не кто не знает.
    Поделиться публикацией

    Комментарии 14

      0
      Когда в последний раз ковырял Icinga2, документация мне показалась не очень хорошей, как сейчас с этим дела обстоят?
      По сравнению с Nagios, поправили конечно много разных косяков, но и подобавляли много разных штук.
      В общем придется знатно поковыряться с этой системой мониторинга, те кто захочет ее использовать.
        0
        Сложно сказать, но я туда только для апи заглядывал, но когда у меня проблемы были мне один из разработчиков помог он постоянно на monitoring-portal.org тусуется и довольно быстро реагирует.
        +1
        не смотрели другой форк Nagios — Centreon?
          0
          Смотрел, но честно сказать не очень глубоко.
          0

          Мне больше интересно — как исингу настроить для хранения сервисов и хостов в бд, чтобы не париться с редактированием конфигов

            0
            А какой в этом смысл, один раз надо будет всё равно конфигурацию писать и потом она также спокойно может лежать в файле.
            Если вам охота меньше писать, то можно наделать шаблонов. К примеру для виндовс хостов, где будут всегда определённые сервисы. Тогда конфигурация сокращается до чего-то такого
            object Host "WindowsServer" {
            import "windowsHost"
            }
            
              0

              На контейнер с мониторингом нет доступа, и не будет. Ннженер должен иметь возможность поставить что-то на мониторинг, отредактировать или убрать.

                0
                Это почему нету, папка с конфигурацией монтируется с докер хоста и соответсвенно можно также на хосте редактировать файлы.
              0

              Есть icings director, он как раз для этого, при этом настройки из бд, относительно мирно сосуществуют с настройками из конфиг файлов.

              0
              Есть смысл ставить icinga на windows хост? Не будет оно работать хуже/нестабильней чем linux вариант?
                0
                Я такого и не знаю даже, вроде как работает только под линуксом или вы не имеете ввиду icinga2 сервер?
                  0
                  Уже разобрался, в репозитории лежит клиент, просто не подписано что это клиент, потому немного запутался.
                0

                @de1m


                В 2013 году мы у нас на фирме решили сделать систему для мониторинга и устанавливать у наших клиентов, беря с них деньги за услуги в случае каких-либо проблем с их системами, встал вопрос, а как собственно попадать на их системы.

                Если не секрет, можете вкратце рассказать, как в организационном плане происходит процесс мониторинга у сторонних клиентов?

                  0
                  Я там больше не работаю, поэтому могу сказат только по памяти.
                  У нас там было три отдела — веб, ms nav, системные администраторы на выезде.
                  То есть клиенты в основном были из других отделов. Сам мониторинг мы разделили на две части:
                  1. Только наблюдение и если клиент хочет, то мы за отдельные деньги решаем проблему. Так-же за это клиенту приходилось ежемесячно платить, немного.
                  2. Мы наблюдаем и сразу можем решать, клиент плотил фиксированную плату в месяц (довольно высокую, но дешевле, чем отдельный человек).
                  Когда я был, то клиентов было немного, в первом случае из-за неполного понимания зачем это надо, а во втором случае я думаю из-за цены. На второй вариант согласился тогда только один клиент и то, через пол года отказался.

                  В принципе я бы сказал, что это всё надо устанавливать клиентам бесплатно, так-как это всё может генерировать доход, но так не делалось.

                  У сторонних клиентов мы устанавливали всё сами, в основном у них был виндовс и я использовал ту програмку, что я описал выше (agen). В итоге установка одного сервера занимала где-то 10 минут и плюс ещё где-то час для настройки нового клиента — сделать пользователя в icinga и в otrs, написать емайл итд.

                  Я так-же установил otrs, для otrs есть модуль SystemMonitoring. Благодаря ему можно слать емейлы от мониторинга сразу в otrs и создавать тикет. Информация о тикете шлётся (автоматически) клиенту. Если это клиент из первого варианта, то ему можно позвонить и спросить хочет ли он, чтобы мы решили проблему. Когда проблема решена, то при закрытие тикета в мониторинг (автоматически через SystemMonitoring) пишется информация из otrs тикета.
                  Если в otrs правильно записывать время, которе понадобилось для решения проблемы, то в конце месяца из этого можно делать репорт, который можно использовать для оплаты. Я это делал через jasper report из otrs дб. Наверное можно и как-то по другому.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое