Zabbix: denní monitoring počtu odeslaných a přijatých zpráv v Exchange včetně velikosti

Onehdá jsem potřeboval zanést do grafů počet přijatých a odeslaných zpráv v týdnu (prostě vytížení poštovního serveru/lidí), včetně množství odchozí a přijaté pošty s ohledem na velikost zpráv. Nechtěl jsem používat perfmon, ale spíše kombinaci zabbixu s powershellem. Při tom jsem si vzpomněl, že kdysi jsme experimentovali s Exchange Reporterem (viz https://www.frankysweb.de), což byl poměrně příjemný nástroj pro reportování týdeního využití poštovního serveru.

Výsledkem práce bylo vytvoření krátkého skriptu, jenž ukládá počet odchozích/přijatých zpráv + jejich velikosti do souborů. Tyto soubory si Zabbix jednou denně načte a sebrané číslo zanese do grafu.

Během testování jsem narazil na tyto problémy:
1) volání Powershellu spolu s doplňkem pro Exchange a spouštění skriptu – tedy tři příkazy naráz nějak nemohl zabbix rozchodit v nastavení UserParametrů, tudíž proto bylo třeba výsledek dotazu nejdříve uložit do souboru.
2) Soubor byl uložen (myslímže) v UTF-16, což zase zabbix nebyl ochoten přečíst
user@zabbix:~$ zabbix_get -s 172.0.0.1 -p 10050 -k vfs.file.contents['c:\Skripty\zabbix-count_messages\arm.txt'] | hexdump -C
00000000 cb 99 c5 a3 34 0a                |....4.|
00000006

Při ukládání výsledku dotazu bylo třeba soubor uložit přes metodu „File.WriteAllLines“, jež je součástí .NET Framewowrk 4.5, tedy [System.IO.File]::WriteAllLines('C:\Skripty\zabbix-count_messages\arm.txt', $arm_day1);
Potom již bylo možné soubor správně přečíst (hodnota 3910)
user@zabbix:~$ zabbix_get -s 172.0.0.1 -p 10050 -k vfs.file.contents['c:\Skripty\zabbix-count_messages\arm.txt'] | hexdump -C
00000000 33 39 31 30 0a                |3910.|
00000005

Celý PS1 skript
# Nastavení předchozího dne
$daystart = (Get-Date -Hour 00 -Minute 00 -Second 00).AddDays(-1)
$dayend = (Get-Date -Hour 23 -Minute 59 -Second 59).AddDays(-1)

# zjistíme všechny příchozí (re) a odchozí (se) zprávy za poslední den

$dayre = get-messagetrackinglog -Start $daystart -End $dayend -EventID "RECEIVE" -ResultSize Unlimited | select Sender,RecipientCount,TotalBytes,Recipients | measure-object Totalbytes -Maximum -Minimum -Average -Sum
$dayse = get-messagetrackinglog -Start $daystart -End $dayend -EventID "SEND" -ResultSize Unlimited | select Sender,RecipientCount,TotalBytes,Recipients | measure-object Totalbytes -Maximum -Minimum -Average -Sum

# Zjistíme počet všech příchozích (arm) zpráv
$arm_day = $dayre.count

# Zjistíme počet všech odchozích (asm) zpráv
$asm_day = $dayse.count

# zjistíme velikost všech příchozích (vrm) zpráv v bajtech
$vrm_day = $dayre.Sum

# zjistíme velikost všech odchozích (vsm) zpráv v bajtech
$vsm_day = $dayse.Sum

#### Uložení souborů

[System.IO.File]::WriteAllLines('C:\Skripty\zabbix-count_messages\arm.txt', $arm_day);
[System.IO.File]::WriteAllLines('C:\Skripty\zabbix-count_messages\asm.txt', $asm_day);
[System.IO.File]::WriteAllLines('C:\Skripty\zabbix-count_messages\vrm.txt', $vrm_day);
[System.IO.File]::WriteAllLines('C:\Skripty\zabbix-count_messages\vsm.txt', $vsm_day);

Pak už stačí v Zabbixu připravit čítač, který jednou denně přečte hodnotu z předchozího dne. Následně vygenerujeme graf. Jediná nevýhoda tohoto řešení je, že např. záznam z úterka vidíme ve středečním grafu. Ale s tím se dá žít 😉

Níže jsou obrázky pro ilustraci. Pro „neobvyklý stav“ (příliš mnoho zpráv za den, překročené množství velikosti e-mailů) není problém nastavit triggery a akce.

 ex_size ex_number

Comments are closed.