Чем больше метрик вы пишите, тем лучше. Метрики помогают найти в программе места, нуждающиеся в оптимизации . По метрикам вы можете понять, что именно послужило причиной сбоя в ночь с субботы на воскресенье. Если в очередном билде имеется баг, который не удалось найти в тестовом окружении, вы сразу же узнаете об этом во время выкатки. Одним из наиболее распространенных решений для сбора метрик является Graphite .

Глоссарий:

  • Graphite — название приложения в общем и его веб-морды в частности;
  • Carbon — демон/бэкенд, в который пишутся метрики;
  • Whisper и Ceres — движки баз данных, используемые Carbon;

Если когда-то вы уже пробовали устанавливать Graphite, то этот процесс у вас наверняка ассоциируется либо с ручной установкой каких-то Python’овских модулей через pip , либо клонированием с GitHub’а bash-скриптов, использующих никому неизвестные утилиты. В таком случае, у меня для вас отличные новости. Теперь мы наконец-то можем устанавливать Graphite из deb-пакетов ! Да-да, почти без танцев с бубнами. При этом инструкции по ручной донастройке, что идут в комплекте, почти не содержат ошибок. В общем, теперь все намного проще, чем было раньше.

Все описанное ниже проверялось под Ubuntu 13.10, но не исключено, что также будет справедливо в отношении прочих версий Ubuntu и, чем черт не шутит, других дистрибутивов Linux.

Ставим пакет graphite-web:

sudo apt-get install graphite-web

Кое-какие инструкции вы найдете в /usr/share/doc/graphite-web/README.Debian, но, как я уже отмечал, там есть ошибки.

Говорим:

sudo graphite-manage syncdb

На вопрос о создании суперюзера отвечаем «yes», вводим какие-нибудь логин и пароль. Они нужны для управления Graphite. В файле:

/etc/graphite/local_settings.py

… находим «SECRET_KEY», раскомментируем, меняем значение на что-нибудь случайное. Также стоит изменить DEFAULT_CACHE_DURATION. Этот параметр задает время кэширования графиков и по умолчанию равен одной минуте.

Затем:

sudo chown -R _graphite:_graphite / var / lib / graphite

Сам по себе graphite-web работать не умеет, ему нужен веб-сервер. Тянем Apache c mod_wsgi:

sudo apt-get install apache2 libapache2-mod-wsgi

Затем говорим:

sudo cp
/ usr / share / graphite-web / apache2-graphite.conf
/ etc / apache2 / sites-available / graphite-web.conf
sudo a2dissite 000-default
sudo a2ensite graphite-web
sudo service apache2 reload

Ломимся на localhost, порт 80. Логи смотрим в /var/log/apache2/graphite-web_*.log. Если все было сделано правильно, вы увидите веб-интерфейс Graphite, правда, пока что без каких-либо интересных данных.

Далее устанавливаем Carbon:

sudo apt-get install graphite-carbon

В файле /etc/default/graphite-carbon пишем:

CARBON_CACHE_ENABLED=true

Говорим:

sudo service carbon-cache start

Теперь попишем каких-нибудь метрик:

perl -e ‘$| = 1; while() { $d = `uptime`; ($la) = $d =~ /load average: (.*?),/; $c = qq{echo local.load_average $la }.time().qq{ | nc localhost 2003}; system($c); print «$cn»; sleep 1;}’

Как видите, для записи метрик используется очень простой протокол. В нем даже никаких ответов от сервера не предусмотрено, что, на самом деле, мне лично кажется довольно странным и неправильным.

Возвращаемся в веб-морду, находим в дереве слева local.load_average. На графике выбираем диапазон времени поменьше, например, последнее 10 минут. Жмем «Auto-Refresh» и наблюдаем. У меня картинка получилась примерно такой:

Запись метрик в Graphite

Попрактикуемся еще немного в работе с Graphite. Откройте раздел «Dashboard» и настройте себе парочку дашбордов. Убедитесь, что дашборды сохраняются и загружаются. Перейдите по ссылке «Login» и войдите под созданным до этого суперпользователем. Введите в адресной строке localhost/admin/ (туда нет прямой ссылки в интерфейсе Graphite). Создайте нового пользователя, выйдите и войдите под ним. Настройте пару графиков и сохраните их. Перелогиньтесь и проверьте, что сохраненные графики доступны в «User Graphs».

Если вы проделываете все это на своем ноутбуке, не забудьте сказать:

sudo update-rc.d carbon-cache disable
sudo update-rc.d apache2 disable

После этого Apache и Carbon не будут автоматически запускаться при загрузке системы. Зачем напрасно процессор греть? Также проверьте, что у вас правильно настроен фаервол . Carbon слушает порты 2003 (текстовый протокол), 2004 (нечто, что называется протоколом pickle) и 7002 (порт для чтения метрик). По умолчанию используется только протокол TCP, но UDP также можно включить. А вообще, на всякий случай лучше сверьтесь с netstat -tuwpan .

Graphite используют в продакшене такие компании как Google, Яндекс, Mail.ru, Canonical и Vimeo. Вроде как он очень круто масштабируется. Но сам я Graphite в боевом окружении никогда не настраивал, так что лучше обращайтесь по этому вопросу к официальной документации . Документация очень годная и всего лишь страниц на 100 (можно скачать pdf или epub), советую прочитать. Вроде Graphite умеет забирать метрики по AMQP, но с AMQP мне тоже работать не доводилось. А еще про Graphite был весьма интересный доклад на YaC 2013, запись которого можно посмотреть здесь .

А куда вы пишите метрики?

Дополнение: Собираем метрики при помощи Graphite, StatsD и CollectD

EnglishRussianUkrainian