Кастомные метрики прометея

December 19, 2016

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

echo my_batch_job_completion_time $(date +%s) > /path/to/directory/my_batch_job.prom.$$
mv /path/to/directory/my_batch_job.prom.$$ /path/to/directory/my_batch_job.prom

"WTF?" - подумал я и протер глаза. "Как они из собирают? Неужели они трекают изменения файлов? Как они это делают кроссплатформенно?" - глаза я протирал несколько дней. Пока вдруг не понял! Там же настраивается опрос метрик из центра, поэтому файлик будет спокойненько себе лежать, пока ноду не опросят в очередной раз! Трюк с $$ нужен просто для атомарности файла.

Конечно, таким образом не получится измерять очень часто меняющийся параметр, но это и не надо для системы мониторинга. Восторг, три котика :heart_eyes_cat: :heart_eyes_cat: :heart_eyes_cat:!

Высадка на луну

December 16, 2016

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

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

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

Степени свободы

December 15, 2016

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

В принципе действительно закон, чем проще система, чем короче цепочка, тем надежнее система вроде как само очевиден. Так, да не совсем. Например цепочка "админ - сервер" теперь удлиняется до "админ - терраформ - ансибл - сервер", вводится два лишних звена, достаточно сложных, в каждом из них добавляются свои ошибки. Но система становится надежнее. Парадокс.

Восходящая звезда прометея

December 14, 2016

Мы медленно дрейфуем с заббикса на прометей, в одном продакшене запущены оба, сравниваем. Что я могу сказать - вещь! Думаю скоро станет еще одним моим любимым инструментов. Очень нравится софт с яркими и простыми концепциями.

Технически, как обычно, один го бинарь, легко ставится, сразу заводится. Нет понятия хостов, вместо этого - точки мониторинга, которые опрашиваются с центра раз в N секунд. Под это дело даже подведена теория Push vs Pull for Monitoring, я сначала не обратил внимания, но потом понял, что концепция опроса с центра действительно удобная. Каждая точка мониторинга - обычный http-ендпойнт на который можно зайти браузером и посмотреть какие метрики собираются и какие их последние значения.

Пока присматриваемся, написали пару руби-скриптов для оптимизации, но первые ощущения очень хорошие. В начале года, рассчитываю, переведем все продакшены на него. Буду делится впечатлениями.

Что такое программирование

December 13, 2016

Сейчас очень популярна тема, как научится программировать. Много сервисов по обучению строят свою риторику на том, что в 21-м веке программировать должен уметь и врач, и таксист. Мне не очень нравится такая формулировка. У программирования, считаю, пока нет очевидного определения, что значить уметь или не уметь.

"Научиться водить машину" - это очевидное умение. Сдал на права, есть свой автомобиль, на котором ездишь на работу, ставишь его вечером на газон и называешь всех остальных умельцев козлами, вот оно и есть. А что такое "уметь программировать" в общепризнанном значении? Писать макросы для эксель? Делать сайты на рейлс? Программировать микроконтроллеры? Переставлять винду знакомым?

Программирование - по-моему слишком общий термин для всех сегодняших видов IT-деятельности. Многие интернет-споры возникают на почве этой общности. "Написал новый гем на руби? А что ты знаешь про обработку исключений уровня ядра? - мочи его", "Мигаешь лампочкой на ардуино? А если бы ты также писал код в команде ста человек? Где твое ООП? - мочи его!", "Рыжий и в очках? Программист? - мочи его!"

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

Маленькая пакость от терраформа

December 12, 2016

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

Интерполирование строк в tf-файлах происходит через конструкцию some-${var.VARNAME}, но если забыть ключевое слово var, то терраформ молча заменит строку на пустую!

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

resource "dnsimple_record" "internal-page" {
  domain = "microsoft.com"
  name   = "google-hate-page-${REGION}"
  value  = "1.1.1.1"
  type   = "A"
}

то terraform apply молча добавит A-запись с IP 1.1.1.1! Крайне неприятно.

Терраформ, я :eyes: за тобой.

33.3%

December 9, 2016

Завтра будет 4 месяца моего блого-челенджа - год по истории каждый рабочий день. Ну что же, готово 88 постов, ритм держу, но заколебался, конечно, сильно.

Кстати блог еще один пример тщетности планов и ожиданий. Я ждал, что будут интересные истории перемежаться с техническими фактами и вырастать в статьи и книги (а в комментариях проходить интеллегентные беседы в духе настоящих вечеринок с коктейлями). Фиг там, технические штуки быстро кончились или про них не рассказать в паре абзацев, картинки рисовать и тем более сканить - лень, вместо буфера в 10-20 постов и 3-5 вычиток, с которых я начинал, у меня который вечер проходит под знаком "#$&%%%, надо же запилить очередной пост".

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

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

Загрузить бокс

December 8, 2016

Последние полгода, а может и больше, занимаюсь в основном девопсом. Когда что-то не допрограммируют, то это обычно терпимо, а когда что-то падает - это всегда громко, поэтому хочу отладить все чтобы хорошо работало. Но в низкоуровневых вещах ничего не понимаю (хотя могу отправить скриншот atop в саппорт Селектела по запросу), подхожу чисто со стороны дев, так как знаю как выглядит счастье разработчика.

Поэтому не смейтесь, хочу сохранить в блоге три команды как можно загрузить CPU, память и диск для проверки системы мониторинга, иначе могу потом забыть:

  • cat /dev/urandom > /dev/null - хорошо грузит проц;
  • dd if=/dev/zero of=bigfile bs=100M count=5 - создает файл на полгигабайта;
  • ruby -e '"0"*300_000_000;sleep' - занять 300 мегабайт памяти до ^C.

Некоторые вещи люблю искать в блоге, когда-то давно, еще в прошлой версии блога, у меня был пост с настройками яркости и звука двух моделей ноутов VAIO под убунтой после очередного обновления ядра. Линукс на ноуте у меня до сих пор ассоциируется с проблемами со звуком или c яркостью, не знаю какая сейчас ситуация, давно не сталкивался.

Повседневное

December 7, 2016

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

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

Рейлс сайтик, который обращается к базе, выполняет OLTP-запросы, а вот если вас попросили выгрузить активность за месяц - это уже OLAP. cap production deploy - билет в мир Continuous Delivery, CircleCI, подключенный одним кликом к гитхабу, - это Continuous Integration.

Будни каждого IT-специалиста проходят в пафосе терминов и технологий :star2: :cat: :yum:.

Ансибл не гони, ансибл погоди

December 6, 2016

Так получилось, что у нас большинство проектов настроены с помощью ансибла 2.0 и у всех он был установлен и все работало. Однако где-то понадобились фичи из 2.1, поставили 2.2 и старые рецепты естественно работать перестали. В принципе они легко фиксятся, но есть два способа, как можно обойтись без исправления: один рабочий, а второй на докере :trollface:.

С удивлением узнал (коллеги подсказали), что brew умеет переключать версии:

brew switch ansible 2.0.1.0
brew switch ansible 2.2.0.0_1 

Белиссимо! Этим способом я пока и пользуюсь.

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

docker run -v`pwd`:/ansible -v$HOME/.ssh:/root/.ssh \
  hypoport/ansible:2.0.2.0 ansible-playbook node.yml

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

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

PS. Писал этот пост и подумал, а может вагрант?! Ммм?