Nagios проверка срока SSL сертификатов

Для нагиоса есть набор плагинов http://www.jhweiss.de/software/nagios.html. И в списке плагинов есть чекалка сертификатов check_certexp.pl. Однако если у вас сертификат нужно проверять на ipv6, то данный скрипт не работает. Я исправил текущий плагин для проверки сертификатов хоста по его имени для всех его ip, как ipv4 так и ipv6. Вот как его можно исправить для себя.

Подробнее...

Специальные переменные в Perl

$_ - Используется по умолчанию во многих функциях и операциях, в том числе: в качестве области поиска в операциях сопоставления с образцом m//, замены s/// и транслитерации y///, когда область поиска не задана явно операцией связывания =~; в качестве области ввода, когда условное выражение оператора while состоит из единственной операции ввода <>; в качестве параметра функции chop, split, print; в качестве переменной цикла в операторе foreach, если переменная цикла не задана явно.

$nn - Переменные $1, $2,... содержат подобразы из соответствующих наборов круглых скобок в последней успешной операции сопоставления с образцом.

$& - Часть строки, найденная при последней успешной операции сопоставления с образцом.

$` - Часть строки, стоящая перед совпавшей частью при последней успешной операции сопоставления с образцом.

$' - Часть строки, стоящая после совпавшей части при последней успешной операции сопоставления с образцом.

Подробнее...

Add new datasource to RRD

При построении графиков в Nagios иногда возникает такая ситуация, что в пробник добавилось несколько исходных данных, по которым нужно построить график. Однако т.к. база RRD статична, то график, которые отрисовывает модуль pnp4nagios не появится, а будет зиять ошибка на пол экрана, что нет DS(datasource). Так вот я сейчас покажу как добавить новые данные в базу RRD.

Пишем такой совсем короткий скрипт:

#!/usr/bin/perl

use strict;
use RRD::Simple ();

my $rrd = RRD::Simple->new();
my $rrdfile=$ARGV[0];
my $source=$ARGV[1];
my $type=$ARGV[2];
chomp($type);
$rrd->add_source($rrdfile, $source => $type);

И вызываем

./script.pl file.rrd ds GAUGE

Где ds нужно взять из текста ошибки.

 

Проблема в Net::SSH::Perl с Cisco

Итак, сразу к делу.

Самый простой скрипт для соединения с Cisco выглядит примерно так:

#!/usr/bin/perl
use Net::SSH::Perl;

$user = 'robot';
$pass = 'password123';
$host="r1.local.ru";
$ssh = Net::SSH::Perl->new($host,protocol => '2', cipher=>'3des-cbc', debug =>'1', interactive => '0');
$ssh->login($user,$pass,0)
$ssh->shell;
#или так
#$cmd = "sh run";
#eval $ssh->cmd($cmd);

 Однако если использовать версию протокола SSH v1 (protocol => '1') тогда всё запускается и работает, однако с версией SSH-2 (protocol => '2') выкидывает в ошибку:

Подробнее...

Обобщенная система оповещения пробников Nagios в зависимости от приоритетности ответственных

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

Сервис должен собирать информацию о проблемных машинах, т.е. в случае падения нескольких сервисов или серверов втечение некоторого времени (назовем это время временем реакции на пробники, которое задается через веб интерфейсhttps://contacts.kds.corp.hostcomm.ru/cgi-bin/servers_new.pl (по умолчанию равно 100 секунд)), система должна распознать ответственного группы серверов и сформировать один вызов на мобильный телефон. Если абонент отвечает и нажимает цифру 1, тогда вызов считается принятым и ему приходит емейл со списком проблемных серверов. В случае неответа или отказа приниять вызов, система должна впоследствии пересобрать всю информацию о проблемах и вызвать следующего по списку ответственного и т.д. Совершая вызов необходимо сообщить абоненту краткую информацию о случившемся и дождаться реакции абонента.

Для решения такой задачи выбран подход с использованием внешней базы данных nagios_notify, в которой будет храниться информация по ответственным, информация о группах проектов, о всех серверах, о срабатывании пробников (т.е. алертов), о совершении вызовов.

Всё это добро работает на машине contacts.kds.corp.hostcomm.ru. Скрипты написаны на языке perl, веб интерфейсы на perl+javascript. Кого заинтересовало пишите в личку :)

Подробнее...

Сортировка таблиц при помощи Perl+jQuery. Плагин Tablesorter

Tablesorter - это плагин для JavaScript-библиотеки jQuery, который позволяет сортировать HTML-таблицы, включающие теги thead и tbody, без перезагрузки страницы на стороне клиента. Модуль Tablesorter в основе имеет функциональные возможности JavaScript библиотеки jQuery.

Для начала нам необходимо подключить к страничке библиотеку jQuery (например, https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js) и файл содержащий модуль jquery.tablesorter.min.js, который качаем с сайта разработчика http://tablesorter.com/

Это два обязательных компонента которые необходимы для работы модуля Tablesorter. Также подключим модуль jquery.tablesorter.pager.js для пагинации таблицы и подключим стили.

<link type="text/css" rel="stylesheet" href="/js/themes/blue/style.css">
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript" src="/js/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="/js/tablesorter-pager/jquery.tablesorter.pager.js"></script>

Структура таблицы должна быть такой:
основной контейнер <table> </table>, в нем должен быть контейнер заголовков, оформленный при помощи <thead> </thead>,
а непосредственно в нем располагается строка с нужными данными, записанными в <th> </th>. И тело таблицы соответственно обрамить тегами <tbody> </tbody>.

Подробнее...

Perl-скрипт мониторинга RAID массива LSI

Perl-скрипт мониторинга RAID массива MegaRaid. Скачаиваем утилиту MegaCli54 и юзаем код 

#!/usr/bin/perl
my $CMD="/usr/bin/sudo /usr/local/sbin/MegaCli64 -pdlist -aALL -NoLog";
my @result=`$CMD`;
my $EXIT_CODE=0;
my $MSG;
my $slot_number;
my $count=0;
my $hsp_count=0;
my $online_count=0;
my %disks;
foreach (@result) {
Подробнее...

Работа с POST запросами

Простенький пример как работать с POST запросами в Perl.

#!/usr/bin/perl -w

use strict;
use LWP::UserAgent;
use CGI::Fast;

print "Content-type:text/html\n\n";

my $dir="/var/www/broadlink/codes";
my $url = "http://192.168.1.23:7474";

while (my $q = CGI::Fast->new)
{
main($q);
}

Подробнее...

Оповещение о фактах добавления/удаления хостов в системе Nagios

Имеем в Nagios контактную группу, например kds. Когда пользователь, допустим kds-nagios-agent, входящий в группу kds, авторизовывается, то он будет видеть только те хосты и сервисы, которые разрешены в его группе.

Задача: сделать так, чтобы когда появляется или удаляется хост в системе Nagios пользователю приходило уведомление, что теперь ему доступен (или удален из его группы) новый хост для мониторинга.

У Nagios есть cgi скрипт который выводит в формате csv детализацию по хостам. Значит необходимо только распарсить сей вывод. Итого имеем скрипт:

Подробнее...

Конвертер фото

Попалось однажды под руку куча фоток, которые нужно было смасштабировать (уменьшить на n%).

Так появилась следующая небольшая прога на языке Perl, в которой пользователю выдается графическое меню. Единственный минус - никак не смог побороть кириллическое название директорий, поэтому работает только с латиницей названными директориями.

Подробнее...
unix-way