У меня установлены nagios и nconf, и я начинаю добавлять определения хостов и служб. Однако я заметил большое несоответствие между списком доступных модулей nagios, которые можно использовать для добавления службы, и теми, которые доступны на моем сервере nagios.
Чтобы узнать, какие плагины nagios nconf можно настроить:
SELECT CV.attr_value AS nagios_plugin
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
JOIN ConfigValues CV ON CV.fk_id_attr = CA.id_attr
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'command_name';
который возвращается
+----------------------+
| nagios_plugin |
+----------------------+
| check_local_disk |
| check_local_load |
| check_local_procs |
| check_local_users |
| check_local_swap |
| check_local_mrtgtraf |
| check_ftp |
| check_hpjd |
| check_snmp |
| check_http |
| check_ssh |
| check_dhcp |
| check_ping |
| check_pop |
| check_imap |
| check_smtp |
| check_tcp |
| check_udp |
| check_nt |
+----------------------+
Сравнивая это с тем, что на диске ls -1 /usr/lib/nagios/plugins
, показывает, что около 70 плагинов nagios не отображаются в nconf!
Мой вопрос - прежде чем я придумаю оператор SQL для добавления поддержки команд, которые мне интересно использовать, например check_mysql
, есть ли место, где INSERT
выписки уже есть? Есть ли лучший способ сделать это? Похоже, что nconf дает вам только ограниченный набор плагинов nagios для использования из коробки.
В итоге я попробовал свои собственные отбивные, чтобы добавить поддержку check_mysql
. Поскольку сервер, к которому я хочу подключиться, поддерживает SSL, я создал команду проверки в nconf, специфичную для ssl-соединений, которая называется check_mysql_ssl
. Вот SQL, который я запускал, чтобы добавить. В ближайшем будущем я напишу полный пост в блоге с более подробной информацией. Обратите внимание, причиной большого количества SQL является парадигма EAV, используемая базой данных nconf;)
-- ------------------------------------------------------------
-- Store some variables for future use
-- ------------------------------------------------------------
SELECT @command_name_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'command_name';
SELECT @command_line_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'command_line';
SELECT @command_syntax_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'command_syntax';
SELECT @default_params_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'default_params';
SELECT @command_param_count_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'command_param_count';
SELECT @default_service_name_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'default_service_name';
SELECT @service_template_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'service_template';
SELECT @default_service_dependency_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'default_service_dependency';
SELECT @dependency_execution_failure_criteria_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'dependency_execution_failure_criteria';
SELECT @dependency_notification_failure_criteria_attr_id := CA.id_attr, @config_class_id := CC.id_class
FROM ConfigClasses CC
JOIN ConfigAttrs CA ON CA.fk_id_class = CC.id_class
WHERE
CC.config_class = 'checkcommand' AND
CA.attr_name = 'dependency_notification_failure_criteria';
-- ------------------------------------------------------------
-- Create a new ConfigItem
-- ------------------------------------------------------------
INSERT INTO ConfigItems SET fk_id_class = @config_class_id;
SET @config_item_id := LAST_INSERT_ID();
-- ------------------------------------------------------------
-- Add support for check_mysql
-- ------------------------------------------------------------
-- command name
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('check_mysql_ssl', @command_name_attr_id, @config_item_id);
-- command line
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('$USER1$/check_mysql -H $ARG1$ -u $ARG2$ -p $ARG3$ -l -C $ARG4$ -a $ARG5$ -k $ARG6$', @command_line_attr_id, @config_item_id);
-- command syntax
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('ARG1=host, ARG2=username, ARG3=password, ARG4=ca-cert, ARG5=client-cert, ARG6=client-key', @command_syntax_attr_id, @config_item_id);
-- default params
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('!', @default_params_attr_id, @config_item_id);
-- command param count
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('6', @command_param_count_attr_id, @config_item_id);
-- default service name
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('', @default_service_name_attr_id, @config_item_id);
-- service template
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('', @service_template_attr_id, @config_item_id);
-- default service dependency
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('', @default_service_dependency_attr_id, @config_item_id);
-- depdency execution failure critieria
-- @note Return non-zero - how to specify that ??
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('', @dependency_execution_failure_criteria_attr_id, @config_item_id);
-- depdency notification failure critieria
-- @note Return non-zero - how to specify that ??
INSERT INTO ConfigValues (attr_value, fk_id_attr, fk_id_item)
VALUES ('', @dependency_notification_failure_criteria_attr_id, @config_item_id);