Эта история из другой компании, которая занимается стримингом больших данных (около полумиллиона вставок в секунду в Elasticsearch).
Проблема. Для мониторинга Elasticsearch-серверов использовали сервис Telegraf от influxData, но он выводил далеко не всю информацию, которая нас интересовала. Можно было узнать, зелёный инстанс, жёлтый или красный. А вот что происходит на уровне шардов (наименьший блок данных в Elasticsearch), понять было невозможно. Telegraf такой информации не давал.
Зачем опускаться на уровень шардов? Чтобы выяснить, что не так с индексом. Индекс — это сущность, которая не привязана к серверу. К серверу привязываются шарды. Предположим, кто-то начал интенсивно писать на диск, чтение или запись индекса на этом диске замедлилась. Что делать? Мигрировать. Но кого и куда? Из мониторинга этого не понять, надо идти в Kibana или консоль, опрашивать API Elasticsearch, находить шарды проблемного индекса и тогда уже что-то с ним делать. Не самый удобный путь.
Решение и результат. Я написал на Python экспортёры для Prometheus, которые собирали все необходимые данные. На основе этих данных мы уже настроили группу дашбордов и алёрты (алёрты были привязаны к размеру шард).
В результате получилась таблица, на основе которой можно было тюнить пайплайны. Мы могли видеть, что где-то вставляется три терабайта данных в час, и принимать решение: либо разбивать дневной индекс на часовые, либо увеличивать количество шардов внутри индекса так, чтобы они укладывались между 30 и 50 мегабайтами на шард.
Глобально это позволило нам эффективнее мониторить приложения и свести к минимуму простой платформы.
Где ещё пригодится умение программировать
Возможно, мои кейсы покажутся вам редкими, но это потому, что сейчас я работаю над большими проектами, где системное администрирование сливается с системной разработкой. В небольших компаниях тоже есть задачи, решение которых можно автоматизировать:
- бэкапы,
- мониторинг,
- анализ входящих логов,
- безопасность,
- CI/CD.
Возьмём безопасность. Например, кто-то организовал DDoS-атаку на ваш интернет-магазин. С помощью Python можно проанализировать логи балансера и понять, кого стоит заблокировать и на каком уровне.
В настройке CI/CD тоже может пригодиться Python: можно делать нотификации, алёрты в Slack, изменения DNS-записей. Любую динамическую инфраструктуру (если чего-то нет в продукте, который ты используешь), можно написать на Python достаточно легко и быстро.
Ещё одно применение — тесты конфигурации. Есть мнение, что 20% времени системный администратор тратит на настройку, а 80% — на дебаг. Так вот эти 80% можно сильно сократить, если избежать misconfiguration. А сделать это как раз и позволяют тесты конфигурации, написанные на Python.
При этом я не говорю, что вообще все задачи надо автоматизировать. Надо считать часы и деньги: сколько тратишь денег в год, сколько денег уйдёт на разработку автоматизации. Что будет эффективнее, то и выбираешь.