Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Помогите с shell скриптом  (Прочитано 801 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн tuban

  • Автор темы
  • Участник
  • *
  • Сообщений: 106
    • Просмотр профиля
Помогите с shell скриптом
« : 17 Октября 2012, 00:43:56 »
Граждане, нужна помощь. Пилю мониторинг, суть такова:

zabbix пишет все аварии в файл zabbix.log. Он пишет их в виде:

упал // sw01// время

поднялся //sw01//время

упал //sw02//время
Задача в том, чтобы написать скрипт, который будет формировать отчёт по данным из zabbix.log. Выполнять проверку, если количество записей упал свич такой-то = кол-ву записей поднялся свич такой-то, то ничего не пишется в фал (допустим mail.log). Если кол-во записей упал > чем поднялся, в фал mail.log пишется строка упал свич такой-то. Понимаю, что нужно грепать, а вот дальше... Причем, по одному узлу может быть несколько записей упал поднялся, нужно, чтобы в mail.log писалась только одна строка.

Заранее спасибо.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Помогите с shell скриптом
« Ответ #1 : 17 Октября 2012, 01:30:18 »
Код: (bash) [Выделить]
ZABBIX_LOG="zabbix.log"
MAIL_LOG="mail.log"

awk -F'//' '{print $2}' "$ZABBIX_LOG" | sort -u | while read HOST
do
grep "//$HOST//" "$ZABBIX_LOG" | tail -n1 | grep -v "^up//" >>"$MAIL_LOG"
done
« Последнее редактирование: 17 Октября 2012, 02:05:42 от arcfi »

Оффлайн tuban

  • Автор темы
  • Участник
  • *
  • Сообщений: 106
    • Просмотр профиля
Re: Помогите с shell скриптом
« Ответ #2 : 17 Октября 2012, 11:35:36 »
Не могли бы Вы объяснить, как это работает, а то, что-то не работает. Простите за тафталогию.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Помогите с shell скриптом
« Ответ #3 : 17 Октября 2012, 12:02:58 »
Из лога парсим список уникальных хостов.
Делаем выборку по каждому хосту.
Смотрим последний статус.
Если он не up, то сохраняем статус в другой лог.

Код: (bash) [Выделить]
$ head zabbix-notify.sh zabbix.log mail.log
==> zabbix-notify.sh <==
#!/bin/bash

ZABBIX_LOG="zabbix.log"
MAIL_LOG="mail.log"

awk -F'//' '{print $2}' "$ZABBIX_LOG" | sort -u | while read HOST
do
grep "//$HOST//" "$ZABBIX_LOG" | tail -n1 | grep -v "^up//" >>"$MAIL_LOG"
done

==> zabbix.log <==
up//sw01//time1
down//sw04//time2
down//sw02//time3
down//sw01//time4
up//sw01//time5
up//sw02//time6
down//sw03//time7
up//sw03//time8
down//sw01//time9

==> mail.log <==
down//sw01//time9
down//sw04//time2

Оффлайн tuban

  • Автор темы
  • Участник
  • *
  • Сообщений: 106
    • Просмотр профиля
Re: Помогите с shell скриптом
« Ответ #4 : 17 Октября 2012, 15:37:39 »
Спасибо, похоже, то что надо!

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.