Helcode | Хелкод | Скрипты и автоматизация
992 subscribers
52 photos
34 links
☎️ Контакты для связи: @helcodeadm
Download Telegram
Вопрос на посленовогоднее размышление.

Представьте: вы находите в legacy-коде или чужом пайплайне идеально работающую, но чудовищно сложную автоматизацию. Скрипт делает что-то гениальное (например, автоматически чинит рассыпающуюся БД), но состоит из 1000 строк спагетти-кода, который понимаете только вы.

Ваши действия?

1. Оставить как есть. «Работает — не трогай». Риск сломать что-то критическое выше ценности чистого кода.
2. Полный рефакторинг с переписыванием. Вложить время сейчас, чтобы спасти будущих разработчиков (и себя через полгода) от боли.
3. Постепенное улучшение (некая «бритва Оккама для кода»). Не трогать логику, но начать с малого: добавить комментарии, разбить на функции, вынести конфиги. Шаг за шагом.
4. Документировать и изолировать. Написать исчерпывающую документацию, завернуть в контейнер и забыть как страшный сон, но с инструкцией по пробуждению.

Где грань между «гениальной сложностью» и «техническим долгом» в мире автоматизации? Поделитесь вашим опытом или принципами в комментариях.

Лично для меня критерий один: если для понимания скрипта мне нужно больше 15 минут сосредоточенно в него вчитываться — это кандидат на вариант 3. Автоматизация должна экономить время, в том числе и время на её понимание.

Интересно услышать ваше мнение!

🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1🤔1
journalctl — когда логи не файлы, а поток событий

Ручной поиск по /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 (показать все ошибки с момента последней загрузки) — это первая команда при диагностике проблемной системы после ребута.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4
Автоматический failover: когда отказ — это не инцидент, а штатная ситуация

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

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 (отключение проблемного сервера на физическом уровне) — не опция, а обязательное условие.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
mtr — не ping, и не traceroute, а их осмысленный синтез

Сеть «лагает». Стандартный сценарий: 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 может показывать разные пути при разных запусках. Это не баг, а особенность современного интернета.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102
Идемпотентные развертывания: деплой — это не действие, а состояние

Ручной деплой через последовательность шагов (остановить сервис, скопировать файлы, запустить) на множестве серверов — это источник дрейфа и ошибок. Современный подход описывает желаемое состояние системы, а инструмент (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 должно быть равно нулю. Если это так — Вы на верном пути.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
4🤔1
git reflog — палочка-выручалочка для локального хаоса

Жесткий 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, восстановление может стать нетривиальной задачей.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41
Коллеги, доброго времени суток!

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

Речь не обязательно о чём-то громком вроде нового 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 страниц, он выдаёт конкретные примеры использования команды. Банально, но невероятно экономит время.

Жду ваши рекомендации!

🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
3🤔2
etckeeper — контроль версий для /etc, который вы не знали, что вам нужен

Ручное отслеживание изменений в /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 для управления конфигурацией, но идеально дополняет их, отслеживая «дрейф» и спонтанные изменения, внесенные в обход плейбуков.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
6
fail2ban — автоматизированный цифровой вышибала

Ручной просмотр логов на предмет подозрительных 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-адреса доверенных сетей.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
prometheus + alertmanager + grafana

Ручной опрос серверов по 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. Золотое правило: каждый алерт должен быть сформулирован так, чтобы у инженера, получившего его, был четкий ответ на вопрос «Что мне сейчас делать?». Алёрты без ясного действия — это просто шум.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
encfs / gocryptfs — прозрачное шифрование для параноиков (и прагматиков)

Ручное шифрование архивов с чувствительными данными паролем перед отправкой в облако или на флешку — это дополнительный шаг, который легко забыть. 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. Важно помнить: если вы монтируете хранилище, ключ находится в памяти. Для защиты от оффлайн-атак (кража ноутбука) этого достаточно. Для защиты от компрометации уже работающей системы — нет. Это про защиту носителя, а не активной системы.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
Привет, коллеги! Нужен ваш мозг на 5 минут 🧠

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

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

Какая одна задача из вашей рутины (администрирование, DevOps, разработка) бесит больше всего и кричит с просьбой автоматизации, но вы всё откладываете?

Например:

«Как написать свой простой мониторинг с уведомлениями в Telegram, если надоел Zabbix?»

«Какие лайфхаки в bash-скриптах реально спасают от ночных кошмаров?»

«Как заставить Python-скрипты и Bash дружить в одной таске?»


Почему вам стоит кинуть идею?

➤ Закроете свою боль. Статья будет сделана под запрос сообщества.

➤ Получите готовое решение. Не просто теория, а работающие скрипты.

➤ Повлияете на контент. Канал и дальше будет рассказывать о том, что вам важно.

Кидайте ваши варианты в комментарии! Что будем автоматизировать всем миром?

P.S. Если стесняетесь писать публично — можете прислать идею мне в личку (@helcodeadm).


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝31
logwatch / logcheck — автоматический дайджест того, что система хотела вам сказать

Ежедневный ручной просмотр ключевых логов (/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. Главная польза от внедрения таких систем — «эффект кресла-качалки». Вы можете спокойно уйти в отпуск, зная, что если что-то важное случится, система отправит вам письмо. А если писем нет — всё в порядке.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👀32
aria2 — не wget, и не curl. Это загрузчик, который думает о производительности

Скачивание больших файлов, 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` может использоваться для регулярного автоматического скачивания обновлений, дампов баз данных с удаленных серверов или синхронизации больших наборов данных.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🤔1
unison — двусторонняя синхронизация, где конфликты — не приговор

Использование 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 в корневых директориях) для отслеживания предыдущего состояния. Это делает его более умным, чем инструменты, основанные только на временных метках, но требует, чтобы эта база не терялась.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
21🤔1
smokeping — измерение не скорости, а стабильности сети

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 — это не метафора. Красные «облака» потерь на графике действительно похожи на дым, поднимающийся от костра проблем.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍521
auditd — Большой Брат ядра Linux, который вы можете настроить

Кто что запускал? К каким файлам обращался? Какие системные вызовы вызывала программа? 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.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2
ncdu — визуальный археолог дискового пространства

Рекурсивный запуск 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), что именно собираетесь удалить.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
driftctl — детектив «дрейфа инфраструктуры» в облаке

Вы описываете инфраструктуру как код (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» (есть в коде, но нет в облаке).


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41
tcpflow — не просто сниффер, а реконструктор потоков

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 (как и любого сниффера) для перехвата трафика, не предназначенного вам, без явного согласия — незаконно. Используйте только на своих системах или в изолированных средах для отладки.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
earlyoom — палач, который жертвует процессами ради системы

Когда память заканчивается, ядро 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, но его простая установка на любой сервер — это один из самых эффективных «лайфхаков» для повышения отказоустойчивости.


🌐 @helcode
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤔1