24 августа 2022 г.

Zabbix мониторим количество пользователей в шаре (Windows)

 Понадобилось мне тут узнать сколько пользователей сидит в общем ресурсе.

Офф.топ.

А для чего?, поступила жалоба от одной компании, у них с разной периодичностью возникают ошибки 1С. Все ошибки являются вариацией потери доступа к ресурсу. Мониторинг доступности сервера с тачки пользователя не выявил потери соединения в момент ошибки. Тогда я все таки смог получить доступ к самому серверу и поковырять настройки. В настройках общего ресурса я обратил внимание на установленное ограничение максимального количества пользователей равному 6. Казалось бы пользователей только три, НО (!), разрешения на каталог стоят всем все можно, разрешения на ресурс стоят такие же, пользователи заходят в каталог как Гость. Т.о. мы задаемся вопросом что есть пользователь?, Это пара Гость (сервер) + ПК (клиент), или все Гость это один пользователь или как-то по другому. Я отключил опцию и решил помониторить этот вопрос, доказав или опровергнув теорию.

Приступим, как нам посмотреть кол-во активных пользователей?

В Power Shell есть командлет Get-SmbShare, отображает текущие ресурсы и некую информацию (пусть наш ресурс называется 1C)

PS C:\Windows\system32> Get-Smbshare 1C

Name     ScopeName     Path               Description
----     ---------     ----               -----------
1C        *            C:\Users\aa\1C_DB

Полный вывод дает больше информации

PS C:\Windows\system32> Get-Smbshare 1C | fl *

PresetPathAcl         : System.Security.AccessControl.DirectorySecurity
ShareState            : Online
AvailabilityType      : NonClustered
ShareType             : FileSystemDirectory
FolderEnumerationMode : Unrestricted
CachingMode           : Manual
SmbInstance           : Default
CATimeout             : 0
ConcurrentUserLimit   : 0
ContinuouslyAvailable : False
CurrentUsers          : 1
Description           :
EncryptData           : False
Name                  : 1C
Path                  : C:\Users\aa\1C_DB
Scoped                : False
ScopeName             : *
SecurityDescriptor    : 
ShadowCopy            : False
Special               : False
Temporary             : False
Volume                : \\?\Volume{}\
PSComputerName        :
CimClass              : ROOT/Microsoft/Windows/SMB:MSFT_SmbShare
CimInstanceProperties : {AvailabilityType, CachingMode, CATimeout, ConcurrentUserLimit...}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties

Нас интересует только один параметр - CurrentUsers

PS C:\Windows\system32> Get-Smbshare 1C | select currentusers

               currentusers
               ------------
               1

Но как это передать заббиксу, текстовые значение, особенно в таком формате он не съест. Воспользуемся форматом JSON, благо PowerShell умеет конвертировать свой вывод в JSON

PS C:\Windows\system32> Get-Smbshare 1C | select currentusers | ConvertTo-Json
{
    "currentusers":  1
}

Вот такое заббикс скушает данные

в конфигурационном файле агента добавляем пользовательский параметр, я его назову smb.count_1c

UserParameter=smb.count_1c,powershell.exe -NoProfile "Get-Smbshare 1C | select currentusers | ConvertTo-Json"

Рекомендую проверить выполнение команды PowerShell через командную строку

Дальше добавляем элемент данных в заббиксе:


Обращаем внимание на то, что тип информации = текст, теперь нам нужно вытащить из него параметр CurrentUser, для этого создаем зависимый элемент данных с предобработкой:



Вот теперь у нас есть элемент данных в числовом формате, можно повесить триггер и строить графики:


Пока судить рано, но пользователи утверждают что бухгалтеров всего 3 и проблем после отключения ограничения не наблюдалось, а по факту у нас постоянно CurrentUser=4, а иногда и пяти. Будем ждать дальше

Комментариев нет:

Отправить комментарий