Eventlog To Syslog Translator - Разработка прекращена!
Сервис для считывания сообщений журнала событий Windows и передачи их на сервер Syslog.
Архив программы: e2slt.7z
Архив исходного кода: e2slt_src.zip
Репозиторий кода: git://e2slt.git.sourceforge.net/gitroot/e2slt/e2slt
Версия: 1.1.3-2009.09.02
Лицензия: GPLv3
Зависимости: libiconv
Установка
Разархивировать прилагаемый файл в удобное место, например, в %SystemDrive%\Program Files.
В командной строке из каталога, куда была разархивирована программа, выполнить следующие команды:
> e2slt.exe /r
Service installed succesfully.
Внести необходимые поправки в файл
e2slt.ini, а именно добавить адрес(а) серверов syslog. По-умолчанию настроен только сервер localhost, что в большинстве случаев не является правильным. Формат записей о серверах:
<IP-адрес>:<протокол>:<порт>
Например, 192.168.0.1:UDP:514. Также есть возможность настройки перекодирования сообщений с помощью библиотеки libiconv. Для её включения необходимо установить параметр Need секции Convert в 1 и указать (в формате libiconv) соответствующие кодировки параметрами from и to.
Запустить сервис. Это можно сделать как из оснастки Windows «Службы и приложения», так и через командную строку:
> e2slt.exe /u
Service started successfully.
Ключи командной строки
/i Установить сервис
/r Удалить сервис
/u Запустить сервис
/d Остановить сервис
/c+ Показать консоль отладочных сообщений
/c- Скрыть консоль отладочных сообщений
/z Показывать консоль отладочных сообщений при запуске (этот ключ имеет смысл использовать только как параметр запуска сервиса, добавив его к командной строке в параметре ImagePath.
/v Показать версию программы
FIXME
Соединение TCP не закрывается после отправки сообщения (Oleg) (1.1-2009.03.05).
Отключение отсылки сообщений по типу события не работает (1.1.1-2009.03.31).
Переполнение массива E2SLT::SLog:mappings при установке значений аудита (Vitaliy) (1.1.2-2009.05.19).
Ошибка вычисления приоритета (MechanicalBear) (1.1.3-2009.09.02).
TODO
Добавить функцию определения адреса сервера Syslog как по IP, так и по имени хоста (1.1-2009.03.05).
Добавить фильтр про источникам сообщений - чьи отсылать, чьи нет.
Окружение текущей сборки
Windows XP Professional
MinGW (5.1.4)
Codelite (1.0.2893)
libiconv (1.9.2.1747)
Дискуссия
Программка как раз то что доктор прописал… и у меня задачка посылать логи через stunnel, и для этого нужно использовать протокол TCP, но к сожалению сдесь этот функционал тоже хромает :( «A connect request was made on an already connected socket.» вот такие ошибки сыпятся…. беглым взглядом просмотрел исходники и не нашел вызов функции disconnect после connect, предлогаю добавить в
:)
Тестировал много Windows-клиентов для Syslog сервера, этот оказался самый применимый в моей ситуации, но к сожалению не обошлось без проблем. В общем то-ли я чего-то не то делаю, то-ли гдето в коде ошибка. Если настроить секцию [Security] то все правильно отправляется на Syslog сервер, но если добавить скажем секцию [System], то события из журнала Security на сервер не отправляются, в то время как из журнала System все аккуратно доставляется. Консоль отладки показывает только соббщение о том что в журнале появилось новое сообщение (New event for eventlog #0) но на сервер не отправляет. Привожу данные с консоли отладки: Searching eventlogs…
Application: disabled Internet Explorer: disabled Kaspersky Event Log: disabled Security: enabled SUCCESS: 202 AUDIT_FAILURE: 202 AUDIT_SUCCESS: 202 ERROR_TYPE: 106 INFORMATION_TYPE: 202 WARNING_TYPE: 138 Eventlog added. System: enabled SUCCESS: 195 AUDIT_FAILURE: 163 AUDIT_SUCCESS: 163 ERROR_TYPE: 99 INFORMATION_TYPE: 195 WARNING_TYPE: 131 Eventlog added.Search ended. Parse servers…
Server line: 192.168.2.220:UDP:514 IP: 192.168.2.220 Protocol: 17 Port: 514 Added successfully.Parse ended. New event for eventlog #0 New event for eventlog #0 New event for eventlog #1
Addition strings: Help and Support stop EventMessageFile = C:\WINDOWS\System32\netevent.dll;C:\WINDOWS\System32\ws03res.dll;C:\WINDOWS\System32\w03a2409.dll
Libraries: C:\WINDOWS\System32\netevent.dll C:\WINDOWS\System32\ws03res.dll C:\WINDOWS\System32\w03a2409.dll "The Help and Support service was successfully sent a stop control."Message successfully sent to server #0. New event for eventlog #0 New event for eventlog #1
Addition strings: Help and Support stopped EventMessageFile = C:\WINDOWS\System32\netevent.dll;C:\WINDOWS\System32\ws03res.dll;C:\WINDOWS\System32\w03a2409.dll
Libraries: C:\WINDOWS\System32\netevent.dll C:\WINDOWS\System32\ws03res.dll C:\WINDOWS\System32\w03a2409.dll "The Help and Support service entered the stopped state."Message successfully sent to server #0.
Addition strings: Help and Support start EventMessageFile = C:\WINDOWS\System32\netevent.dll;C:\WINDOWS\System32\ws03res.dll;C:\WINDOWS\System32\w03a2409.dll
Libraries: C:\WINDOWS\System32\netevent.dll C:\WINDOWS\System32\ws03res.dll C:\WINDOWS\System32\w03a2409.dll "The Help and Support service was successfully sent a start control."Message successfully sent to server #0.
Addition strings: Help and Support running EventMessageFile = C:\WINDOWS\System32\netevent.dll;C:\WINDOWS\System32\ws03res.dll;C:\WINDOWS\System32\w03a2409.dll
Libraries: C:\WINDOWS\System32\netevent.dll C:\WINDOWS\System32\ws03res.dll C:\WINDOWS\System32\w03a2409.dll "The Help and Support service entered the running state."Message successfully sent to server #0. New event for eventlog #0
Исправлено (1.1.2-2009.05.19)
а как настроить уровень и источник ошибок приходящих в syslog?
Через .ini-файл. Пример идёт в комплекте.
почему то мне все сообщения приходят уровня err или alert.. что можно с этим сделать?
2009-09-02 15:09:34 Hang alert win-dist Hang (0x03ea): Зависшее приложение mmc.exe, версия 5.2.3790.3959, зависший модуль hungapp, версия 0.0.0.0, адрес 0×00000000.
как сделать чтобы незначительные сообщения приходили с соответствующим уровнем
Приведите свой файл конфигурации.
ini
Перед каждой строкой вставлять два пробела.
Хм… Все уровни выставлены корректно. А какой программой принимаете сообщения? Мне подозрительно, что принимающая сторона «знает» о содержимом события:
2009-09-02 15:09:34 Hang alert win-dist Hang (0x03ea): Зависшее приложение mmc.exe, версия 5.2.3790.3959, зависший модуль hungapp, версия 0.0.0.0, адрес 0×00000000.
syslog-ng-2.1.4
Какой используется шаблон? У меня …
… всё показывает правильно
syslog-ng.conf
destination d_mysql { sql( type(mysql) host("mysql-server") username("syslog") password("syslog") database("syslog") table("logs") columns("host", "facility", "priority", "level", "tag", "datetime", "program", "msg", "seq") values("$HOST_FROM", "$FACILITY", "$PRIORITY", "$LEVEL", "$TAG", "$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC", "$PROGRAM", "$MSG", "$SEQNUM") indexes("host", "facility", "priority", "datetime", "program", "seq") ); };в текстовом логе вид следующий
что как бы не отображает сути..
если бы с этим разобраться - было бы очень здорово..
И что же тогда означает facility = c? Попробуйте изменить формат вывода обычного файлового лога на тот, что я указал ранее.
Не знаю такого facility 'c'. А ведь в сообщении передаётся числовой код… Ладно, проблема ясна. Однако, в ближайшее время исправить наверное не получится - нет под руками Windows.
Исправил в 1.1.3-2009.09.02
Спасибо!
Здравствуйте. Обнаружил вот такую закономерность: При включении журнала Security процесс services.exe увеличивает занимаемую память с 3-4Мб до размера файла журнала безопасности C:\WINDOWS\system32\config\SecEvent.Evt У меня установлен размер 100Мб - соответственно services.exe увеличивается до ~100Мб. Остановка сервиса e2slt.exe не приводит к высвобождению занимаемой процессом services.exe памяти, а вот очистка файла журнала приводит к освобождению памяти. По мере увеличения журнала, увеличивается и services.exe Не знаю, относить-ли это к проблемам у Microsoft или e2slt.exe что-то не то делает? Конечно, нет необходимости иметь такой большой файла журнала безопасности, но на всякий случай его лучше делать побольше - вдруг Syslog сервер по какой-то причине будет недоступен, и останется только разбирать логи на локальной машине.
Сам e2slt использует только стандартные функции WinAPI для доступа к журналам, поэтому в данном случае его вина исключена. Единственно, что могу сказать по данному поводу… Из-за особенностей реализации журнала, не всегда срабатывают функции перехода на последние записи. Поэтому, при запуске e2slt считывает журнал начиная со старых записей и заканчивая новыми. Возможно в этот момент services.exe и считывает все страницы журнала в память (ведь в нормальном состоянии в памяти хранится только одна-две страницы журнала).
Понаблюдайте, по-возможности, за дальнейшим поведением services.exe и его расходом памяти - если не перезапускать e2slt «лишний» раз, скорее всего, Windows выгрузит неопрашиваемые страницы журнала из памяти?
У меня опрос журнала Security включен и вот результаты расхода памяти процессом services.exe по серверам: 15MB, 21MB, 19MB, 46MB, 4MB, 21MB, 136MB, 39MB, 23MB, 55MB, 3MB, 30MB. При этом размеры журналов на всех серверах 16MB.
Добрый вечер! Не могу прицепить библиотеку libiconv2.dll - при попытке настроить конвертацию сообщений мой любимый koi8-r выдает
Program is working. New event for eventlog #0 Addition strings: pzmSyslog Теперь русские буквы EventMessageFile = C:\work\pzmSyslog\Debug\pzmSyslog.exe Libraries: C:\work\pzmSyslog\Debug\pzmSyslog.exe "pzmSyslog: Теперь русские буквы" Error in C:/Projects/cpp/e2slt/E2SLT.cpp:488 CIconv::iconv - Failed, disabling conversion. Error in C:/Projects/cpp/e2slt/E2SLT.cpp:492 send - Система обнаружила недопустимый указатель адреса при попытке использовать в вызове аргумент указателя.Ну все, тонкость с конвертацией я нашел :) В чем ее суть: обычно, библиотека iconv знает про несколько русских кодировок кои-8: KOI-8, KOI8, KOI8R, KOI8-R но в конкретной сборке под Win (версия 1.9.2.1747) ничего не известно про вариант наименования кодировки «KOI8R», поэтому, в момент исполнения (CIconv.cpp:19) возвращается -1 и устанавливается флаг «не смогли провести конвертацию».
Если же указать в качестве кодировки «KOI8-R», то все работает.
Спасибо!
Здравствуйте. Имеется вопрос: а можно сделать так, чтобы e2slt в сообщение еще имя пользователя писал?
Например при перезапуске службы в EventViewer пишется еще имя пользователя который инициировал данное действие.
Можно-ли это как-нибудь организовать?
Можно-то можно, только я прекратил разработку (у меня теперь и Windows-то не имеется ни дома, ни на работе). Так что решение - только правка исходных кодов и пересборка программы.
Жаль
но вопрос исчерпан.
А может за пару пива сделаешь?
Или другое удобное разумное вознаграждение.
Очень надо.
Может быть в течении декабря посмотрю. Если будет желание разобраться - надо добавить вызов функции LookupAccountSid с параметром lpSid равным record→UserSidOffset в случае, если record→UserSidLength > 0, скажем, после 379 строки. А затем результат Lookup'а добавить в переменную syslogMessage (увеличить длину в строке 441 (syslogMessageLen), а также добавить полученное имя пользователя в функции _snprintf строки 449).
Средства разработки поствлю какие скажежшь, по RDP пущу к компу.