Настройка системы мониторинга Zabbix
ZABBIX — свободная система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования, написанная Алексеем Владышевым.
Установку сервера Zabbix производим из портов:
#cd /usr/ports/net-mgmt/zabbix-server#make config install clean |
В окне конфигурации следует убрать все лишние опции.
После завершения установки нужно создать базу данных zabbix и пользователя zabbix для работы с этой базой данных:
mysql>CREATE DATABASE zabbix CHARACTER SET utf8;mysql>GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY 'zabbix';mysql>FLUSH PRIVILEGES; |
После этого нужно создать и инициализировать таблицы базы данных zabbix, выполнив следующие команды:
#cd /usr/local/share/zabbix/server/create#cat schema/mysql.sql data/data.sql data/images_mysql.sql | mysql -u root -p password |
Если Вы используете одну из последних версий MySQL, может возникнуть примерно такая ошибка:
ERROR 1064 (42000) at line 1: У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около 'TYPE=InnoDB' на строке 6
Для устранения данной ошибки нужно немного откорректировать файл /usr/local/share/zabbix/server/create/schema/mysql.sql, заменив все подстроки TYPE=InnoDB на ENGINE=InnoDB, и снова выполнить указанные выше команды создания и инициализации таблиц базы данных zabbix.
По умолчанию конфигурация сервера Zabbix хранится в файле /usr/local/etc/zabbix/zabbix_server.conf, но, данный файл не создается во время установки. Однако есть шаблон zabbix_server.conf.sample. Создадим из него наш конфиг zabbix_server.conf:
#cd /usr/local/etc/zabbix#cp zabbix_server.conf.sample zabbix_server.conf |
На начальном этапе настройки необходимо и достаточно задать в данном файле параметры доступа к базе данных и местонахождение утилиты fping:
DBName=zabbixDBUser=zabbixDBPassword=zabbixFpingLocation=/usr/local/sbin/fping |
Во избежание возможных вопросов об оптимальном количестве poller'ов (форков процесса zabbix_server, предназначенных для сбора значений элементов данных, полученных агентами Zabbix) и trapper'ов (форков процесса zabbix_server, предназначенных для приема результатов активных проверок, выполняемых агентами Zabbix) отмечу, что оно зависит от количества компьютеров и сетевых устройств (точнее – от количества элементов данных, связанных с компьютерами и сетевыми устройствами), за состоянием которых предполагается наблюдать. Увеличение количества poller'ов и trapper'ов повышает “параллельность” взаимодействия с агентами (производительность), но требует большее количество системных ресурсов.
Для того, чтобы сервер Zabbix запускался при запуске операционной системы, необходимо добавить в файл /etc/rc.conf строку:
zabbix_server_enable=”YES” |
На этом начальная настройка сервера Zabbix завершается.
Запускаем сервер командой /usr/local/etc/rc.d/zabbix_server start, и проверим его состояние командой /usr/local/etc/rc.d/zabbix_server status.
Установка и настройка Веб-интерфеса Zabbix
Установку Веб-интерфеса Zabbix выполняем из портов:
#cd /usr/ports/net-mgmt/zabbix-frontend#make config install clean |
В окне конфигурации нужно выбрать опцию [X] MYSQL Use MySQL backend.
После завершения установки следует добавить в файл конфигурации нужного виртуального хоста Веб-сервера Apache строки:
Alias /zabbix /usr/local/www/zabbixAllowOverride AllOrder deny,allowDeny from allAllow from …Allow from … |
После изменения конфигурации виртуального хоста и перезапуска Веб-сервера Apache командой apachectl graceful открываем браузер и пишем http://наш_сервер/zabbix, при этом Вы перейдете к настройке Веб-интерфейса Zabbix.
Процесс настройки состоит из 8 этапов, во время которых придется согласиться с лицензионным соглашением, установить ограничения системных ресурсов интерпретатора PHP, достаточные для работы Веб-интерфейса Zabbix, а также указать параметры доступа к базе данных zabbix и к серверу Zabbix. На предпоследнем этапе будет предложено скачать полученный файл конфигурации zabbix.conf.
php и поместить его в папку /usr/local/www/zabbix/conf. Я рекомендую запретить изменение данного файла всем пользователям командой chmod 444 /usr/local/www/zabbix/conf/zabbix.conf.php.
Установка агента Zabbix на компьютер с FreeBSD
Агент Zabbix для операционных систем семейства Linux/Unix может работать как standalone-демон или как приложение, запускаемое суперсервером inetd. В данном разделе рассмотрена настройка агента-демона.
Установку агента Zabbix выполняем из портов:
#cd /usr/ports/net-mgmt/zabbix-agent#make config install clean |
По умолчанию конфигурация агента Zabbix хранится в файле /usr/local/etc/zabbix/zabbix_agentd.conf, однако, данный файл не создается во время установки. Также создадим его из готового темплейта zabbix_agentd.conf.sample:
#cd /usr/local/etc/zabbix#cp zabbix_agentd.conf.sample zabbix_agentd.conf |
На начальном этапе настройки необходимо и достаточно задать адрес сервера Zabbix и имя компьютера, на который устанавливается агент Zabbix (обратите внимание, что в случае агента Zabbix под именем компьютера понимается не доменное имя, а произвольное уникальное имя, под которым текущий компьютер будет добавлен в список наблюдаемых узлов, по умолчанию – Zabbix Server):
Server=127.0.0.1Hostname=наш_сервер |
Для того, чтобы агент Zabbix запускался при запуске операционной системы, необходимо добавить в файл /etc/rc.conf следующую строку:
zabbix_agentd_enable=”YES”
На этом начальная настройка агента Zabbix завершается. Запуск и проверка состояния агента выполняются также, как и в случае с сервером, только с помощью скрипта /usr/local/etc/rc.d/zabbix_agentd. Подробная информация о состоянии агента выводится в лог /tmp/zabbix_agentd.log.
Установка агента Zabbix на компьютер с Windows
Программа установки агента Zabbix для всех поддерживаемых версий операционных систем семейства Windows – Windows (All), доступна для скачивания в разделе официального сайта Zabbix.
По умолчанию конфигурация агента Zabbix хранится в файле C:zabbix_server.conf. Минимальный вариант может состоять из IP-адреса сервера Zabbix:
Server=
После создания файла конфигурации необходимо поместить файл zabbix_agentd.exe в выбранную папку (в моем случае C:), а затем выполнить команды установки и запуска службы Zabbix Agent (в дальнейшем служба будет автоматически запускаться при запуске операционной системы):
zabbix_agentd.exe –installzabbix_agentd.exe –start |
На этом настройка агента Zabbix завершается. Для управления агентом (службой Zabbix Agent) можно использовать любые стандартные инструменты Windows. Подробная информация о работе агента выводится в System Event Log (все сообщения аналогичны рассмотренным выше).
Обновлено 07.04.2016 18:58
Источник: http://unix-way.ru/index.php/nastrojka-sistem-monitoringa/10-zabbix
Мониторим всё: расширение агентов Windows и Linux при помощи скриптов
Если нам нужно мониторить состояние серверов и прочих компьютеризированных рабочих мест при помощи Zabbix, то это можно сделать двумя способами. Первый способ — это при помощи SNMP-запросов, с отправкой которых Zabbix замечательно справляется.
Так можно вытащить и загрузку сетевых интерфейсов, и загрузку процессора, памяти. Поверх этого, производители сервера могут выдать нам по SNMP еще много информации о состоянии железа.
Второй заключается в использовании Zabbix агента, который мы будем запускать на наблюдаемой системе.
Список наблюдаемых параметров включает в себя как и такие простые вещи, как загрузка процессора, использование памяти, так и более хитрые, такие как чтение текстовых лог-файлов с поддержкой ротации или отслеживание факта изменения любого файла.
Можно даже в качестве параметра использовать вывод любой произвольной команды на системе. Возможности Zabbix агента растут от версии к версии.
Что делать, если того, что мы хотим контролировать через Zabbix нет в списке возможностей Zabbix агента? Ждать пока это имплементируют разработчики в следующем релизе? Не обязательно.
Нам оставили несколько стандартных интерфейсов для того, чтобы расширить возможности Заббикса по мониторингу серверов настолько, насколько позволит нам наша фантазия и наличие свободного времени на написание скриптов. Интерфейсы эти UserParameter и zabbix_sender. О первом и пойдет речь, а в качестве примеров будет показано как можно собирать состояние S.M.A.R.
T жестких дисков и контролировать, когда кто-то удаляет или устанавливает новые программы на своей Windows-машине.
Если вы уже хоть раз настраивали Zabbix агент на сервере, то начать использовать UserParameter не составит труда.
Чтобы добавить новый параметр нужно сделать несколько вещей:
- Добавить в конце конфигурационного файла zabbix_agentd.conf строчку вида
UserParameter=,где:
— уникальное имя, которое мы придумываем сами. Будем его использовать при настройке элемента данных в Zabbix.
— команда, которую нужно выполнить на наблюдаемом узле сети. А вот сразу очень простой пример, который лежит в каждом стандартном конфиге для Linux:UserParameter=system.test,who|wc -l
Итак, ключ здесь system.test, а выполняем команду who | wc -l, которая возвращает нам количество открытых сессий в системе. Добавляем (или раскомментируем данную строчку если уже есть), идем дальше.
- В Веб-консоли Zabbix создать новый элемент данных с ключом, который мы использовали, если брать пример выше, то это system.test.
Для этого нажимаем «Создать элемент данных»
и затем выставляем ключ такой же, как указали в конфиг-файле, а тип Zabbix агент:
- Перезагрузить Zabbix агента, чтобы изменения в конфиг-файле вступили в силу
Наблюдаем результат в последних данных:
Пример выше имеет мало практического применения, учитывая, что уже итак существует стандартный ключ system.users.num, который делает ровно тоже самое. Так что теперь рассмотрим пример, который уже больше будет походить на реалистичный. Если нам интересно мониторить момент, когда пора планово менять жесткие диски, то есть два варианта:
- Если диски за аппаратным RAID-контроллером, то, как правило, сами диски операционная система «не видит». Поэтому ищем способы как вытащить информацию о состоянии жестких дисков через утилиты или SNMP-сабагента, которые нам любезно предоставил(или не предоставил) производитель RAID-контроллера. Для каждой отдельной серии контроллеров свой путь до этой информации.
- Если речь идет о просто рабочих станциях, серверах с софтовом RAID и т.д., то тогда к дискам есть доступ из операционной системы, и мы вольны использовать различные утилиты для чтения их статуса. В случае Zabbix нам подходит утилита smartctl, из пакета SMARTMONTOOLS.
В Debian установка SMARTMONTOOLS сводится к:sudo apt-get install smartmontoolsи утилита готова к использованию. Для каждого диска, который есть в системе сначала проверим, что SMART включен:sudo smartctl -i /dev/sda | grep SMART
SMART support is: Available – device has SMART capability.
SMART support is: Enabledесли вдруг SMART поддерживается диском, но выключен, то активируем его:sudo smartctl -s on -S on -o on /dev/sda
smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/ === START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Enabled.
SMART Attribute Autosave Enabled.
SMART Automatic Offline Testing Enabled every four hours.Теперь мы можем проверять статус SMART командой:sudo smartctl -H /dev/sda |grep “test”| cut -f2 -d: |tr -d ” “
Именно эту команду мы и запишем в наш zabbix_agentd.conf:UserParameter=uHDD.health,sudo smartctl -H /dev/sda |grep “test”| cut -f2 -d: |tr -d ” “
где uHDD.health — ключ.
Тут возникает резонный вопрос, как быть если дисков два. Легче всего решить эту проблему поможет способность UserParameter передавать параметры агенту, про которую мы еще не упоминали. Но делается все очень просто, сразу пример:UserParameter=uHDD.health.[*],sudo smartctl -H /dev/$1 |grep “test”| cut -f2 -d: |tr -d ” “
В веб-интерфейсе Zabbix в ключе мы будем подставлять параметры в квадратные скобки вместо *. Например, для одного элемента данных мы напишем sda, а для другого sdb. В команде этот параметр найдет отражение там, где стоит переменная $1.
Создадим для второго диска элемент данных:
И через некоторое время сможем наблюдать результат в последних данных:
Все получилось. Но тут возникает резонный вопрос, как быть если дисков не два, а двадцать два. И тут нам пригодится замечательная возможность низкоуровнего обнаружения (LLD), про которую мы уже говорили.
Низкоуровневое обнаружение позволяет системе мониторинга обнаруживать какое количество однотипных элементов присутствует на узле сети и динамически по шаблону создавать необходимые элементы данных, триггеры и графики для этих элементов.
«Из коробки» системе доступна возможность находить файловые системы, сетевые интерфейсы и SNMP OID'ы. Однако, и здесь разработчики оставили возможность дополнить стандартные возможности, нужно просто передать в систему информацию о том, какие элементы обнаружены в формате JSON. Этим и воспользуемся.
Создадим маленький скрипт на perl, smartctl-disks-discovery.pl. Он будет находить все диски в системе и выводить эту информацию в JSON, передавая также информацию, включен ли у диска SMART или нет, а также попытается сам включить SMART, если он выключен:
#!/usr/bin/perl #must be run as root $first = 1; print “{
“;
print ” “data”:[
“; for (`ls -l /dev/disk/by-id/ | cut -d”/” -f3 | sort -n | uniq -w 3`) { #DISK LOOP $smart_avail=0; $smart_enabled=0; $smart_enable_tried=0; #next when total 0 at output if ($_ eq “total 0
“) { next; } print ” ,
” if not $first; $first = 0; $disk =$_; chomp($disk); #SMART STATUS LOOP foreach(`smartctl -i /dev/$disk | grep SMART`) { $line=$_; # if SMART available -> continue if ($line = /Available/){ $smart_avail=1; next; } #if SMART is disabled then try to enable it (also offline tests etc) if ($line = /Disabled/ & $smart_enable_tried == 0){ foreach(`smartctl -i /dev/$disk -s on -o on -S on | grep SMART`) { if (/SMART Enabled/){ $smart_enabled=1; next; } } $smart_enable_tried=1; } if ($line = /Enabled/){ $smart_enabled=1; } } print ” {
“; print ” “{#DISKNAME}”:”$disk”,
“; print ” “{#SMART_ENABLED}”:”$smart_enabled”
“; print ” }
“; } print ”
]
“;
print “}
“;При запуске скрипт выдает:$ /usr/local/bin/smartctl-disks-discovery.pl
{
“data”:[ { “{#DISKNAME}”:”md0″, “{#SMART_ENABLED}”:”0″ }, { “{#DISKNAME}”:”md1″, “{#SMART_ENABLED}”:”0″ }, { “{#DISKNAME}”:”sda”, “{#SMART_ENABLED}”:”1″ }, { “{#DISKNAME}”:”sdb”, “{#SMART_ENABLED}”:”1″ }]
}
Теперь, для того чтобы скрипт автоматически запускался Zabbix'ом, просто добавим еще один UserParameter в zabbix_agentd.conf:UserParameter=uHDD.discovery,sudo /usr/local/bin/smartctl-disks-discovery.pl
Покончив с настройкой конфига, переходим в веб-интерфейс, где создаем новое правило обнаружения для smartctl:
Обратите внимание на ключ и на фильтр, ({#SMART_ENABLED}=1) благодаря последнему будут добавляться только те обнаруженные диски, которые поддерживают SMART. Теперь мы можем переписать два наших элемента данных для дисков sda и sdb в один прототип элементов данных, просто заменив имя диска на макрос {#DISKNAME}:
Последнее, перед тем, как Zabbix сможет запускать команды, которые мы прописали в zabbix_agentd.conf из-под root и мониторить SMART, нужно добавить разрешения для его пользователя запускать эту команду без ввода пароля, для этого добавим в /etc/sudoers строчку:
zabbix ALL= (ALL) NOPASSWD: /usr/sbin/smartctl,/usr/local/bin/smartctl-disks-discovery.plГотовый шаблон для мониторинга SMART с остальными элементами данных, триггерами прикладываю, так же как и настроенный под него конфиг.
Zabbix агент, установленный на Windows, точно также может быть расширен через UserParameter, только команды будут уже другие. Хотя, например, smartctl — кроссплатформенная утилита, и точно также можно ее использовать для контроля за жесткими дисками в Windows. Кратко рассмотрим еще другой пример. Задача получать уведомление каждый раз, когда пользователь самостоятельно удаляет или устанавливает программы. Для этого будем использовать наш vbs-скрипт:uDiffPrograms.vbs'KNOWN ISSUE: If Application name conatins '-' symbol then e-mail alert containing software list will be sent all on one line instead of each packet on a single line
variable=InstalledApplications(“.”)
'WScript.Echo strConvert(variable,”Windows-1251″,”cp866″)
Const ForReading = 1
zabbix_dir=”C:zabbix”
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
'Create old file if does not exist
If objFSO.FileExists(zabbix_dir&”uDiffPrograms_old.txt”)=0 Then
Set objFile4 = objFSO.CreateTextFile(zabbix_dir&”uDiffPrograms_old.txt”)
objFile4.WriteLine variable
objFile4.Close
Call ConvertCharsetFile(“0x0″)
WScript.Quit
End if
'Create 'new' file
Set objFile3 = objFSO.CreateTextFile(zabbix_dir&”uDiffPrograms_new.txt”)
objFile3.WriteLine variable
objFile3.Close
'Compare old and new files
Set objArgs = Wscript.Arguments
Set objFile5= objFSO.GetFile(zabbix_dir&”uDiffPrograms_new.txt”)
Set objFile6 = objFSO.GetFile(zabbix_dir&”uDiffPrograms_old.txt”) If objFile5.Size objFile6.Size Then
' Wscript.Echo “The file is different.”
Else
'Wscript.Echo “They are the same.” objFSO.DeleteFile zabbix_dir&”uDiffPrograms_new.txt”
Call ConvertCharsetFile(“0x0″)
WScript.Quit End If
'Search for removed applications
Set objFile2 = objFSO.OpenTextFile(zabbix_dir&”uDiffPrograms_old.txt”, ForReading) Do Until objFile2.AtEndOfStream
strAddress2 = objFile2.ReadLine
If InStr(variable, strAddress2&vbCrLf) = 0 Then
strNotCurrent2 = strNotCurrent2 & strAddress2 & vbCrLf
End If
Loop
objFile2.Close 'Search for installed applications
Set objFile1 = objFSO.OpenTextFile(zabbix_dir&”uDiffPrograms_old.txt”, ForReading) oldvar = objFile1.ReadAll objFile1.Close
objFSO.DeleteFile zabbix_dir&”uDiffPrograms_old.txt”
Set objFile2 = objFSO.OpenTextFile(zabbix_dir&”uDiffPrograms_new.txt”, ForReading) Do Until objFile2.AtEndOfStream
strAddress = objFile2.ReadLine
If InStr(oldvar, strAddress&vbCrLf) = 0 Then
strNotCurrent = strNotCurrent & strAddress & vbCrLf
End If
Loop
objFile2.Close
'Rename C:zabbixuDiffPrograms_new.txt to C:zabbixuDiffPrograms_old.txt
objFSO.MoveFile zabbix_dir&”uDiffPrograms_new.txt” , zabbix_dir&”uDiffPrograms_old.txt”
'Output
if strNotCurrent “” and strNotCurrent2 “” then
Call ConvertCharsetFile(“Новые программы были установлены:” & vbCrLf & strNotCurrent & vbCrLf & “Следующие программы были удалены:” & vbCrLf & strNotCurrent2)
Wscript.Quit
End if
if strNotCurrent “” then
Call ConvertCharsetFile(“Новые программы были установлены:” & vbCrLf & strNotCurrent)
End if
if strNotCurrent2 “” then
Call ConvertCharsetFile(“Следующие программы были удалены:” & vbCrLf & strNotCurrent2)
End If Function InstalledApplications(node)
'''with Versions
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Set oRegistry = GetObject(“winmgmts://” _
& node & “/root/default:StdRegProv”)
sBaseKey = _
“SOFTWAREMicrosoftWindowsCurrentVersionUninstall”
iRC = oRegistry.EnumKey(HKLM, sBaseKey, arSubKeys) For Each sKey In arSubKeys iRC = oRegistry.GetStringValue( _
HKLM, sBaseKey & sKey, “DisplayName”, sValue) If iRC 0 Then
oRegistry.GetStringValue _
HKLM, sBaseKey & sKey, “QuietDisplayName”, sValue
End If If sValue “” and instr(sValue, “KB”)=0 Then
'instr(sValue, “KB”)=0 – to exlude KB-indexed Microsoft Patches
If instr(InstalledApplications, sValue&vbCrLf)=0 then
'and instr(InstalledApplications, sValue&vbCrLf)=0 – to exlude possible dublicates
InstalledApplications = _
InstalledApplications & sValue & vbCrLf
End If
End If
Next End Function Function ConvertCharsetFile(input)
Const adTypeBinary = 1
Const adTypeText = 2
Const bOverwrite = True
Const bAsASCII = False 'Write to temp file
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
If objFSO.FileExists( zabbix_dir&”uDiffPrograms_temp.txt” ) Then objFSO.DeleteFile zabbix_dir&”uDiffPrograms_temp.txt”
Set objFile3 = objFSO.CreateTextFile(zabbix_dir&”uDiffPrograms_temp.txt”)
objFile3.WriteLine input
objFile3.Close Dim oFS : Set oFS = CreateObject( “Scripting.FileSystemObject” ) Dim sFFSpec : sFFSpec = oFS.GetAbsolutePathName( zabbix_dir&”uDiffPrograms_temp.txt” ) Dim oFrom : Set oFrom = CreateObject( “ADODB.Stream” )
Dim sFrom : sFrom = “windows-1251”
Dim oTo : Set oTo = CreateObject( “ADODB.Stream” )
Dim sTo : sTo = “utf-8” oFrom.Type = adTypeText
oFrom.Charset = sFrom
oFrom.Open
oFrom.LoadFromFile sFFSpec oTo.Type = adTypeText
oTo.Charset = sTo
oTo.Open
oTo.WriteText oFrom.ReadText
oFrom.Close
If oFS.FileExists( sFFSpec ) Then oFS.DeleteFile sFFSpec
oTo.SaveToFile sFFSpec
oTo.Close
End Function
'=============================================================================
Для его интеграции с Zabbix добавим UserParameter в конфиг-файл:
UserParameter=uDiffPrograms, cscript.exe /nologo “C:zabbixuDiffPrograms.vbs” & type C:zabbixuDiffPrograms_temp.txt
Добавим элемент данных в шаблон для Windows:
Добавим триггер:
и действие, которое будет отправлять e-mail уведомление:
Весь процесс мониторинга выглядит так: каждый час запускается скрипт Zabbix агентом, который сравнивает два списка программ: текущий и предыдущий. Затем скрипт выписывает все изменения в отдельный файл. Если же изменений нет, то в файл пишется 0x0
Содержимое файла уходит на Zabbix сервер, где поднимается триггер в случае, если значение элемента данных uDiffProgramms отлично от 0x0. Затем отдельное действие отправляет по почте уведомление со списком того, что было установлено или удалено на данном компьютере:
UserParameter — отличная и простая возможность расширить функционал системы самостоятельно. Стоит упомянуть и альтернативы: zabbix_sender, который, например, подойдет для тех случаев, когда нужно отправлять данные в Zabbix не по расписанию, (как это делает UserParameter), а по какому-то событию; и system.run[], который похож на UserParameter, но удобнее тем, что не нужно вносить изменения во все конфиги агентов, достаточно просто добавить этот элемент данных в шаблон. Более того, в следующем крупном релизе Zabbix 2.2 нас ожидает еще один новый способ расширить возможности агента- это подключаемые модули. Ждем с нетерпением!
Вот так, считайте, что если вы можете узнать что-то о системе скриптом или командой, значит, вы всегда можете передать это в Zabbix.
Источник: https://habr.com/company/zabbix/blog/196218/
Вышел Zabbix 3.2
Хотим сообщить о выходе новой версии open source системы мониторинга Zabbix. Релиз несет принципиально новые возможности такие как:
- Дополнительные поля событий (тэги)
- Ручное закрытие проблем
- Корреляцию событий
- Вложенные группы узлов сети
- Определение отдельных условий для создания аварий и их восстановления
- Non-strict расчет триггерных выражений
- Интерфейс в подгружаемых модулях для репликации исторических данных во внешнее хранилище
…и многое другое. Под катом кратко расскажем о некоторых нововведениях
Тэги событий
В новой версии появился базис для отображения, фильтрации и других действий над событиями триггеров — тэги. Первый раз вы наткнетесь на них при настройке триггеров:
А затем снова сможете увидеть их в новом разделе Мониторинг -> Проблемы.
Думайте о тэгах как дополнительных полях событий, которые могут быть также использованы для фильтрации при отображении или в условиях автоматических действий (и условиях отправки уведомлений и их эскалаций), и самое главное — они могут быть использованы для корреляции различных аварий.
Корреляция событий
Теперь появилась возможность использовать один элемент данных для отслеживания множества не связанных между собой событий.
Уникальным идентификатором в Zabbix будет как раз выступать значение тэга, что позволит соединить вместе Возникновение конкретной проблемы с событием, оповещающим о ее окончании.
Так что ничего страшного, если несколько приложений пишут в один лог-файл — аварии каждого приложения будут создаваться и восстанавливаться ничуть не мешая друг другу. Другое полезное применение данного функционала — обработка SNMP-трапов.
Глобальная корреляция
Появилась и возможность связывать между собой события, возникшие из совершенно различных триггеров и даже на различных узлах сети.
Новый раздел конфигурации «Корреляция событий» не позволит критической аварии, той самой аварии, что вы хотите увидеть, и требующей действий, утонуть в потоке посыпавшейся симптоматики.
Все избыточные поступающие события будут скоррелированы и убраны с глаз долой. И да, это тоже настраивается на основе тэгов.
Вложенные группы узлов сети
Вложенные группы узлов сети позволят создать иерархию объектов мониторинга,
Это упростит как навигацию, так и управление правами доступа внутри Zabbix.
Новый быстрый экран работы с открытыми проблемами
Все текущие и актуальные проблемы теперь доступны в новом разделе Мониторинг-Проблемы (вместо Мониторинг-События). История проблем в базе данных переехала, и в новой версии лежит отдельно от текущих проблем, что дало отличный прирост производительности. Гибкий фильтр даст возможность быстро найти нужную информацию, а таймлайн поможет ориентироваться во времени.
Ручное закрытие аварий
Теперь такое возможно и в Zabbix.
Убирайте из списка проблем старые или неактуальные события, а также подтверждайте и закрывайте аварийные сообщения о непрошедшем ночью бекапе ( после того как починили конечно же) или ознакомившись в критической ошибкой из лог-файла. При этом закрывать можно будет только те проблемы, чьи триггеры были предварительно отмечены соответствующей галкой при настройке в шаблоне.
Упрощенный гистерезис и отдельное условие восстановления аварии
Для борьбы с миганием проблем раньше в Zabbix приходилось прибегать к довольно сложным для понимания триггерным выражениям, например к выражению вида:
({TRIGGER.VALUE}=0 and {server:temp.last()}>20) or
({TRIGGER.VALUE}=1 and {server:temp.last()}>15)
Оно помогало бороться с дребезгом аварии, когда температура колебалась в районе 20 градусов — авария создавалась при 20 градусах, но восстановление происходило лишь после того, как температура падала ниже 15.
Теперь все проще.
Просто отдельное опциональное окошко в настройках триггера, где может быть объявлен критерий окончания аварии:
И все, и больше никакой вывернутой наизнанку логики с {TRIGGER.VALUE}.
Просмотр элементов данных, триггеров и графиков, созданных через LLD
Маленькая, но очень полезная возможность, которой не хватало — возможность манипулировать с объектами, созданными через низкоуровневое обнаружение(LLD) тоже была реализована. Все только что перечисленное теперь можно удалять, отключать и просматривать также как и обычные объекты.
Думаю, что многим это сэкономит пару кликов мыши при настройке, так как и упростит удаление различного мусора, который мог просочиться через фильтр обнаружения LLD.
Переработанный экран настройки действий
Страница настройки действий была переработана. Теперь, все операции, которые нужно совершить при окончании аварии (будь то оповещение или запуск скрипта) настраивается в отдельной вкладке. Здесь же была переработан механизм работы задержки уведомлений от узлов сети, который находятся в режиме обслуживания.
Импорт/экспорт сценариев веб-мониторига
После добавления возможности импорт/экспорта преобразований значений (value maps) в 3.0 не выгружаемыми оставались веб-сценарии. Сегодня данная несправедливость устранена, и теперь решения по веб-проверкам могут быть также выгружены в XML со всеми шагами для последующей загрузки на другие сервера Zabbix. Ожидаем появления шаблонов веб-мониторинга на share.zabbix.com
Триггерные функции для NOTSUPPORTED элементов данных
Функция nodata() была переработана, чтобы сделать срабатывание триггеров проще в тех случаях, когда элемент данных становится недоступен.
Кроме того, функции date(), dayofweek(), dayofmonth(), now(), time(), которые в целом не очень то зависят от значения элемента данных, теперь всегда просчитываются, в независимости в какой состоянии находится элемент данных.
Ну а самое главное, что теперь триггер не будет уходить в состояние UNKNOWN, пока хотя бы одна часть логического ИЛИ может быть проверена.
Это позволит комбинировать несколько различных методов сбора данных для одного и того же события (например, через сбор SNMP-счетчиков и чтение лог-файла), или создать агрегированные аварии, не боясь, что они не будут работать из-за недоступности одного из элемента данных.
Работа с быстрорастущими лог-файлами
Добавлены новые опции для работы с быстрорастущими лог-файлами. Основная проблема с такими файлами заключается в огромном количестве сообщений, которые пишутся в лог в определенных ситуациях.
Так как все строки должны быть проанализированы Zabbix-агентом, а строки совпавшие с фильтром отправлены на Zabbix-сервер, то при больших объемах могут возникать существенные задержки, кроме того, в базу записывается большое количество повторяющихся строк.
Для работы с такими логами добавлен новый параметр maxdelay, который ставит временные рамки, за которые должны быть проанализированы новые поступающие сообщения.
Если так выходят, что все строки не удается перебрать в установленный срок, то более старые сообщение пропускаются в пользу более свежих.
Также добавлены новые элементы данных Zabbix-агента log.count и logrt.count, которые возвращают количество обработанных строк, вместо них самих.
Поддержка regex в функции count()
Совсем небольшое, но приятное добавление. Функция count() обзавелась возможностью использовать операторов regexp и iregexp для всех типов элементов данных.
Таким образом, теперь возможно подсчитать количество значений, собранных за определенный период времени, которые соответствуют регулярному выражению.
Преобразование значения макроса
Появилась возможность изменить значение макроса, такого как, например, {ITEM.LASTVALUE}. Используя функции regsub и iregsub можно вытащить, например, часть строки из лог-файла и полученный результат использовать в тэгах событий, или в тексте оповещения
Подробнее
Подробнее с этими и другими нововведениями можно познакомиться, пройдя по ссылкам ниже в документацию:
Версия уже доступна для скачивания здесь. Процедура обновления очень простая, с ней можно ознакомиться здесь. Дополнительные действия могут понадобиться лишь тем, кто используют партицирование в MySQL и PostgreSQL — внесенные изменения в схему в новой версии могут быть не совместимы с текущими настройками разделения таблиц.
Источник: http://www.pvsm.ru/zabbix/187509
Мониторинг веб-сервера Nginx c помощью zabbix trapper
Рассмотрим случай, когда требуется настроить мониторинг сервера по множеству однотипных или динамических метрик, которые отсутствуют в zabbix-агенте.
В такой ситуации в zabbix-агенте можно создавать ключи для проверки с помощью параметра конфигурации – UserParameter. Для каждого параметра в zabbix_agentd.conf создаётся строка вида:
Однако, если значений слишком много, такой способ может оказаться не удобным.
Второй способ заключается в использовании элемента данных zabbix типа trapper (zabbix-ловушки). Принцип очень простой: в zabbix-сервере создаются элементы данных этого типа с произвольным именем ключа.
Затем, с помощью утилиты zabbix_sender формируется специальный запрос, в котором указывается ключ ловушки, значение параметра и имя хоста.
Если параметров много, то можно сформировать файл в формате zabbix_sender и отправить все значения из файла за одно соединение с сервером.
Строки в файле должны быть оформлены в таком виде:
или
Рассмотрим, как использовать эту возможность на примере мониторинга популярного веб-сервера Nginx. Для этого веб-сервера есть возможнось использовать модуль stub_status, который показывает в цифрах текущую нагрузку на Nginx примерно в таком виде:
Из этих данных мы можем получить, например, такие метрики для мониторинга:
- nginx_status.active – количество всех открытых соединений
- nginx_status.reading – количество запросов, у которых nginx читает заголовки запроса
- nginx_status.writing – количество запросов, у которых в данный момент сервер читает тело запроса, обрабатывает запрос или пишет ответ клиенту
- nginx_status.waiting – количество неактивных(keep-alive) соединений
- nginx_status.accepts – количество принятых запросов в секунду
- nginx_status.handled – количество обрабатываемых запросов в секунду
- nginx_status.requests – количество запросов в секунду
Благодаря этим параметрам можно оценить нагрузку на сервер (в течении дня, недели и т.д.) , а также оценить узкие места в его работе (медленный ли канал у сервера, медленные ли каналы у клиентов, медленно ли обрабабатываются запросы и т.д.).
Скрипт, формирующий файл для zabbix_sender-а и запускающий zabbix_sender, может запускаться zabbix-агентом.
Для этого в конфигурационном файле агента zabbix_agentd.conf создадим ключ nginx_status:
Содержимое /home/zabbix/nginx.sh примерно такое:
При запросе сервером zabbix ключа nginx_status, скрипт вышлет данные серверу.
Создаем в zabbix-сервере шаблон – Template App Nginx.
Создаём в шаблоне элемент данных типа zabbix agent, запускающий скрипт /home/zabbix/nginx.sh (Рис. 1).
Рисунок. 1 Элемент данных, запускающий скрипт /home/zabbix/nginx.sh
Скрипт в случае успешного получения страницы nginx-status возвращает 1 и 0 – в противном случае. Полезно создать триггер отслеживающий эту ситуацию (Рис. 2).
Рисунок 2. Тригер, отслеживаюший возможность получения статуса с Nginx.
Далее для каждого параметра создаем элемент данных типа zabbix trapper. На Рис.2 пример для метритки nginx active connections.
Рисунок 3. Создание элемента данных для метрики nginx active connections.
По аналогии делаем элементы для остальных метрик. Изменяется только название элемента данных (Name) и ключ (Key).
После объединения графиков в группы получаются графики как на Рис. 4 и Рис. 5.
Рисунок 4. Статус соединений.
Рисунок 5. Нагрузка на сервер.
Шаблон для мониторинга nginx можно скачать отсюда: http://forum.itrm.ru/t/94/
Источник: http://blog.itrm.ru/2013/08/nginx-c-zabbix-trapper.html