Skip to content


Организация уведомлений о событиях

Представим ситуацию: мы ожидаем, что в каком-то лог-файле одного из серверов скоро должна появиться определенная строка, но когда именно она там появится мы не знаем. Чтобы не тратить время (которое при определенных обстоятельствах может превращаться в деньги :) на высматривание в лог-файле этой самой заветной строчки и продолжать работу за своим компьютером (пусть у него, например, будет IP-адрес 10.10.10.10), можно организовать автоматическое уведомление о наступившем событии. Например, так.

  1. На удаленном сервере (пусть для примера у него будет ip-адрес 10.10.10.254) запускаем такую команду:
    $ tail -f /var/log/somelog | grep -m 1 «event description» && nc 10.10.10.10 2740

    В результате при следующем появлении в файле /var/log/somelog текста «event description» откроется исходящее tcp-соединение на хост мониторинга 10.10.10.10 на порт 2740. Далее следует позаботиться об адекватной обработке этого на хосте 10.10.10.10. Ключ ‘-m 1′ у команды grep означает, что она должна завершиться после 1-го найденного совпадения.

  2. На хосте мониторинга запускаем сервис xinetd (если он еще не запущен, предварительно создав файл /etc/xinetd.d/alarm примерно такого содержания:
    service alarm
    {
      disable = no
      id = alarm
      wait = no
      socket_type = stream
      user = me
      group = me
      server = /usr/local/sbin/show_alarm.sh
      bind = 10.10.10.10
      only_from = 10.10.10.254
    }

    Номер порта не указан по следующей причине:

    $grep -P «^alarm\s» /etc/services
    alarm 2740/tcp # Alarm
    alarm 2740/udp # Alarm

    Если вдруг в вашем файле /etc/services нет таких строк, то в /etc/xinetd.d/alarm нужно еще добавить строку port = 2740. Описание параметров конфигурации демона xinetd можно почитать в файле /etc/xinetd.d/chargen-stream ну и, конечно, в man 5 xinetd.conf.

  3. Создаем скрипт /usr/local/sbin/show_alarm.sh:
    #!/bin/bash
    kalarm «Needed string found at 10.10.10.254″ 2> /dev/null

    и делаем этот файл исполняемым:
    chmod +x /usr/local/sbin/show_alarm.sh.
    Утилита kalarm будет нам показывать на мониторе заданное сообщение, она входит в пакет kdepim, в чем можно убедиться с помощью следующей команды:

    $rpm -qf /usr/bin/kalarm
    kdepim-4.2.4-1.fc10.x86_64

    Также kalarm умеет издавать звуки, запускать внешние приложения (как – описано в man), что открывает широкий простор для фантазии.

  4. На хосте мониторинга 10.10.10.10 в firewall-е разрешаем входящие tcp-соединения с сервера 10.10.10.254 на tcp-порт 2740:
    /sbin/iptables -I INPUT -s 10.10.10.254 -p tcp --dport 2740 -j ACCEPT

    В результате при появлении строки «event description» в файле /var/log/somelog на сервере 10.10.10.254 мы сразу же получим уведомление об этом в виде всплывающего окошка на хосте мониторинга 10.10.10.10.

    Похожие заметки:

    1. NAT в linux
    2. Быстрая массовая правка конфигураций нескольких подинтерфейсов
    3. Строим VPN-сервер на основе pptpd
    4. Программный RAID в Linux

Размещено в категории  *nix. Теги: .

Комментариев: 1

Чтобы быть всегда в курсе здесь происходящего, Вы можете подписаться на RSS feed для комментариев на эту заметку.

  1. Харон said

    kdepim – очень толстый зверь, тянет по зависимостям мускул, если не ошибаюсь.
    Для организации локальных уведомлений я использую libnotify. Пример скрипта:

    #!/bin/sh
    # reports End Of Day, runs from cron

    export DISPLAY=:0.0
    PATH=/usr/bin/:/bin/
    /usr/bin/notify-send -u normal -i evolution «Важное сообщение» «Официальный конец рабочего дня!»

Some HTML is OK

(required)

(required, but never shared)

, или ответить через trackback.