headermask image

Мониторинг погоды или Cacti HowTo

Этот пост можно было б начать по разному. Можно по делу: как необходима система мониторинга для поиска ошибок системы и как она помогает обнаружить узкие места. Но, сейчас лето, время отдыха на природе, и начну с того, как я решил узнать, как же часто менятеся прогноз погоды, с помощью популярного средства мониторинга Cacti. Под катом, о любопытный читатель!, тебя ждут рассказы о том как настроить мониторинг произвольных данных в Cacti, да не просто, а с картинками.


Итак, за неделю до 19 июня(пятница, сами понимаете…) я начал смотреть, какая же будет погода? Смотрел у Яндекса — уж больно люблю я этих web-метеороголов. Погода менялась изо дня в день и мне стало интересно — а какова частота этих изменений? Ощущение погоды — вещь субъективная, а частота изменения прогноза на сайте — вполне измеряемая. Для этих целей я и решил использовать давно знакомое средство мониторинга Cacti. Статья предназначена в основном для программистов и системных администраторов, поэтому вопрос как поставить Cacti я не рассматриваю — эти люди либо уже поставили, либо справятся за 5 минут.

Спонсор поста

Каталог объявлений о продаже автомобилей – автомобили с пробегом, новые авто. Удобный интерфейс сайта и большая база автомобилей.

Если вам интересно, как же часто меняется погода в прогнозах, но Cacti не интересен, проматывайте сразу в конец.

Философия Cacti

cacti1.png
В основе Cacti лежит RRDTool — средство для работы с круговыми базами данных(RRD — round-robin database). Такие базы данных рассматривают временную координату состоящей из интервалов и записывают значения хранимого параметра в узлах таких интервалов, интерполируя в случае необходимости измеряемое значение. В одной базе данных может быть несколько RRA(round-robin archive) — этим достигается возможность хранить величину с разными интервалами времени(то есть с разной детальностью). Все эти операции Cacti скрывает от пользователя — все что нам нужно для того что бы наладить мониторинг величины — это предоставить средство для получения этой величины и сказать Cacti что нужно запускать poller(сборщик данных — вытаскивает данные из всех исчтоников и сохраняет их в ту самую RRD).

Для начала, несколько слов о «сущностях», которые есть в Cacti. Они перечислены в левом меню в панели администратора:
Итак:

  • Data Input Method — описывает то, как будут получаться данные. Основные способы — это SNMP(интересная тема, но не будем углубляться) и внешний скрипт — наш случай
  • Data Template — описывает как часто и с какими параметрами будет использоваться Data Input Method
  • Data Source — собственно RRD — хранит данные в файлике, создается на основе Data Template
  • Graph Template — шаблон графика. Можно описать в нем все детали отображения, кроме источника данных, а можно создать шаблонные параметры для цвета, прозрачности и прочего
  • Graph — собственно график. Приготовить можно смешав Data Source, Graph Template и указав все шаблонные параметры из Graph Template
  • Graph Tree — дерево графиков — если у вас графиков много(например мониторим 10 машин), то удобно создать иерархию
  • Есть еще много чего, но нам оно пока не понадобится.

Скрипт для добычи погоды

Чтобы узнать прогноз в данный момент времени, нужно закачать страничку с погодой яндекса и распарсить. Так как заранее мы не знаем, какой день нас интересует, сделам скрипт, который будет на вход принимать дату, на выходе выдавать температуру днем для нее. Обращаться каждые 5 минут к яндексу не стоит — врядли погода будет меняться так часто, поэтому сделаем так, чтобы скрипт кэшировал данные. Не буду особо углубляться здесь, просто приведу код скрипта:

  1. #!/bin/bash
  2. cd /usr/share/cacti
  3. flagdate=$(date “+%Y-%m-%d %H:00″)
  4. flagfile=yandex.flag
  5. touch $flagfile -d$flagdate
  6. if [  ! -e index.html -o index.html -ot $flagfile ]then
  7.         wget http://weather.yandex.ru/27612/ -O index.html > /dev/null 2>&1
  8. fi
  9. day=$1
  10. pos=$(cat index.html | grep “<th class=\”weekday\”>” -A1  |  grep -o “<th class=\”week[^0-9]*[0-9]*[^0-9]*</th>” |  grep -o “[0-9]*” | grep $day -n | grep -o “^[0-9]“)
  11. let pos=pos+1
  12. res=$(cat index.html | grep “<tr class=\”data day\”>” -A1 | grep -o “+[0-9]*” | sed -n $pos“p”)
  13. echo $res | grep -o “[0-9]*”

Data Input Method

Теперь, когда готов скрипт, его нужно куда-нибудь поместить(тут уж на ваше усмотрение). Я, например, положил в /usr/share/cacti/. Но, не забудьте учесть права на чтение и запуск(так же на создание файла) — poller будет запускать этот скрипт под пользоватлем www-data. Далее создаем Data Input Method:
cacti2.png

С помощью конструкции <day> делаем шаблонный параметр для метода ввода. Его нужно декларировать в списке Input Fields — чтобы Data Template знал о нем. Так же надо декларировать Output Field с именем res(имя не важно, так как у нас скрипт возвращает одно значение). Делать Data Input Method одно удовольствие, самое интересное впереди)

Data Template

Cоздаем Data Template:

cacti3.png

По умолчанию, нам предлагают ввести все параметры, но некоторые из них можно делегировать Data Source. В нашем случае, мы делегируем название и параметр для скрипта Data Source.

Data Source

Сделать Data Source тоже довольно просто:

cacti4.png

Выбираем только что созданный Data Template, имя хоста можно оставить пустым — в нашем случае все происходит на локальной машине. Пишем уникальное имя для Data Source(уникальность не требуется — это нужно что бы потом было легче вставлять в график) и день, который мониторим, в нашем случае 19е число. Имя файла вычисляется на основе id данного Data Source — но можно выбрать и свое(главное что бы не было коллизий).

Graph Template

Больше всего, пожалуй, настроек у графиков. Создаем новый Graph Template и видим:

cacti5.png

Сначала перечислены элементы графика — линии, легенды, прочие подписи. Далее шаблонные параметры(куда ж без них, это же шаблон). И потом идет куча параметров графика(я их не стал приводить на рисунке, они довольно очевидные — пределы, логарифмический масштаб и прочие ненужные в нашем случае вещи).
Для начала создаем визуальные элементы(на риснуке настройки для графика, подписи можно сделать по аналогии):

cacti6.png

Оставляем имя Data Source и цвет пустыми — вынесем их потом в шаблонные паратмеры. Основные параметры визуального элемента:

  • Graph Item Type — тип элемента. В нашем случае будет AREA(собственно график) или GPRINT(подпись внизу графика — будем писать среднее и максимальное значения)
  • Consolidation Function — для графика должна быть AVERAGE, при создании подписей можно выбрать так же LAST/MAX/MIN
  • GPRINT Type — для подписей можно указать расширенный формат вывода. Свой формат можно создать в меню Graph Managment -> GPRINT Presets. Там обычный формат printf, ничего интересного)

Когда визуальные элементы описаны, можно создать шаблонные параметры в списке Graph Item Inputs:

cacti71.png

В этом окне нужно указать, что мы хотим шаблонизировать(источник данных, цвет, прозрачность либо еще что-то) и на какие элементы это будет распространяться. В нашем случае нужно сдалать шаблонный источник данных для всех элементов.

Почти Финал

Теперь, когда у нас есть источник данных и шаблон графика, создаем собственно график в меню Graph Managment:

cacti81.png

Если все сделано правильно, то график должен появиться сразу. Но есть одно НО — для отрисовки данных на графике должно пройти как минимум два polling`а — то есть, около 10 минут.
В процессе настройки новых источников данных удобно пользоваться отдалочной информацией, которой в Cacti достаточно:

  • В /var/log/cacti/ много логов, в частности ошибки поллера poller-error.log
  • В меню System Utilities -> View Cacti Log File

Финал

Итак, то, ради чего были все пляски с бубном, динамика изменения прогноза погоды на 19 июня by Yandex.Погода:

cacti9.png

И, в качестве бонуса, динамика изменения курса доллара by ЦБ РФ(там есть пустой участок — это не символ кризиса, а я просто сервер вырубил):

cacti10.png

Что захотите замониторить вы — ошибки апача, количество юзеров, либо количество песен в вашем плэйлисте — вопрос фантазии. Удачи всем, кто заинтересуется, в экспериментах с Cacti!

Автор: Шувалов Павел. Взято на хабрахабре. Дополнительно почитать про Cacti и установку:

Установка и настройка Cacti

Добавление дополнительных плагинов для Cacti

Создание собственных плагинов для Cacti

Дополнительные плагины Cacti: время отклика OpenLDAP

Постовой

Интересный сайт о продаже квартир без посредников, очень большая база предложений. Много качественных статей по недвижимости.

One Comment

  1. Скрипт выдает ошибку
    Usage: grep [OPTION]… PATTERN [FILE]…
    Try `grep –help’ for more information.

    1. test on August 14th, 2009 at 8:47 am