- Скрипты на PowerShell в помощь мониторингу Zabbix
- Запуск приложения на хосте по триггеру.
- Zabbix Documentation 5.2
- Sidebar
- Table of Contents
- 10 Zabbix агент 2 на Microsoft Windows
- Настройка агента
- Установка агента как службы Windows
- Запуск агента
- Остановка агента
- Удаление агента из служб Windows
- Zabbix Documentation 5.2
- Sidebar
- Table of Contents
- 7 Скрипты
- Обзор
- Настройка глобального скрипта
- Выполнение скрипта и результат
- Время ожидания выполнения скриптов
Скрипты на PowerShell в помощь мониторингу Zabbix
Задача: Разобрать, как посредством Zabbix— сервиса (Центр единого мониторинга за вверенной инфраструктурой) запускать PowerShell скрипты с Windows системы с целью получения необходимой информации: события, значения, текст.
В роли Windows системы выступит: Windows 7 Pro SP1 x86, где powershell был обновлен с версии 2.0 до версии 5.0.
В роли Zabbix выступит релиз 3.2.1 развернутый и применяемый в повседневности на Ubuntu Trusty Server amd64.
Перво наперво нужно разрешить выполнение ps1 скриптов на системе Windows, т. к. по умолчанию в PowerShell включена максимальная политика безопасности, которая позволяет выполнять команды PowerShell в командной строке, но не позволяет в той же командной строке выполнить скрипт с командами PowerShell. Можно разрешить выполнение PowerShell скриптов если Windows системы объединены в домен соответствующей групповой политикой, либо же единичным запуском вот такого вот bat-файла и обязательно с правами администратора:
%systemroot%\system32\WindowsPowerShell\v1.0\powershell -Command Set-ExecutionPolicy RemoteSigned
После этого запуск ps1 скриптов будет отрабатываться и не прерываться ошибкой.
Скрипт на PowerShell который вычисляет размер свободного места на логическом диске C:
$disk = Get-WmiObject Win32_LogicalDisk -Filter «DeviceID=’C:'» | Select-Object Size, FreeSpace
Write-Host («<0>» -f [math]::truncate($disk.FreeSpace / 1GB))
Сохраняю его на диске c:\script\diskc_free_space.ps1
Затем на клиентском компьютере в конфигурационном файле агента Zabbix прописываем:
UserParameter=diskcfreespace[*],PowerShell.exe -nologo «C:\script\diskc_free_space.ps1» «diskcfreespace»
После перезапускаю службу агента:
C:\Windows\system32>net stop «Zabbix Agent» && net start «Zabbix Agent»
После перехожу в домашний каталог где установлен Zabbix агент и проверяю, получает ли агент информацию через параметр:
C:\Program Files\zabbix>zabbix_get.exe -s 127.0.0.1 -p 10050 -k diskcfreespace
zabbix_get.exe [624]: Get value error: ZBX_TCP_WRITE() failed: [0x00002745] ╨Я╤А
А если просто запустить и cmd.exe то строка отрабатывает:
C:\Program Files\zabbix>PowerShell.exe -nologo «C:\script\diskc_free_space.ps1»
Ладно, переключаюсь на сервер Zabbix и проверяю обращение к агенту с целью получение информации со скрипта на PowerShell. Создаю элемент данных в шаблоне Template OS Windows
Name: diskcfreespace
Type: Zabbix agent
Key: diskcfreespace
Host interface: 10.7.8.97:10050
Type of information: Numeric (unsigned)
Data type: Decimal
Units: Gb
Update interval (in sec): 60
History storage period (in days): 7
Trend storage period (in days): 365
После нажимаю Update и через некоторое время перейдя: Monitoring — Latest Data — отсортировав по хосту на котором я проверяю работоспособность извлечения информации через powershell скрипт, а именно:
- Hosts = W7X86
- Name = diskcfreespace
и нажимаю кнопку Apply, вот что я вижу, есть последняя временная проверка, последнее значение и возможность перейти щелкнув на Graph к графику где будут представлены изменения с учетом времени постановления на мониторинг
Перехожу по гиперссылке Graph и наблюдаю, как возвращаются значения от выполнения скрипта на рабочей станции:
Представленный скачок изменения количества свободного места был сымитирован командой создания на рабочей станции W7X86 файл на один гигабайт:
C:\Windows\system32>fsutil file createnew c:\file.txt 1000000000
Файл c:\file.txt создан
Итого, я для себя в первую очередь разобрал, как задействовать powershell на рабочих станциях и серверных системах, а не как ранее bat скрипты. Хотя можно и комбинировать, главное решить поставленную задачу, а инструмент может быть любым. На этом я пока прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.
Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:
Поблагодари автора и новые статьи
будут появляться чаще 🙂
Карта МКБ: 4432-7300-2472-8059
Yandex-деньги: 41001520055047
Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.
Запуск приложения на хосте по триггеру.
Коллеги, всем привет!
Прошу разжевать очень подробно, как реализовать удаленный запуск приложения по сработке триггера в Zabbix на рабочей станции под управлением Windows.
Если вам не лень, прошу расписать подробно: настройки агента, настройки элемента данных, настройки триггера, и настройки скриптов.
Сомневаюсь, что кто-то захочет подробно все описывать. Пример запуска скрипта на хосте по срабатыванию триггера есть в моей статье — https://serveradmin.ru/zvonok-opoveshhenie-zabbix-cherez-asterisk-na-mobilnyiy-telefon/
1. На хосте настраиваете bat файл на запуск блокнота.
2. На zabbix server настраиваете шаблон для мониторинга работы приложения notepad с триггером.
3. Создаете действие, которое срабатывает по триггеру. В действии указываете запуск bat файла на хосте.
В принципе, ничего сложного. Думаю, если вам реально надо, разберетесь.
Ответ ради ответа?:)
Спасибо, статью давно прочитал, делал по аналогии, но не заработало. Поэтому спросил здесь в надежде на подробный ответ:)
Настройка конфига агента:
Действие (удаленная команда):
На bat максимальные права, учётка — админ.
Вот, что пишет лог агента:
То есть, лог говорит «выполнение команды. «. Но по факту, ничего не происходит.
Куда копать?
Zabbix-agent от какого пользователя запущен? Попробуй его запустить от пользователя, под которым ты ожидаешь запуск блокнота. А вообще опиши задачу полностью. Ты же хочешь не блокнот по факту запускать, а что-то другое.
Есть группа хостов, на которых запущена группа приложений.
Если хотя бы одно из приложений не работает на хосте, то хост не выполняет свою задачу на 100%.
В данный момент Zabbix мониторит сам факт работы приложений. Аллерты настроены, как надо.
При этом одно из приложений периодически выключается. И для того, чтобы приложение работало, нужно подключаться на каждый проблемный хост и запускать приложение вручную.
Хочу, чтобы Zabbix сам запускал проблемное приложение.
P.S.: Агент запущен от пользователя «СИСТЕМА» 😳
Чтобы это нормально работало, надо приложения запускать как службы, если они это умеют. И управлять уже службами. Если это не возможно, то надо тестировать и пробовать различные варианты запуска, чтобы приложения нормально стартовали.
@jojomsk не получится сделать так как ты написал.
Вот в чем проблема заббикс выполняет скрипт определенное время (смотри что у тебя в конфе прописано). Если скрипт не закрылся за это время то происходит его прерывание.
В твоем варианте скрипта идет вызов блокнота и он будет работать пока работает процесс консоли (скрипта) таймер проходит и происходит завершение приложения.
Это были причины почему так не работает. Теперь обсудим что сделать что бы работало.
Для начала создадим задачу в планировщике заданий. В нее вносим наш bat файл. Расписание не устанавливаем. Прописывает от имени кого пользователя ее запускать. Все сохраняем переходим к следующему шагу. Идем в заббикс создаем скрипт в поле команда пишем: «SCHTASKS /Run /TN test»
Где test название задачи из планировщика. Советую использовать en раскладку при именовании задачи что бы не издеваться над собой. Т.к заббикс на стороне сервера все вызывает из cmd.
Переходим на карту сети проверяем на узле работу скрипта, радуемся, переделываем действия в заббикс на такую команду и живем хорошо)
Поскольку это планировщик задач выполняет задачу от имени пользователя, а не заббикс то и ограничений по времени нет. Вообще можно на прямую приложение вызывать через планировщик, но это уже у кого какое ТЗ.
И да этот метод работает в проде уже более двух лет.
Zabbix Documentation 5.2
Sidebar
Table of Contents
10 Zabbix агент 2 на Microsoft Windows
Настройка агента
Zabbix агент 2 работает как служба Windows.
Вы можете запустить один экземпляр Zabbix агент 2 или несколько экземпляров агента на узле сети Microsoft Windows. Один экземпляр может использовать файл конфигурации по умолчанию C:\zabbix_agent2.conf или файл конфигурации, указанный в командной строке. В случае нескольких экземпляров, каждый экземпляр агента должен иметь свой собственный файл конфигурации (один из экземпляров может использовать файл конфигурации по умолчанию).
Пример файла конфигурации доступен в исходном архиве Zabbix как conf/zabbix_agent2.win.conf .
См. параметры файла конфигурации для получения подробной информации о настройке Zabbix агента 2 на Windows.
Параметр Hostname
Чтобы производить активные проверки на узле сети, в настройках Zabbix агента 2 должно быть определено имя узла сети. Более того, значение имени узла сети, установленное на стороне агента, должно точно соответствовать значению, заданному для узла сети в веб-интерфейсе в поле “Имя узла сети” .
Значение имени узла сети на стороне агента может быть определено параметром Hostname или HostnameItem в конфигурационном файле агента — если какой-либо из этих параметров не указан, используются значения по умолчанию.
Значение по умолчанию для параметра HostnameItem — это значение, возвращаемое ключом агента «system.hostname»; для платформы Windows оно возвращает имя узла сети NetBIOS.
Значение по умолчанию для Hostname — это значение, возвращаемое параметром HostnameItem. Таким образом, если оба этих параметра не указаны, фактическое имя узла сети будет именем NetBIOS; Zabbix агент 2 будет использовать имя NetBIOS для получения списка активных проверок с сервера Zabbix и отправки ему результатов.
Итак, чтобы упростить настройку файла zabbix_agent2.conf и сделать его унифицированным, можно использовать два разных подхода.
Имя узла сети также используется как часть имени службы Windows, которая используется для установки, запуска, остановки и удаления службы Windows. Например, если в файле конфигурации Zabbix агента 2 указано Hostname=Windows_db_server , то агент будет установлен как служба Windows Zabbix Agent [Windows_db_server] . Следовательно, чтобы иметь разное имя службы Windows для каждого экземпляра Zabbix агента, каждый экземпляр должен использовать другое имя узла сети.
Установка агента как службы Windows
Чтобы установить один экземпляр Zabbix агента 2 с файлом конфигурации по умолчанию c:\zabbix_agent2.conf :
Если вы хотите использовать файл конфигурации, отличный от c:\zabbix_agent2.conf , вы должны использовать следующую команду для установки службы:
Необходимо указать полный путь к файлу конфигурации.
Несколько экземпляров Zabbix агента 2 могут быть установлены в качестве служб следующим образом:
Установленная служба должна теперь отображаться в Панели управления.
Запуск агента
Чтобы запустить службу агента, вы можете использовать Панель управления или сделать это из командной строки.
Чтобы запустить единственный экземпляр Zabbix агента 2 с файлом конфигурации по умолчанию:
Чтобы запустить единственный экземпляр Zabbix агента 2 с другим файлом конфигурации:
Чтобы запустить один из нескольких экземпляров Zabbix агента 2:
Остановка агента
Чтобы остановить службу агента, вы можете использовать Панель управления или сделать это из командной строки.
Чтобы остановить единственный экземпляр Zabbix агента 2, запущенного с файлом конфигурации по умолчанию:
Чтобы остановить единственный экземпляр Zabbix агента 2, запущенный с другим файлом конфигурации:
Чтобы остановить один из нескольких экземпляров Zabbix агента 2:
Удаление агента из служб Windows
Чтобы удалить единственный экземпляр Zabbix агента 2 с использованием файла конфигурации по умолчанию:
Чтобы удалить единственный экземпляр Zabbix агента 2, использующий нестандартный файл конфигурации:
Чтобы удалить несколько экземпляров Zabbix агента 2 из служб Windows:
Zabbix Documentation 5.2
Sidebar
Table of Contents
7 Скрипты
Обзор
В разделе Администрирования → Скрипты пользователи могут настраивать и поддерживать скрипты.
Эти скрипты, в зависимости от набора прав доступа пользователя, становятся доступны для выполнения при нажатии на узле сети в различных местах веб-интерфейса (ПАНЕЛЬ, Проблемы, Последние данные, Карты сети), их также можно выполнять в операциях действий. Скрипты выполняются Zabbix сервером или агентом.
Здесь отображается список существующих скриптов с подробной информацией о них.
Колонка | Описание |
---|---|
Имя | Имя скрипта. При нажатии на имя скрипта, откроется диалог настройки этого скрипта. |
Тип | Тип скрипта — Скрипт или IPMI команда. |
Выполнять на | Выполняется скрипт на Zabbix сервере или на стороне агента. |
Команды | Все команды, которые будут выполняться в рамках скрипта. |
Группа пользователей | Группа пользователей, которой этот скрипт доступен (или Все при всех группах пользователей). |
Группа узлов сети | Группа узлов сети, которой этот скрипт доступен (или Все при всех группах узлов сети). |
Доступ к узлу сети | Уровень прав доступа к группе узлов сети — Чтение or Запись. Только пользователи с требуемым уровнем прав доступа смогут иметь доступ к выполнению скрипта. |
Для настройки нового скрипта, нажмите на кнопку Создать скрипт в верхнем правом углу.
Опции массового редактирования
Кнопки ниже списка предлагают некоторые опции массового редактирования:
Для использования этой опции, отметьте соответствующие скрипты, затем нажмите на требуемую кнопку.
Фильтр
Посколько список может содержать некоторое скриптов, возможно потребуется отфильтровать только те, которые вам действительно необходимы.
Ссылка Фильтр доступна выше списка скриптов. Если вы нажмёте на неё, фильтр раскроется и вы сможете отфильтровать скрипты по имени.
Настройка глобального скрипта
Параметр | Описание |
---|---|
Имя | Уникальное имя скрипта. Начиная с Zabbix 2.2, имени скрипта может предшествовать префик с желаемым расположением скрипта, например, По умолчанию/ , поместит скрипт в соответствующую папку. При обращении к скриптам через меню в разделах мониторинга, скрипты будут организованы в соответствии с заданными папками. У скрипта не может быть такое же имя как и у существующей папки (и наоборот). Имя скрипта должно быть уникальным в пределах его папки. Неэкранированные имена скриптов проверяются на уникальность, то есть в одну папку нельзя добавить “Ping” и “\Ping”. Одиночная обратная косая черта экранизирует любой символ, следующий за ним. Например, символы ‘/’ и ‘\’ можно экранировать с помощью обратной косой черты, т.е. \/ или \\. |
Тип | Выберите тип скрипта — IPMI команду или Скрипт. |
Выполнять на | Нажмите на соответствующую кнопку для того, чтобы скрипт выполнялся на:: Zabbix агент — скрипт будет выполнен на узле сети Zabbix агентом Zabbix сервер (прокси) — скрипт будет выполнен Zabbix сервером или прокси — в зависимости от того кем наблюдается узел сети сервером или прокси Zabbix сервер — скрипт будет выполнен только на стороне Zabbix сервера Эта опция выполнения скриптов на Zabbix агенте доступна в Zabbix начиная с версии 2.0 (выполнение удаленных команд активируется с помощью параметра EnableRemoteCommands в файле конфигурации Zabbix агента). |
Команды | Введите полный путь к командам, которые будут выполняться скриптом. В этих командах поддерживаются некоторые макросы: Начиная с Zabbix 2.2 в командах скриптов поддерживаются пользовательские макросы. |
Описание | Введите описание скрипта. |
Группы пользователей | Выберите группу пользователей, которой будет доступен этот скрипт (или Все для всех групп пользователей). |
Группы узлов сети | Выберите группу узлов сети, которой будет доступен этот скрипт (или Все для всех групп узлов сети). |
Требуемые права доступа к узлу сети | Выберите уровень прав доступа к группе узлов сети — Чтение или Запись. Только пользователи с требуемым уровнем прав доступа будут иметь доступ на выполнение скрипта. |
Включить подтверждение | Отметьте эту опцию, чтобы перед выполнением скрипта отображалось сообщение подтверждения. Эта возможность может быть особенно полезна при потенциально опасных операциях (такой как, скрипт перезагрузки) или при операциях, которые могут занять продолжительное время. |
Текст подтверждения | Введите текст подтверждения, если всплывающее окно подтверждения было включено выше (например, Удаленная система будет перезагружена. Вы уверены?). Для просмотра, как этот текст будет выглядеть, нажмите на Тест подтверждения после поля ввода. Начиная с Zabbix 2.2 текст подтверждения раскрывает макросы имени узлов сети — |
Выполнение скрипта и результат
Скрипты запускаемые Zabbix сервером выполняются в порядке, описанном в разделе Выполнение команд, включая проверку кода выхода. Результат выполнения скрипта отображается во всплывающем окне, которое появляется после того, как скрипт запускается.
Обратите внимание: Возвращаемым значением скрипта является стандартный вывод вместе со стандартным выводом ошибок.
Смотрите пример скрипта и окно с результатом ниже:
Время ожидания выполнения скриптов
Zabbix агент
Вы можете столкнуться с ситуацией, когда произойдёт превышение времени ожидания при выполнении скрипта.
Просмотрите ниже пример запуска скрипта на Zabbix агенте и окно с результатом:
Сообщение об ошибке в этом случае будет следующим:
Чтобы избежать подобной ситуации, рекомендуется выполнить оптимизацию самого скрипта (вместо изменения параметра Timeout до соответствующего значения (в нашем случае, > ‘5’) в конфигурации Zabbix агента и конфигурации Zabbix сервера).
В случае, если параметр Timeout изменён в конфигурации Zabbix агента, всё ещё появляется следующее сообщение об ошибке:
Она означает, что изменения сделаны в конфигурации Zabbix агента и требуется также изменить настройку Timeout в конфигурации Zabbix сервера.
Zabbix сервер/прокси
Просмотрите ниже пример запуска скрипта на Zabbix сервере и окно с результатом:
Также рекомендуется выполнить оптимизацию самого скрипта (вместо изменения параметра TrapperTimeout до соответствующего значения (в нашем случае, > ‘11’) в конфигурации Zabbix сервера).