Чем больше метрик вы пишите, тем лучше. Метрики помогают найти в программе места, нуждающиеся в оптимизации . По метрикам вы можете понять, что именно послужило причиной сбоя в ночь с субботы на воскресенье. Если в очередном билде имеется баг, который не удалось найти в тестовом окружении, вы сразу же узнаете об этом во время выкатки. Одним из наиболее распространенных решений для сбора метрик является Graphite .
Глоссарий:
- Graphite — название приложения в общем и его веб-морды в частности;
- Carbon — демон/бэкенд, в который пишутся метрики;
- Whisper и Ceres — движки баз данных, используемые Carbon;
Если когда-то вы уже пробовали устанавливать Graphite, то этот процесс у вас наверняка ассоциируется либо с ручной установкой каких-то Python’овских модулей через pip , либо клонированием с GitHub’а bash-скриптов, использующих никому неизвестные утилиты. В таком случае, у меня для вас отличные новости. Теперь мы наконец-то можем устанавливать Graphite из deb-пакетов ! Да-да, почти без танцев с бубнами. При этом инструкции по ручной донастройке, что идут в комплекте, почти не содержат ошибок. В общем, теперь все намного проще, чем было раньше.
Все описанное ниже проверялось под Ubuntu 13.10, но не исключено, что также будет справедливо в отношении прочих версий Ubuntu и, чем черт не шутит, других дистрибутивов Linux.
Ставим пакет graphite-web:
Кое-какие инструкции вы найдете в /usr/share/doc/graphite-web/README.Debian, но, как я уже отмечал, там есть ошибки.
Говорим:
На вопрос о создании суперюзера отвечаем «yes», вводим какие-нибудь логин и пароль. Они нужны для управления Graphite. В файле:
… находим «SECRET_KEY», раскомментируем, меняем значение на что-нибудь случайное. Также стоит изменить DEFAULT_CACHE_DURATION. Этот параметр задает время кэширования графиков и по умолчанию равен одной минуте.
Затем:
Сам по себе graphite-web работать не умеет, ему нужен веб-сервер. Тянем Apache c mod_wsgi:
Затем говорим:
/ 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:
В файле /etc/default/graphite-carbon пишем:
Говорим:
Теперь попишем каких-нибудь метрик:
Как видите, для записи метрик используется очень простой протокол. В нем даже никаких ответов от сервера не предусмотрено, что, на самом деле, мне лично кажется довольно странным и неправильным.
Возвращаемся в веб-морду, находим в дереве слева local.load_average. На графике выбираем диапазон времени поменьше, например, последнее 10 минут. Жмем «Auto-Refresh» и наблюдаем. У меня картинка получилась примерно такой:
Попрактикуемся еще немного в работе с Graphite. Откройте раздел «Dashboard» и настройте себе парочку дашбордов. Убедитесь, что дашборды сохраняются и загружаются. Перейдите по ссылке «Login» и войдите под созданным до этого суперпользователем. Введите в адресной строке localhost/admin/ (туда нет прямой ссылки в интерфейсе Graphite). Создайте нового пользователя, выйдите и войдите под ним. Настройте пару графиков и сохраните их. Перелогиньтесь и проверьте, что сохраненные графики доступны в «User Graphs».
Если вы проделываете все это на своем ноутбуке, не забудьте сказать:
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