Прочитано: 10 068
На предыдущей работе я довольно напользовался тем, что в моей системе мониторинга Zabbix использовал разобранную возможность мониторить статусы установленных служб в системах. К примеру есть важный процесс и его нужно мониторить, как он только выключится, то нужно сразу же смотреть почему такое произошло, а не ждать когда тебе начнут звонить. Караул — почему сервисы не работают как и должны работать. А потому данная заметка будет своеобразной пошаговой напоминалкой самому себе, как в кратчайшие сроки поставить те или иные сервисы Windows на мониторинг в универсальный конструктор мониторинга Zabbix.
У меня Zabbix развернут на Ubuntu 12.04.5 Server amd64 версии 2.2.11
ekzorchik@srv-mon:~$ apt-cache show zabbix-server-mysql | grep Version
Version: 1:2.2.11-1+precise
Первое условие на станции Windows которую нужно мониторить на предмет статуса запущенного сервиса должен стоят Zabbix–агент и заведен на Zabbix-сервер.
Задача: мониторить буду службу: FusionInventory-Agent
это агент GLPI посредством которого происходит инвентаризация рабочей станции: Какая ось, какой софт, какое железо, кто сейчас работает, IP-адрес станции и т. д.
Теперь создаю новый элемент данных в дефолтном шаблоне Template OS Windows:
http://IP&DNS — Configuration — Templates — Template OS Windows — Items — Create Item
Name: GLPI Agent
Type: Zabbix agent
Key: service_state[FusionInventory-Agent]
Update interval (in sec): 60
History storage period (in days): 7
Trend storage period (in days): 365
New Application: Services
Description: Мониторим статус работы службы установленного агента GLPI
Enabled: Отмечаю галочкой
Сохраняю внесенные изменения: Save
На заметку: ключ service_state принимает ответные значения:
State of service. 0 – running, 1 – paused, 2 – start pending, 3 – pause pending, 4 – continue pending, 5 – stop pending, 6 – stopped, 7 – unknown, 255 – no such service
Теперь создаю Trigger (описание тревоги на этот элемент данных), в этом же Template OS Windows — Triggers — Create Trigger
Name: Service State — GLPI Agent on {HOSTNAME}
Expression: – Add находим нужно правило, в моем случаем правило следующее:
{Template OS Windows:service_state[FusionInventory-Agent].last()}=6
Severity: High
Enabled: Отмечаю галочкой
Сохраняю внесенные изменения: Save
Теперь проверяю, сейчас на хосте (W7X86) выключаю/останавливаю службу и в Zabbix’е – Monitoring у меня в где Windows Stations обозначена среагированная проблема:
Перехожу в группу и вижу на каких хоста сработало уведомление о неполадках:
Тип уведомление: Высокий
Время последнего изменения статуса
Продолжительность недоступности сервиса в связи с выключенным состояние службы FusionInventory-Agent
вернув сервис в режим “Старт” , уведомление в Zabbix о сработанных триггерах вернулось в норму:
Если ведем какие-либо работы, то можно на сработанных триггер по этому хосту поставить комментарий (Acknowledge) или же когда сервис в строю:
Message: Работа сервиса восстановлена
После нажимаю: Acknowledge and return
По такому принципу можно настроить свой шаблон и свои элементы данных которые нужно отслеживать.
На этом собственно пока все, до новых встреч на моем блога, с уважением автор блога – ekzorchik.
Zabbix Monitor Windows Service
Zabbix Monitor Windows Service
Sometimes you may want to monitor something that Zabbix agent does not offer natively. The Zabbix Userparameter feature allows you to configure a custom command or to create a custom script and integrate it to a device running the Zabbix Agent. In this tutorial, we are going to show you how to configure a Zabbix User parameter on a computer running Windows.
• Zabbix version: 3.4.12
• Windows version: 2012 R2
The computer running Windows must have the Zabbix agent installed.
Hardware List:
The following section presents the list of equipment used to create this Zabbix tutorial.
Every piece of hardware listed above can be found at Amazon website.
Zabbix Playlist:
On this page, we offer quick access to a list of videos related to Zabbix installation.
Don’t forget to subscribe to our youtube channel named FKIT.
Zabbix Related Tutorial:
On this page, we offer quick access to a list of tutorials related to Zabbix installation.
Tutorial — Windows Service Name
First, you need to install the Zabbix agent on the computer running Windows.
• Zabbix agent installation on Windows.
Next, open the Windows service management screen and locate the service that you want to monitor.
Access the service properties and take note of the service name.
In our example, we are going to monitor the status of the Symantec antivirus service.
The service name of the Symantec Antivirus is SepMasterService.
Take note of the service name.
Tutorial — Zabbix Monitor Windows Service
Now, we need to access the Zabbix server dashboard and add the Windows computer as a Host.
Open your browser and enter the IP address of your web server plus /zabbix.
In our example, the following URL was entered in the Browser:
• http://35.162.85.57/zabbix
On the login screen, use the default username and default password.
• Default Username: Admin
• Default Password: zabbix
After a successful login, you will be sent to the Zabbix Dashboard.
On the dashboard screen, access the Configuration menu and select the Host option.
On the top right of the screen, click on the Create host button.
On the Host configuration screen, you will have to enter the following information:
• Host Name — Enter a Hostname to monitor.
• Visible Hostname — Repeat the hostname.
• New group — Enter a name to identify a group of similar devices.
• Agent Interface — Enter the IP address of the Hostname.
Here is the original image, before our configuration.
Here is the new image with our configuration.
Click on the Add button to include this host on the Zabbix database.
On the dashboard screen, access the Configuration menu and select the Host option.
Locate and click on the hostname that you created before.
In our example, we selected the hostname: WINDOWS-SERVER-01
On the Host properties screen, access the Applications tab.
On the top right part of the screen, click on the Create application button.
On the Host applications screen, create a new application named Windows Service.
After finishing the Application creation, access the Items tab.
On the top right part of the screen, click on the Create item button.
On the Item creation screen, you need to configure the following items:
• Name: Enter an identification to the Windows Service item.
• Type: Zabbix Agent
• Key: service.info[SepMasterService]
• Type of Information: Numeric (Unsigned)
• Update interval: 60 Seconds
• Show value: Windows Service State
• Application: Windows Service
Click on the Add button and finish the Item creation.
Wait 5 minutes.
In order to test your configuration, access the Monitoring menu and click on the Latest data option.
Use the filter configuration to select the desired hostname.
In our example, we selected the hostname WINDOWS-SERVER-01
Click on the Apply button.
You should be able to see the results of your Windows service monitoring using Zabbix.
Congratulations! You have configured the Zabbix server to monitor a Windows service status.
VirtualCoin CISSP, PMP, CCNP, MCSE, LPIC22019-06-10T15:02:17-03:00
Related Posts
Page load link
Ok
17.09.2024 |
17.09.2024 |
Категория Администрирование
Как мониторить службы Windows с помощью Zabbix? Как создать отдельный шаблон с указанием конкретной службы для мониторинга?
Иногда, после перезагрузки сервера, нужная служба может не стартануть, а вы можете это сразу не заметить и получить кучу гневных звонков, что какой-то сервис не работает.
Поэтому правильным решением, будет иметь возможность мониторить службы и автоматически восстанавливать их работоспособность.
Для этого, мы с создадим отдельный шаблон в Zabbix для работы с конкретной Windows службой.
Подробнее в данном видео…
P.S. Все еще идет набор в группы обучения «Комплексное обучение системному администрированию» и «Zabbix — Мониторинг IT»
Подробности тут — https://pages.it-skills.online/gruppa-obucheniya-kosa.html
Будем использовать Zabbix для слежения за списком установленных служб/сервисов Windows.
Это важно по нескольким причинам:
- Вирусы часто устанавливают в системе новые службы, а это значит, что нужно следить за появлением новых служб.
- Бывает, что некоторые службы Windows , имеющие тип запуска auto или delayed-auto не работают, а это повод проверить их настройки.
Замечание 1.
Способ установки Python 2.7 описан тут: https://www.mihanik.net/tihaja-ustanovka-python-2-7/
Замечание 2.
Способ становки Zabbix-агента (клиента) описан тут: https://www.mihanik.net/ustanovka-zabbix-klienta/
1. Собираем данные по установленным программам при помощи скрипта.
Скрипт написан на Python 2.7, он собирает данные по установленным службам и формирует 3 файла:
-
- Полный список служб — ‘C:\Zabbix\scripts\soft_list\service_list.lst’
- Список недавно установленных/удалённых служб — ‘C:\Zabbix\scripts\soft_list\service_diff.lst’
- Список служб, с установленным способом запуска Auto или Delayed-auto, но не работающих — ‘C:\Zabbix\scripts\soft_list\service_stoped.lst’.
Нужно отметить, что некоторые автоматически запускаемые службы Windows могут прекращать работу. Для каких-то служб это нормально, поэтому, чтобы не поднимать панику раньше времени, скрипт использует файл со списком служб за которыми не нужно наблюдать — ‘C:\Zabbix\scripts\soft_list\NotMonitoredServices.txt’.
Сам скрипт сохранён под именем C:\Zabbix\scripts\soft_list\serviceslist.py.
Текст скрипта:
# -*- coding: utf-8 -*- import os import sys import ctypes import errno import _winreg import codecs import wmi # # Функция проверки наличия прав администратора # Вход: нет # Выход: true - есть права администратора, # false - нет прав администратора # def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False # # Функция удаления дубликатов из списка # Вход: список # Выход: список без дубликатов # def DuplicateRemoval ( InboundList ): OutboundList = [] for i in InboundList: if i not in OutboundList: OutboundList.append(i) return OutboundList # # Функция загрузки списка из файла # Вход: путь к файлу со списком # Выход: список # def ListLoad ( InboundFileName ): OutboundList = [] # Если указанного файла не существует возвращаем пустой список if not os.path.exists( InboundFileName ): return OutboundList if not os.path.isfile( InboundFileName ): return OutboundList # Читаем файл построчно f = open( InboundFileName,'r') try: OutboundList = f.read().splitlines() except Exception: pass finally: f.close() return OutboundList # # Функция сохранения списка в файл # Вход: список, путь к файлу # Выход: true - успешная запись, false - ошибка при записи # def ListSave ( OutboundList, OutboundFileName ): # Записываем файл построчно f = open( OutboundFileName,'w') try: for line in OutboundList: f.write(line + '\n') except Exception: MyResult = False else: MyResult = True finally: f.close() return MyResult # # Функция получения списка установленных служб Windows имеющих способ запуска auto или Delayed-auto, но не работающих # Вход: нет # Выход: список установленных служб Windows имеющих способ запуска auto или Delayed-auto, но не работающих # def StopedServicesList(): List = [] c = wmi.WMI () stopped_services = c.Win32_Service (StartMode="Auto", State="Stopped") for Service in stopped_services: List.append (Service.Name + ' - ' + Service.Caption + ' - ' + Service.State) stopped_services = c.Win32_Service (StartMode="Delayed-auto", State="Stopped") for Service in stopped_services: List.append (Service.Name + ' - ' + Service.Caption + ' - ' + Service.State) List.sort() return List # # Функция получения списка всех установленных служб Windows # Вход: нет # Выход: список всех установленных служб Windows # def ServicesList(): List = [] c = wmi.WMI () Services = c.Win32_Service () for Service in Services: List.append (Service.Name + ' - ' + Service.Caption) List.sort() return List ################################################################################ # Начало программы ################################################################################ def main(argv=None): # Проверяем наличие прав админа. if not is_admin (): sys.exit ('Not enough permissions to run the script !!!') # Устанавливаем кодировку по умолчанию. reload(sys) sys.setdefaultencoding('utf8') # Зададим имена файлам, которые будем использовать # Полный список служб MyServicesListFile=r'C:\Zabbix\scripts\soft_list\service_list.lst' # Список установленных/удалённых служб MyServicesDiffFile=r'C:\Zabbix\scripts\soft_list\service_diff.lst' # Список не работающих служб MyServicesStopedFile=r'C:\Zabbix\scripts\soft_list\service_stoped.lst' # Список не наблюдаемых служб MyServicesNotMonitored=r'C:\Zabbix\scripts\soft_list\NotMonitoredServices.txt' # Получаем список установленных служб Windows List = ServicesList() # Получаем прежний список из файла OldList = ListLoad ( MyServicesListFile ) # Ищем установленные/удалённые службы Windows DeletedList = [] InstalledList = [] # Получаем список свежеустановленных служб Windows for i in List: if i not in OldList: InstalledList.append(i) # Получаем список удалённых служб Windows for i in OldList: if i not in List: DeletedList.append(i) # Сохраняем список изменений в diff-файл построчно f = open( MyServicesDiffFile,'w') try: f.write('Deleted:'+ '\n') for line in DeletedList: f.write(line + '\n') f.write('\n') f.write('Installed:'+ '\n') for line in InstalledList: f.write(line + '\n') except Exception: pass finally: f.close() # Сохраняем текущий список установленных служб Windows в файл if not ListSave (List, MyServicesListFile): sys.exit ('Unable to save installed services list!!!') # Сохраняем текущий список установленных служб Windows имеющих способ запуска auto, но не работающих в файл. # Предварительно из этого списка уберём упоминание тех служб, за которыми не нужно следить. List = StopedServicesList() NotMonitored = ListLoad ( MyServicesNotMonitored ) for i in NotMonitored: for ListItem in List: if i in ListItem: List.remove(ListItem) if not ListSave (List, MyServicesStopedFile): sys.exit ('Unable to save stoped services list!!!') if __name__ == "__main__": sys.exit(main())
2. Устанавливаем скрипт в системе.
Скрипт лучше запускать каждый час, — не слишком часто, но и не слишком редко.
Запланировать выполнение скрипта можно при помощи планировщика Windows. Задание планировщика можно создать вручную, а можно и при помощи bat-файла.
Я обычно это делаю при помощи «батника», имя своему батнику я дал INSTALL_get_services_list.bat .
Текст скрипта:
@echo off Rem Предполагаем, что на Windows XP скрипт запускается администратором. Rem Для более старших систем это неверно. rem Получаем версию ОС ver | find "5.1." rem Windows XP ? If %errorlevel%==0 ( rem Пропускаем проверку админских прав GOTO SKIPADMIN ) SET HasAdminRights=0 FOR /F %%i IN ('WHOAMI /PRIV /NH') DO ( IF "%%i"=="SeTakeOwnershipPrivilege" SET HasAdminRights=1 ) IF NOT %HasAdminRights%==1 ( ECHO . ECHO Not enough permissions to run the script !!! ECHO . GOTO END ) :SKIPADMIN rem Получаем версию ОС rem Windows XP ? ver | find "5.1." If %errorlevel%==0 ( rem Windows XP SCHTASKS /Create /RU "NT AUTHORITY\SYSTEM" /SC HOURLY /ST 00:05:00 /TN "InstalledServices" /TR "python \"C:\zabbix\scripts\soft_list\serviceslist.py\"" ) else ( rem НЕ Windows XP SCHTASKS /Create /RU "NT AUTHORITY\SYSTEM" /SC DAILY /ST 00:05 /RI 60 /DU 24:00 /TN "InstalledServices" /TR "python \"C:\zabbix\scripts\soft_list\serviceslist.py\"" /RL HIGHEST /F ) cd "C:\Zabbix\scripts\soft_list" python "C:\zabbix\scripts\soft_list\serviceslist.py" :END EXIT /B
3. Формируем шаблон в Zabbix.
В Zabbix при этом добавляем несложный шаблон.
Сначала приведу описание шаблона в картинках.
Создаём шаблон с именем : Active Computer — Python — ServicesList…
Добавляем группу элементов данных…
Теперь добавляем 3 элемента данных…
И, наконец, пару несложныйх триггеров, которые будут срабатывать при изменении списка служб или при остановке какой-то службы…
А вот и готовый для импорта заархивированный файл с описанным выше шаблоном: zbx_export_templates_serviceslist.xml
Описанные ранее скрипты можно найти в этом архиве: soft_list
4. Сбор данных.
Осталось назначить созданный шаблон соответствующему узлу сети и ждать начала поступления данных. 🙂
Всё.
🙂
Zabbix — свободная система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования, написанная Алексеем Владышевым. Для хранения данных используется MySQL, PostgreSQL, SQLite или Oracle Database, веб-интерфейс написан на PHP.
Находим наш узел
- Items -> Create new
Задаем имя, в строке Ключ
пишем:
service_state[имя службы]
(имя брать из свойства службы в строке “имя службы”, напримерservice_state[ArcGIS License Manager]
)- Интервал обновления:
60 сек
- Период хранения:
7 дней
Сохраняем.
Создаем триггер: Задаем имя, в строке выражение пишем: {arcgisserver:service_state[ArcGIS License Manager].last(0)}=6
где:
6
— остановлен. Т.е. отсылать алерт когда служба остановленаarcgisserver
— имя нашего узла- важность —
высокая
Ключи:
- 0 — запущен
- 1 — пауза
- 2 — ожидание старта
- 3 — ожидание паузы
- 4 — ожидание продолжения
- 5 — ожидание остановки
- 6 — остановлен
- 7 — неизвестно
- 255 — такой службы не существует
Сохраняемся.
Так же можно добавить график для наглядности.
Авторский пост защищен лицензией CC BY 4.0 .