Вопрос на посленовогоднее размышление.
Представьте: вы находите в legacy-коде или чужом пайплайне идеально работающую, но чудовищно сложную автоматизацию. Скрипт делает что-то гениальное (например, автоматически чинит рассыпающуюся БД), но состоит из 1000 строк спагетти-кода, который понимаете только вы.
Ваши действия?
1. Оставить как есть. «Работает — не трогай». Риск сломать что-то критическое выше ценности чистого кода.
2. Полный рефакторинг с переписыванием. Вложить время сейчас, чтобы спасти будущих разработчиков (и себя через полгода) от боли.
3. Постепенное улучшение (некая «бритва Оккама для кода»). Не трогать логику, но начать с малого: добавить комментарии, разбить на функции, вынести конфиги. Шаг за шагом.
4. Документировать и изолировать. Написать исчерпывающую документацию, завернуть в контейнер и забыть как страшный сон, но с инструкцией по пробуждению.
Где грань между «гениальной сложностью» и «техническим долгом» в мире автоматизации? Поделитесь вашим опытом или принципами в комментариях.
Лично для меня критерий один: если для понимания скрипта мне нужно больше 15 минут сосредоточенно в него вчитываться — это кандидат на вариант 3. Автоматизация должна экономить время, в том числе и время на её понимание.
Интересно услышать ваше мнение!
🌐 @helcode
Представьте: вы находите в legacy-коде или чужом пайплайне идеально работающую, но чудовищно сложную автоматизацию. Скрипт делает что-то гениальное (например, автоматически чинит рассыпающуюся БД), но состоит из 1000 строк спагетти-кода, который понимаете только вы.
Ваши действия?
1. Оставить как есть. «Работает — не трогай». Риск сломать что-то критическое выше ценности чистого кода.
2. Полный рефакторинг с переписыванием. Вложить время сейчас, чтобы спасти будущих разработчиков (и себя через полгода) от боли.
3. Постепенное улучшение (некая «бритва Оккама для кода»). Не трогать логику, но начать с малого: добавить комментарии, разбить на функции, вынести конфиги. Шаг за шагом.
4. Документировать и изолировать. Написать исчерпывающую документацию, завернуть в контейнер и забыть как страшный сон, но с инструкцией по пробуждению.
Где грань между «гениальной сложностью» и «техническим долгом» в мире автоматизации? Поделитесь вашим опытом или принципами в комментариях.
Лично для меня критерий один: если для понимания скрипта мне нужно больше 15 минут сосредоточенно в него вчитываться — это кандидат на вариант 3. Автоматизация должна экономить время, в том числе и время на её понимание.
Интересно услышать ваше мнение!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1🤔1
journalctl — когда логи не файлы, а поток событий
Ручной поиск по
Логи — это не статические файлы, это структурированный поток событий, к которому нужно уметь правильно «подключиться».
➤ Вариант 1 (Основы фильтрации): просмотр логов конкретного сервиса с «хвостом» в реальном времени.
➤ Вариант 2 (Детальная навигация): просмотр логов за определенный временной интервал с выводом в формате, пригодном для дальнейшего анализа.
➤ Вариант 3 (Связь событий): ключ
➤ Вариант 4 (Персистентность): по умолчанию журнал хранится в
🌐 @helcode
Ручной поиск по
/var/log/* и парсинг *.log файлов для расследования инцидента — это атавизм эпохи SysV. systemd принес не только споры, но и унифицированную систему журналирования, где journalctl — это единый, мощный интерфейс для работы со всеми логами системы.Логи — это не статические файлы, это структурированный поток событий, к которому нужно уметь правильно «подключиться».
➤ Вариант 1 (Основы фильтрации): просмотр логов конкретного сервиса с «хвостом» в реальном времени.
journalctl -u nginx.service -f
➤ Вариант 2 (Детальная навигация): просмотр логов за определенный временной интервал с выводом в формате, пригодном для дальнейшего анализа.
journalctl --since "2024-12-01 09:00:00" --until "2024-12-01 10:00:00" --output json-pretty > investigation.json
➤ Вариант 3 (Связь событий): ключ
-o с форматом short-precise или verbose показывает не только сообщение, но и PID, UID и другие метаданные, позволяя связать разрозненные записи в причинно-следственную цепочку.➤ Вариант 4 (Персистентность): по умолчанию журнал хранится в
/run/log/journal/ и не переживает перезагрузку. Для серьёзных систем необходимо включить постоянное хранение: mkdir -p /var/log/journal && systemctl restart systemd-journald.journalctl — это инструмент для профессиональной работы с журналами. Его освоение означает переход от чтения текстовых файлов к анализу системных событий, где можно фильтровать по юниту, приоритету, временной метке и даже по конкретному полю структурированного сообщения.P.S. Комбинация journalctl -p err -b (показать все ошибки с момента последней загрузки) — это первая команда при диагностике проблемной системы после ребута.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4
Автоматический failover: когда отказ — это не инцидент, а штатная ситуация
Ручное переключение трафика на резервный дата-центр при падении основного — это аврал, стресс и потеря времени. В современной архитектуре отказ одного компонента не должен вызывать прерывания сервиса. Система должна обнаруживать сбой и автоматически перенаправлять нагрузку на здоровые ноды.
High Availability (HA) — это не про дорогое железо, а про архитектурные решения и правильную автоматизацию.
➤ Вариант 1 (Вип + keepalived): классика для пары серверов. Демон
➤ Вариант 2 (Кластерные решения): для более сложных сценариев — Pacemaker/Corosync. Они умеют управлять не только IP, но и целыми группами ресурсов (демоны, файловые системы), выполняя сложные сценарии переезда (stop на старом ноде -> mount FS на новом -> start сервиса).
➤ Вариант 3 (Облачные managed-сервисы): использование облачных Load Balancer (AWS ALB/NLB, GCP Cloud Load Balancing) с бэкенд-группами и healthcheck-проверками. Облачный провайдер автоматически исключает нездоровые инстансы из ротации.
Автоматический failover — это высшая форма доверия к автоматизации. Вы делегируете системе право принимать критически важные решения: что делать, когда часть инфраструктуры перестает отвечать. Это требует тщательного тестирования сценариев («chaos engineering»), потому что цена ошибки в логике failover крайне высока.
Реализация отказоустойчивости всегда является компромиссом между сложностью, стоимостью и временем восстановления (RTO).
🌐 @helcode
Ручное переключение трафика на резервный дата-центр при падении основного — это аврал, стресс и потеря времени. В современной архитектуре отказ одного компонента не должен вызывать прерывания сервиса. Система должна обнаруживать сбой и автоматически перенаправлять нагрузку на здоровые ноды.
High Availability (HA) — это не про дорогое железо, а про архитектурные решения и правильную автоматизацию.
➤ Вариант 1 (Вип + keepalived): классика для пары серверов. Демон
keepalived по протоколу VRRP управляет виртуальным IP-адресом (VIP). При падении healthcheck на мастере, VIP автоматически «переезжает» на бэкап-ноду.➤ Вариант 2 (Кластерные решения): для более сложных сценариев — Pacemaker/Corosync. Они умеют управлять не только IP, но и целыми группами ресурсов (демоны, файловые системы), выполняя сложные сценарии переезда (stop на старом ноде -> mount FS на новом -> start сервиса).
➤ Вариант 3 (Облачные managed-сервисы): использование облачных Load Balancer (AWS ALB/NLB, GCP Cloud Load Balancing) с бэкенд-группами и healthcheck-проверками. Облачный провайдер автоматически исключает нездоровые инстансы из ротации.
Автоматический failover — это высшая форма доверия к автоматизации. Вы делегируете системе право принимать критически важные решения: что делать, когда часть инфраструктуры перестает отвечать. Это требует тщательного тестирования сценариев («chaos engineering»), потому что цена ошибки в логике failover крайне высока.
Реализация отказоустойчивости всегда является компромиссом между сложностью, стоимостью и временем восстановления (RTO).
P.S. Самый опасный сценарий — «split-brain», когда оба узла кластера считают себя активными. Правильная настройка кворума и fencing (отключение проблемного сервера на физическом уровне) — не опция, а обязательное условие.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
mtr — не ping, и не traceroute, а их осмысленный синтез
Сеть «лагает». Стандартный сценарий:
Разовая диагностика часто не выявляет плавающие проблемы. Нужен инструмент для постоянного мониторинга пути пакета.
➤ Вариант 1 (Базовая диагностика): запуск
➤ Вариант 2 (Сбор отчетов): ключ
➤ Вариант 3 (Разрешение AS номеров): ключ
Использование
🌐 @helcode
Сеть «лагает». Стандартный сценарий:
ping показывает потери, traceroute — где они. Но эти инструменты дают лишь моментальный снимок. mtr (Matt's traceroute) объединяет их, непрерывно отправляя пакеты и показывая статистику потерь и задержек на каждом хопе в реальном времени.Разовая диагностика часто не выявляет плавающие проблемы. Нужен инструмент для постоянного мониторинга пути пакета.
➤ Вариант 1 (Базовая диагностика): запуск
mtr до проблемного хоста показывает не просто маршрут, а динамическую картину. Высокий loss или скачки Avg на конкретном хопе четко указывают на проблемный узел.mtr --report-wide 8.8.8.8
➤ Вариант 2 (Сбор отчетов): ключ
--report и --report-cycles позволяет запустить N циклов probes, собрать агрегированную статистику и завершить работу. Идеально для скриптов автоматической диагностики.mtr --report --report-cycles 10 example.com > network_quality_report.txt
➤ Вариант 3 (Разрешение AS номеров): ключ
-z (или --aslookup в некоторых версиях) позволяет увидеть не только IP хопа, но и номер автономной системы (AS), к которой он принадлежит. Это помогает понять, в сети какого провайдера возникает проблема.mtr — это инструмент для доказательства. Когда провайдер утверждает, что «на нашей стороне всё чисто», отчет mtr, показывающий 40% потерь на их маршрутизаторе, становится неоспоримым аргументом.Использование
mtr переводит диагностику сетевых проблем из области предположений («видимо, где-то на магистрали») в область измеримых фактов.P.S. В мире, где всё чаще используется Anycast (один IP на множество дата-центров), mtr может показывать разные пути при разных запусках. Это не баг, а особенность современного интернета.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
Идемпотентные развертывания: деплой — это не действие, а состояние
Ручной деплой через последовательность шагов (остановить сервис, скопировать файлы, запустить) на множестве серверов — это источник дрейфа и ошибок. Современный подход описывает желаемое состояние системы, а инструмент (Ansible, Salt, Chef) приводит её к этому состоянию, независимо от начальных условий.
Процесс, который можно запускать множество раз с гарантированно одинаковым результатом, — основа предсказуемости инфраструктуры.
➤ Вариант 1 (Ansible-плейбук): модули
➤ Вариант 2 (Контейнеры с неизменяемыми образами): самая чистая форма идемпотентности. Деплой — это замена старого контейнера на новый, собранный из заранее подготовленного образа. Система никогда не модифицируется «на лету».
➤ Вариант 3 (Immutable Infrastructure): продолжение идеи контейнеров. Вместо обновления серверов старые инстансы (или виртуальные машины) полностью уничтожаются и создаются новые из общего золотого образа (Golden Image/AMI). Исходное состояние всегда идеально.
Идемпотентность деплоя снимает целый класс проблем: «а запустили ли мы скрипт на этом сервере?», «почему на продакшене версия библиотеки старая?». Система всегда сходится к одному, описанному в коде, состоянию.
Это фундаментальный сдвиг: инженер думает не о том, *как* что-то сделать, а о том, *каким* это должно быть.
🌐 @helcode
Ручной деплой через последовательность шагов (остановить сервис, скопировать файлы, запустить) на множестве серверов — это источник дрейфа и ошибок. Современный подход описывает желаемое состояние системы, а инструмент (Ansible, Salt, Chef) приводит её к этому состоянию, независимо от начальных условий.
Процесс, который можно запускать множество раз с гарантированно одинаковым результатом, — основа предсказуемости инфраструктуры.
➤ Вариант 1 (Ansible-плейбук): модули
package, service, template и copy по своей природе идемпотентны. Они проверяют текущее состояние системы перед внесением изменений.- name: Ensure web app is deployed
hosts: webservers
tasks:
- name: Deploy application JAR
copy:
src: app.jar
dest: /opt/app.jar
force: no # Копировать только если файл изменился
- name: Ensure app service is running
systemd:
name: myapp
state: started
enabled: yes
➤ Вариант 2 (Контейнеры с неизменяемыми образами): самая чистая форма идемпотентности. Деплой — это замена старого контейнера на новый, собранный из заранее подготовленного образа. Система никогда не модифицируется «на лету».
➤ Вариант 3 (Immutable Infrastructure): продолжение идеи контейнеров. Вместо обновления серверов старые инстансы (или виртуальные машины) полностью уничтожаются и создаются новые из общего золотого образа (Golden Image/AMI). Исходное состояние всегда идеально.
Идемпотентность деплоя снимает целый класс проблем: «а запустили ли мы скрипт на этом сервере?», «почему на продакшене версия библиотеки старая?». Система всегда сходится к одному, описанному в коде, состоянию.
Это фундаментальный сдвиг: инженер думает не о том, *как* что-то сделать, а о том, *каким* это должно быть.
P.S. Главный тест на идемпотентность — запустить плейбук дважды. Во второй раз количество задач с статусом changed должно быть равно нулю. Если это так — Вы на верном пути.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🤔1
git reflog — палочка-выручалочка для локального хаоса
Жесткий reset, переписывание истории, случайное удаление ветки — операции, после которых
➤ Вариант 1 (Восстановление после
➤ Вариант 2 (Восстановление удаленной ветки): удалили ветку
➤ Вариант 3 (Понимание происходящего): когда результат
Понимание и использование
🌐 @helcode
Жесткий reset, переписывание истории, случайное удаление ветки — операции, после которых
git log показывает, что нужные коммиты бесследно исчезли. Паника. В этот момент git reflog (reference logs) становится самым важным инструментом. Он показывает полную историю ВСЕХ действий с указателями (ветками, HEAD) в локальном репозитории.git reflog — это журнал аудита для вашего локального Git, запись каждого движения, которое вы совершали.➤ Вариант 1 (Восстановление после
reset): сделали git reset --hard HEAD~3 и поняли, что это была ошибка. reflog покажет, где был HEAD до этого (HEAD@{1}). Восстановление — git reset --hard HEAD@{1}.# Просмотр лога ссылок
git reflog show HEAD
# Восстановление состояния на 2 действия назад
git reset --hard HEAD@{2}
➤ Вариант 2 (Восстановление удаленной ветки): удалили ветку
feature с помощью git branch -D. Она всё ещё существует в reflog как указатель HEAD, который на нее указывал перед удалением. Найдите коммит и создайте ветку заново.git checkout -b feature-restored HEAD@{1}➤ Вариант 3 (Понимание происходящего): когда результат
git log кажется странным, reflog даёт хронологическую ленту событий, объясняющую, как система пришла в текущее состояние.reflog — это страховочная сетка для смелых экспериментов с историей Git. Она дает уверенность: практически любую локальную ошибку можно отменить, потому что Git ничего не удаляет сразу. Объекты коммитов остаются в локальной базе данных какое-то время (до сборки мусора git gc).Понимание и использование
reflog — признак перехода от пользователя Git к его уверенному оператору, который не боится сложных операций.P.S. Важное ограничение: reflog — исключительно локальная история. Она не синхронизируется с удаленными репозиториями. Если вы удалили коммит, уже отправленный на сервер, и затем выполнили git prune, восстановление может стать нетривиальной задачей.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤1
Коллеги, доброго времени суток!
Готовлю обновление своего инструментального стека и хочу спросить у знающего сообщества: какие утилиты или фреймворки вы открыли для себя в последнее время и без которых уже не представляете работы?
Речь не обязательно о чём-то громком вроде нового Kubernetes. Возможно, это:
➤ Маленький CLI-инструмент вроде bat (замена cat), exa (замена ls) или duf (замена df/
➤ Плагин для VS Code или Idea, который спас кучу времени.
➤ Скрипт на Python/Bash, который решает одну, но очень надоедливую проблему.
➤ Даже неочевидная фича в старом добром git или ssh, о которой вы недавно узнали.
Поделитесь вашими находками в комментариях! Давайте соберём коллекцию Must-Have инструментов 2024/2025 от практиков.
От себя добавлю свой недавний фаворит: tldr (клиент для проекта tldr-pages). Когда не хочется читать man на 100500 страниц, он выдаёт конкретные примеры использования команды. Банально, но невероятно экономит время.
Жду ваши рекомендации!
🌐 @helcode
Готовлю обновление своего инструментального стека и хочу спросить у знающего сообщества: какие утилиты или фреймворки вы открыли для себя в последнее время и без которых уже не представляете работы?
Речь не обязательно о чём-то громком вроде нового Kubernetes. Возможно, это:
➤ Маленький CLI-инструмент вроде bat (замена cat), exa (замена ls) или duf (замена df/
du).➤ Плагин для VS Code или Idea, который спас кучу времени.
➤ Скрипт на Python/Bash, который решает одну, но очень надоедливую проблему.
➤ Даже неочевидная фича в старом добром git или ssh, о которой вы недавно узнали.
Поделитесь вашими находками в комментариях! Давайте соберём коллекцию Must-Have инструментов 2024/2025 от практиков.
От себя добавлю свой недавний фаворит: tldr (клиент для проекта tldr-pages). Когда не хочется читать man на 100500 страниц, он выдаёт конкретные примеры использования команды. Банально, но невероятно экономит время.
Жду ваши рекомендации!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🤔2
etckeeper — контроль версий для /etc, который вы не знали, что вам нужен
Ручное отслеживание изменений в
Конфигурация сервера без истории изменений — это система, причина поломки которой может быть навсегда утеряна.
➤ Вариант 1 (Инициализация и базовое использование): после установки
➤ Вариант 2 (Ручные коммиты и тегирование): перед внесением рискованных правок в конфиги можно вручную создать контрольную точку.
➤ Вариант 3 (Восстановление и анализ): поиск того, какое именно изменение пакета сломало настройку, или откат одной конкретной правки с помощью стандартных команд Git (
Этот инструмент не создает новых возможностей, а делает существующую практику (ведение изменений) бесплатной и автоматической, интегрируя ее прямо в рабочий процесс операционной системы.
🌐 @helcode
Ручное отслеживание изменений в
/etc через копирование файлов с датами или ведение дневника — это метод каменного века. etckeeper автоматически привязывает всю директорию /etc к системе контроля версий (Git, Mercurial, Bazaar), фиксируя каждое изменение, сделанное пакетным менеджером или администратором.Конфигурация сервера без истории изменений — это система, причина поломки которой может быть навсегда утеряна.
➤ Вариант 1 (Инициализация и базовое использование): после установки
etckeeper инициализирует репозиторий в /etc и настраивает хуки для apt. Каждая установка или удаление пакета автоматически создает коммит с описанием действий.sudo etckeeper init
sudo etckeeper commit "Initial commit"
# После этого: sudo apt install nginx
# etckeeper автоматически закоммитит изменения в /etc, сделанные пакетом
➤ Вариант 2 (Ручные коммиты и тегирование): перед внесением рискованных правок в конфиги можно вручную создать контрольную точку.
sudo etckeeper commit "Before messing with PAM config"
# ... вносим изменения ...
sudo etckeeper commit "Updated PAM config for SSH"
sudo etckeeper vcs tag config-stable-2024-12
➤ Вариант 3 (Восстановление и анализ): поиск того, какое именно изменение пакета сломало настройку, или откат одной конкретной правки с помощью стандартных команд Git (
git log /etc/nginx/, git diff HEAD~1).etckeeper — это автоматизация «гигиены» системного администрирования. Он превращает самую важную директорию системы из набора статических файлов в управляемый, отслеживаемый и восстанавливаемый ресурс.Этот инструмент не создает новых возможностей, а делает существующую практику (ведение изменений) бесплатной и автоматической, интегрируя ее прямо в рабочий процесс операционной системы.
P.S. etckeeper не заменяет инструменты типа Ansible для управления конфигурацией, но идеально дополняет их, отслеживая «дрейф» и спонтанные изменения, внесенные в обход плейбуков.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
fail2ban — автоматизированный цифровой вышибала
Ручной просмотр логов на предмет подозрительных IP-адресов и их блокировка через
Без
➤ Вариант 1 (Базовая защита SSH): стандартная конфигурация отслеживает неудачные попытки входа в
➤ Вариант 2 (Кастомные фильтры для веб-приложений): создание собственных регулярок для защиты, например, от брутфорса панели администратора WordPress или от сканирования уязвимостей.
➤ Вариант 3 (Интеграция с облачными фаерволами): использование actions не только для
Это не замена для правильно сконфигурированного фаервола и регулярных обновлений, но критически важный слой для защиты от низкоуровневого, автоматизированного «фона» интернет-атак.
🌐 @helcode
Ручной просмотр логов на предмет подозрительных IP-адресов и их блокировка через
iptables — это рутинная работа сторожа. fail2ban — это система, которая сканирует логи сервисов (SSH, Nginx, Apache) на наличие паттернов неудачных попыток (логины, прокси) и автоматически добавляет временные блокировки в фаервол.Без
fail2ban сервер в публичной сети — это мишень для низкоскоростных, но постоянных атак методом перебора.➤ Вариант 1 (Базовая защита SSH): стандартная конфигурация отслеживает неудачные попытки входа в
/var/log/auth.log и блокирует IP на 10 минут после 5 неудачных попыток.# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600
➤ Вариант 2 (Кастомные фильтры для веб-приложений): создание собственных регулярок для защиты, например, от брутфорса панели администратора WordPress или от сканирования уязвимостей.
# /etc/fail2ban/filter.d/myapp-auth.conf
[Definition]
failregex = ^<HOST>.*"POST /wp-login.php.* 200$
ignoreregex =
➤ Вариант 3 (Интеграция с облачными фаерволами): использование actions не только для
iptables, но и для добавления правил в AWS Security Groups или Cloudflare Firewall Rules через API.fail2ban — это пример автоматизации безопасности на уровне реакции. Он реализует принцип минимальных привилегий во времени: IP-адрес, ведущий себя подозрительно, временно лишается возможности взаимодействовать с сервисом, без вмешательства человека.Это не замена для правильно сконфигурированного фаервола и регулярных обновлений, но критически важный слой для защиты от низкоуровневого, автоматизированного «фона» интернет-атак.
P.S. Главная опасность fail2ban — возможность забанить самого себя или легитимных пользователей при слишком агрессивных настройках. Всегда настраивайте ignoreip на свой IP и IP-адреса доверенных сетей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
prometheus + alertmanager + grafana
Ручной опрос серверов по SNMP и анализ графиков «на глазок» для предсказания проблем — это археология. Современный стек наблюдаемости построен на модели сбора метрик
Мониторинг, который требует постоянного взгляда на дашборд, — это провал. Система должна сама сообщать о проблемах.
➤ Вариант 1 (Автообнаружение целей в Kubernetes):
➤ Вариант 2 (Правила алертов с прогнозированием): создание алертов не только на факт проблемы («диск заполнен на 95%»), но и на её приближение, используя функции прогнозирования PromQL.
➤ Вариант 3 (Маршрутизация и «затухание» алертов в Alertmanager): конфигурация, которая отправляет критические алерты в PagerDuty/SMS, предупреждения — в Slack, а повторяющиеся уведомления об уже известной проблеме — «затухает», не спамя ответственным.
Этот стек — это автоматизация всего цикла наблюдаемости: от сбора данных до принятия решения об оповещении. Он смещает фокус с постоянного наблюдения на проектирование системы, которая сама сообщит о своем состоянии только тогда, когда это потребует человеческого внимания.
Внедрение подобного стека — это переход от «администрирования вслепую» к «инженерному управлению сложной системой на основе данных».
🌐 @helcode
Ручной опрос серверов по SNMP и анализ графиков «на глазок» для предсказания проблем — это археология. Современный стек наблюдаемости построен на модели сбора метрик
pull-запросами, их хранения в многомерной базе данных, гибкой визуализации и — что самое важное — на системе умных алертов, которые могут группироваться, затухать и запускать действия.Мониторинг, который требует постоянного взгляда на дашборд, — это провал. Система должна сама сообщать о проблемах.
➤ Вариант 1 (Автообнаружение целей в Kubernetes):
prometheus-operator автоматически настраивает сбор метрик со всех подов, сервисов и нод в кластере, используя метки и аннотации Kubernetes. Нет ручной конфигурации на каждое новое приложение.➤ Вариант 2 (Правила алертов с прогнозированием): создание алертов не только на факт проблемы («диск заполнен на 95%»), но и на её приближение, используя функции прогнозирования PromQL.
# alert.rules.yml
- alert: DiskFillRate4H
expr: predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 4*3600) < 0
for: 5m
labels:
severity: warning
annotations:
summary: "Диск на {{ $labels.instance }} заполнится в течение 4 часов"
➤ Вариант 3 (Маршрутизация и «затухание» алертов в Alertmanager): конфигурация, которая отправляет критические алерты в PagerDuty/SMS, предупреждения — в Slack, а повторяющиеся уведомления об уже известной проблеме — «затухает», не спамя ответственным.
Этот стек — это автоматизация всего цикла наблюдаемости: от сбора данных до принятия решения об оповещении. Он смещает фокус с постоянного наблюдения на проектирование системы, которая сама сообщит о своем состоянии только тогда, когда это потребует человеческого внимания.
Внедрение подобного стека — это переход от «администрирования вслепую» к «инженерному управлению сложной системой на основе данных».
P.S. Золотое правило: каждый алерт должен быть сформулирован так, чтобы у инженера, получившего его, был четкий ответ на вопрос «Что мне сейчас делать?». Алёрты без ясного действия — это просто шум.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
encfs / gocryptfs — прозрачное шифрование для параноиков (и прагматиков)
Ручное шифрование архивов с чувствительными данными паролем перед отправкой в облако или на флешку — это дополнительный шаг, который легко забыть.
Шифрование должно быть настолько легким в использовании, чтобы его отсутствие было более странным выбором, чем его применение.
➤ Вариант 1 (Персональное облачное хранилище): создание зашифрованной директории внутри синхронизируемой папки (Nextcloud, Dropbox). В облако попадают только нечитаемые шифроблоки, но локально вы работаете с обычными файлами.
➤ Вариант 2 (Автоматическое монтирование при логине): настройка через
➤ Вариант 3 (Резервное копирование): бэкап-скрипт может работать с уже зашифрованной директорией, ему не нужно знать пароль. Это защищает данные на ленточном накопителе или у стороннего провайдера бэкапов.
Это инструмент для тех, кто считает, что конфиденциальность — это не паранойя, а нормальная инженерная практика, которую можно и нужно встроить в повседневный рабочий процесс.
🌐 @helcode
Ручное шифрование архивов с чувствительными данными паролем перед отправкой в облако или на флешку — это дополнительный шаг, который легко забыть.
encfs и его более современный аналог gocryptfs создают виртуальную зашифрованную файловую систему поверх обычной директории. Файлы сохраняются на диск в зашифрованном виде, но примонтированная директория предоставляет доступ к ним в открытом виде.Шифрование должно быть настолько легким в использовании, чтобы его отсутствие было более странным выбором, чем его применение.
➤ Вариант 1 (Персональное облачное хранилище): создание зашифрованной директории внутри синхронизируемой папки (Nextcloud, Dropbox). В облако попадают только нечитаемые шифроблоки, но локально вы работаете с обычными файлами.
# Создание зашифрованного хранилища
gocryptfs -init ~/my-secret-vault
# Монтирование для работы
gocryptfs ~/my-secret-vault ~/vault
# Теперь файлы в ~/vault видны в чистом виде, а в ~/my-secret-vault лежат зашифрованные
➤ Вариант 2 (Автоматическое монтирование при логине): настройка через
pam_mount или скрипт в .bashrc для автоматического монтирования зашифрованного домашнего каталога или его части при входе пользователя в систему.➤ Вариант 3 (Резервное копирование): бэкап-скрипт может работать с уже зашифрованной директорией, ему не нужно знать пароль. Это защищает данные на ленточном накопителе или у стороннего провайдера бэкапов.
encfs/gocryptfs — это автоматизация безопасности данных на уровне файловой системы. Они реализуют принцип «шифрования в состоянии покоя» (encryption at rest) для конкретных данных, а не для всего диска, с минимальными накладными расходами и максимальным удобством.Это инструмент для тех, кто считает, что конфиденциальность — это не паранойя, а нормальная инженерная практика, которую можно и нужно встроить в повседневный рабочий процесс.
P.S. Важно помнить: если вы монтируете хранилище, ключ находится в памяти. Для защиты от оффлайн-атак (кража ноутбука) этого достаточно. Для защиты от компрометации уже работающей системы — нет. Это про защиту носителя, а не активной системы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1
Привет, коллеги! Нужен ваш мозг на 5 минут 🧠
Я пишу новую статью для Хабра — чистая практика, код, автоматизация — но столкнулся с классической проблемой автора: тем в голове много, а понять, какая будет максимально полезна именно вам, сложно.
Поэтому перекладываю эту задачу на вас, моих самых подкованных читателей:
Какая одна задача из вашей рутины (администрирование, DevOps, разработка) бесит больше всего и кричит с просьбой автоматизации, но вы всё откладываете?
Например:
«Как написать свой простой мониторинг с уведомлениями в Telegram, если надоел Zabbix?»
«Какие лайфхаки в bash-скриптах реально спасают от ночных кошмаров?»
«Как заставить Python-скрипты и Bash дружить в одной таске?»
Почему вам стоит кинуть идею?
➤ Закроете свою боль. Статья будет сделана под запрос сообщества.
➤ Получите готовое решение. Не просто теория, а работающие скрипты.
➤ Повлияете на контент. Канал и дальше будет рассказывать о том, что вам важно.
Кидайте ваши варианты в комментарии! Что будем автоматизировать всем миром?
🌐 @helcode
Я пишу новую статью для Хабра — чистая практика, код, автоматизация — но столкнулся с классической проблемой автора: тем в голове много, а понять, какая будет максимально полезна именно вам, сложно.
Поэтому перекладываю эту задачу на вас, моих самых подкованных читателей:
Какая одна задача из вашей рутины (администрирование, DevOps, разработка) бесит больше всего и кричит с просьбой автоматизации, но вы всё откладываете?
Например:
«Как написать свой простой мониторинг с уведомлениями в Telegram, если надоел Zabbix?»
«Какие лайфхаки в bash-скриптах реально спасают от ночных кошмаров?»
«Как заставить Python-скрипты и Bash дружить в одной таске?»
Почему вам стоит кинуть идею?
➤ Закроете свою боль. Статья будет сделана под запрос сообщества.
➤ Получите готовое решение. Не просто теория, а работающие скрипты.
➤ Повлияете на контент. Канал и дальше будет рассказывать о том, что вам важно.
Кидайте ваши варианты в комментарии! Что будем автоматизировать всем миром?
P.S. Если стесняетесь писать публично — можете прислать идею мне в личку (@helcodeadm).
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝3❤1
logwatch / logcheck — автоматический дайджест того, что система хотела вам сказать
Ежедневный ручной просмотр ключевых логов (
Система, которая не может сама рассказать о своем здоровье, обрекает администратора на роль археолога, постоянно раскапывающего её прошлое.
➤ Вариант 1 (Ежедневный отчет
➤ Вариант 2 (
➤ Вариант 3 (Настройка фильтров): ключевая задача — тонкая настройка фильтров игнорирования под специфику вашей системы, чтобы отчеты не захламлялись шумом (например, легитимными cron-задачами или специфичными для приложения информационными сообщениями).
Эти инструменты — это автоматизация первого, самого утомительного этапа анализа логов: фильтрации сигнала из шума. Они не заменяют полноценный SIEM, но предоставляют бесплатный и эффективный базовый уровень наблюдаемости для любой системы.
Их использование превращает логи из «чёрного ящика», который открывают только при пожаре, в регулярный, понятный бюллетень о состоянии системы.
🌐 @helcode
Ежедневный ручной просмотр ключевых логов (
/var/log/syslog, secure, nginx/access.log) на предмет аномалий — это скучная и неблагодарная работа, которую легко забросить. logwatch и logcheck анализируют логи за прошедший день, агрегируют события, фильтруют рутину и отправляют администратору краткий, осмысленный отчет по почте.Система, которая не может сама рассказать о своем здоровье, обрекает администратора на роль археолога, постоянно раскапывающего её прошлое.
➤ Вариант 1 (Ежедневный отчет
logwatch): после установки logwatch по умолчанию настраивается на ежедневный запуск через cron.daily и отправку подробного отчета на root@localhost. В отчет входит статистика по аутентификациям (SSH), использованию диска, загрузке процессора и подозрительным событиям.# Ручной запуск для просмотра отчета за сегодня
logwatch --range Today --output stdout
➤ Вариант 2 (
logcheck для оперативного реагирования): logcheck работает иначе. Он постоянно отслеживает логи, фильтрует известные нормальные сообщения через правила в /etc/logcheck/ignore.d.*/, а все неопознанные (необычные) события немедленно отправляет администратору. Это система раннего предупреждения.➤ Вариант 3 (Настройка фильтров): ключевая задача — тонкая настройка фильтров игнорирования под специфику вашей системы, чтобы отчеты не захламлялись шумом (например, легитимными cron-задачами или специфичными для приложения информационными сообщениями).
Эти инструменты — это автоматизация первого, самого утомительного этапа анализа логов: фильтрации сигнала из шума. Они не заменяют полноценный SIEM, но предоставляют бесплатный и эффективный базовый уровень наблюдаемости для любой системы.
Их использование превращает логи из «чёрного ящика», который открывают только при пожаре, в регулярный, понятный бюллетень о состоянии системы.
P.S. Главная польза от внедрения таких систем — «эффект кресла-качалки». Вы можете спокойно уйти в отпуск, зная, что если что-то важное случится, система отправит вам письмо. А если писем нет — всё в порядке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👀3❤2
aria2 — не wget, и не curl. Это загрузчик, который думает о производительности
Скачивание больших файлов, ISO-образов или резервных копий по одному соединению, которое может оборваться на 99% — это тест на стрессоустойчивость.
Процесс загрузки не должен быть пассивным ожиданием. Он должен использовать доступные ресурсы сети максимально эффективно.
➤ Вариант 1 (Многопоточная загрузка с докачкой): базовая команда для скачивания файла с разбивкой на 16 потоков и сохранением состояния сессии.
➤ Вариант 2 (Загрузка по списку URI): создание файла
➤ Вариант 3 (Использование как демона с JSON-RPC API): запуск
Это инструмент для тех, кто воспринимает загрузку файла не как разовое действие, а как часть автоматизированного пайплайна, где надежность и скорость имеют значение.
🌐 @helcode
Скачивание больших файлов, ISO-образов или резервных копий по одному соединению, которое может оборваться на 99% — это тест на стрессоустойчивость.
aria2 — это загрузочная утилита, поддерживающая многопоточность, сегментированную загрузку, докачку и работу с множественными источниками (HTTP, HTTPS, FTP, BitTorrent, Metalink).Процесс загрузки не должен быть пассивным ожиданием. Он должен использовать доступные ресурсы сети максимально эффективно.
➤ Вариант 1 (Многопоточная загрузка с докачкой): базовая команда для скачивания файла с разбивкой на 16 потоков и сохранением состояния сессии.
aria2c -x 16 -s 16 --continue=true "https://example.com/bigfile.iso"
➤ Вариант 2 (Загрузка по списку URI): создание файла
urls.txt со списком ссылок (например, части одного архива, разбитого на томов) и их параллельная загрузка.aria2c -i urls.txt --max-concurrent-downloads=5
➤ Вариант 3 (Использование как демона с JSON-RPC API): запуск
aria2 в фоновом режиме с включенным JSON-RPC интерфейсом позволяет управлять загрузками программно, интегрируя его в скрипты автоматизации бэкапов или дистрибуции артефактов.aria2c --enable-rpc --rpc-listen-all --dir=/downloads
# Далее можно добавлять задания через curl к API
aria2 — это автоматизация самого процесса передачи данных. Он берет на себя заботу об устойчивости соединения, скорости и целостности данных, освобождая пользователя от необходимости следить за прогресс-баром или перезапускать упавшую загрузку вручную.Это инструмент для тех, кто воспринимает загрузку файла не как разовое действие, а как часть автоматизированного пайплайна, где надежность и скорость имеют значение.
P.S. В сочетании с cron или системными таймерами `aria2` может использоваться для регулярного автоматического скачивания обновлений, дампов баз данных с удаленных серверов или синхронизации больших наборов данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🤔1
unison — двусторонняя синхронизация, где конфликты — не приговор
Использование
Синхронизация между ноутбуком и сервером, или между разными серверами, должна быть предсказуемой и безопасной даже при параллельном редактировании файлов с обеих сторон.
➤ Вариант 1 (Базовая синхронизация с профилем): создание профиля
Запуск:
➤ Вариант 2 (Автоматическое разрешение конфликтов): настройка правил в профиле для автоматических действий при конфликтах (например, всегда сохранять версию с более новой датой или сохранять обе копии).
➤ Вариант 3 (Скриптование и интеграция с cron): использование
Это инструмент для сценариев, где нет четкого «мастера» и «слейва», а есть два равноправных узла, которые должны обмениваться данными, сохраняя их целостность и историю изменений.
🌐 @helcode
Использование
rsync для синхронизации в одну сторону или облачных драйверов, которые могут потерять данные при конфликте, — это компромиссы. unison — это файловый синхронизатор, который понимает концепцию двусторонней синхронизации, умеет определять и разрешать конфликты, а его текстовые профилы позволяют описывать сложные сценарии.Синхронизация между ноутбуком и сервером, или между разными серверами, должна быть предсказуемой и безопасной даже при параллельном редактировании файлов с обеих сторон.
➤ Вариант 1 (Базовая синхронизация с профилем): создание профиля
.prf, который описывает две корневые директории и правила.# ~/.unison/myproject.prf
root = /home/user/project
root = ssh://remote-server//opt/project
ignore = Name .git
ignore = Name *.tmp
Запуск:
unison myproject➤ Вариант 2 (Автоматическое разрешение конфликтов): настройка правил в профиле для автоматических действий при конфликтах (например, всегда сохранять версию с более новой датой или сохранять обе копии).
# В профиле
auto = true
batch = true
# В случае конфликта сохранить обе версии
conflict = newer -> keep
conflict = older -> keep
➤ Вариант 3 (Скриптование и интеграция с cron): использование
unison в неинтерактивном режиме (-batch) внутри скриптов для регулярной автоматической синхронизации, например, конфигурационных файлов между узлами кластера.unison — это автоматизация сложной, осмысленной синхронизации. Он не просто копирует файлы, а проводит «согласование» состояния между двумя репликами, пытаясь сохранить изменения, сделанные с обеих сторон, и явно сигнализируя там, где это невозможно.Это инструмент для сценариев, где нет четкого «мастера» и «слейва», а есть два равноправных узла, которые должны обмениваться данными, сохраняя их целостность и историю изменений.
P.S. unison использует собственную базу данных (.unison в корневых директориях) для отслеживания предыдущего состояния. Это делает его более умным, чем инструменты, основанные только на временных метках, но требует, чтобы эта база не терялась.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍2❤1🤔1
smokeping — измерение не скорости, а стабильности сети
Сеть может быть «быстрой», но нестабильной. Первое заметит пользователь, второе — только система мониторинга, смотрящая в долгую перспективу.
➤ Вариант 1 (Мониторинг магистральных каналов): настройка targets на ключевые маршрутизаторы провайдера (
➤ Вариант 2 (Диагностика Wi-Fi): мониторинг задержки до домашнего роутера и до точки в интернете. Регулярные «проседания» и потери на первом хопе укажут на проблемы с беспроводным покрытием или помехами.
➤ Вариант 3 (Интеграция с алертингом): хотя SmokePing — визуальный инструмент, его данные можно экспортировать или дополнять скриптами, которые анализируют
Это инструмент не для моментальной диагностики, а для выявления хронических, плавающих проблем, которые убивают VoIP, видеоконференции и удовольствие от работы.
🌐 @helcode
ping показывает потери сейчас, mtr показывает, где они. Но чтобы увидеть *характер* проблем — мимолетные пакетные потери, периодические скачки задержки — нужен долгосрочный мониторинг. SmokePing непрерывно отправляет ICMP, TCP или DNS probes к целевым хостам и рисует наглядные графики задержки и потерь, где каждый пик или полоса — это история сетевого страдания.Сеть может быть «быстрой», но нестабильной. Первое заметит пользователь, второе — только система мониторинга, смотрящая в долгую перспективу.
➤ Вариант 1 (Мониторинг магистральных каналов): настройка targets на ключевые маршрутизаторы провайдера (
8.8.8.8, 1.1.1.1) и внутренние шлюзы. График покажет, проблема локальная или на стороне ISP.# Фрагмент конфига /etc/smokeping/config.d/Targets
+ NetworkHealth
menu = Network Health
title = Critical network paths
++ GoogleDNS
host = 8.8.8.8
++ CloudflareDNS
host = 1.1.1.1
➤ Вариант 2 (Диагностика Wi-Fi): мониторинг задержки до домашнего роутера и до точки в интернете. Регулярные «проседания» и потери на первом хопе укажут на проблемы с беспроводным покрытием или помехами.
➤ Вариант 3 (Интеграция с алертингом): хотя SmokePing — визуальный инструмент, его данные можно экспортировать или дополнять скриптами, которые анализируют
rrd-файлы и запускают алерты при долговременной деградации качества.SmokePing — это автоматизация сбора *качественных* характеристик сети. Он превращает субъективное ощущение «интернет сегодня какой-то рваный» в объективную картину с таймстемпами, которую можно предъявить провайдеру или использовать для анализа трендов.Это инструмент не для моментальной диагностики, а для выявления хронических, плавающих проблем, которые убивают VoIP, видеоконференции и удовольствие от работы.
P.S. Дым на графике SmokePing — это не метафора. Красные «облака» потерь на графике действительно похожи на дым, поднимающийся от костра проблем.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5✍2❤1
auditd — Большой Брат ядра Linux, который вы можете настроить
Кто что запускал? К каким файлам обращался? Какие системные вызовы вызывала программа?
Для расследования инцидента безопасности недостаточно знать, что служба упала. Нужно знать, что происходило в системе до этого.
➤ Вариант 1 (Отслеживание доступа к критичным файлам): настройка правила для аудита всех попыток чтения или изменения файла
➤ Вариант 2 (Мониторинг системных вызовов): аудит всех случаев использования опасного системного вызова
➤ Вариант 3 (Поиск по логам аудита): основной инструмент для анализа —
Это тяжёлая артиллерия. Его включение без четкой стратегии и правил приведет к лавине событий, которые невозможно анализировать. Ценность — в целевой, точной настройке.
🌐 @helcode
Кто что запускал? К каким файлам обращался? Какие системные вызовы вызывала программа?
auditd — это подсистема ядра и демон для детального аудита событий безопасности в системе. В отличие от обычных логов, он может отслеживать не действия программ, а вызовы ядра, что позволяет логировать события, которые сама программа могла бы скрыть.Для расследования инцидента безопасности недостаточно знать, что служба упала. Нужно знать, что происходило в системе до этого.
➤ Вариант 1 (Отслеживание доступа к критичным файлам): настройка правила для аудита всех попыток чтения или изменения файла
/etc/shadow.# auditctl -w /etc/shadow -p war -k shadow_file
# -w watch, -p permissions (r=read, w=write, x=execute, a=attribute change)
# -k key — метка для поиска в логах
➤ Вариант 2 (Мониторинг системных вызовов): аудит всех случаев использования опасного системного вызова
ptrace (используется отладчиками и, увы, эксплойтами).auditctl -a always,exit -F arch=b64 -S ptrace -k tracing
➤ Вариант 3 (Поиск по логам аудита): основной инструмент для анализа —
ausearch и aureport. Например, поиск всех событий, связанных с конкретным пользователем за последний час.ausearch -ts today -k shadow_file | aureport -f -i
auditd — это автоматизация сбора судебных доказательств (forensics). Он не предотвращает атаку, но позволяет восстановить её полную картину после факта, ответив на вопросы «что, когда, как и откуда».Это тяжёлая артиллерия. Его включение без четкой стратегии и правил приведет к лавине событий, которые невозможно анализировать. Ценность — в целевой, точной настройке.
P.S. Правила auditd сбрасываются после перезагрузки. Для их постоянства необходимо прописывать в /etc/audit/rules.d/audit.rules или использовать augenrules.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2
ncdu — визуальный археолог дискового пространства
Рекурсивный запуск
Человеческий мозг плохо приспособлен для анализа иерархических деревьев с числовыми атрибутами. Нужна визуализация.
➤ Вариант 1 (Базовое сканирование): самый частый сценарий — найти, что съело место в корневой файловой системе.
➤ Вариант 2 (Экспорт и сравнение): можно сохранить результат сканирования в файл, а позже — загрузить и сравнить с новым, чтобы увидеть, что именно выросло.
➤ Вариант 3 (Удалённый анализ по SSH): сканирование удаленного сервера с передачей данных по SSH и локальным запуском интерфейса
Это пример идеального инструмента: делает одну узкую задачу (визуализацию дискового использования) настолько хорошо, что становится незаменимым.
🌐 @helcode
Рекурсивный запуск
du -sh *, переход в найденную большую директорию и повтор — это ритуал очистки диска. ncdu (NCurses Disk Usage) делает это за вас: сканирует выбранную директорию, сортирует результаты по размеру и предоставляет простой текстовый интерфейс для навигации и удаления файлов прямо внутри утилиты.Человеческий мозг плохо приспособлен для анализа иерархических деревьев с числовыми атрибутами. Нужна визуализация.
➤ Вариант 1 (Базовое сканирование): самый частый сценарий — найти, что съело место в корневой файловой системе.
ncdu /
➤ Вариант 2 (Экспорт и сравнение): можно сохранить результат сканирования в файл, а позже — загрузить и сравнить с новым, чтобы увидеть, что именно выросло.
ncdu -o scan.ndjson /var/lib/docker
# ... через неделю ...
ncdu -f scan.ndjson
➤ Вариант 3 (Удалённый анализ по SSH): сканирование удаленного сервера с передачей данных по SSH и локальным запуском интерфейса
ncdu.ssh user@server 'ncdu -o - /some/dir' | ncdu -f-
ncdu — это автоматизация самого утомительного этапа управления дисковым пространством: *поиска виновника*. Он не удалит ничего сам (без вашего подтверждения), но доведет вас до нужного файла за считанные секунды, избавив от рутины.Это пример идеального инструмента: делает одну узкую задачу (визуализацию дискового использования) настолько хорошо, что становится незаменимым.
P.S. Клавиша d в ncdu удаляет выбранный файл/директорию. Используйте с крайней осторожностью. Всегда лучше сначала просмотреть (i), что именно собираетесь удалить.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2
driftctl — детектив «дрейфа инфраструктуры» в облаке
Вы описываете инфраструктуру как код (Terraform), но кто-то вручную создал Security Group через веб-консоль или изменил тэг. Состояние реального облака расходится с состоянием, описанным в коде. Это «дрейф».
«Инфраструктура как код» без проверки на дрейф — это красивая теория, которая разбивается о практику ручных правок и забытых ресурсов.
➤ Вариант 1 (Локальная проверка): запуск с указанием пути к state-файлу Terraform.
➤ Вариант 2 (Интеграция в CI/CD): добавление шага
➤ Вариант 3 (Непрерывный мониторинг): запуск
Это критически важный инструмент для команд, которые серьезно относятся к идее, что облаком нужно управлять только через код, а не через интерфейс.
🌐 @helcode
Вы описываете инфраструктуру как код (Terraform), но кто-то вручную создал Security Group через веб-консоль или изменил тэг. Состояние реального облака расходится с состоянием, описанным в коде. Это «дрейф».
driftctl сканирует ваше облако, сравнивает его с кодом в Terraform и показывает все расхождения.«Инфраструктура как код» без проверки на дрейф — это красивая теория, которая разбивается о практику ручных правок и забытых ресурсов.
➤ Вариант 1 (Локальная проверка): запуск с указанием пути к state-файлу Terraform.
driftctl scan --from tfstate://terraform.tfstate
➤ Вариант 2 (Интеграция в CI/CD): добавление шага
driftctl scan в пайплайн после применения Terraform. Если дрейф обнаружен, пайплайн может «упасть», отправить уведомление или даже попытаться автоматически импортировать ресурс обратно в управление.# В CI, после terraform apply
driftctl scan --from tfstate://terraform.tfstate --output json://stdout | jq '.summary.total_unmanaged'
# Если total_unmanaged > 0, FAIL
➤ Вариант 3 (Непрерывный мониторинг): запуск
driftctl по расписанию (например, раз в день) с отправкой отчета в Slack, чтобы команда видела, что и когда изменилось в обход процессов.driftctl — это автоматизация соблюдения дисциплины IaC. Он выступает в роли «полиции инфраструктуры», находя несанкционированные изменения и помогая вернуть систему к состоянию, описанному в репозитории.Это критически важный инструмент для команд, которые серьезно относятся к идее, что облаком нужно управлять только через код, а не через интерфейс.
P.S. driftctl поддерживает AWS, Azure, Google Cloud и даже GitHub. Его главный вывод: «managed» (управляется Terraform), «unmanaged» (существует только в облаке), «missing» (есть в коде, но нет в облаке).
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤1
tcpflow — не просто сниффер, а реконструктор потоков
Иногда нужно не анализировать заголовки, а просто «поймать» и посмотреть содержимое передачи.
➤ Вариант 1 (Реконструкция HTTP-сессии): захват трафика на порту 80 и сохранение всех потоков в файлы. В результате получаются файлы с именами вида
➤ Вариант 2 (Поиск конкретных данных): использование в связке с
➤ Вариант 3 (Анализ передачи файлов): если через протокол (например, FTP или незашифрованный SMTP) передавался файл,
Это инструмент для быстрой отладки, обратного инжиниринга протоколов и, да, для учебных целей по пониманию того, как данные путешествуют по сети.
🌐 @helcode
tcpdump показывает сырые пакеты, wireshark позволяет их анализировать. Но если нужно быстро понять, *что именно* передавалось в HTTP-сессии (картинки, файлы, тексты запросов/ответов), tcpflow — идеальный выбор. Он захватывает трафик и реконструирует потоки данных (flow), сохраняя каждый поток в отдельный файл.Иногда нужно не анализировать заголовки, а просто «поймать» и посмотреть содержимое передачи.
➤ Вариант 1 (Реконструкция HTTP-сессии): захват трафика на порту 80 и сохранение всех потоков в файлы. В результате получаются файлы с именами вида
XXX.YYY.ZZZ.AAA-NNNN-BBBB.CCCC, содержащие чистые данные, отправленные с одного IP:port на другой.sudo tcpflow -i any port 80
➤ Вариант 2 (Поиск конкретных данных): использование в связке с
grep для поиска по захваченным потокам, например, ключевых слов или кусков бинарных данных.sudo tcpflow -i any -c port 443 | grep -i "password"
➤ Вариант 3 (Анализ передачи файлов): если через протокол (например, FTP или незашифрованный SMTP) передавался файл,
tcpflow часто позволяет легко вычленить и сохранить его из потока.tcpflow — это автоматизация задачи извлечения *смыслового содержимого* из сетевого потока. Он абстрагируется от низкоуровневых деталей TCP (последовательности, ACK) и показывает то, что пытались передать приложения.Это инструмент для быстрой отладки, обратного инжиниринга протоколов и, да, для учебных целей по пониманию того, как данные путешествуют по сети.
P.S. ВАЖНО: Использование tcpflow (как и любого сниффера) для перехвата трафика, не предназначенного вам, без явного согласия — незаконно. Используйте только на своих системах или в изолированных средах для отладки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
earlyoom — палач, который жертвует процессами ради системы
Когда память заканчивается, ядро Linux запускает механизм OOM Killer. Но он срабатывает слишком поздно, когда система уже глубоко в свопе и полностью неотзывчива.
Доверять встроенному OOM Killer — это как надеяться, что пожарная система сработает, когда дом уже почти сгорел.
➤ Вариант 1 (Установка и забыть): после установки пакета (
➤ Вариант 2 (Тонкая настройка порогов): определение, при каком проценте свободной оперативной памяти (
➤ Вариант 3 (Исключение критичных процессов): можно запретить убивать определенные процессы по имени (например,
Это не решение проблемы утечек памяти, а система безопасности, которая дает вам шанс войти и решить её, когда она происходит.
🌐 @helcode
Когда память заканчивается, ядро Linux запускает механизм OOM Killer. Но он срабатывает слишком поздно, когда система уже глубоко в свопе и полностью неотзывчива.
earlyoom (Early Out-of-Memory Daemon) постоянно мониторит доступную память и своп и *заранее* отправляет сигнал SIGTERM, а затем SIGKILL самым прожорливым процессам, чтобы спасти систему от полного краха.Доверять встроенному OOM Killer — это как надеяться, что пожарная система сработает, когда дом уже почти сгорел.
➤ Вариант 1 (Установка и забыть): после установки пакета (
earlyoom) и включения службы демон начинает работать в фоне. Он использует встроенную эвристику, отдавая предпочтение процессам, съедающим много памяти, и стараясь не трогать системные.➤ Вариант 2 (Тонкая настройка порогов): определение, при каком проценте свободной оперативной памяти (
-m) и свопа (-s) начинать отправку сигналов.earlyoom -m 5 -s 2
# Начинать действовать, когда свободно меньше 5% RAM и 2% swap
➤ Вариант 3 (Исключение критичных процессов): можно запретить убивать определенные процессы по имени (например,
-r sshd,postgres), хотя с этим стоит быть осторожным.earlyoom — это автоматизация принципа «меньшее зло». Он признает, что в ситуации нехватки памяти кто-то должен умереть, и принимает это решение *раньше*, чем система станет неуправляемой, сохраняя работоспособность ядра и SSH-доступ для администратора.Это не решение проблемы утечек памяти, а система безопасности, которая дает вам шанс войти и решить её, когда она происходит.
P.S. В эпоху контейнеров earlyoom может работать в связке с механизмами cgroups, но его простая установка на любой сервер — это один из самых эффективных «лайфхаков» для повышения отказоустойчивости.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🤔1