Инструменты пользователя

Инструменты сайта


projects:e2slt

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

Установка

  1. Разархивировать прилагаемый файл в удобное место, например, в %SystemDrive%\Program Files.
  2. В командной строке из каталога, куда была разархивирована программа, выполнить следующие команды:
    > e2slt.exe /r
    Service installed succesfully.
  3. Внести необходимые поправки в файл e2slt.ini, а именно добавить адрес(а) серверов syslog. По-умолчанию настроен только сервер localhost, что в большинстве случаев не является правильным. Формат записей о серверах:
    <IP-адрес>:<протокол>:<порт>

    Например, 192.168.0.1:UDP:514. Также есть возможность настройки перекодирования сообщений с помощью библиотеки libiconv. Для её включения необходимо установить параметр Need секции Convert в 1 и указать (в формате libiconv) соответствующие кодировки параметрами from и to.

  4. Запустить сервис. Это можно сделать как из оснастки 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)

Дискуссия

Oleg, 03.03.2009 06:11

Программка как раз то что доктор прописал… и у меня задачка посылать логи через stunnel, и для этого нужно использовать протокол TCP, но к сожалению сдесь этот функционал тоже хромает :( «A connect request was made on an already connected socket.» вот такие ошибки сыпятся…. беглым взглядом просмотрел исходники и не нашел вызов функции disconnect после connect, предлогаю добавить в FIXME :)

Blake-R, 05.03.2009 12:18
Спасибо за bug-report. Код поправил (версия от 2009.03.05).
Vitaliy, 07.05.2009 19:54

Тестировал много 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

Blake-R, 19.05.2009 16:33

Исправлено (1.1.2-2009.05.19)

MechanicalBear, 02.09.2009 13:04

а как настроить уровень и источник ошибок приходящих в syslog?

Blake-R, 02.09.2009 13:08

Через .ini-файл. Пример идёт в комплекте.

MechanicalBear, 02.09.2009 13:21

почему то мне все сообщения приходят уровня 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.

MechanicalBear, 02.09.2009 13:23

как сделать чтобы незначительные сообщения приходили с соответствующим уровнем

Blake-R, 02.09.2009 13:38

Приведите свой файл конфигурации.

MechanicalBear, 02.09.2009 13:44

ini

[Servers]
192.168.151.10:UDP:514=true

[Convert]
Need=1
From=CP1251
To=UTF-8

[Application]
Enabled=1
SUCCESS=User.Info
;AUDIT_FAILURE=User.Security
;AUDIT_SUCCESS=User.Security
ERROR_TYPE=User.Error
INFORMATION_TYPE=User.Info
WARNING_TYPE=User.Warn

[Directory Service]
Enabled=1
SUCCESS=User.Info
;AUDIT_FAILURE=User.Security
;AUDIT_SUCCESS=User.Security
ERROR_TYPE=User.Error
INFORMATION_TYPE=User.Info
WARNING_TYPE=User.Warn

[DNS Server]
Enabled=1
SUCCESS=User.Info
;AUDIT_FAILURE=User.Security
;AUDIT_SUCCESS=User.Security
ERROR_TYPE=User.Error
INFORMATION_TYPE=User.Info
WARNING_TYPE=User.Warn

[File Replication Service]
Enabled=1
SUCCESS=User.Info
;AUDIT_FAILURE=User.Security
;AUDIT_SUCCESS=User.Security
ERROR_TYPE=User.Error
INFORMATION_TYPE=User.Info
WARNING_TYPE=User.Warn

[Internet Explorer]
Enabled=1
SUCCESS=User.Info
;AUDIT_FAILURE=User.Security
;AUDIT_SUCCESS=User.Security
ERROR_TYPE=User.Error
INFORMATION_TYPE=User.Info
WARNING_TYPE=User.Warn

[Security]
Enabled=0

[System]
Enabled=1
SUCCESS=Daemon.Info
#AUDIT_FAILURE=
#AUDIT_SUCCESS=
ERROR_TYPE=Daemon.Error
INFORMATION_TYPE=Daemon.Info
WARNING_TYPE=Daemon.Warn''
MechanicalBear, 02.09.2009 13:45
_< не могу понять как здесь вставлять правильно код…
Blake-R, 02.09.2009 13:58

Перед каждой строкой вставлять два пробела.

Blake-R, 02.09.2009 13:59

Хм… Все уровни выставлены корректно. А какой программой принимаете сообщения? Мне подозрительно, что принимающая сторона «знает» о содержимом события:

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.

MechanicalBear, 02.09.2009 14:04

syslog-ng-2.1.4

Blake-R, 02.09.2009 14:10

Какой используется шаблон? У меня …

"$FULLDATE $FULLHOST <$FACILITY.$PRIORITY> $MSG\n"

… всё показывает правильно

MechanicalBear, 02.09.2009 14:16

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")
      );
};

в текстовом логе вид следующий

Sep  2 15:09:34 win-gu-dist Hang (0x03ea): Зависшее приложение mmc.exe, версия 5.2.3790.3959, зависший модуль hungapp, версия 0.0.0.0, адрес 0x00000000.

что как бы не отображает сути..

MechanicalBear, 02.09.2009 14:22
id host facility priority level tag datetime program msg seq counter fo lo
111471 win-gu-dist c alert alert 61 2009-09-02 15:09:34 Hang Hang (0x03ea): Зависшее приложение mmc.exe, версия 5.2.3790.3959, зависший модуль hungapp, версия 0.0.0.0, адрес 0×00000000. 0 1 NULL NULL

если бы с этим разобраться - было бы очень здорово..

Blake-R, 02.09.2009 14:32

И что же тогда означает facility = c? Попробуйте изменить формат вывода обычного файлового лога на тот, что я указал ранее.

MechanicalBear, 02.09.2009 14:45
2009 Sep  2 16:44:43 win-gu-dist <c.alert> Hang (0x03ea): Зависшее приложение mmc.exe, версия 5.2.3790.3959, зависший модуль hungapp, версия 0.0.0.0, адрес 0x00000000.
Blake-R, 02.09.2009 14:52

Не знаю такого facility 'c'. А ведь в сообщении передаётся числовой код… Ладно, проблема ясна. Однако, в ближайшее время исправить наверное не получится - нет под руками Windows.

Blake-R, 02.09.2009 16:52

Исправил в 1.1.3-2009.09.02

MechanicalBear, 03.09.2009 10:13

Спасибо!

Vitaliy, 30.09.2009 18:20

Здравствуйте. Обнаружил вот такую закономерность: При включении журнала 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 сервер по какой-то причине будет недоступен, и останется только разбирать логи на локальной машине.

Blake-R, 01.10.2009 08:19

Сам 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.

Илья Рачков, 28.10.2009 18:10

Добрый вечер! Не могу прицепить библиотеку 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 - Система обнаружила недопустимый указатель адреса при попытке использовать в вызове аргумент указателя.
Рачков Илья, 28.10.2009 19:49

Ну все, тонкость с конвертацией я нашел :) В чем ее суть: обычно, библиотека iconv знает про несколько русских кодировок кои-8: KOI-8, KOI8, KOI8R, KOI8-R но в конкретной сборке под Win (версия 1.9.2.1747) ничего не известно про вариант наименования кодировки «KOI8R», поэтому, в момент исполнения (CIconv.cpp:19) возвращается -1 и устанавливается флаг «не смогли провести конвертацию».

...
if ( iconv( h, &string, &length, &converting, &length2 ) == (size_t)-1 )
...

Если же указать в качестве кодировки «KOI8-R», то все работает.

...
[Convert]
Need=1
From=CP1251
To=KOI8-R
...

Спасибо!

Vitaliy, 01.12.2009 12:17

Здравствуйте. Имеется вопрос: а можно сделать так, чтобы e2slt в сообщение еще имя пользователя писал?

Например при перезапуске службы в EventViewer пишется еще имя пользователя который инициировал данное действие.

Можно-ли это как-нибудь организовать? :-)

Blake-R, 01.12.2009 12:28

Можно-то можно, только я прекратил разработку (у меня теперь и Windows-то не имеется ни дома, ни на работе). Так что решение - только правка исходных кодов и пересборка программы.

Vitaliy, 01.12.2009 13:15

Жаль :-( но вопрос исчерпан. :-)

Vitaliy, 01.12.2009 13:29

А может за пару пива сделаешь? ;-) Или другое удобное разумное вознаграждение. Очень надо.

Blake-R, 01.12.2009 13:45

Может быть в течении декабря посмотрю. Если будет желание разобраться - надо добавить вызов функции LookupAccountSid с параметром lpSid равным record→UserSidOffset в случае, если record→UserSidLength > 0, скажем, после 379 строки. А затем результат Lookup'а добавить в переменную syslogMessage (увеличить длину в строке 441 (syslogMessageLen), а также добавить полученное имя пользователя в функции _snprintf строки 449).

Vitaliy, 01.12.2009 13:32

Средства разработки поствлю какие скажежшь, по RDP пущу к компу.

Enter your comment
 
projects/e2slt.txt · Последние изменения: 01.12.2009 12:27 (внешнее изменение)

Инструменты страницы