Category Archives: Itшное

Grafana — бесподобный дашборд графиков

Немного предыстории.

Я вообще говоря фанатик графиков, люблю что бы графиков было как можно больше, что бы различные оповещения сопровождались иллюстрацией на графике, в офисе у нас висит телек на который выведены графики с показателями основных параметров платформы.

Изначально я использовал какти с некоторыми дополнениями, об этом писал отдельный пост. Кто не работал с какти, раскажу что с ним не так — новый график нужно добавлять вручную, при чем это происходит в несколько этапов и занимает минут по 5-10 если уже знаешь что нужно сделать. Плюс к этому неудобство менеджмента когда графиков и данных очень много.

Затем была попытка применить заббикс для этих нужд. Из плюсов — там можно настроить discovery сервисов, когда заббикс самостоятельно создает новые графики по заданным критериям. Например из сервера выдается список пользователей, а заббикс по этому списку и заранее заданному шаблону запроса данных для каждого отдельного пользователя строит на каждого из них график.

Недостаток главный заключался в том, что графики у заббикса, простите, полнейшее говно.

grafana1

Без понимания что за данные изображены на графике возможно не будет настолько очевидно как это ужасно, но поверьте мне, графики заббикса не годятся ни для чего кроме мониторинга чисто серверных параметров типа трафика, памяти, nginx, php.

Удобство автоматического создания графиков теряло свою привлекательность абсолютным неудобством их отображения. Можно было либо выбирать по одному графику за раз из длиннющего выпадающего списка либо сделать комплексный экран и вывалить туда все графики по шаблону. В итоге выходили экраны на сотню и более графиков.

grafana2 

И снова обратите внимание на сколько уродски они выглядят. Оценить реально какую то динамику изменений невозможно. Вроде как и графики есть, а толку ноль.

Как появилось время, разочаровавшись заббиксом я решил попробовать новое решение и наткнулся на graphite, простая высокопроизводительная система ключ-значение на базе данных whisper. Суть в том, что в отличии от какти и заббикса здесь данные нужно пушить в базу, а не наоборот тянуть в базу с сервисов. Отсюда сразу же плюс в том, что данные автомаически собираются по всем нужным параметрам, этим управляет приложение, а не графит. Не нужно делать дополнительно дискавери сервисов как для заббикса, отдельно интефейсов для пула статы с сервиса.

Стата пулиться простым интерфейсом: ключ[пробел]значение[пробел][[время]]

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

grafana3

Из всех сущестующих метрик можно формировать графики, создавать дашборды с предустановленными графиками, но это особо не интересно, т.к. этот интерфейс тоже совсем не интересен.

Настало время представить вам графану — лучший веб интерфейс для graphite и elasticsearch. Сам графит не хранит и не собирает данных, этим занимаются указанные выше системы, в моем случае графит. И выполняет он свою функцию наишучшим образом. В графите мне нравится все и отобразить там можно графики в любом виде, пользуясь кучей возможностей группировок, сумирования, создания переменных и прочее прочее.

grafana4Разве это не красота? Так выглядит один обзорный дашбоард.

Возможности по выводу графиков покрывают пока все мои нужды. Вся настройка проходит через удобный веб интерфейс в одном месте, все просто и понятно.

Есть так же и удобная возможность вывода десятков графиков (например какие то показатели по всем пользователям системы), только в отличии от забикса здесь можно добавить переменную с возможностью задания ей нескольких значений, и отображаться будут только графики по выбранным пользователям.

В общем подытожив, всячески рекомендую графану — лучший интерфейс графиков которые я встречал.

Впереди еще буду пробовать применять elasticsearch DB под свои нужды, с ним можно строить статистику в реальном времени.

Всегда настраивайте синхронизацию времени на серверах

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

Это уже стоило мне один раз большому количеству потеряного времени на поиск причины проблемы. И после того я на рабочем компьютере настроил синхронизацию. 

Но вот недавно мне понадобилось подключить авторизацию через твиттер на одном личном сайте и разработка ведется тоже на личном ноуте, но через виртуалку.

Часов 6 я потратил на попытки определить причину проблемы. Различные настройки приложения в твиттере, настройки библиотеки hybrid_auth (библиотека для php которая позволяет легко подключать авторизацию через множество сервисов). И все тщетно.

Твиттер возвращал ошибку: 

Authentification failed! Twitter returned an error. 401 Unauthorized.

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

Установка модуля для Nginx на линуксе (debian)

Поднимаю тут проект один и не оказалось серверов на freebsd, поэтому был выбран debian, потому как он вроде лучший по производительности среди линуксов.

Сходу столкнулся с проблемой: на nginx нужно добавить модуль который по умолчанию не включен (image_filter). На фряхе для этого достаточно было бы сделать make config и отметить нужный модуль, но не на линуксе. Дебиану нужно для этого скачать исходники, вручную их поправить, собрать и установить. А потом еще смотреть что бы не обновить nginx со старым набором модулей.

# получаем исходники
apt-get source nginx
# переходим в папку (у вас может отличаться т.к. включает версию)
cd nginx-1.4.4
# открываем для редактирование файл с конфигом билда
nano debian/rules
# ищем строку ./configure и где то среди прочих параметров добавляем эту строку:
--with-http_image_filter_module \
# сохраняем и выходим с файла

# компилируем модуль
dpkg-buildpackage -us -uc -nc
# устанавливаем
dpkg -i nginx_0.7.65-1ubuntu2_amd64.deb

На этапе выполнения команды

dpkg-buildpackage -us -uc -nc

возникла ошибка:

dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 7.0.50~) libssl-dev (>= 0.9.7) libpcre3-dev zlib1g-dev

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

apt-get install libssl-dev debhelper  libpcre3-dev zlib1g-dev

Пробуем заново

dpkg-buildpackage -us -uc -nc

Снова получаю ошибку

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.

make[1]: *** [override_dh_auto_build] Error 1
make[1]: Leaving directory `/root/nginx-1.4.4'

Окей, ставим GD. Здесь еще надо отметить что нужна не libgd2-noxpm, а версия libgd2-noxpm-dev.

Ставим:

 apt-get install libgd2-noxpm-dev

Опять возвращаемся к

dpkg-buildpackage -us -uc -nc

На этот раз очередная ошибка

make[2]: Entering directory `/root/nginx-1.4.4'
make[2]: *** No rule to make target `build', needed by `default'. Stop.
make[2]: Leaving directory `/root/nginx-1.4.4'
dh_auto_build: make -j1 returned exit code 2
make[1]: *** [override_dh_auto_build] Error 2
make[1]: Leaving directory `/root/nginx-1.4.4'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2

После этого я удалил папку с исходниками и повторил поцедуру заново (зависимости то уже стоят) и в итоге получил такое

dpkg-deb: building package `nginx' in `../nginx_1.4.4-1~wheezy_amd64.deb'.
dpkg-deb: building package `nginx-debug' in `../nginx-debug_1.4.4-1~wheezy_amd64.deb'.
dpkg-genchanges >../nginx_1.4.4-1~wheezy_amd64.changes
dpkg-genchanges: including full source code in upload
dpkg-source --after-build nginx-1.4.4
dpkg-buildpackage: full upload (original source is included)

Из этого сообщения нам нужно скопировать название файла итогового.  И это nginx_1.4.4-1~wheezy_amd64.deb

Перехоим на директорию выше и устанавливаем модуль:

cd ../
dpkg -i nginx_1.4.4-1~wheezy_amd64.deb

Вроде все поставилось: Setting up nginx (1.4.4-1~wheezy) …

На этом квест закончился. Первое знакомство с линуксом совсем не добавляет к нему симпатии. То что я бы сделал простым включением опции в freebsd на дебиане нужно делать долго и с мучениями.

А вот еще по базовой настройке nginx, php-fpm, mysql без особых модулей можно почитать здесь. Написано хорошо и понятно.

Компьютер с Windows 7 не переходит в режим сна

Появилась недавно проблема — при событии перехода в спящий режим (по кнопке, закрытии крышки или через меню пуск, неважно) windows 7 отключает экран, затем судя по активности жесткого диска производит какие то манипуляции. Но вот после этого вместо того, что бы спокойно заснуть, компьютер остается активным. То есть работает вентилятор, какая то активность диска есть. При чем компьютер может быть даже более активным чем в рабочем состоянии, т.к. греется намного сильнее и батарею сжирает активнее чем если бы он просто работал.

Из последних изменений была только настройка сетевого принтера и как оказалось проблема была именно в нем. По какой то причине он не давал заснуть системе. В диспетчере это устройство называется WSD Print Provider или Устройство печати WSD.

Решило проблему отключение устройства через диспетчер приложений.

disable_device

В поисках решения натыкался на обсуждения такой же проблемы на американских форумах(раз, два, три), но все доходили до того же вывода что проблема в драйвере принтера и отключали его.

Решение не очень изящное, подойдет только тем кто не часто пользуется принтером, т.к. постоянно подключать/отключать его драйвер не охота.

Из второго обсуждения еще есть вариант попробовать поставить фикс от майкрософта, который вроде как должен исправить проблему. Еще не пробовал, если рискну то после отпишусь.

Еще интересная особенность — пока искал причину незасыпания, выяснил что если поставить в настройках автоматическое засыпание компьютера через 1-2 минуты и оставить его бездействующим на это время,  то он все же заснет нормально. В чем разница с засыпанием по кнопке не пойму.

Amazon Glacier как бекап на случай апокалипсиса.

Общее описание сервиса

Amazon уже давно у всех на слуху по теме хранения и раздачи данных в облаках. Его сервис amazon s3 стал очень популярным для тех кто нуждается в раздаче большого количества статики. И я планирую настроить там хранение оперативных бекапов с рабочих серверов.

Но пока я этого не сделал и на днях наткнулся на описание другого их сервиса — amazon glacier. Цена за хранение данных в нем выглядит намного привлекательнее чем s3 — всего 1$/100Gb в месяц. Отлично подходит для долгосрочного хранения данных.

Но дьявол кроется в деталях, как правило, поэтому разобравшись как следует с условиями этого сервиса понимаешь что не все так радужно.

Во-первых время скачивания с сервиса составляет не менее 3.5 часов. То есть это даже не скачивание, а подготовка к скачиванию. Процесс выглядит так: вы через апи делаете запрос на скачивание какого то файла, сервис отрабатывает это задание в течении 3.5-5 часов и затем вы можете загрузить себе файл.

amazon glacier processes

Схема работы amazon glacier

Расчет стоимости скачивания данных

И более серьезная особенность — хитрая схема расчетов стоимости скачивания ваших файлов.

На первый взгляд может показаться что схема весьма проста (тарифы здесь): если вы скачиваете до 10Тб в месяц то платите по 0.12$/1Gb.  И далее чем больше скачиваете тем дешевле обходится 1Гб данных.

Но вот здесь нужно быть особенно внимательным. В лучших традициях маркетологов есть дополнительные условия, которые приписаны мелким шрифтом.

Итак, вы можете за сутки скачать бесплатно 1/30 часть от 5% общего объема хранимых данных.

В ФАКе сервиса написали красивый пример: 12 terabytes x 5% / 30 days = 20.5 gigabytes. То есть если вы храните 12Тб данных то вы в сутки можете скачивать бесплатно 20.5Гб. На первый взгляд неплохо, но только если не задумываться о том, что 12Тб это очень много и мало кто хранит там столько информации. Хранение такого объема данных обойдется в 120 000$/месяц.

А если взять более приближенный к жизни пример когда там хранить например бекапы БД, домашний архив фоток и т.п. и для расчет взять скажем 100Гб хранимых данных, то выходит что в день бесплатно можно скачивать всего:

100Гб x 5% / 30 дней = 0.16Гб = 160Мб. То есть совсем совсем мало.

Но идем дальше. Кроме платы за трафик загружаемых данных нужно еще оплачивать дополнительную комиссию если вы за раз запросите много данных.

То есть, если вы захотите загрузить сразу большой архив, то это вам выйдет значительно дороже чем скачать несколько более мелких через день.

Для примера если взять скачивание 10Гб то по трафику это выйдет 1.2$, но с учетом дополнительных комиссий стоимость выйдет около 60$.

Формула расчета запутанная и не имеет понятного описания, поэтому как ни рассчитывай, а все равно итоговая сумма к оплате может оказаться сюрпризом. Вообще принцип формирования этой цены сводится к тому, что амазон берет ваш пиковый объем запрошенных данных, потом от него отнимается объем данных который вам разрешен для скачивания бесплатно (см. выше). И потом полученное значение (получается максимальное Х Гб/час за весь месяц, то есть в любой час на протяжении месяца) умножается на рейт 0.01$ за 1Гб и уможается на количество часов в месяце 720.

Для примера если пиковое значение с вычетом бесплатного объема составило 3Gb, то сумма к оплате будет 3Гб * 0.01$ * 720 = 21,6$.

Важно еще понимать, что объем данных считается не на то, что вы скачиваете, а на то, что вы запросили скачивать. Если вы запросили файл размером 100Гб а потом будете его качать со скоростью 100Мб/час то расчет пикового объема будет происходить из 100Гб/3-5 часов, то есть около 20Гб в лучшем случае, а не 100Мб.

Варианты применения glacier:

И в итоге варианты самого дешевого использования сервиса:

  • Данные которые нужно хранить запаковывать в архивы равные примерно. 0.03% от общего объема хранимых данных (запрос на загрузку и скачивание каждого файла отдельно так же имеет стоимость — 0.05$ за 1000 запросов)
  • Эти архивы загружаются на glacier
  • Когда приходит время скачивания данных нужно начать скачивать архивы по 1 в день.

Таким образом вы не выйдете за границы бесплатного лимита на скачивание. Но конечно же эта процедура восстановления будет долгая.

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

Если у вас все же большие архивы, то API амазона позволяет делать запрос на скачивание только части файла. Указывается начальная позиция и размер в мегабайтах сколько нужно файла получить. То есть вам нужно будет по частям скачивать этот большой архив так само день за днем.

Личные выводы

Для себя я решил что в качестве хранения оперативных бекапов, которые могут потребоваться в любой момент сервис не подходит, для этого буду использовать все же S3.

А glacier хочу попробовать как резервную копию домашнего архива фоток, которые хранятся на домашнем NASе. Ну и настроить резервное копирование прямо с него. Об этом будет позже.

Главное помнить, что glacier это сервис хранения архивов, а не данных, которые могут понадобится в любой момент. Это как место, откуда нужно доставать данные когда уже больше не осталось вариантов, например в случае апокалипсиса :-) Ну и доставать аккуратно, а то пришедший в конце месяца счет может несколько удивить.

Делайте бекапы и будьте счастливы.