Задача: Как сделать так чтобы Zabbix
следил работает ли RDP
служба на удаленном сервере(ах)
+ отображал активность и неактивность, удаленный адрес с которого активные подключены и т.д.
Исходные данные:
Тестовый полигон на базе Debian 10 + Proxmox 6
пока с двумя виртуальными машинами
Zabbix Server 4.4 on Ubuntu 18.04 Server
Hostname: srv-zabbix
IP: 172.33.33.17
Server 2012 R2 std + Role Terminal Server
Hostname: srv-ts01
IP: 172.33.33.47
Шаг №1
: Поднимаю на VM
своего тестового полигона операционную систему Ubuntu 18.04 Server amd64
, а на нее устанавливаю сервис мониторинга Zabbix 4.4
по заметке
Разбор установки Zabbix 4.4 на Ubuntu 18.04 Server
Шаг №2:
Поднимаю на VM
своего тестового полигона через сервис FOG Project
операционную систему Windows Server 2012 R2 Std
через заметку:
Автоматизация установки Server2012R2 + WinPE + Virtio + Fog on Proxmox 6
Шаг №3:
Устанавливаю роль терминального сервера на srv-ts01
Шаг №4:
Т.к. в рамках этой заметки не используется доменная структура, то на терминальном сервере создаю пользователей и помещаю их в группу на удаленное подключение по RDP
:
C:\Windows\system32>net user alektest Aa1234567 /add C:\Windows\system32>net localgroup "Remote Desktop Users" alektest /add
пусть будут учетные записи с alektest - alektest4
Шаг №5:
Также понадобятся несколько рабочих станций с которых инициирую подключение через mstsc
к своему терминальному серверу. Они также быстро и легко у меня разворачиваются через заметки:
Автоматизация установки W10X64 + WinPE + Virtio + Fog on Proxmox 6
Автоматизация установки W7X64 + WinPE + Virtio + Fog on Proxmox 6
Шаг №6:
Теперь перейдем собственно к делу, к примеру посчитать сколько RDP
сессий на терминальном сервере, сделать это можно через заметку:
Получить количество RDP-сессий на терминальных серверах
итог выполнения скрипта
active.bat set COUNTA= SET /a COUNTA=0 FOR /f "TOKENS=1 DELIMS= " %%G IN ('query session /server:srv-ts01 /vm ^|find /I "rdp-tcp"') DO SET /a COUNTA+=1 ECHO Active sessions on srv-ts01 = %COUNTA%,^|usersconnected=%COUNTA% C:\Windows\system32>cd /d c:\Script c:\Script>active.bat Active sessions on srv-ts01 = 3,|usersconnected=3
итак если еще применить форматирование к выводу, то может мониторить количество.
Шаг №7:
Но лучше будет задействовать модуль PSTerminalServices
, о том как его инсталлировать в систему у меня опять же заметка «Как установить модуль PSTerminalServices»
Шаг №8:
Устанавливаю Zabbix Agent 4.4.0
на srv-ts01
На момент 22.04.2020
версия агента доступная для скачивания: 4.4.5
, но я буду задействовать 4.4.0
, т.к. сервер тоже 4.4.0
. Пока обновляться не вижу смысла.
«Как установить Zabbix Agent 4.4.0 on Server 2012 R2 Std»
Шаг №9:
Создаю скрипт со следующим содержанием в каталоге C:\Script
Name: rdpts.ps1 # Monitoring Windows RDP - Terminal Server Param( [string]$select ) # Active Users: Domain Name, Username, Computer Name, IP Address if ( $select -eq 'ACTIVE' ) { Import-Module PSTerminalServices Get-TSSession -State Active -ComputerName localhost | foreach {$_.DomainName, $_.UserName, $_.ClientName, (($_.IPAddress).IPAddressToString), ""} } # Total Active Users if ( $select -eq 'ACTIVENUM' ) { Import-Module PSTerminalServices Get-TSSession -State Active -ComputerName localhost | foreach {$_.UserName} | Measure-Object -Line | select-object Lines | select-object -ExpandProperty Lines } # Inactive Users: Domain Name, Username if ( $select -eq 'INACTIVE' ) { Import-Module PSTerminalServices Get-TSSession -State Disconnected -ComputerName localhost | where { $_.SessionID -ne 0 } | foreach {$_.DomainName, $_.UserName, ""} } # Toal Inactive Users if ( $select -eq 'INACTIVENUM' ) { Import-Module PSTerminalServices Get-TSSession -State Disconnected -ComputerName localhost | where { $_.SessionID -ne 0 } | foreach {$_.UserName} | Measure-Object -Line | select-object Lines | select-object -ExpandProperty Lines } # List of Remote Computer Names if ( $select -eq 'DEVICE' ) { Import-Module PSTerminalServices Get-TSSession -State Active -ComputerName localhost | foreach {$_.ClientName} } # List of Remoter IP Addresses if ( $select -eq 'IP' ) { Import-Module PSTerminalServices Get-TSSession -State Active -ComputerName localhost | foreach {(($_.IPAddress).IPAddressToString)} }
Шаг №10:
Копирую данный скрипт из «Шаг №9
» в каталог C:\zabbix\scripts
. Если каталога scripts
нет то создаем — это для удобства, что все скрипты будут в одном месте.
Шаг №11:
Вношу изменения в конфигурационный файл агента Zabbix
на вызов данного скрипта
C:\Zabbix\zabbix_agentd.conf
UserParameter=rdpts[*],powershell.exe -noprofile -executionpolicy bypass -File C:\Zabbix\scripts\rdpts.ps1 $1
и перезапускаю сервис «Zabbix Agent
»
Win + X -> Command Prompt (Admin) - "Yes" C:\Windows\system32>net stop "Zabbix Agent" C:\Windows\system32>net start "Zabbix Agent"
Шаг №12:
Проверяю, что через Zabbix
—агент с помощью запуска скрипта смогу получать какую-либо информацию с учетом его функционала:
Win + X -> Command Prompt (Admin) - "Yes" C:\Windows\system32>cd /d c:\Zabbix c:\Zabbix>zabbix_get.exe -s 127.0.0.1 -p 10050 -k rdpts[ACTIVE] zabbix_get.exe [4848]: Get value error: ZBX_TCP_READ() failed: [0x00002746] An existing connection was forcibly closed by the remote host. zabbix_get.exe [4848]: Check access restrictions in Zabbix agent configuration
Это значит, Вам нужно в конфигурационный файл C:\Zabbix\zabbix_agentd.conf
добавить к параметру Server
значение, как IP&DNS
вашего Zabbix
-сервера, так и localhost
, т.е. будет вот так:
Server=172.33.33.17,127.0.0.1
после перезапустить Zabbix
агент.
c:\Zabbix>zabbix_get.exe -s 127.0.0.1 -p 10050 -k rdpts[ACTIVE] SRV-TS01 ekzorchik navy 172.33.33.16 SRV-TS01 alektest EKZORCH-D9VNKEM 172.33.33.11 SRV-TS01 alektest1 EKZORCH-GTVREI9 172.33.33.43
Шаг №13:
Импортирую найденный на просторах интернета шаблон Template__Windows_RDP_Terminal_Server: «Template__Windows_RDP_Terminal_Server.xml
»
http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Templates - Import
Import file:
нажимаю «Выберите файл
» — нахожу шаблон в файловой системе и нажимаю «Открыть
«, а после нажимаю Import
. Вижу статус «Imported successfully
«.
Проверяю, что шаблон успешно находится:
Configuration - Templates -
Name: Terminal
и нажимаю Apply
вот он добавленный по именем: «Template - Windows Terminal Server RDP
»
Шаг №14:
Создаю ключи для макросов
http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Administration - General
Macro: {$RDPPORT}
Value: 3389
Macro: {$RDPA}
Value: 10
Description: если более 10 активных то будет сигнал тревоги
Macro: {$RDPI}
Value: 5
Description: если более 5 учетных записей не активны, то сигнал тревоги
и нажимаю после каждого дополнения Add
, а затем «Update
» и Вы должны увидеть надпись «Macros updates
»
Шаг №15:
Нацеливаю данный шаблон «Template - Windows Terminal Server RDP
» из «Шаг №13
» на хост srv-ts01
http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Hosts
— перехожу в srv-ts01
, вкладка Templates - Select - Group: Template RDP
и отмечаю галочкой шаблон "Template - Windows Terminal Server RDP" & "Template Module Zabbix agent active"
, затем нажимаю Select - Update
Шаг №16:
Проверяю по хосту srv-ts01
какие данные по нацеленному шаблону из «Шаг №15
» будут теперь видны в мониторинге Zabbix
:
http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Monitoring - Latest data
Hosts groups: Group_TS
и нажимаю Apply
Но что-то данных нет.
Шаг №17:
Проверяю с Zabbix
—сервера какие данные я могу получить
ekzorchik@srv-zabbix:~$ sudo apt-get install -y zabbix-get ekzorchik@srv-zabbix:~$ zabbix_get -s 172.33.33.43 -k rdpts[ACTIVE] zabbix_get [23822]: Timeout while executing operation ekzorchik@srv-zabbix:~$ zabbix_get -s 172.33.33.43 -k rdpts[IP] zabbix_get [23838]: Timeout while executing operation
Разбираюсь…
Решение:
нужно конфигурационный файл агента привести к виду:
Notepad++ - C:\Zabbix\zabbix_agentd.conf LogFile=C:\Zabbix\zabbix_agentd.log EnableRemoteCommands=1 LogRemoteCommands=1 Server=172.33.33.17,127.0.0.1 ServerActive=172.33.33.17 #для активных проверок указываем имя хоста не IP Hostname=srv-ts01 RefreshActiveChecks=120 Timeout=30 Include=C:\Zabbix\zabbix_agentd.conf.d\ UnsafeUserParameters=1 UserParameter=rdpts[*],powershell.exe -noprofile -executionpolicy bypass -File C:\Zabbix\scripts\rdpts.ps1 $1 Win + X -> Command Prompt (Admin) - "Yes" C:\Windows\system32>net stop "Zabbix Agent" C:\Windows\system32>net start "Zabbix Agent"
нужно конфигурационный файл сервера привести к виду:
ekzorchik@srv-zabbix:~$ sudo nano /etc/zabbix/zabbix_server.conf LogFile=/var/log/zabbix/zabbix_server.log LogFileSize=0 PidFile=/var/run/zabbix/zabbix_server.pid SocketDir=/var/run/zabbix DBHost=localhost DBName=db_zabbix DBUser=us_zabbix DBPassword=612mbddr@ DBPort=3306 SNMPTrapperFile=/var/log/snmptrap/snmptrap.log Timeout=10 AlertScriptsPath=/usr/lib/zabbix/alertscripts ExternalScripts=/usr/lib/zabbix/externalscripts FpingLocation=/usr/bin/fping Fping6Location=/usr/bin/fping6 LogSlowQueries=3000 StatsAllowedIP=127.0.0.1 ekzorchik@srv-zabbix:~$ sudo systemctl restart zabbix-server
Шаг №18:
Проверяю по хосту srv-ts01
какие данные по нацеленному шаблону из «Шаг №15
» будут теперь видны в мониторинге Zabbix
и с учетом «Шаг №17
»
Ура! Заработало, пусть это не мой скрипт, но все равно все что было на просторах интернета допилено и адаптировано для меня и я могу это в дальнейшем использовать в своих наработках на Ubuntu 18.04 Server.
На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.