maXys - сборщик MAC-notify и Syslog-сообщений с коммутаторов D-Link. Получаемые сообщения размещаются в базах данных MySQL/Oracle и log-файлах на диске. Поддерживается отправка уведомлений об определенных событиях в jabber-конференцию.
Сетевые коммутаторы D-Link могут быть настроены на отправку сообщений об определенных событиях на внешние серверы в сети. События, которые возникают на коммутаторе и попадают в его файл журнала, могут быть отправлены на Syslog-сервер по одноименному протоколу. При появлении MAC-адреса на порту, а также при удалении MAC-адреса или при его перемещении между портами коммутатора, информация об этом может быть отправлена на сервер при помощи SNMP Trap.
Сервис maXys принимает такие сообщения и сохраняет их в базе данных или в log-файлах. Также сервис может выбирать из общей массы уведомлений конкретные события. Например, можно настроить maXys на отправку в jabber-конференцию уведомлений о неудачных попытках входа на коммутаторы.
- Прием Syslog-сообщений от коммутаторов
- Прием и разбор MAC-notify сообщений от коммутаторов
- Сохранение данных в базах MySQL/Oracle и в log-файле
- Уведомление в конференцию jabber о заранее определенных событиях
- Использование ID коммутатора из базы данных, что позволяет сохранять историю коммутатора даже при смене его IP-адреса
- Работа системным сервисом (daemon) под FreeBSD
- Разбор MAC-notify сообщений только с одним MAC-адресом (по умолчанию коммутатор присылает сообщения как раз с одним MAC-адресом в каждом SNMP Trap)
- Возможность параллельной работы с штатным сервисом Syslog (для maXys потребуется задать другой UDP-порт)
- FreeBSD (для работы системным демоном)
- Python2 + MySQLdb + xmpp
- Доступ к MySQL-серверу (базе биллинга) для получения списка устройств
maXys запускается системным сервисом и периодически забирает из биллинга информацию о коммутаторах. Запрос должен вернуть таблицу вида:
ip | id |
---|---|
10.90.90.95 | 1 |
10.90.90.98 | 2 |
После этого maXys начинает прослушивать порт для приема Syslog-сообщений (по умолчанию 7514) и порт для приема SNMP Trap (по умолчанию 162). При получении сообщений от коммутаторов сервис, в зависимости от настроек, сохраняет их в log-файл или отправляет в базу данных MySQL или Oracle. По IP-адресу коммутатора определяется его идентификатор в биллинге, в результате чего история коммутатора сохраняется даже в случае изменения его IP-адреса.
Через 2 минуты (по умолчанию) сервис перезапросит из биллинга информацию о коммутаторах и их ID актуализирует эти данные в своей памяти.
Параметр | Описание |
---|---|
interface | Интерфейс, на котором будет работать демон |
sysport | UDP-порт для syslog-сообщений |
macport | UDP-порт для snmptrap-сообщений |
logsys | Лог-файл для syslog |
logmac | Лог-файл для mactrap |
logmaXys | Лог-файл демона |
interval | Интервал, через который данные об оборудовании будут обновляться |
Параметр | Описание |
---|---|
mysql_addr | Адрес MySQL-сервера биллинга |
mysql_user | Имя пользователя |
mysql_pass | Пароль |
mysql_base | Имя базы данных |
mysql_query | MySQL-запрос для получения IP-адресов и ID коммутаторов |
Параметр | Описание |
---|---|
mysql_addr_w | Адрес MySQL-сервера для сохранения результатов |
mysql_user_w | Имя пользователя |
mysql_pass_w | Пароль |
mysql_base_w | Имя базы данных |
mysql_stbl_w | Имя таблицы syslog |
mysql_mtbl_w | Имя таблицы mactrap |
Параметр | Описание |
---|---|
apex_m_url | URL для Oracle APEX для отправки MAC-notify сообщений, например "https://oracledb.localhost:8082/apex/f?p=ins:1:::::QUERY:" |
apex_m_query | Начало запроса для APEX для MAC-notify сообщений, например "INSERT INTO c##table.mactrap (DATETIME,SWITCH_ID,IP,PORT,MAC,ACTION) " |
apex_s_url | URL для Oracle APEX для отправки Syslog сообщений, например "https://oracledb.localhost:8082/apex/f?p=ins:1:::::QUERY:" |
apex_s_query | Начало запроса для APEX для Syslog сообщений, например "INSERT INTO c##table.syslog (DATETIME,SWITCH_ID,IP,TYPE_,DATA) " |
*Настройка Oracle APEX для работы с maXys не является частью данного руководства. Под FreeBSD нет нативных инструментов для работы с Oracle, поэтому maXys использует Oracle APEX как своеобразный "шлюз" к базе Oracle. |
Параметр | Описание |
---|---|
write_to_log | Записывать ли данные в log? |
write_to_mysql | Записывать ли данные в MySQL? |
write_to_oracle | Записывать ли данные в Oracle? |
max_chain | Сколько данных отправлять в базу за один раз. Данные отправляются 'пачкой' при достижении этого значения |
chain_timeout | Через этот интервал данные все равно будут отправлены, даже если не достигнуто максимальное кол-во записей |
Параметр | Описание |
---|---|
useJabber | Параметр, определяющий будут ли события отправляться в Jabber |
jid | Jabber ID |
jps | Пароль к учетной записи Jabber |
jcr | Имя конференции Jabber |
jnn | Псевдоним для конференции Jabber |
Параметр | Описание |
---|---|
systojab_inc | Если слова из этого списка найдены в строке syslog, то эта строка будет передана в jabber. Список задается в синтактисе python, например "['execute', 'failed']". |
systojab_exc | Если слова из этого списка найдены в той же строке, то эта строка не будет передана в jabber. Список задается в синтактисе python, например "['noc:']". |
- Скопируйте файл maXys в /usr/local/etc/rc.d/, а остальные файлы в /usr/local/etc/maXys/.
- Добавьте строку maXys_enable="YES" в файл /etc/rc.conf.
- Запустите сервис командой service maXys start.
Чтобы maXys мог отправлять данные в MySQL, на сервере MySQL нужно создать пользователя и базу данных с соответствующими таблицами. Для создания пользователя можно воспользоваться командами из файла create_user.sql, а для создания базы данных - командами файла maxys.sql. Тип таблиц и кодировку можно поставить на свой вкус, в этих файлах просто рабочий пример.
Чтобы коммутатор начал отправлять сообщения сервису maXys нужно воспользоваться командами:
create syslog host 1 ipaddress <maXys_IP-address> udp_port 7514 state enable severity debug
enable syslog
Для отправки MAC-notify уведомлений нужно ввести команды:
config mac_notification ports 1-28 disable
config mac_notification ports 1-24 enable
create snmp host <maXys_IP-address> v2c <community-string>
enable mac_notification