Как правильно настроить сбор Windows EventLog через SNMP? Настраиваю сбор логов Windows на Zabbix сервер через ловушки SNMP. Настройки /etc/snmp/snmptrapd.confdisableAuthorization yes perl do "/usr/local/bin/zabbix_trap_receiver.pl" Настройки /usr/local/etc/zabbix_server.conf SNMPTrapperFile=/tmp/zabbix_traps.tmp StartSNMPTrapper=1 Соответственно, используется стандартный скрипт на Perl. Рассылка журнала на Windows сделана через evntwin. Все вроде работает, но сообщения приходят в таком формате:16:16:35 2014/07/03 PDU INFO: notificationtype TRAP version 0 receivedfrom UDP: [10.0.XXX.XXX]:61082->[10.0.XXX.YYY] errorstatus 0 messageid 0 community zabbix transactionid 61 errorindex 0 requestid 0 VARBINDS: iso.3.6.1.2.1.1.3.0 type=67 value=Timeticks: (2976282) 8:16:02.82 iso.3.6.1.6.3.1.1.4.1.0 type=6 value=OID: iso.3.6.1.4.1.311.1.13.1.23.83.101.114.118.105.99.101.32.67.111.110.116.114.111.108.32.77.97.110.97.103.101.114.0.1073748860 iso.3.6.1.4.1.311.1.13.1.9999.1.0 type=4 value=Hex-STRING: D1 EB F3 E6 E1 E0 20 22 CF EB E0 ED E8 F0 EE E2 F9 E8 EA 20 EA EB E0 F1 F1 EE E2 20 EC F3 EB FC F2 E8 EC E5 E4 E8 E0 22 20 EF E5 F0 E5 F8 EB E0 20 E2 20 F1 EE F1 F2 EE FF ED E8 E5 20 CE F1 F2 E0 ED EE E2 EB E5 ED E0 2E 0D 0A iso.3.6.1.4.1.311.1.13.1.9999.2.0 type=4 value=STRING: "Unknown" iso.3.6.1.4.1.311.1.13.1.9999.3.0 type=4 value=STRING: "computer.domain.com" iso.3.6.1.4.1.311.1.13.1.9999.4.0 type=4 value=STRING: "4" iso.3.6.1.4.1.311.1.13.1.9999.5.0 type=4 value=STRING: "0" iso.3.6.1.4.1.311.1.13.1.9999.6.0 type=4 value=Hex-STRING: CF EB E0 ED E8 F0 EE E2 F9 E8 EA 20 EA EB E0 F1 F1 EE E2 20 EC F3 EB FC F2 E8 EC E5 E4 E8 E0 iso.3.6.1.4.1.311.1.13.1.9999.7.0 type=4 value=Hex-STRING: CE F1 F2 E0 ED EE E2 EB E5 ED E0 iso.3.6.1.6.3.18.1.3.0 type=64 value=IpAddress: 10.0.XXX.XXX iso.3.6.1.6.3.18.1.4.0 type=4 value=STRING: "zabbix" iso.3.6.1.6.3.1.1.4.3.0 type=6 value=OID: iso.3.6.1.4.1.311.1.13.1.23.83.101.114.118.105.99.101.32.67.111.110.116.114.111.108.32.77.97.110.97.103.101.114 Можно ли это привести в нормальный вид? Или хотя бы отправлять сообщение в нормальной кодировке, а не HEX числами? Пробовал Windows 7 и Windows 2003 Server. Версия Zabbix 2.0.8 на Ubuntu 12.04 Server.
Для того чтобы привести сообщение в нормальный вид или отправлять сообщение в нормальной кодировке, а не HEX числами, вам необходимо изменить скрипт /usr/local/bin/zabbix_trap_receiver.pl на Perl.
В этом скрипте можно добавить код для обработки VARBINDS и преобразования значений из HEX в нормальный вид. Например, вы можете использовать функцию pack() для этого.
Пример кода для обработки VARBINDS и преобразования HEX в нормальный вид:
use strict; use warnings; my %varbinds; # Обработка VARBINDS while (<>) { chomp; last if /^VARBINDS:/; } while (<>) { last if /^$/; chomp; my ($oid, $type, $value) = split /\s+/, $_, 3; $value =~ s/Hex-STRING:\s//; if ($type eq 'STRING') { $value =~ s/^"//; $value =~ s/"$//; } elsif ($type eq 'Hex-STRING') { $value = pack("H*", $value); } $varbinds{$oid} = $value; } # Вывод в нормальный вид foreach my $oid (keys %varbinds) { print "$oid: $varbinds{$oid}\n"; }
Помимо этого, перед использованием скрипта убедитесь, что на вашей системе установлен Perl и необходимые модули для работы с SNMP и преобразования HEX в нормальный вид.
После внесения изменений в скрипт, перезапустите службу SNMPTrapd на вашем сервере, чтобы изменения вступили в силу.
Для того чтобы привести сообщение в нормальный вид или отправлять сообщение в нормальной кодировке, а не HEX числами, вам необходимо изменить скрипт /usr/local/bin/zabbix_trap_receiver.pl на Perl.
В этом скрипте можно добавить код для обработки VARBINDS и преобразования значений из HEX в нормальный вид. Например, вы можете использовать функцию pack() для этого.
Пример кода для обработки VARBINDS и преобразования HEX в нормальный вид:
use strict;use warnings;
my %varbinds;
# Обработка VARBINDS
while (<>) {
chomp;
last if /^VARBINDS:/;
}
while (<>) {
last if /^$/;
chomp;
my ($oid, $type, $value) = split /\s+/, $_, 3;
$value =~ s/Hex-STRING:\s//;
if ($type eq 'STRING') {
$value =~ s/^"//;
$value =~ s/"$//;
} elsif ($type eq 'Hex-STRING') {
$value = pack("H*", $value);
}
$varbinds{$oid} = $value;
}
# Вывод в нормальный вид
foreach my $oid (keys %varbinds) {
print "$oid: $varbinds{$oid}\n";
}
Помимо этого, перед использованием скрипта убедитесь, что на вашей системе установлен Perl и необходимые модули для работы с SNMP и преобразования HEX в нормальный вид.
После внесения изменений в скрипт, перезапустите службу SNMPTrapd на вашем сервере, чтобы изменения вступили в силу.