Система Mediator предназначена для сбора и экспорта предупреждений и статистической информации.
Общая схема взаимодействия Mediator с нодами SSW:

Рисунок 1 - Общая схема взаимодействия кластера Mediator с другими кластерами системы
В качестве источников предупреждений и статистики выступают следующие подсистемы:
В качестве статистической информации выступают события вызова (call events) и счетчики (counters).
Каждая подсистема, принимающая участие в обработке вызова, формирует соответствующий набор событий и
счетчиков, которые агрегируются в подсистеме Mediator в соответствии с указанными правилами.
Правило агрегации определяется "модулем статистики". Совокупность модуля статистики, интервала экспорта и
"модуля (или модулей) экспорта" определяет задание статистики. Описание команд добавления, просмотра и
удаления представлено в разделе Команды работы с заданиями статистики.
В общем виде схема обработки статистики может быть представлена в следующем виде:

Рисунок 2 - Схема обработки статистики
В общем виде схема обработки предупреждений может быть представлена в следующем виде:

Рисунок 3 - Схема обработки предупреждений
Секция AMQP-клиента
Определяет подключения к AMQP-брокеру, на котором будет осуществляться обмен информацией между системой Mediator и другими нодами:
%Секция AMQP клиента.
{amqp10_client,
[
{realms,
[
%Строка подключения к брокеру, на котором будет осуществляться обмен информацией между системой Mediator и другими нодами
{local, "/ssw", "ssw", "ssw", [{localhost, {host, "IP or Hostname of RPS amqp broker"}, 5672, 10}]},
%Строка подключения к брокеру, к которому подключена система TTS
{tts, "/ssw", "ssw", "ssw", [{tts, {host, "IP or Hostname of TTS amqp broker"}, 5672, 10}]}
]
}
]
} |
Секция SSH-консоли
{cocon, [
{realm, local} % Realm, определенный в секции AMQP-клиента
]} |
Секция подключения к LDAP-серверу
{ldapman,
[
{ldap_server_ip, "127.0.0.1"}, % IP-адрес LDAP-сервера
{ldap_server_port, 389}, % Порт LDAP-сервера
{ldap_dc, "dc=ecss"}, % DC директория, в которой будем работать
{ldap_system_username, "admin"}, % Имя пользователя, из под которого система будет работать с LDAP-сервером (вести аудит и прочее)
{ldap_system_password, "admin"} % Пароль
]} |
Секция rtop_agent
Определяет название кластера.
{rtop_agent, [
{realm, local} % идентификатор подключения к системе DS
]} |
Секция логирования
%Секция конфигурирования подсистемы логирования:
{chronica, [
{rules, [
{restart, "ecss_starter", info, [restart], on},
{alarm_error, "*", error, [rps_alarm], on}, % notification via alarm subsystem
{all_errors, "*", error, [error, journald], on}, % catch all errors
{all_warning, "*", warning, [error], on}, % catch all warnings
{all_infos_bin, "*&!rps_watchdog", info, [info_bin], on},
% Binary
{all_logs_bin, "*", debug, [default_bin], off},
{mycelium_bin, "mycelium*", debug, [default_bin], off},
{alarm_bin, "alarm*", debug, [default_bin], off},
{ap_bin, "ap_*", debug, [default_bin], off},
{ccn_bin, "ccn*", debug, [default_bin], off},
{oasys_bin, "oasys*", debug, [default_bin], off},
{snmp_bin, "snmp*", debug, [default_bin], off},
{http_terminal_cmds_bin, "hc_*", debug, [default_bin], off},
{http_terminal_bin, "cocon_http*", debug, [default_bin], off}
]},
{flows, [
% Text flows
{default_bin, [{file, "default.log.bin", binary}]},
{error, [{file, "error.log"}]},
{info_bin, [{file, "info.log.bin", binary}]},
{journald, [{journald, default}]},
{restart, [{file, "restart.log"}]},
{rps_alarm, [{rps_alarm, default}]}
]},
{formats, [
{default, "%Y-%M-%D %H:%Mi:%S:%Ms %PRIORITY %Pid [%Module:%Line]: %Message\n"},
{alarm_trace, "%Message\n"}
]},
{active, true},
{rotate_at_start, true},
{file_check_timeout, 10000},
{backend_modules, [
{rps_alarm, chronica_rps_alarm_backend},
{journald, chronica_journald_backend}
]},
{internal_logger, [
{file, "chronica", {101048576, 1}, error},
{tty, error}
]},
{data_root, "/var/cache/ecss/mediator/chronica/<Node>"},
{log_root, "/var/log/ecss/mediator/<Node>"},
{max_file_size, 52428800}, %% 50M per file
{max_file_num, 10},
{debug, true},
{debug_level, 2}
]} |
Секция SNMP-агента
% Секция SNMP-агента. Будет использована, если значение snmpAgentEnable выставлено в "true".
% В этом случае данная секция обязательна
{snmp,
[
{agent,
[
% Директория хранения служебной информации SNMP-агента
% Данная директория должны быть предварительно создана
{db_dir, "/var/lib/ecss/snmp/"},
% Местоположение конфигурационных файлов SNMP-агента
{config, [{dir, "/etc/ecss/snmp/agent/"}, {force_load, true}, {verbosity, silence}]},
% Рекомендуется не изменять эти параметры
{priority, normal},
{versions, [v2, v3]},
{mib_storage, {mnesia, []}},
{target_cache, [{verbosity,silence}]},
{symbolic_store, [{verbosity,silence}]},
{local_db, [{repair,true},{auto_save,5000},{verbosity,silence}]},
{error_report_module, snmpa_error_logger},
{agent_type, master},
{agent_verbosity, silence},
{discovery, [{terminating, [{enable, true}, {stage2, discovery}, {trigger_username, ""}]}, {originating, [{enable, true}]}]},
{multi_threaded, false},
{mib_server, [{mibentry_override,false},{trapentry_override,false},{verbosity,silence},{cache,true}]},
{note_store, [{timeout,30000},{verbosity,silence}]},
{net_if, [{module,snmpa_net_if},{verbosity,silence},{options,[{bind_to,true},{no_reuse,false},{req_limit,infinity}]}]}
]
}
]
} |
Секция SNMP-менеджера
% Секция SNMP-менеджера, опциональная. Позволяет задать настройки менеджера "слушателя" SNMP-трапов.
{snmp,
[
{manager,
[
{config, [
% Местоположение конфигурационных файлов SNMP-агента
{dir, "/etc/ecss/snmp/manager/"},
% silence | info | log | debug | trace
{verbosity, silence},
% Директория хранения служебной информации SNMP-менеджера
% Данная директория должны быть предварительно создана
{db_dir, "/var/lib/ecss/snmp/"}
]},
% Имя модуля-обработчика SNMP-трапов. ВНИМАНИЕ! НЕ МЕНЯТЬ ДАННУЮ НАСТРОЙКУ
{def_user_mod, snmp_alarm_user}
]
}
]
} |
Необходимо сконфигурировать приложение RPS для каждой ноды.
В конфигурации Node.config должны присутствовать следующие секции:
%Секция AMQP-клиента
{amqp10_client,
[
{realms,
[
% Строка подключения к брокеру, на котором будет осуществляться обмен информацией между системой Mediator и другими нодами
{local, "/ssw", "ssw", "ssw", [{localhost, {host, "IP or Hostname of RPS amqp broker"}, 5672, 10}]}
]
}
]
},
{rps, [
{realm, local}
]} |
Опрос значений использования диска и памяти осуществляется раз в минуту.
Включение мониторинга диска:
{rps, [
{realm, local},
{thresholds, [{disk, [{enabled, true}]}]} % без указания "points" мониторинг всех смонтированных разделов
]} |
Для включения мониторинга только заданных разделов необходимо указать точки монтирования:
{rps, [
{realm, local},
{thresholds, [{disk, [
{enabled, true},
{points, [{"/var/lib/ecss/cdr", {W, M, C}},
{"/var/lib/ecss/statistics", {W, M, C}},
]}
]}]}
]} |
где
Также допускается такой вариант:
{rps, [
{realm, local},
{thresholds, [{disk, [
{enabled, true},
{points, [{"/var/lib/ecss/cdr", {W, M, C}},
{"/var/lib/ecss/statistics", {W, M, C}},
]}
]}]}
]} |
Переопределить пороги по умолчанию можно следующим образом:
{rps, [
{realm, local},
{thresholds, [{disk, [
{enabled, true},
{default, {85, 96, 99}},
{points, ["/var/lib/ecss/cdr",
"/var/lib/ecss/statistics",
]}
]}]}
]} |
При включенном мониторинге диска посылаются предупреждения на медиатор при достижении порогов.
Чтобы подсистема SNMP могла получать/отправлять трапы по портам 161/162 необходимо добавить соответствующие права на файл beam.smp следующим образом:
Установить утилиту setcap командой из консоли ОС Linux:
sudo apt-get install libcap2-bin |
Задать права на файл beam.smp командой из консоли ОС Linux:
sudo setcap cap_net_bind_service=+ep /usr/lib/erlang/erts-6.4.1.2/bin/beam.smp sudo setcap cap_net_bind_service=+ep /usr/lib/erlang/erts-6.4.1.2/bin/beam |
где "/usr/lib/erlang/erts-6.4.1.2/bin/" - путь, по которому располагается файл beam.smp.
Создать файл по пути: /etc/ecss/snmp/agent/agent.conf
% Порт, который будет слушать SNMP-агент и на который ему будут приходить SNMP-трапы.
% ВНИМАНИЕ! Если номер порта < 1024, необходимо выполнить пункт 2.
{intAgentUDPPort, 161}.
% IP-адрес, на котором будет открыт порт для слушания SNMP-трапов.
{intAgentIpAddress, [0,0,0,0]}.
% Уникальный текстовый идентификатор SNMP-агента. Не изменять.
{snmpEngineID, "ECSS-10-SNMP-Agent"}.
% Максимальная длина SNMP-сообщения (в октетах), которые SNMP-агент может получать/отправлять.
{snmpEngineMaxMessageSize, 484}. |
Создать файл по пути: /etc/ecss/snmp/agent/community.conf.
% community нужны для обеспечения аутентификации, проверки прав доступа при взаимодействии SNMP-агента и менеджера.
% Первым параметром идет уникальный идентификатор community. Вторым - человеко-читабельное имя. Третьим - secret-key для данного community.
{"public", "public", "initial", "", ""}.
{"all-rights", "all-rights", "all-rights", "", ""}.
{"standard trap", "standard trap", "initial", "", ""}. |
Создать файл по пути: /etc/ecss/snmp/agent/context.conf.
%% The default context "". |
Создать файл по пути: /etc/ecss/snmp/agent/notify.conf.
{"standard trap", "std_trap", trap}. |
Создать файл по пути: /etc/ecss/snmp/agent/standard.conf.
% Имя SNMP-агента. Не изменять
{sysDescr, "Eltex ECSS SNMP agent"}.
% Корневой OID для всех SNMP-трапов системы ECSS-10
{sysObjectID, [1, 3, 6, 1, 4, 1, 35265, 2, 10]}.
% Контакт человека, отвечающего за управление данной нодой. НЕОБХОДИМО УКАЗАТЬ EMAIL сервис-центра.
{sysContact, "techsupp@eltex.nsk.ru"}.
% Физическое расположение данной ноды.
{sysLocation, "naomi.eltex.loc"}.
% Идентификатор для группы сервисов, предоставляемых ECSS-10. НЕ ИЗМЕНЯТЬ.
{sysServices, 72}.
% Флаг, показывающий, разрешено или нет SNMP генерировать authenticationFailure-трапы.
{snmpEnableAuthenTraps, enabled}.
% Административное имя данной ноды. Но по соглашению принято в качестве sysName выставлять полное доменное имя данной ноды.
{sysName, "ECSS-10 Agent"}. |
| Отдельное замечание для интеграции с EMS. Значение поля "sysName" должно совпадать с именем узла в дереве объектов. Иначе значение поле "hostname" в описании узла будет считаться ошибочным (но на работу это никак не влияет). |
Создать файл по пути: /etc/ecss/snmp/agent/target_addr.conf.
% В данной конфигурации указана транспортная информация, куда необходимо пересылать трапы
% {TargetName, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.
% TargetName - уникальное имя для направления отправки трапов
% Ip, Udp - адрес и порт для отправки трапа
% Timeout - тайм-аут на доставку сообщения
% RetryCount - количество повторных посылок сообщения
% TagList - имя тега, указанного в notify.conf
% EngineId - имя target-а, который будет указан в target_params.conf
{"Eltex EMS v2", [172,16,0,22], 162, 1500, 3, "std_trap", "target_v2", "", [], 2048}. |
Создать файл по пути: /etc/ecss/snmp/agent/target_params.conf.
% Each row is a 5-tuple:
% {Name, MPModel, SecurityModel, SecurityName, SecurityLevel}.
% Name - имя target-а, который используется в target_addr.conf
% MPModel - v1, v2c или v3
% SecurityModel - v1, v2c, или usm
% SecurityName - имя группы доступа в View-based Access Control Model (VACM)
% SecurityLevel - noAuthNoPriv, authNoPriv или authPriv.
{"target_v2", v2c, v2c, "initial", noAuthNoPriv}. |
Создать файл по пути: /etc/ecss/snmp/agent/vacm.conf.
% В данной конфигурации описаны параметры, необходимые для авторизации SNMP-запросов
{vacmSecurityToGroup, v2c, "initial", "initial"}.
{vacmSecurityToGroup, v2c, "all-rights", "all-rights"}.
{vacmAccess, "initial", "", any, noAuthNoPriv, exact, "restricted", "", "restricted"}.
{vacmAccess, "initial", "", usm, authNoPriv, exact, "internet", "internet", "internet"}.
{vacmAccess, "initial", "", usm, authPriv, exact, "internet", "internet", "internet"}.
{vacmAccess, "all-rights", "", any, noAuthNoPriv, exact, "internet", "internet", "internet"}.
{vacmViewTreeFamily, "restricted", [1,3,6,1], included, null}.
{vacmViewTreeFamily, "internet", [1,3,6,1], included, null}. |
| Для работы SNMP-менеджера требуется запуск SNMP-агента. |
Создать файл по пути: /etc/ecss/snmp/manager/manager.conf.
% IP-адрес, на котором будет открыт порт для слушания/отправки SNMP-трапов.
{address, [0,0,0,0]}.
% Порт, с которого SNMP-менеджер будет отправлять SNMP-трапы.
% ВНИМАНИЕ! Если номер порта < 1024, необходимо выполнить пункт 2.
{port, 162}.
% Уникальный текстовый идентификатор SNMP-менеджера. Не изменять.
{engine_id, "ECSS-10-SNMP-Manager"}.
% Максимальная длина SNMP-сообщения (в октетах), которые SNMP-агент может получать/отправлять.
{max_message_size, 484}. |
Создать файл по пути: /etc/ecss/snmp/manager/agents.conf.
В данном файлы указаны разрешения для агентов, которых использует менеджер.
% Первый параметр указывает ID-агента, для которого задаются настройки. Его в дальнейшем будут использовать в файле users.conf.
% Четвертый параметр - IP-адрес, с которого будут отправляться/приниматься трапы.
% Пятый параметр - порт, с которого будут отправляться/приниматься трапы.
% ВНИМАНИЕ! Если номер порта < 1024, необходимо выполнить пункт 2.
{"ecss_mediator", "md", "public", [192,168,23,34], 161, "", 1500, 484, v2, any, "initial", noAuthNoPriv}. |
Создать файл по пути: /etc/ecss/snmp/manager/users.conf.
% Первый параметр указывает ID-агента (из файла agents.conf), с которого будут приходить трапы.
% Второй параметр - имя модуля, который данные трапы будет обрабатывать. Не изменять.
% Третий параметр - аргументы инициализации модуля snmp_alarm_user. Не изменять.
{"ecss_mediator", snmp_alarm_user, undefined}. |