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

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

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

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

Философия Cacti

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

  • 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 машин), то удобно создать иерархию
  • Есть еще много чего, но нам оно пока не понадобится.
Скрипт для добычи погоды
  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:

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

Data Template

Cоздаем Data Template:

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

Data Source

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

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

Graph Template

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

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

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

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

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

Почти Финал

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

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

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

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

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

📎📎📎📎📎📎📎📎📎📎