Установка и базовая настройка системы мониторинга Zabbix 3.0 LTS на Ubuntu Server 14.04 LTS

imageМелкие и средние компании зачастую пренебрегают таким компонентом IT инфраструктуры, как мониторинг разных узлов локальной сети. При возникновении проблем в таких компаниях может проходить достаточно много времени, пока инженеры поймут, что происходит в их IT инфраструктуре, что, само по себе, очень критично для бизнеса.  Имплементация и правильная настройка системы мониторинга облегчает жизнь IT специалиста на порядок, но стоит заметить, что на начальном этапе сбора и анализа информации в системе мониторинга увеличивается количество рабочих часов. Почему? Всплывают те ошибки, которые вы могли не замечать или просто игнорировали в течении долгого периода времени.

Рынок программного обеспечения предлагает целый ряд продуктов, так или иначе связанных с мониторингом. В ряде широко используемых продуктов присутствуют такие, как Microsoft System Center Operations Manager (SCOM), Nagios, Zabbix, Cacti и т.д.

Если взять SCOM, то он хорошо “заточен” под программное обеспечение от Microsoft, прекрасно отслеживает требуемое, но очень “толстый”, и чтобы его развернуть в Enterprise режиме, нужно задействовать несколько серверов. Как показывает моя практика, SCOM не могут себе позволить развернуть даже некоторые крупные компании, не говоря уже о мелком и среднем бизнесе.

Иначе обстоят дела с Zabbix. Этот продукт позволяет развернуть себя на старом Desktop’e и предоставлять результат. Для мониторинга Windows-систем Zabbix функционально не так богат, как SCOM, но в симбиозе с технологией Windows Event Subscriptions мы можем получить вполне эффективную систему мониторинга.

image 
Если говорить про Linux или Unix системы и их сервисы (MySQL, FTP, SMTP, HTTP, SSH, Exim, Squid и т.п.), то Zabbix предоставляет множество уже готовых шаблонов для их мониторинга.

В современной гетерогенной IT инфраструктуре для достижения максимальной эффективности и гибкости нужно использовать как коммерческие продукты, такие как SCOM, так и СПО, такое как Zabbix.

Применительно к Zabbix, в этой заметке мы рассмотрим пример следующих действий:

  • Установка Zabbix на Ubuntu 14.04
  • Настройка LDAP аутентификации на базе Active Directory
  • Установка Zabbix агентов на ОС Windows и Linux
  • Настройка оповещений через e-mail и Telegram 
     
Установка Zabbix на Ubuntu 14.04

Сама установка Zabbix 3.0 LTS сервера на Ubuntu Server 14.04 LTS очень тривиальна и не доставляет особых проблем. Многие зададутся вопросом, почему для установки Zabbix 3.0 не взять дистрибутив Ubuntu к примеру 15-16 версии, но на данный момент Zabbix не поддерживает эти версии Ubuntu.  И при попытке установки Zabbix сервера на Ubuntu 15-16 получим ошибку:

Особо ленивые могут скачать Zabbix Appliance, развернуть и протестировать, но как можно прочитать “The Appliance is not intented for serious production use at this time

Мы установим Zabbix из пакетов, даем последовательно ряд команд. Скачаем и установим пакет, который добавит репозиторий для Zabbix сервера:

$ cd /tmp/
$ sudo wget http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-1+trusty_all.deb
$ sudo dpkg -i zabbix-release_3.0-1+trusty_all.deb

Обновим кэш менеджера пакетов и убедимся в том, что репозиторий для Zabbix добавился:

$ sudo apt-get update
$ cat /etc/apt/sources.list.d/zabbix.list 

deb http://repo.zabbix.com/zabbix/3.0/ubuntu trusty main
deb-src http://repo.zabbix.com/zabbix/3.0/ubuntu trusty main

Наш Zabbix-сервер будет хранить всю информацию в MySQL и поэтому устанавливаем пакет для Zabbix сервера с поддержкой MySQL:

$ sudo apt-get install zabbix-server-mysql zabbix-frontend-php

Сразу установим Zabbix-агента на Zabbix-сервер, чтобы сервер мог мониторить сам себя, а к настройкам агента вернёмся позже:

$ sudo apt-get install zabbix-agent

Теперь нужно создать в MySQL базу данных. Подключимся к MySQL:

$ mysql -uroot -p

Здесь MySQL запросит пароль. Укажем тот пароль, который мы задавали при установке пакета zabbix-server-mysql В контексте MySQL создаем базу данных с именем Zabbix и даем полные права на вновь созданную базу данных пользователю zabbix@localhost:

mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'Password';
mysql> quit;

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

$ cd /usr/share/doc/zabbix-server-mysql
$ ls -l

 

 

 

 

Создаем структуру:

$ zcat create.sql.gz | mysql -uroot zabbix -p

Теперь нужно указать Zabbix-серверу какую базу данных использовать:

$ sudo vim /etc/zabbix/zabbix_server.conf

Конечные настройки моего конфигурационного файла для Zabbix-сервера:

$ grep -v '^#\|^$' /etc/zabbix/zabbix_server.conf

image

 

 

 

 

 

 

 

 

Запускаем Zabbix-сервер:

$ sudo service zabbix-server start

Проверяем статус:

$ sudo service zabbix-server status

Теперь заходим в конфигурацию веб-сервера Apache:

$ sudo vim /etc/apache2/conf-enabled/zabbix.conf

и правим:

Цитата из документации:

It’s necessary to uncomment the “date.timezone” setting and set the correct timezone for you. After changing the configuration file restart the apache web server.

После правки конфигурационного файла перезапускаем Apache:

$ sudo /etc/init.d/apache2 restart

Возможно вы увидите, что apachе2 выдает предупреждение:

В таком случае снова заходим в конфигурационный файл Apache и задаем параметр ServerName:

$ sudo vim /etc/apache2/apache2.conf

image

 

 

 

 

После этого предупреждение должно исчезнуть.

Далее открываем веб-консоль Zabbix:

image
Будет запущен мастер первоначальной конфигурации. Каждый шаг этого мастера описывать нет смысла, так как мастер очень простой. Конечный результат:

imageДля аутентификации используем  UserName: Admin Password: zabbix – регистр важен – это Linux.

Как видите, все элементарно просто. Установка занимает не более 30 минут.

 

Настройка LDAP аутентификации на базе Active Directory

Первое, что мы сделаем после установки, — настроим аутентификацию на нашем Zabbix сервере через Active Directory.

Создаем в Active Directory пользователя, к примеру zabbix:

image

Я обычно ставлю галочку Password never expires, но решать вам.

По умолчанию этот пользователь входит в группу Domain Users и этого достаточно. Почему-то многие дают этому пользователю чрезмерно большие права доступа, по типу Domain Admins. Делать этого не нужно.

image

Далее идем в Zabbix (используем UserName: Admin Password: zabbix для аутентификации) и создаем пользователя с именем, как в Active Directory:

image

image

В поле Alias и Name пишем точно так же как в Active Directory в поле User SamAccountName:

image

И даем права:

image

Далее перелогиниваемся вновь созданным пользователем zabbix и переходим:

image

Нажимаем Test и если все хорошо, то нажимаем Update.

Откуда взять Bind DN для пользователя (в моем примере zabbix):

image

Откуда взять Base DN для вашего домена Active Directory:

image

image

 

После того, как мы переключимся на LDAP аутентификацию, пользователем UserName: Admin Password: zabbix мы уже не зайдем, так как пользователя Admin c паролем zabbix в нашей Active Directory просто нет, но есть другой пользователь zabbix. Используем для входа именно этого пользователя. Подобным образом на Zabbix-сервере создаем учетные записи для всех ответственных инженеров.

Не забываем дать Permissions пользователю и назначить в определенную группу.

Таким образом, если учетная запись в Active Directory существует – это еще не значит, что мы сможем залогиниться с помощью этой учётной записи на Zabbix-сервер. На Zabbix-сервере нужно создать ассоциированную учетную запись, такую же как в Active Directory.

Возможна ситуация, когда LDAP хост “упал”, а у нас вся аутентификация завязана на Active Directory, и при попытке входа на Zabbix сервер будет выводиться сообщение о некорректных учётных данных:

image

В таком случае можно переключиться на internal аутентификацию, чтобы в последующем, к примеру, переключиться на другой LDAP сервер. Для этого подключаемся к MySQL …

$ mysql -uroot -p

… и даем команду:

mysql> UPDATE `zabbix`.`config` SET `authentication_type` = '0' WHERE `config`.`configid` =1;

Команда отключит LDAP и активирует internal аутентификацию. После этой команды на Zabbix сервер можно будет зайти с использованием учётной записи Admin / zabbix.

 

Установка Zabbix агентов на ОС Windows и Linux

Начнем с Linux, так как на этой ОС всё это делается элементарно. В наличии у нас Ubuntu Linux 14.04 LTS и и в репозитории Ubuntu zabbix-agent уже представлен, правда версии 2.2:

$ sudo aptitude show zabbix-agent

image

Можно обойтись и этой версией агента, но мы хотим использовать последнюю версию Zabbix-агента:

$ cd /tmp/
$ wget http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-1+trusty_all.deb
$ sudo dpkg -i zabbix-release_3.0-1+trusty_all.deb
$ sudo apt-get update
$ sudo aptitude show zabbix-agent

Устанавливаем агента:

$ sudo aptitude install zabbix-agent

После того, как мы установили агента, идем по пути /etc/zabbix/zabbix_agentd.conf (для Ubuntu, путь в зависимости от конкретного дистрибутива может отличаться) и вносим настройки:

После внесения изменений не забываем перезапускать Zabbix агента:

$ sudo /etc/init.d/zabbix-agent restart

image

 

 

 

 

Кстати по параметру Server в конфигурационном файле zabbix агента, приведу такую цитату:

Note that hostnames must resolve hostname→IP address and IP address→hostname.

То есть, когда в DNS будем создать A-запись для  Zabbix сервера, то не забываем создать и PTR запись.

Еще момент для параметра Server:

List of comma delimited IP addresses (or hostnames) of Zabbix servers. Incoming connections will be accepted only from the hosts listed here.

То есть наш Zabbix агент может работать одновременно с разными Zabbix серверами. Просто стоит указать их FQDN или IP-адрес через запятую.

Вернемся к нашим параметрам для Zabbix агента. Как можно было заметить, я внес минимальные изменения в .conf файл Zabbix агента. По моему опыту в небольших инсталляциях (реальная цифра из жизни — 20 Linux-серверов) этого вполне хватает. По параметрам конфигурационного файла дополнительно можно почитать по ссылке, но интуитивно все и так понятно.

Если кто-то сталкивался с тонкой настройкой конфигурационного файла Zabbix агента, просьба поделиться информацией в комментариях.

Далее идем на наш Zabbix сервер и указываем ему FQDN и IP адрес нашего клиента:

image

 

image

 

В поле DNS name я пишу неполный FQDN  наблюдаемого хоста, так как у меня корректно настроена сеть на Zabbix сервере:

Далее идем на вкладку Templates:

image

image
image

Без применения шаблона или шаблонов на конкретный хост никакие параметры подвергаться мониторингу не будут.

Возвращаемся на вкладку Hosts:

image

И видим, что индикатор ZBX зеленый – это значит, что Zabbix сервер и агент взаимодействуют между собой и так же появились Items и Triggers, потому что мы применили шаблон для OS Linux, т.е. какой-то набор параметров начал мониториться. Можно нажать на Items и Triggers и увидеть, что именно мы наблюдаем.

image

Можно в ручном режиме изменять или добавлять. К примеру Items:

image

Zabbix – это конструктор.

Итак, давайте добавим SSH шаблон и проверим, как он отработает.

image

Выключаем SSH руками на наблюдаемом сервере и смотрим на нашу dashboard на zabbix сервере:

image

 

Теперь попробуем установить zabbix агента на Windows Server 2012 R2.

Первое, что надо сделать это скачать агента с сайта Zabbix:

image

Далее распаковываем полученный архив и копируем путь до установочных файлов:

image

Открываем CMD от имени администратора изменяем путь до исполняемых файлов zabbix агента. Когда путь будет изменен выполняем команду:

zabbix_agentd.exe –-install

image

Если выполнить команду в таком исполнении, то файл конфигурации должен находиться по пути C:\zabbix_agentd.conf

Официальное руководство о том, как установить zabbix агента.

Интересная возможность:image

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

image

Кстати, Zabbix агент установиться без проблем даже если Windows Server установлен в режиме Core.

Теперь нужно создать конфигурационный файл для Zabbix агента и его можно будет запустить. Так как я устанавливал агента без указания дополнительных параметров для пути конфигурационного файла и не собираюсь это делать при запуске агента, мой конфигурационный файл будет располагаться по умолчанию в C:\zabbix_agentd.conf

Копируем конфигурационный файл по умолчанию:

image

И вносим точно такие же изменения, как для Linux клиента (смотри настройку Zabbix агента для Linux, которую мы делали ранее).

Не забываем переименовать конфигурационный файл. По умолчанию он имеет вид zabbix-agentd.win.conf:

image

Теперь можно запустить службу Zabbix агента и добавить Windows хост на Zabbix сервер.

Процедура добавления Windows клиента на Zabbix сервер точно такая же, как и для Linux клиента за исключением того, что здесь мы применяем шаблон именно для Windows OS. 

image

Если на системе с Windows-агентом Zabbix включён Windows Firewall, то нужно добавить  разрешающее правило для Zabbix агента – разрешить входящие подключения на порт TCP 10050

Конечный результат:

image

 

 

Настройка оповещений через e-mail и Telegram

Подошло время настроить систему уведомлений.

В Zabbix присутствуют несколько вариантов уведомлений это:

image

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

image

Мы настроим уведомления через  Email и Telegram

Переходим Administration –> Media Types (как на скриншоте выше) и нажимаем Email:

К примеру, для реально работающего почтового сервера на Zimbra:

image

Далее активируем Action:

image

И последний шаг — включаем e-mail уведомления для наших пользователей или группы пользователей:

image

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

image

 

И пробуем протестировать придет письмо или нет.

Обычно я захожу на консоль виртуальной машины Linux сервер и останавливаю SSH службу:

image

И включаем обратно SSH:

image

Email уведомления у нас работают, но формат сообщения не очень удобен. Давайте попробуем поправить. Я оставляю минимум информации — на каком хосте произошло событие, и что именно “сломано”:

image

Результат:

image

 

Сделаем еще одно улучшение. Уменьшим кол-во уведомлений на разные события — убираем галочки:

image

События класса Information and Warning мы всегда сможем увидеть на DashBoard

Чуть порассуждаем, прежде чем начать настраивать следующий вид уведомлений. Есть компании, которые свою IT инфраструктуру располагают на той же физической площадке, где и располагается офис компании, т.е. есть отдельная оборудованная серверная комната. Но есть компании, которые полностью “живут” в дата-центрах, и конечным работникам нужен только монитор, RDP или ICA терминал, мышка и клавиатура и “шнурок”, который позволит выходить в Интернет. Я работал в компаниях, как первого типа, так и второго, и везде внедрял Zabbix, но уведомления я организовывал по разному.

В первом сценарии, когда серверная комната находится на той же физической площадке, я настраивал как минимум E-mail уведомления и SMS уведомления, либо только SMS. Почему? Довольно часто я встречал проблемы с интернет провайдером — или полностью падал линк, или частично, к примеру HTTP и HTTPS работает, а вот другие протоколы уже нет. Таким образом, получается, что когда IT персонал находится вне офиса, о проблемах в нашей IT инфраструктуре через e-mail уведомления мы не узнаем. Но у нас есть SMS уведомления, которые нас благополучно уведомят о проблемах. Можно выставить расписание, как пример: e-mail уведомления, когда мы находимся в офисе, а SMS-уведомления, когда мы находимся вне офиса.

Стоит заменить, что в первом случае для SMS уведомлений я всегда использовал локальный SMS девайс – это был корпоративный телефон специально выделенный для Zabbix или USB модем. В случае использования внешнего интернет SMS шлюза и падения интернет-канала наш Zabbix будет “молчать” для нас.

Описывать то, как это сделать, я не буду, так как в интернатах “куча” инфы и для каждого GSM девайса нужен отдельный подход, универсальных “рецептов” нет.

Второй сценарий — вся IT инфраструктура находится в дата-центре. Сразу скажем, вряд ли упадет интернет канал, так как обычно у нормального дата-центра их целая “пачка”. За электричество мы тоже можем быть спокойны, в отличие от локальной серверной комнаты. За  IT инфраструктуру отвечают инженеры из разных стран. И я долго думал, что же мне использовать для уведомлений в такой ситуации и решил остановить свой выбор на Telegram.

Как же я сделал выбор при поиске скрипта для Telegram? Зашел по ссылке и дал запрос:

image

Сам проект Zabbix-in-Telegram находится на GitHub. Там есть официальная инструкция, но я попытаюсь описать свой опыт.

Первое, что надо сделать — это зарегистрироваться в Telegram, поставить клиента Telegram и зайти в него.

Далее мы создадим бота в Telegram для нашего Zabbix сервера. Новые боты создаются через BotFather. Находим BotFather по имени :

image

Далее даем последовательно команды, т.е например пишем /start и нажимаем кнопку Send:

image

После того как вы зададите имя (на скриншоте выше это zabbix), нужно будет еще указать UserName для вашего бота:

image

Все, ваш бот создан и готов работать.

Далее переходим на Zabbix сервер и устанавливаем Python и PIP (что такое PIP можно почитать на WikiPedia):

$ sudo aptitude install python-pip python-dev build-essential
$ sudo -H pip install --upgrade pip 
$ sudo -H pip install pyopenssl ndg-httpsclient pyasn1

Далее переходим в директорию, из которой Zabbix сервер может запускать внешние скрипты (этот путь прописывается в конфигурационном файле Zabbix сервера /etc/zabbix/zabbix_server.conf):

image

$ cd /usr/lib/zabbix/alertscripts

И создаем два скрипта в этой директории:

  • zbxtg.py — скрипт используется для отправки сообщения конкретному человеку
  • zbxtg_settings.py — тут прописана вся «механика» как взаимодействовать с Telegram
  • $ sudo touch zbxtg.py
    $ sudo touch zbxtg_settings.py

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

    $ sudo chown zabbix.zabbix zbxtg.py
    $ sudo chown zabbix.zabbix zbxtg_settings.py
    $ sudo chmod 554 zbxtg.py
    $ sudo chmod 554 zbxtg_settings.py

    Далее открываем по порядку ссылки zbxtg.py и zbxtg_settings.py, копируем содержимое соответствующих скриптов и вставляем содержимое во вновь созданные Python скрипты.

    Далее настроим “главный” скрипт zbxtg_settings.py. Открываем его и вносим изменения:

    image

     

     

     

     

     

     

     

     

     

     

    Нужно изменить два параметра, второй параметр (стрелочка два) опциональный.  Первый параметр – это tg_key (Token to access the HTTP API) формируется при создании бота:

    image

    Теперь можно проверить работоспособность (запускаем скрипт из папки /usr/lib/zabbix/alertscripts):

    $ sudo ./zbxtg.py "<username>" "<message_subject>" "<message_body>" --debug
    $ sudo ./zbxtg.py "@aivonin3093" "Test" "Test2" --debug 

    UserName если забыли, можно посмотреть тут:

    image

    Результат:

    image

    Теперь нужно настроить Zabbix сервер.

    Создаем media types для Telegram:

    image

    image
    Параметр —debug опциональный.

    Цитата из официального руководства:

    image

     

    Далее можно создать отдельный Actions для каждого media types или использовать один.

    Я использую один.

    image

    Так как я использую один Actions  для всех media types,  формат сообщений от zabbix у меня один :

    image

    Теперь нужно назначить вновь созданный media types (Telegram) нужному пользователю:

    image

    Теперь настроим, чтобы наш бот слал уведомления на чат группу.

    Первое, что нужно сделать, это создать чат группу в Telegram и добавить нашего бота в эту чат группу.

    Далее добавляем параметр –-group.:

    image

    Моя чат группа в Telegram называется ZabbixAivonin:

    image

    На этом настройка оповещение ботом чат группы закончена.

    Работу так же можно протестировать из командной строки:

    $ sudo ./zbxtg.py "Название вашего чата" "Test" "Test body" --debug --group

    image
    image

     

    На том все!

    Прошу поделиться вашими идеями и реализациями мониторинга в вашей локальной сети.

    Спасибо за внимание.

    Всего комментариев: 14 Комментировать

    1. AlektroNik /

      Спасибо … подожду пока 16.04 будет поддерживать.
      Антон, подскажите пожалуйста сталкивались ли вы с необходимость мониторинга DFS? Искал, но толку ноль https://share.zabbix.com/search?searchword=dfs&search_cat=1
      Если да, может поделитесь наработками.
      Кстати актуальная тема для следующей статьи … Zabix — опыт, наработки, фичи и то чего нет в сети :)

      1. aivonin3093 /

        Как вариант Вы можете мониторить определенные события относящиеся к DFS на серверах с ролью DFS.

    2. Евгений /

      Делал всё по инструкции, затык на проверке тестового сообщения «sudo ./zbxtg.py «@myaccount» «Test» «Test2″ —debug» Получаю ошибку «User ‘username’ needs to send some text bot in private». Как победить? (гуглил, честно, рецепты не помогли)…

      1. aivonin3093 /

        Напиши на мыло aivonin3093@gmail.com я тебе подскажу.

        1. Алексей Максимов /

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

      2. N1b1 /

        нужно было перейти по ссылке в телеграме на своего бота и написать /start
        после этого бот заработае

    3. N1b1 /

      а вот после ребута убунты сервис zabbix-server автоматом не стартует

      1. Евгений /

        Как и клиенты в ubuntu. Как решить вопрос по феншую?

        1. Евгений /

          А решить это так:
          systemctl enable zabbix-server.service для сервера
          systemctl enable zabbix-agent.service для клиента

    4. N1b1 /

      zbxtg.py: You need to mention your bot in ‘BOTNAME’ group chat (i.e. type @YourBot)
      вот после выходных что выдало

    5. DrEsd1989 /

      Аутентификация в домене принудительно занижена? В данном случае у меня ругнулся на следующую строку: Unable to bind to server: Strong(er) authentication required [authentication.php:132 → CLdapAuthValidator->validate() → CLdap->checkPass() → ldap_bind() in include/classes/ldap/CLdap.php:112]

    6. Владимир /

      Добрый день, помогите пожалуйста уже несколько дней бьюсь, при импорте базы данных create.sql.gz операция заканчивается по тайм-ауту, так же пытался ее импортировать через phpmyadmin тот же эффект.
      В результате на этапе Configure DB connection выдает ошибку The frontend does not match Zabbix database.
      Че делать уже не знаю, помогите :(

    7. Аркадий /

      После установки в веб интерфейсе пишет «zabbix сервер не запущен отображаемая информация может быть неактуальной». При этом команда service zabbix-server status пишет … is ranning. Что это может быть?

    8. Александр /

      Доброго времени суток! Подскажи мне какое необходимо железо под zabbix сервер на 200 машин?

    Добавить комментарий