Мониторинг microsoft windows на базе zabbix

И есть ли в этом смысл?Вот так, при помощи нехитрых манипуляций, можно смотреть красивые графики про десяток машин и один сервер. Но зачем?..Для тех, кто задумал...

И есть ли в этом смысл?

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

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

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

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

  1. Круглосуточно и непрерывно мониторить одну специфическую железку по ряду параметров;

  2. Мониторить у рабочих станций информацию о температурах, ЦП в первую очередь;

  3. Всякие мелочи в связи с широким внедрением удалёнки: количество подключений по VPN, общее состояние дополнительных виртуальных машин.

Подробнее про локальные задачи:

  1. Надо было оценить и наглядно представить данные об интернет-канале. Канал на тот момент представлял собой 4G-роутер Huawei. Это устройство было последним, но далеко не первым в огромном количестве плясок с бубном в попытках избавиться от разного рода нестабильностей. Забегая вперёд: забирать с него данные напрямую о качестве сигнала более-менее стандартными средствами оказалось невозможно, и даже добраться до этих данных — отдельный квест. Пришлось городить дендрофекальную конструкцию, которая, на удивление стабильно, и стала в итоге поставлять данные. Данные в динамике и в графическом представлении оказались настолько неутешительными, что позволили убедить всех причастных таки поменять канал, даже и на более дорогой;

  2. Данные о температуре процессора дают сразу несколько линий: можно обнаружить шифровальщик в процессе работы, наглядно сделать вывод о недостаточной мощности рабочей станции, найти повод провести плановую чистку, узнать о нарушении условий эксплуатации. Последний пункт особенно хорош: множество отказов оборудования и BSOD’ов в итоге нашли причину в «я ставлю обогреватель под стол, ну и свой баул, ну да, прям к этой решётке. А что? А я канпуктер развернула, а то неудобно»;

  3. Интерфейс того же OpenVPN… ну, он в общем даже и не интерфейс и оставляет желать любого другого. Отдельная история.

Как большой любитель велосипедить всё подряд, сначала я решил свелосипедить и это. Уже валялись под рукой всякие скрипты по сбору статистки, и html проекты с графиками на js, и какие-то тестовые БД… Но тут сработала жадность (и лень, чоужтам). А чего это, подумал я, самому опять корячиться, если в том же Zabbix уже куча всяких шаблонов, и помимо задач из списка можно будет видеть много чего ещё? Да и он бесплатный к тому же. Всего-то делов, виртуалку поднять да клиенты централизованно расставить. Потренируюсь с ним, опять же, он много где используется.

Итак, нам понадобятся:

  1. Виртуальная машина или физический хост. Zabbix нетребователен к ресурсам при небольшом количестве хостов на мониторинге: мне хватило одного виртуального процессора на 2ГГц и 4 Гб RAM за глаза;

  2. Любой инструмент для автоматического раскидывания zabbix-agent. При некотором скилле это можно делать даже через оригинальный WSUS, или просто батником с psexec, вариантов много. Также желательно запилить предварительно сконфигурированный инсталлятор агента — об этом ниже;

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

У Zabbix много вариантов установки. В моём случае (я начинал с 4 LTS) сработала только установка руками в чистую, из собственного образа, OC в виртуальной машине на Hyper-V. Так что, коли не получится с первого раза, — не сдавайтесь, пробуйте. Саму процедуру подробнее описывать не буду, есть куча статей и хороший официальный мануал.

Вот так красиво это выглядит, когда применяется по назначению. Автор: Dotneft - собственная работа, CC BY-SA 4.0 https://commons.wikimedia.org/w/index.php?curid=73459928

Вот так красиво это выглядит, когда применяется по назначению. Автор: Dotneft — собственная работа, CC BY-SA 4.0 https://commons.wikimedia.org/w/index.php?curid=73459928

Про формирование инсталлятора агента: один из самых простых способов — использовать утилиты наподобие 7zfx Builder . Нужно будет подготовить:

  • файл zabbix_agentd.conf ;

  • файлы сторонних приложений и скриптов, используемых в userParameters (об этом ниже) ;

  • скрипт инсталлятора с кодом наподобие этого:

SETLOCAL ENABLEDELAYEDEXPANSION 
SET INSTDR=C:ZabbixAgent 
SET IP=192.168.100.10 
set ip_address_string="IPv4-адрес"

for /f "usebackq tokens=2 delims=:" %%F in (ipconfig ^| findstr /c:%ip_address_string%) do SET IP=%%F 
SET IP=%IP: =% 
ECHO SourceIP=%IP%>> "%INSTDR%confzabbix_agentd.conf" 
ECHO ListenIP=%IP%>> "%INSTDR%confzabbix_agentd.conf" 
ECHO Hostname=%COMPUTERNAME%>> "%INSTDR%confzabbix_agentd.conf"

"%INSTDR%binzabbix_agentd.exe" -c "%INSTDR%confzabbix_agentd.conf" -i 
net start "Zabbix Agent" 
ENDLOCAL

Кстати, об IP. Адрес в Zabbix является уникальным идентификатором, так что при «свободном» DHCP нужно будет настроить привязки. Впрочем, это и так хорошая практика.

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

sc failure "Zabbix Agent" reset= 30 actions= restart/60000

Как и многие сервисы, Zabbix agent под Windows при загрузке ОС стартует раньше, чем некоторые сетевые адаптеры. Из-за этого агент не может увидеть IP, к которому должен быть привязан, и останавливает службу. В оригинальном дистрибутиве при установке настроек перезапуска нет.

После этого добавляем хосты. Не забудьте выбрать Template – OS Windows. Если сервер не видит клиента — проверяем:

  1. IP-адрес;

  2. файрвол на клиенте;

  3. работу службы на клиенте — смотрим zabbix_agentd.log, он вполне информативный.

По моему опыту, сервер и агенты Zabbix очень стабильны. На сервере, возможно, придётся расширить пул памяти по active checks (уведомление о необходимости такого действия появляется в дашборде), на клиентах донастроить упомянутые выше нюансы с запуском службы, а также, при наличии UserParameters, донастроить параметр timeout (пример будет ниже).

Что видно сразу, без настроек?

Сразу видно, что Zabbix заточен под другое :) Но и об обычных рабочих станциях в конфигурации «из коробки» можно узнать много: идёт мониторинг оперативной памяти и SWAP, места на жёстких дисках, загрузки ЦП и сетевых адаптеров; будут предупреждения о том, что клиент давно не подключался или недавно перезагружен; агент автоматически создаёт список служб и параметров их работы, и сгенерирует оповещение о «необычном» поведении. Практически из коробки (со скачиванием доп. template’ов с офсайта и небольшой донастройкой) работает всё, что по SNMP: принтеры и МФУ, управляемые свитчи, всякая специфическая мелочь. Иметь алерты по тем же офисным принтерам в едином окне очень удобно.

В общем-то, очень неплохо, но…

Что доделывать?

Оооо. Ну, хотел повелосипедить, так это всегда пожалуйста. Прежде всего, нет алертов на события типа «критические» из системного лога Windows, при том, что механизм доступа к логам Windows встроенный, а не внешний, как Zabbix agent active. Странно, ну штош. Всё придётся добавлять руками.

Например

для записи и оповещения по событию «Система перезагрузилась, завершив работу с ошибками» (Microsoft-Windows-Kernel-Power, коды 41, 1001) нужно создать Item c типом Zabbix agent (active) и кодом в поле Key:

eventlog[System,,,,1001]

По этому же принципу создаём оповещения на другие коды. Странно, но готового template я не нашёл.

Cистема автоматизированной генерации по службам генерирует целую тучу спама. Часть служб в Windows предполагает в качестве нормального поведения тип запуска «авто» и остановку впоследствии. Zabbix в такое не может и будет с упорством пьяного сообщать «а BITS-то остановился!». Есть широко рекомендуемый способ избавления от такого поведения — добавление набора служб в фильтр-лист: нужно добавить в Template «Module Windows services by Zabbix agent», в разделе Macros, в фильтре {$SERVICE.NAME.NOT_MATCHES} имя службы в формате RegExp. Получается список наподобие:

^RemoteRegistry|MMCSS|gupdate|SysmonLog|
clr_optimization_v.+|clr_optimization_v.+|
sppsvc|gpsvc|Pml Driver HPZ12|Net Driver HPZ12|
MapsBroker|IntelAudioService|Intel(R) TPM Provisioning Service|
dbupdate|DoSvc|BITS.*|ShellHWDetection.*$

И он не работает работает с задержкой в 30 дней.

После добавления служб в фильтр триггеры будут висеть ещё 30 дней. Этот срок, впрочем, тоже можно настроить

После добавления служб в фильтр триггеры будут висеть ещё 30 дней. Этот срок, впрочем, тоже можно настроить

Про службы, автоматически генерируемые в Windows 10, я вообще промолчу.
Нет никаких температур (но это, если подумать, ладно уж), нет SMART и его алертов (тоже отдельная история, конечно). Нет моих любимых UPS.

Некоторые устройства генерируют данные и алерты, работу с которыми надо выстраивать. В частности, например, управляемый свитч Tp-Link генерирует интересный алерт «скорость на порту понизилась». Почти всегда это означает, что рабочая станция просто выключена в штатном режиме (ушла в S3), но сама постановка вопроса заставляет задуматься: сведения, вообще, полезные — м.б. и драйвер глючит, железо дохнет, время странное…

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

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

После допиливания – примерно так

После допиливания – примерно так

О локальных задачах

Всё, что не встроено в Zabbix agent, реализуется через механизм Zabbix agent (active). Суть проста: пишем скрипт, который будет выдавать нужные нам данные. Прописываем наш скрипт в conf:

UserParameter=имя.параметра,путькскрипту 

Нюансы:

  • если хотите получать в Zabbix строку на кириллице из cmd — не надо. Только powershell;

  • если параметр специфический – для имени нужно будет придумать и сформулировать дерево параметров, наподобие «hardware.huawei.modem.link.speed» ;

  • отладка и стабильность таких параметров — вопрос и скрипта, и самого Zabbix. Об этом дальше.

Хотелка №1: температуры процессоров рабочих станций

В качестве примера реализуем хотелку «темература ЦП рабочей станции». Вам может встретиться вариант наподобие:

wmic /namespace:rootwmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature

но это не работает (вернее, работает не всегда и не везде).
Самый простой способ, что я нашёл — воспользоваться проектом OpenHardwareMonitor. Он свои результаты выгружает прямо в тот же WMI, так что температуру получим так:

@echo OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET TMPTMP=0 
for /f "tokens=* skip=1 delims=" %%I in ('wmic /namespace:rootOpenHardwareMonitor PATH Sensor WHERE Identifier^="/intelcpu/0/temperature/1" get Value') DO (     
	SET TMPTMP=%%I && GOTO :NXT 
) 
:NXT  
ECHO %TMPTMP% 
ENDLOCAL 
GOTO :EOF

Конечно, при условии, что OHM запущен. В текущем релизе OHM не умеет работать в качестве Windows service. Так что придётся либо смущать пользователей очередной иконкой в трее, либо снова городить свой инсталлятор и запихивать OHM в сервисы принудительно. Я выбрал поcледнее, создав инсталляционный cmd для всё того же 7zfx Builder наподобие:

nssm install OHMservice "%programfiles%OHMOpenHardwareMonitor.exe" 
timeout 3 
net start "OHMservice" 
del nssm.exe /Q

Два момента:

  1. NSSM — простая и достаточно надёжная утилита с многолетней историей. Применяется как раз в случаях, когда ПО не имеет режима работы «сервис», а надо. Во вредоносности утилита не замечена;

  2. Обратите внимание на «intelcpu» в скрипте получения температуры от OHM. Т.к. речь идёт о внедрении в малом офисе, можно рассчитывать на единообразие парка техники. Более того, таким образом лично у меня получилось извлечь и температуру ЦП от AMD. Но тем не менее этот пункт требует особого внимания. Возможно, придётся модифицировать и усложнять инсталлятор для большей универсальности.

Работает более чем надёжно, проблем не замечено.

Хотелка № 2: получаем и мониторим температуру чего угодно

Понадобятся нам две вещи:

  1. Штука от братского китайского народа: стандартный цифровой термометр DS18B20, совмещённый с USB-UART контроллером. Стоит не сказать что бюджетно, но приемлемо;

  2. powershell cкрипт:

param($cPort='COM3')

$port= new-Object System.IO.Ports.SerialPort $cPort,9600,None,8,one

$port.Open()
$tmp = $port.ReadLine()
$port.Close()

$tmp = $tmp -replace "t1="
if (([int]$tmp -lt 1) -or ([int]$tmp -gt 55)){

	#echo ("trigg "+$tmp)
	$port.Open()
	$tmp = $port.ReadLine()
	$port.Close()

	$tmp = $tmp -replace "t1="
} 
echo ($tmp)

Связка работает достаточно надёжно, но есть интересный момент: иногда, бессистемно, появляются провалы или пики на графиках:

Тесты показали, что проблема в самом Zabbix, а данные с китайских датчиков приходят верные. Детальное рассмотрение пиков и провалов выявило неожиданный факт: похоже Zabbix иногда получает и/или записывает в БД не полное значение, а «хвост». Т.е., например, 1.50 от значения 21.50. При этом положение точки не важно — может получить и 1.50, и 50, и даже 0. Как так происходит, мне выяснить пока не удалось. Изменение timeout на поведение не влияет никак, ни в большую, ни в меньшую сторону.
Наверное, стоило бы написать багрепорт. Но уже вышел 6.0 LTS (у меня 5) и обновляться в текущей ситуации, пожалуй, не буду.

Хотелка № 3: OpenVPN подключения

Template’ов для OpenVPN и Zabbix существует довольно много, но все они реализованы на том или ином sh под *nix’ы . В свою очередь, «dashboard» OpenVPN-сервера представляет из себя, по сути, вывод утилиты в консоль, который пишется в файл по событиям. Мне лень было считать трафик по отдельным пользователям и вообще делать их discover, т.к. подключений и пользователей немного. Ограничился текущим количеством подключений:

$openvpnLogPath = "C:OpenVPNconfig"
$openvpnLogName = "openvpn-status.log"

try { 
	$logData = Get-Content $openvpnLogPath$openvpnLogName -ErrorAction Stop
}
catch{
	
	Write-Host("Missing log file")
	exit 1
}

$logHeader = "OpenVPN CLIENT LIST"
$logHeader2 = "Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since"
$logMark1 = "ROUTING TABLE"

if ($logData[0] -ne $logHeader -or $logData[2] -ne $logHeader2 ){
	
	Write-Host("Bad log file")
	exit 1
}

$i = 0
foreach ($tmpStr in ($logData | select -skip 3)) {
	
	if ($tmpStr -eq $logMark1) {break}
	$i++
}

Write-Host($i)
exit 0

Хотелка № 4: спецжелезка 1

Для большого количества специфического оборудования существуют написанные энтузиастами Template’ы. Обычно они используют и реализуют функционал, уже имеющийся в утилитах к этим железкам.

Боли лирическое отступление

установив один из таких темплейтов, я узнал, что «нормальная рабочая» температура чипа RAID-контроллера в серваке — 65+ градусов. Это, в свою очередь, побудило внимательнее посмотреть и на контроллер, и на сервер в целом. Были найдены косяки и выражены «фи»:

  1. Apaptec’у – за игольчатый радиатор из неизвестного крашеного силумина высотой чуть более чем нихрена, поток воздуха к которому закрыт резервной батарейкой с высотой больше, чем радиатор. Особенно мне понравилось потом читать у Adaptec того же «ну, это его нормальная рабочая температура. Не волнуйтесь». Ответственно заявляю: при такой «нормальной рабочей температуре» контроллер безбожно и непредсказуемо-предсказуемо глючил;

  2. Одному отечественному сборщику серверов. «Берём толстый жгут проводов. Скрепляем его, чтобы он был толстым, плотным, надёжным. Вешаем это прямо перед забором воздуха вентиляторами продува серверного корпуса. Идеально!». На «полу» сервера было дофига места, длины кабелей тоже хватало, но сделали почему-то так.

Также был замечен интересный нюанс поведения, связанный с Zabbix. Со старым RAID контроллером при наличии в системном логе специфичных репортов, отваливался мониторинг температуры контроллера в Zabbix, но! при запуске руками в консоли скрипта или спец. утилиты температура выводилась корректно и без задержек.

Но полный функционал реализован далеко не всегда. В частности, мне понадобились температуры жёстких дисков с нового RAID-контроллера (ну люблю я температуры, что поделать :) ), которых в оригинальном темплейте не было. Пришлось самому реализовывать температуры и заодно autodiscover физических дисков: https://github.com/automatize-it/zabbix-lsi-raid/commit/1d3a8b3a0e289b8c2df637028475177a2b940689

Можно видеть, какой HDD и даже SSD стоит перед отсеком с БП сервера и хуже охлаждается

Можно видеть, какой HDD и даже SSD стоит перед отсеком с БП сервера и хуже охлаждается

Оригинальный репозиторий, вероятно, заброшен, как это довольно часто бывает.

Хотелка № 5, на десерт: спецжелезка 2

Как и обещал, делюсь опытом вырывания данных из беспроводной железки Huawei. Речь о 4G роутере серии B*. Внутри себя железка имеет ПО на ASP, а данные о качестве сигнала — RSSI, SINR и прочее — в пользовательском пространстве показывать не хочет совсем. Смотри, мол, картинку с уровнем сигнала и всё, остальное не твоего юзерского ума дело. К счастью, в ПО остались какие-то хвосты, выводящие нужное в plain JSON. К сожалению, взять да скачать это wget-ом не получается никак: мало того, что авторизация, так ещё и перед генерацией plain json требуется исполнение JS на клиенте. К счастью, существует проект phantomjs. Кроме того, нам понадобится перенесённая руками кука из браузера, где мы единожды авторизовались в веб-интерфейсе, вручную. Кука живёт около полугода, можно было и скрипт написать, но я поленился.

Алгоритм действий и примеры кода:

вызываем phantomjs с кукой и сценарием:

phantomjs.exe --cookies-file=cookie.txt C:cmdyota_signalscenery.js

Примеры сценариев:

//получаем общий уровень сигнала
var url = "http://192.168.2.1/html/home.html";
var page = require('webpage').create();
page.open(url, function(status) {
  //console.log("Status: " + status);
  if(status === "success") {
	
	var sgnl = page.evaluate(function() {
		return document.getElementById("status_img").innerHTML; //
	});
	
	var stt = page.evaluate(function() {
		return document.getElementById("index_connection_status").innerText; //
	});
	
	var sttlclzd = "dis";
	var sgnlfnd = "NA";
	
	if (stt.indexOf("Подключено") != -1) {sttlclzd = "conn";}
		
	if (sgnl.indexOf("icon_signal_01") != -1) {sgnlfnd = "1";}
	else {
		var tmpndx = sgnl.indexOf("icon_signal_0");
		sgnlfnd = sgnl.substring(tmpndx+13,tmpndx+14);
	}
	
	console.log(sttlclzd+","+sgnlfnd);
	
	var fs = require('fs');
		
		try {
			fs.write("C:\cmd\siglvl.txt", sgnlfnd, 'w');
		} catch(e) {
			console.log(e);
		}
    
  }
  phantom.exit();
});
//получаем технические параметры сигнала через какбэ предназначенный для этого "API"
var url = "http://192.168.2.1/api/device/signal"; 
var page = require('webpage').create();

  
	page.onLoadFinished = function() {
		
		//console.log("page load finished");
		//page.render('export.png');
		console.log(page.content);
		
		parser = new DOMParser();
		xmlDoc = parser.parseFromString(page.content,"text/xml");

		var rsrq = xmlDoc.getElementsByTagName("rsrq")[0].childNodes[0].nodeValue.replace("dB","");
		var rsrp = xmlDoc.getElementsByTagName("rsrp")[0].childNodes[0].nodeValue.replace("dBm","");
		var rssi = xmlDoc.getElementsByTagName("rssi")[0].childNodes[0].nodeValue.replace("dBm","").replace(">=","");
		var sinr = xmlDoc.getElementsByTagName("sinr")[0].childNodes[0].nodeValue.replace("dB","");
		
		var fs = require('fs');
		
		try {
			fs.write("C:\cmd\rsrq.txt", rsrq, 'w');
			fs.write("C:\cmd\rsrp.txt", rsrp, 'w');
			fs.write("C:\cmd\rssi.txt", rssi, 'w');
			fs.write("C:\cmd\sinr.txt", sinr, 'w');
		} catch(e) {
			console.log(e);
		}
		
		phantom.exit();
	};
	
	page.open(url, function() {
		page.evaluate(function() {
		});
    });

Конструкция запускается из планировщика задач. В Zabbix-агенте производится лишь чтение соответствующих файлов:

UserParameter=internet.devices.huawei1.signal.level,type C:cmdsiglvl.txt 

Особое внимание на SINR. Он должен быть 10+. Ну, иногда и правда был. Около 4-5 утра обычно

Особое внимание на SINR. Он должен быть 10+. Ну, иногда и правда был. Около 4-5 утра обычно

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

Итого

Стоит ли заморачиваться на Zabbix, если у вас 20 машин и 1-2 сервера, да ещё и инфраструктура Windows?

Как можно понять из вышеизложенного, работы будет много. Я даже рискну предположить, что объёмы работ и уровень квалификации для них сравнимы с решением «свелосипедить своё с нуля по-быстрому на коленке».

Не стоит рассматривать Zabbix как панацею или серебряную пулю.

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

А красивые графики дают усладу глазам и часто — новое видение процессов в динамике.

Если захочется внедрить, то могу пообещать, как минимум — скучно не будет! ;)

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

Мониторите малые офисы?


59.42%
Мониторю, Заббиксом
41


2.9%
Мониторю, не Заббиксом
2


2.9%
Мониторю, самописной системой
2


24.64%
Не мониторю, но вообще надо бы
17


10.14%
Не мониторю и не надо
7

Проголосовали 69 пользователей.

Воздержались 25 пользователей.

This time we’re going to look at how to monitor any Windows Service with the Zabbix agent. Zabbix website guide is quite clear, but none the less here’s a short step-by-step guide on how to do it.

1. The Template

When you work with Zabbix, it’s always a good idea to start with a fresh new template, unless the changes you are making will effect ALL the hosts which the template is linked to. Rarely this is the case, and as such a separate template is a good idea. This gives you more control over what you’r doing and how it’s being implemented. To create a new template, navigate to Configuration -> Templates. Click on “New Template” and name it as you please, tutorial if you like. Any new template that you create will automatically be placed in the Templates group, which is good. Give the template a description if you want but other than this, there are no additional requirements for a template. To finish things off, click Add at the bottom of the Template tab to save it.

2. Applications and Items

Open up the template you just created and lets start off by creating a application in the “Applications” view. Click on Create Application on the top right corner of the Zabbix webpage and give the Application a name. If you look at any other template, that is created while Zabbix is installed, an Application contains one or more items. The application you create could be named “Services” or if you want to monitor more than one service that is required for the application to run, you could name it like the Application is. None of this matters, as long as it makes sense to you! Click Add once you’ve named the application and lets move on to the Items, where the magic happens.

Zabbix_Windows_serviceThis brand new template has no items, like it had no applications. We need to define what will be a part of this template and in this case, an Item equals to one service. Click “Create Item” on the top right corner and let’s create our first Windows Service. Give the Item a name, preferably something that describes what you are monitoring. The type should be “Zabbix agent” and the key is what’s important. The key should be service_state[service_name], and the service name you can find from services.msc (win+r to run services.msc). If we were to monitor that Windows Time service is running, open up the properties of “Windows Time“. What would be entered in service_state, is the service name from the properties; W32Time. This tells Zabbix what key to look for within the services. Zabbix gets back a numeric value if the service is running, stopped or something else, so type of information and data type is numeric (unsigned) and Decimal. Specify the update interval according to how critical the application is, 30 seconds should be more than enough for any service. Lastly select the Application you created from the Applications list and give the item a suiting description.

3. The trigger

To get any kind of alarm from the service, we need to create a trigger. Triggers define how to interact with the values that are returned tot he Zabbix Server by the agent. In this case, we receive a numeric decimal value that was defined in the item before. You can use the expression builder if you want, or write the expression yourself. If you use the expression builder, make sure you select the template when you choose what item to interact with.

Zabbix_Windows_service-triggerThe trigger is written inside { } brackets, and starts off with the template name. In my example, I’ve named the template “Template Windows Time Service“. Continued from that, the Item key is written with : in between, the key being in this example service_state[W32Time]. We want to trigger if the value changes, meaning we want to interact with the last value provided using .last().  We want an alert to trigger, if the service state is anything else than running, meaning we use the expression <>0. The value zero comes from how Zabbix agent presents the service state to us. You can find the list of service states here (search for service_state).

Give the trigger a severity that you think is appropriate and your done.

4. Testing

Apply this template to a Windows Host you are monitoring, and stop the service if possible. Within a short while, you should see a trigger on your dashboard regarding the service in question. That’s it, you can add multiple applications to this template, and multiple services. But in it’s simplest form, one template may contain one application with one item and it’s trigger.

You can download an example template here:

Zabbix это open-source система мониторинга корпоративного уровня. На текущий момент Zabbix одна из самых популярных и функциональных бесплатных систем мониторинга. Благодаря простой установке и настройке Zabbix можно использовать для мониторинга крупных инфраструктур с сотнями серверов, так и для мелких конфигураций. В этой статье мы рассмотрим, как выполнить установку и базовую настройку сервера Zabbix 4.4 с веб-интерфейсом на базе Linux Ubuntu и CentOS, установить агенты Zabbix на сервере Windows и Linux, и добавить новые хосты в систему мониторинга.

Общий интерфейс Zabbix сервера представлен на скриншоте ниже.

веб интерфейс системы мониторинга zabbix

Содержание:

  • Из чего состоит Zabbix и что он может?
  • Установка Zabbix Server в Linux (Ubuntu, CentOS)
  • Настройка веб-интерфейса Zabbix
  • Установка Zabbix Agent в Windows
  • Добавление устройства на Zabbix-сервере
  • Установка Zabbix Agent в Linux

Из чего состоит Zabbix и что он может?

Zabbix простой установке и настройке, написан на C (сервер, прокси и агент) и PHP (фронтенд). Zabbix Server и Zabbix Proxy может работать только на Linux системах. Агент можно установить на большом количестве поддерживаемых ОС и платформах.

Инсталляция Zabbix сервера состоит из:

  • бинарника zabbix_server (обычно работает как сервис);
  • MySQL (MariaDB)/PostgreSQL базы данных;
  • Веб сервера Apache2/Nginx с обработчиком PHP;
  • Файлов самого frontend сайта (.php, .js, .css и т.д.).

Обычно схема работы выглядит так:

  1. Агент Zabbix посылает данные на сервер
  2. Сервер Zabbix получает и обрабатывает данные.
  3. Если полученные данные подпадают под заданные условия, то срабатывает триггер;
  4. Активный триггер сигнализирует о проблеме. Отображается уведомление на фронтенде (сайте), и в зависимости от конфигурации рассылается сообщение по почте и выполняется какие-либо действия (например, перезапуск службы, которая мониторится).

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

Установка Zabbix Server в Linux (Ubuntu, CentOS)

В этой статье мы рассмотрим пример установки Zabbix Server 4.4 на Linux (на примере Ubuntu Server 18.4 и CentOS) через пакетный менеджер.

Перейдите на страницу загрузки https://www.zabbix.com/download и выберите репозиторий, соответствующий вашему дистрибутиву Linux. Готовые пакеты есть для всех популярных дистрибутивов.

Например, для установки Zabbix на Ubuntu 18.04 нужно последовательно выбрать :

Zabbix Version (4.4) -> OS Distribution (Ubuntu) -> OS Version (18.04 Bionic) -> Database (MySQL) -> Веб сервер (Nginx или Apache).

инструкция по установке zabbix, получение репозиториев

Скачем и добавим репозиторий:

# wget https://repo.zabbix.com/zabbix/4.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.4-1+bionic_all.deb
# dpkg -i zabbix-release_4.4-1+bionic_all.deb
# apt update

Теперь можно установить необходимые пакеты:

# apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-agent

установка zabbix-server в linux ubuntu

Для установки Zabbix в CentOS 8/RHEL 8 нужно подключить репозиторий с актуальной версией Zabbix (можно установить Zabbix из ветки 4.0 LTS или последнюю версию Zabbix 4.4):

# rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm
# dnf clean all

Предполагаем, что на сервере уже установлены: nginx, MySQL/MariaDB, php и php-fpm. Теперь через пакетный менеджер установим сам сервер Zabbix и агент:

# dnf install zabbix-server-mysql zabbix-web-mysql zabbix-agent

Осталось создать базу данных для Zabbix в MySQL (вместо MySQL можно использовать PostgreSQL, просто замените в командах ‘mysql’ на ‘pgsql’).

Создайте базу данных и дайте права пользователю, из-под которого Zabbix будет обращаться к базе данных:

mysql -uroot
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to [email protected] identified by 'ВашПароль';
mysql> quit;

Импортируйте базу данных Zabbix. Нужно будет ввести пароль, который вы указали при создании пользователя.

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p Zabbix

Измените конфигурационный файл /etc/zabbix/zabbix_server.conf, укажите пароль от вновь созданного пользователя.

DBPassword=Пароль_Пользователя_Zabbix

Так как в моем случае веб сервером служит nginx, нужно изменить nginx.conf, раскомментировав следующие строчки

# listen 80;
# server_name example.com;

Уберите # и поменяйте example.com на домен, по которому вы хотите заходить на Zabbix, в моём случае это
test.zabbix.local
.

Для Apache файл нужно править файл конфигурации /etc/httpd/conf.d/zabbix.conf .

Выставим временную зону в PHP. В файле /etc/zabbix/php-fpm.conf раскомментируем строчку

php_value[date.timezone] = Europe/Moscow

Дополнительно можно выставить следующие параметры PHP в
/etc/php.ini
:

memory_limit 128M
upload_max_filesize 8M
post_max_size 16M
max_execution_time 300
max_input_time 300
max_input_vars 10000

Добавьте службу zabbix-server в автозапуск и запустите ее:

# systemctl enable zabbix-server zabbix-agent nginx php7.2-fpm
# systemctl restart zabbix-server zabbix-agent nginx php7.2-fpm

Настройка веб-интерфейса Zabbix

Теперь нужно настроить frontend (веб-интерфейс) Zabbix. В браузере откройте указанный ранее URL адрес zabbix сервера. В моем случае это test.zabbix.local (или на домен, который вы указывали. Не забудьте прописать его у себя в hosts файле или на DNS сервере).

zabbix веб installer

Убедитесь, что во всех требования инсталлятора указано ОК.

zabbix check pre-requisites

Укажите данные для подключения к БД. Используйте пользователя и пароль, который создали ранее.

данные для подключения к базе данных zabbix

Укажите название Zabbix сервера. Порт рекомендую оставлять стандартный – TCP 10051.

Система Zabbix по-умолчанию использует два порта:

  • TCP 10050 — порт пассивного агента, по нему zabbix сервер опрашивает клиентов;
  • TCP 10051 — порт, на котором zabbix сервер получает данные от клиентов (активный агент).

Не забудьте открыть данные порты. Например, на Zabbix сервере на базе CentOS можно открыть порты в firewalld с помощью firewall-cmd:

# firewall-cmd --add-service={http,https} --permanentfirewall-cmd --add-port={10051/tcp,10050/tcp} –permanent

А на агенте достаточно открыть 10050:

# firewall-cmd --permanent --add-port=10050/tcp

Не забудьте перезагрузить firewalld:

# firewall-cmd –reload

имя и порты zabbix сервера

После этого жмите Next Step и Finish. После успешной установки вас попросит залогиниться. По-умолчанию логин
Admin
, пароль
zabbix
(замените его).

авторизация веб-интерфейсе в zabbix

zabbix dashboard

На этом установка сервера Zabbix Server завершена.

На странице https://www.zabbix.com/download есть пошаговые инструкции для установки Zabbix Server на другие операционные системы, а так же инструкции как собрать zabbix-server из исходного кода или запустить его в docker контейнерах.

Установка Zabbix Agent в Windows

Попробуем установить Zabbix агент на сервер Windows и добавим его на наш сервер мониторинга Zabbix. Скачать версию Zabbix агент для Windows можно здесь: https://www.zabbix.com/download_agents. агенты zabbix для windows

Выберите нужную версию агента под Windows. Я выберу формат msi (amd64) (без OpenSSL). Если вы планируете устанавливать zabbix agent на сервера/компьютеры домена через групповые политики или SCCM, то можете скачать zip архив с бинарными файлами и конфигурационными файлами.

Запустите инсталлятор, примите лицензионное соглашение, укажите запрошенные данные. Обратите внимание, что в поле “Server or Proxy for active checks” я указал IP адрес в формате IP:PORT. Поскольку порт я оставлял стандартный, я пишу IP:10051.

настройка параметров zabbix сервера при установке агента в windows

Далее еще пару раз нажмем Next и Install.

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

служба zabbix agent в windows

На клиенте Windows нужно разрещить входящие подключения с IP адреса сервера Zabbix в Брандмауэре Windows:

New-NetFirewallRule -DisplayName "ZabbixMonitoring" –RemoteAddress 192.168.1.100 -Direction Inbound -Protocol TCP –LocalPort 10050 -Action Allow

Добавление устройства на Zabbix-сервере

Чтобы убедиться в работоспособности агента, нужно добавить хост testnode2 на Zabbix сервер и назначить ему проверки (checks).

Заметка. В заббиксе есть 2 типа проверок:

  • Пассивные – Zabbix сервер запрашивает у агента какие-либо данные;
  • Активные – агент посылает на сервер данные;

При установке агента мы указывали сервер в формате IP:PORT как раз для активных проверок.

Добавление нового устройства для мониторинга в Zabbix выполняется через Web-интерфейс. Перейдите в раздел Configuration -> Hosts.

добавление хоста в мониторинг Zabbix

Нажмите Create host и заполните данные. Обратите внимание, что Host name хоста должен полностью совпадать с hostname машины или значением параметра Hostname в конфиге агента.

добавление windows устройства в Zabbix сервере

Во вкладке Templates добавить несколько встроенных Windows шаблонов. Шаблоны в Zabbix это наборы значений, триггеров, графов и правил обнаружения, которые могут быть назначены одному или нескольким хостам.

Эти интегрированные шаблоны имеют постфикс “active”, значит, будут использоваться активные проверки.

шаблоны zabbix для windows

Нажмите Add. Чтобы не ждать пока сервер и агент увидят друг друга (обычно занимает пару минут), перезагрузите службу Zabbix Agent на testnode2 и проверьте лог агента (C:Program FilesZabbix Agentzabbix_agentd.txt).

перезапуск службы Zabbix agent

лог zabbix_agentd.txt

Сообщение “started [active checks #1]” говорит о том, что на сервере найдены активные проверки для этого хоста. Теперь посмотрим на данные, которые пришли на сервер Zabbix от агента. Для этого в Zabbix перейдите на Monitoring -> Latest Data и выберете нужный вам хост в поле Hosts.

проверка получение данных от хоста в zabbix

данные об устройстве в веб интерфейсе zabbix

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

Обратите внимание на то, что в дашборде Zabbix висит уведомление о том, что служба BITS не запущена. Это уведомление появилось потому что мы назначили стандартные шаблоны нашему хосту. В одном из шаблонов был мониторинг сервиса BITS и соответствующий триггер, который срабатывает если служба BITS находится не в статусе Running.

события в dashboard zabbix

На этом настройка Windows Agentа завершена.

Установка Zabbix Agent в Linux

Теперь установим агент Zabbix в Linux. Для установки Zabbix агента в Ubuntu Server 18.04 с помощью пакетного менеджера нужно скачать и установить репозиторий Zabbix. Затем из репозитория установим zabbix agent:
# wget https://repo.zabbix.com/zabbix/4.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.4-1+bionic_all.deb
# dpkg -i zabbix-release_4.4-1+bionic_all.deb
# apt update
# apt install zabbix-agent

В CentOS для добавления репозитория и установки агента zabbix используется команды:
# rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm
# dnf clean all
# dnf install zabbix-agent

Перед тем как мы запустим zabbix агент, нужно отредактировать конфигурационный файл /etc/zabbix/zabbix_agentd.conf. В нем нужно указать IP адрес сервера Zabbix для активных проверок.

Server=IP
ServerActive=IP:10051
Hostname=testagent

После этого запустите сервис агента:

# service zabbix-agent start

Убедитесь, что агент успешно запустился.

# cat /var/log/zabbix/zabbix_agentd.log

установка zabbix agent в linux ubuntu

Строка cannot parse list of active checks говорит о том, что на сервере нет активных проверок для этого хоста.

Как и в случае с Windows агентом, вам нужно добавить ваш Linux хост в настройках сервера Zabbix. Обратите внимание на параметр Host name в настройка хоста в интерфейсе заббикс сервера — этот параметр должен совпадать с Hostname параметром, который мы указываем в конфиге Zabbix -агента. В конфиге выше я указывал имя хоста testagent.

добавление ubuntu в мониторинг zabbix

23

Перезагрузите Zabbix агент и проверьте лог.

лог zabbix_agentd

Проверьте, что данные от агента появились на сервере Zabbix.

данные с linux сервера появились в веб интерфейсе zabbix

На этом настройка Zabbix-агента на Linux системе завершена. В следующей статье мы рассмотрим безагентный мониторинг доступности узлов в Zabbix через ICMP Ping.

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

Шаблон или прототип элемента мониторинга будет выглядеть следующим образом (параметры для удобства пронумерованы):

eventlog[1- имя журнала,2-регулярное выражение,3-важность,4-источник,5-eventid,6-макс кол-во строк, 7-режим]

Тип данных: журнал (лог)

Далее рассмотрим конкретные практические примеры.

1. Ошибки в журнале приложений.

Максимально простой пример сбора ошибок в журнале «Приложение» (события уровня «Ошибка»)

eventlog[Application,,"Error",,,,skip]

2. Ошибки отложенной записи.

eventlog[System,,"Warning",,50,,skip]

краткие пояснения:

System — журнал система

Warning — тип события: предупреждение

50 — id события равно 50

skip — берем только свежие значения (не перечитываем весь лог)

триггер:

count(/Terminal server/eventlog[System,,"Warning",,50,,skip],30m)>7 and nodata(/Terminal server/eventlog[System,,"Warning",,50,,skip],60m)<>1

где Terminal server — это просто имя шаблона, в котором используются элемент данных и триггер

3. Ошибки диска.

eventlog[System,,"Warning",,153,,skip]

триггер:

count(/Template OS Windows by Zabbix agent active/eventlog[System,,"Warning",,153,,skip],30m)>5 and nodata(/Template OS Windows by Zabbix agent active/eventlog[System,,"Warning",,153,,skip],60m)<>1

4. ошибки в журнале событий от службы MSSQLSERVER.

eventlog[Application,,"Error","MSSQLSERVER",,,skip]

триггер:

count(/Template OS Windows SQL for 1C/eventlog[Application,,"Error","MSSQLSERVER",,,skip],8m)>0 and nodata(/Template OS Windows SQL for 1C/eventlog[Application,,"Error","MSSQLSERVER",,,skip],10m)<>1

Полезные ссылки:

https://www.zabbix.com/documentation/5.0/ru/manual/config/items/itemtypes/zabbix_agent/win_keys

The Windows Zabbix Agent provides a native interface to the Windows Performance Counters. and Event Log.  This means that with minimal overhead, and no additional shells out to Powerscript or the command line, you can collect any of the metrics available from PerfMon or Event Viewer.

Windows Event Log

To monitor the Windows Event log, use the eventlog[] item keys. This takes the syntax:

eventlog[name,<regexp>,<severity>,<source>,<eventid>,<maxlines>,<mode>]

I would always recommend using Event Viewer on the host to determine which event log names and exact codes you want to pull before trying to craft the query parameters.

As an example, let’s capture all the interactive login events happening on the host which are logged in the “Security” event log.   On a host that has a Zabbix Agent on Windows, create an item with the type “Zabbix agent (active)”:

Name: winauth.audit
Type: Zabbix agent (active) 
Key: eventlog[Security,"Logon Type:s*2",,,^(4624|4625|4648|4634|4647)$,,] 
Type of information: Log 
Update interval: 30

These 46xx codes are documented by Microsoft, and the logon type=2 signifies interactive logon.

Now going to Monitoring > Latest data after an interactive login should show you the event log entry within 30 seconds.  This will show both successful as well as login failures.

Windows Performance Counters

The PerfMon tool comes standard on Windows hosts and can be used to capture and display live metrics as they are collected by the system.

Collecting these same metrics using the Zabbix agent can be done using the perf_counter key.  The syntax is:

perf_counter[counter,<interval>]

The easiest way to discover the full path to these counters is to use PerfMon to first find and examine the keys.  But you can also list all the full paths from the command line using “typeperf -qx”.

In this example, I’m going to monitor the keys for:

  • Microsoft IIS total GET and PUSH operations
  • Microsoft FTP Server total files sent and received
  • Microsoft SMTP server total mail received, delivered, and pending

Which are represented as the Zabbix key values below:

perf_counter["Web Service(_Total)Total Get Requests",30]
perf_counter["Web Service(_Total)Total Post Requests",30]

perf_counter["Microsoft FTP Service(_Total)Total Files Sent",30]
perf_counter["Microsoft FTP Service(_Total)Total Files Received",30]

perf_counter["SMTP Server(_Total)Remote Queue Length",30]
perf_counter["SMTP Server(_Total)Messages Received Total",30]
perf_counter["SMTP Server(_Total)Messages Delivered Total",30]

This looks like the following when viewed in the Latest Data:

Each of these items created should be type=numeric(float) with an interval every 60 seconds.

REFERENCES

https://zabbix.org/wiki/Get_Zabbix

https://msdn.microsoft.com/en-us/library/ms804624.aspx (Web Service Object)

https://www.zabbix.com/documentation/3.0/manual/appendix/config/zabbix_agentd_win (agent conf, PerfCounter is sythesized avg value of sys perf meaning it needs float)

https://www.zabbix.com/documentation/2.4/manual/appendix/config/zabbix_agentd_win?s[]=perfcounter

https://www.zabbix.com/documentation/3.2/manual/config/items/itemtypes/zabbix_agent/win_keys (special item keys for Zabbix Windows agents)

https://blogs.technet.microsoft.com/brad_rutkowski/2007/09/22/using-typeperf-to-get-performance-data-on-the-command-prompt/

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd941621(v%3dws.10) (4634 4646 audit logoff)

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd941635(v%3dws.10) (4624,4625,4648 audit logon)

https://social.microsoft.com/Forums/en-US/712230b0-2d99-4cda-a374-1211117bf2a8/create-a-custom-security-log-event?forum=Offtopic (cannot write to security log, permissions)

NOTES

$ svn co svn://svn.zabbix.com/branches/2.4 (checkout source code)

eventcreate /l System /t INFORMATION /id 99 /d “just a test” (ids < 1000)

WriteEventLog LogName Application EntryType Error Source MSSQLSERVER EventId 1479 Message “Test error event – ignore” (cannot write to SECURITY due to permissions)

Monitoring postfix queue on linux:

EnableRemoteCommands=1

UserParameter=mail.pending[*],/usr/sbin/postqueue -p | egrep -c “^[0-9A-F]{10}[^*]”

UserParameter=mail.active[*],/usr/sbin/postqueue -p | egrep -c “^[0-9A-F]{10}[*]”

typeperf -qx

typeperf -qx “SMTP Server”

typeperf -qx “Web Service”

typeperf -qx “Microsoft FTP Server” (“FTP Service” on older IIS6)

Содержание

  • 1 Подключаем репозитрий epel
  • 2 Устанавливаем софт
  • 3 Настраиваем сервер баз данных
  • 4 Настраиваем Zabbix
  • 5 Мониторинг рабочих станций Windows
  • 6 Установка Zabbix-agent под FreeBSD
  • 7 Настраиваем Web-интерфейс Zabbix

Вкрадце расскажу о том, как я поднял у себя сервер с Zabbix на борту и мониторил виндовые и FreeBSD машины.

Подключаем репозитрий epel

Epel – Extra Packages for Enterprise Linux, репозиторий, представленный командой Fedora, содержащий в себе огромное количество дистрибутивов, 100% свободный и часто обновляемый.

# yum install http://ftp.yandex.ru/epel/6/i386/epel-release-6-8.noarch.rpm

Устанавливаем софт

Здесь нам понадобится сервер баз данных, веб-сервер, сам zabbix, некоторый софт для работы с snmp и SELinux

# yum install zabbix20-server zabbix20-agent zabbix20-web-mysql httpd policycoreutils-python net-snmp net-snmp-utils
# yum groupinstall "MySQL Database Client" "MySQL Database Server"

Настраиваем сервер баз данных

# service mysqld start
# mysql_secure_installation

Указываем пароль к базе данных и отвечаем утвердительно на остальные вопросы.

# mysql -u root -p

вводим пароль и попадаем в консоль mysql>
mysql> CREATE DATABASE zabbix CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'myzabbixpass123';
mysql> quit;

Конечно, смените пароль на свой. Итак, идём дальше. Заполним базу данных zabbix из шаблонов:
# mysql -u zabbix -pmyzabbixpass123 zabbix < /usr/share/zabbix-mysql/schema.sql
# mysql -u zabbix -pmyzabbixpass123 zabbix < /usr/share/zabbix-mysql/images.sql
# mysql -u zabbix -pmyzabbixpass123 zabbix < /usr/share/zabbix-mysql/data.sql

Ваш пароль указывайте вплотную к ключу -p.

# vi /etc/zabbix-server.conf

ищем строки и раскомментирываем (изменяем) их под наши настройки:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=myzabbixpass123

Далее, модифицируем настройки PHP аналогично:

# vi /etc/php.ini

max_execution_time = 300
max_input_time = 300
post_max_size = 16M
date.timezone = Asia/Sakhalin

При установке zabbix вложил свой конфиг в каталог /etc/httpd/conf.d/zabbix.conf, который добавляет новый каталог для его веб-интерфейса: /usr/share/zabbix/ с алиасом /zabbix (позволю себе процитировать конфиг):

...
Alias /zabbix /usr/share/zabbix
...

Поскольку у нас CentOS, нужно поднастроить SELinux:

# semanage port -a -t http_port_t -p tcp 10051
# setsebool -P httpd_can_network_connect on

Добавляем правило в iptables:

iptables -t mangle -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp -d 192.168.1.4 --dport 80 -j ACCEPT

где:

eth0 – интерфейс локальной сети;
192.168.1.0/24 – адреса локальной сети
192.168.1.4 – адерс сервера zabbix

Ну чтож, стартуем службы и идём в веб-интерфейс:

# /etc/init.d/httpd start
# /etc/init.d/zabbix-server start
# /etc/init.d/zabbix-agent start

Открываем в браузере:

http://IP-адрес/zabbix

zab1

Настройка будет чуть ниже.

Мониторинг рабочих станций Windows

Скачиваем zabbix-agent с оф.сайта:

zagent

Распаковываем в любой каталог, видим две папки bin и conf. Идём в папку conf, правим единственный файл zabbix_agentd.win.conf:

# указываем через запятую все zabbix-сервера
Server=192.168.1.4, 192.168.1.100
# порт для прослушки, можно не менять - этот порт надо разрешить в файрволле на входящий трафик
ListenPort=10050
#Имя хоста
Hostname=D.Makarov
#Дополнительные параметры, нашёл в одном из мануалов
UserParameter=windows.services,"%ProgramFiles%zabbixservices.exe"

Остальные параметры я не трогал. Теперь внимательно. Кладём наши файлы в каталог Program files в папку zabbix и выполняем команду с правами администратора:

> binwin32zabbix_agentd.exe –config confzabbix_agentd.win.conf –install
> binwin32zabbix_agentd.exe –config confzabbix_agentd.win.conf –start

В консольку получаем сообщения об успешной установке и запуске службы.

Ставим на тех компах, которые нас интересуют. Под Linux/FreeBSD надо качать соответствующие агенты.

Установка Zabbix-agent под FreeBSD

На FreeBSD я поставил из портов:

# cd /usr/ports/net-mgmt/zabbix-agent
# make config && make && make install

Затем идём и правим конфиг-файл /usr/local/etc/zabbix/zabbix-agentd.conf и вносим аналогичные изменения, как и под Winodws (за исключением, пожалуй, UserParameter).

Настраиваем Web-интерфейс Zabbix

  1. Залогиниваемся под Admin:zabbix, пароль потом сменим.
  2. В меню (сверху справа) идём в Profile и меняем язык на привычный (русский есть).
  3. В основном меню (слева) “Настройка – Узлы сети” и кнопка справа вверху “Создать узел сети”, указываем IP адрес хоста и создаём логические группы (так же в Настройка – Группы узлов). Добавив хост не забываем перейти на вкладку “Шаблоны” и назначить шаблон соответствующего устройства. Например Template OS Windows, Template OS FreeBSD и т.д.
  4. Можно настроить автообнаружение (см. мануал https://www.zabbix.com/documentation/1.8/ru/manual/auto-discovery), вообще очень советую читать документацию, она очень понятна и наглядна, а возможности там просто космические.

Изображаем устройства на карте:

Настройка – Карты сетей, кнопка “Создать карту…”.

Добавление устройства

  1. Кнопки добавления устройства
  2. Выбор типа узла. Можно выбрать конкретный узел. Группу. Просто изображение. Другую карту и т.д.
  3. Указываем имя элемента.
  4. Ссылка на конкретный элемент в базе. Очень важно!
  5. Изображение. В скобочках – размер картинки.

Для того, чтобы нарисовать связь между узлами – выделяем два узла и жмём + на связи (правее добавления узла). Всё просто.

Начинаем мониторить различные события (Мониторинг – Обзор). В правом верхнем выделим “Группа: Все”, либо интересующую нас группу пользователей. Ну и мы увидим события, которые происходят в системе. Наиболее критичные отмечаются красным цветом. На каждый прямоугольник можно кликнуть и просмотреть детали, либо подтвердить (чем-то похоже на систему уведомлений).

monit

Несколько скринов.

monit2

Можно выбрать представление в виде данных

monit3

И получить графики или значения по нужному параметру.

Zabbix так же поддерживает мониторинг девайсов вроде Cisco и им подобных по протоколу SNMP (я как-то мониторил подобное прямо  из PHP, но это было не слишком удобно). Раздобуду Cisco – обязательно продемонстрирую, прямо здесь, ниже.

Кроме того, есть возможность мониторить программные компоненты – сервера баз данных (загруженность), веб-сервера и т.д. Сам я только начал его осваивать, но, думаю, что это очень полезный администратору инструмент.


Продолжаем разбираться. Сейчас мы добавим в нашу локальную сеть маршрутизатор Cisco (я проведу эту работу с виртуальным GNS3 оборудованием, потому как не могу найти роутер нужной модели). Итак, топология будет такая:

topo

Здесь у нас есть Zabbix-сервер, коммутатор для сопряжения с устройствами, EtherSwitch от Cisco (на базе c3745), а также тестовая станция “1”.

Итак, первым делом создадим Community:

ESW1(config)#snmp-server community my_lokal ro 10
ESW1(config)#access-list 10 permit 192.168.1.2

192.168.1.2 – адрес моего zabbix-сервера в виртуальной конфигурации.

ESW1(config)#int fa0/0
ESW1(config-if)#ip address 192.168.1.3 255.255.255.0
ESW1(config-if)#no shutdown

Отлично, если наш EtherSwitch пингуется, значит всё ок. Теперь идём в CentOS (linux).

Нам нужно проверить работу SNMP:

# snmpwalk -v 2c -c "my_lokal" 192.168.1.3 ifDescr

(я использовал grep, можно обойтись и без него)

if_descr

Отлично! Мы можем получать значения по SNMP с нашего устройства. Кстати, заметим, что интересующий нас порт имеет index = 5. Получим его состояние:

# snmpget -v 2c -c "my_lokal" 192.168.1.3 1.3.6.1.2.1.2.2.1.8.5

Последняя 5 – это как раз index порта. А эта длинная строка из чисел, разделённых точками – OID. В каждом устройстве их множество, полный список легко гуглится. Вот я привёл OID для получения ifOperStatus порта по его индексу.

get-oper

Порт у нас поднят. Чтож, самое время подстроить Zabbix.

Добавляем новое устройство:

cisco_unit

Не забываем назначит шаблон. Подойдёт Template SNMP Generic. Обратите внимание, что интерфейс агента нужно убрать, а оставить интерфейс SNMP.

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

data_el

После этого создаём новый элемент данных и заполняем его как указано ниже:

data_el2

При этом присваиваем имя, выбираем тип SNMPv2, а так же в поле Ключ вводим (либо текстовое представление (ifOperStatus.5). SNMP OID делаем аналогичным. Не забываем поменять community.

Далее создаём триггер, который будет реагировать на изменения этого параметра:

В разделе “Триггеры” делаем “Создать” в правом верхнем углу и заполняем поля:

if

По нажатии кнопки “Добавить” мы выбираем наш элемент данных и делаем условие срабатывания N = 2 (2 – это означает OperStatus = down). После этого поле “Выражение” у нас заполнится так:

{Cisco Router:1.3.6.1.2.1.2.2.1.8.5.last(0)}=2

Сохраняем триггер и готовимся к работе.

mon

Отрубаем порт интерфейса и видим в логах:

%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet1/2, changed state to down

А Zabbix уже недовольно ворчит о срабатывании триггера.

unlink

Подобным образом можно настроить реагирование на изменение любых параметров оборудования (подсмотренных через snmpwalk без указания параметров – их там не один десяток).

Like this post? Please share to your friends:
  • Монитор ресурсов в windows 7 не отображается
  • Мой компьютер сервис свойства папки windows 10
  • Монитор уходит в спящий режим при загрузке windows
  • Можно ли форматировать диск с без удаления windows 10
  • Монитор ресурсов в windows 7 где находится