LaurVas

Осваиваем мониторинг с Prometheus. Часть 1. Знакомство и установка

   linux

Мониторинг — это сбор метрик и представление этих метрик в удобном виде (таблицы, графики, шкалы, уведомления, отчёты). Концептуально его можно изобразить в таком виде:

Метрики — это абстракция, с которой мы имеем дело, когда говорим о мониторинге. Это какие-то числа, описывающие состояние интересующей нас штуковины. Самый простой и понятный мониторинг следит за ресурсами компьютера: загрузкой процессора, памяти, диска, сети. Аналогично можно следить за чем-то более высокоуровневым, вроде количества посетителей на сайте или среднего времени ответа сервера. Для компьютера это один хрен безликие числа.

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

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

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

Сейчас модно делать мониторинг на основе Prometheus. Так ли он хорош на самом деле? На мой взгляд это лучшее, что сейчас есть из мониторинга. Оговорюсь сразу для тех, кто хочет с этим поспорить: я понимаю, что разным задачам — разные инструменты и где-то больше подходит старый проверенный Nagios. Но в целом лидирует Prometheus.

Prometheus — это не готовое решение в духе “поставил и работает” (привет, Netdata). Это платформа, набор инструментов, позволяющий сделать себе такой мониторинг, какой надо. Фреймворк, если хотите.

Эта статья про знакомство с Prometheus’ом и установку. Потом будет интереснее — про настройку непосредственно мониторинга.

Ускоряем установку пакетов в Debian (libeatmydata)

   linux debian

Установкой пакетов в Debian занимается… нет, не apt. Apt только скачивает пакеты из репозитория, а установкой занимается dpkg. Если вы интересовались разными linux-дистрибутивами, то могли заметить, что dpkg работает медленно, особенно в сравнении с pacman из Archlinux. Тому есть несколько причин, и одна из них — dpkg ну очень осторожно пишет на диск: на каждый чих дёргает системный вызов fsync, который заставляет ОС сбросить на диск данные, ожидающие своей очереди в кэше. И пока ОС не убедится в том что данные записаны, dpkg будет бездействовать. Но не спешите критиковать разработчиков. Так сделано из благих намерений, чтобы данные не потерялись в случае внезапной потери питания. База данных dpkg — дико хрупкая штука, её невозможно восстановить автоматически.

Бывает так, что скорость установки пакетов важнее устойчивости к сбоям. Как ускорить dpkg? Часть дисковых синхронизаций отключается ключом --force-unsafe-io или аналогичной опцией в конфиге dpkg. Можно пойти ещё дальше и позвать на помощь библиотеку libeatmydata, которая напрочь отшибает всю осторожность. Жизнь слишком коротка чтобы делать fsync!

Библиотека libeatmydata делает одну единственную вещь: перехватывает системный вызов fsync и тут же возвращает управление назад. Это приводит к тому, что:

  • программа, которая осторожно пишет на диск (база данных), начинает работать гораздо быстрее.
  • падение такой программы может привести к потере данных.

В этой статье я покажу как использовать libeatmydata и устрою бенчмарк (спойлер: ускорение до 14 раз). Кстати, этот способ подойдёт не только для установки пакетов, но и для любой БД.

Строгий календарь 2019

   дизайн

Скачать в pdf: версия на одном и на двух листах (по 6 месяцев).

Каледнарь предназначен для печати на форматах от А4 до А2, поэтому в самом документе поля отсутствуют. При печати указывайте в параметрах что-то вроде “масштабировать под размер области печати”, чтобы края не пропали.

В распечатанном календаре надо подписать все важные дни (для этого отведено место справа от даты) и повесить его на видном месте.

Под катом — почему он такой.

Оконный менеджер i3

   linux

Иногда в Openbox’е мне не хватало тайлинга: чтобы окна не перекрывали друг друга, а стыковались. Вот так:

 

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

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

  • Окна всегда занимают всю площадь экрана.
  • Окна не перекрывают друг друга.
  • В i3 я спокойно ориентируюсь в 20 открытых окнах. Раньше путался уже на 10.
  • Всё управление окнами осуществляется с клавиатуры.
  • Всё хорошо сразу, на дефолтном конфиге. Не возникает желания переделать дизайн по-своему.

К тайловому оконному менеджеру (сокращённо WM) надо привыкнуть. Это нормально. Linux тоже поначалу был непривычен, верно? Запаситесь терпением, и оно окупится.

Строгий календарь 2018

   дизайн

Ключевые особенности моего календаря:

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

В этот раз взял шрифт Roboto Sans. В отличие от 2017 года, в 2018-ом разное количество недель в первом и втором полугодии. Из-за этого календарь получился не таким геометрически строгим, как прошлый раз.

Скачать в pdf: версия на одном и на двух листах (6+6).

Каледнарь предназначен для печати на форматах от А4 до А2, поэтому в самом документе поля отсутствуют. При печати указывайте в параметрах что-то вроде “масштабировать под размер области печати”, чтобы края не пропали.

В распечатанном календаре надо подписать все важные даты (для этого отведено место справа от даты) и повесить его на видном месте.

Мой лончер на базе Dmenu

   bash

Dmenu — это простая, но очень полезная деталь лего утилита. Она читает список из стандартного ввода (stdin) и отображает его на экране в виде вертикального (ключ -l) или горизонтального списка. Пользователь может выбрать один из пунктов стрелками на клавиатуре или печатая символы. Выбранный пункт направляется в стандартный вывод (stdout).

В стандартной поставке вместе с dmenu идёт скрипт dmenu_run для запуска приложений. Ему на вход ничего подавать не надо, он сам возьмёт все бинари из PATH и поместит их в список dmenu, после чего запустит выбранную программу.

Я придумал более удобный скрипт для запуска приложений.

Как случайно не выключить сервер по ssh

   linux bash

Однажды я набрал sudo poweroff не в той консоли и погасил какой-то сервер вместо домашнего компьютера. После этого я задумался, что неплохо было бы иметь защитный механизм от невнимательности. Возникла идея простой проверки: если poweroff или reboot был запущен по ssh, то предупредить пользователя что он собирается выключить/перезагрузить сервер и потребовать подтверждение.

Получился маленький скрипт:

/usr/local/sbin/poweroff
#!/bin/bash

action=$(basename $0)
if [[ -n "$SSH_CLIENT" || -n "$SSH2_CLIENT" ]]; then
  read -p "You are going to $action $(hostname) over ssh. Are you sure (y/N)? " -r
  if [[ $REPLY =~ ^[Yy]$ ]]; then
    /sbin/$action
  fi
else
  /sbin/$action
fi

Делаем загрузочный образ из контейнера

   debian linux

Пользовался я контейнерами и бед не знал. Но вот понадобилось как-то собрать пакет openjdk-6. А он при сборке ругается на ядро: uname -a ему не нравится. Говорит не буду такое поддерживать. Значит надо собирать на железе или виртуалке. Устанавливать систему с нуля не хотелось — слишком долго. И тогда я подумал, что можно развернуть бэкап контейнера на диск, добавить загрузчик и ядро и получить Debian, способный работать самостоятельно. А чтобы не выполнять одну и ту же работу дважды, я решил работать не на диске, а в образе, и сохранить его на будущее.

Эта инструкция подойдёт для всех релизов Debian и Ubuntu. Я буду переносить Debian Jessie.

Использование утилиты debootstrap

   debian

Debootstrap — это первый шаг в ручной установке Debian и при подготовке линукс-контейнера на основе Debian или Ubuntu. Благодаря ему в пустом каталоге зарождается жизнь.

Чтобы не повторять одно и то же в трёх местах, я вынес этот шаг в отдельный пост.