Обновить
512K+

Системное администрирование *

Лишь бы юзер был доволен

686,45
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Одно кривое правило — и алертинг лёг всем тенантам: анатомия отказа vmalert в мультитенантной платформе

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.9K

Я строю мультитенантную платформу мониторинга на стеке VictoriaMetrics + Grafana + vmalert: у каждого клиента — изолированный tenant в хранилище и собственный набор правил алертинга, которые он редактирует через личный кабинет. Расскажу про два сцепленных инцидента, которые изменили моё понимание изоляции тенантов, — с конкретными числами, конфигами и кодом фиксов. Спойлер: изолировать данные — этого мало.

Читать далее

Новости

AutoAddPolicy — это не удобство. Это выключенная проверка

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели5.7K

У меня в проекте было четырнадцать копий одного IP‑адреса. По одной в каждом скрипте, который ходит на боевой сервер: деплой, перезапуск сервиса, правка DNS, диагностика почты. Классический копипаст, который живёт до первого переезда.

Переезд случился. Адрес поменялся. Четырнадцать скриптов стали указывать в никуда.

Дальше начинается то, ради чего я это пишу.

Читать далее

Как не подарить полный продукт вузу, заводу без интернета и торренту

Время на прочтение5 мин
Охват и читатели5.5K

Для примера будем использовать наш продукт для просмотра топологии и верификации(EDA) и расскажем, как мы построили его лицензирование.

Каждый коммерческий продукт рано или поздно упирается в один вопрос: кому именно вы продаёте право пользоваться программой.

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

Но если продукт одновременно нужен заводам, университетам, небольшим компаниям и стартапам, модель меняется. Это уже не десять клиентов, а сотни или тысячи машин: учебные лицензии, trial, временные ключи, один ноутбук на нескольких сотрудников.

В этот момент плохо работает модель «один бинарь и проверка лицензии есть или нет».

Читать далее

Должен был платить за объектное хранилище 25 рублей, которые превратились в 42000 рублей

Время на прочтение6 мин
Охват и читатели6.8K

Бэкапы с моих серверов уезжают в объектное хранилище, и стоило это около десяти тысяч в месяц. Потом пришло письмо, что средства заканчиваются, а по расходу за трое суток выходило уже сорок с лишним. Провайдер ни при чём: репозиторий раздулся до 291 ГиБ, из которых 190 были чистым дублем, а prune не отрабатывал вообще никогда — репозиторий был повреждён, плюс шесть виртуалок конкурировали за один эксклюзивный лок. Разбираю по шагам, что нашёл и как перестроил схему.

Читать далее

Как найти настоящую (его) гуся или задачу в уже работающем продукте: разбор EVRTCK после возвращения в EvertyDesk

Время на прочтение15 мин
Охват и читатели8.1K

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

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

И вот здесь начинается вещь, которая мне кажется куда "интереснее" самого факта возвращения.

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

Никто не говорит:

Читать далее

PostgreSQL Recovery на пальцах: WAL, base_backup и PITR в Docker-compose

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели9.1K

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

Восстановление данных буду делать с помощью второго PostgreSQL контейнера. Если кратко - данные WAL и base_backup будут прокидываться с помощью volume и контейнер будет стартовать с новыми данными.

Пока что рабочий стенд будет ограничиваться PostgreSQL 17 в Docker (без S3, Kubernetes, автоматизации и т.п), потом возможно сделаю дополнительные статьи, охватывающие более сложные production случаи.

Читать далее

Строка «resumes from where it stopped» увела меня в ветку форума 2021 года и в пять вопросов к движку автоматизации

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели6.2K

Строка из документации n8n про возобновление с места остановки читается как гарантия перезапуска с точки сбоя. Проверка привела в ветку форума 2021 года, где смысл настройки объясняют иначе, - и дальше ещё в пять вопросов к движку автоматизации перед необратимым шагом. Все ссылки и даты сверки (27 августа 2026 года) - в тексте.

Посмотреть, что нашлось в документации

В логе адрес ::ffff:192.0.2.5, в белом списке 192.0.2.5. Это один адрес, и он не совпадает

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели8.8K

Заявка была скучная: клиент не проходит проверку по списку разрешённых адресов. Адрес его я вижу, адрес в списке есть, файрвол пакет пропускает. Приложение отвечает «доступ запрещён».

В логе стояло ::ffff:192.0.2.5, в конфиге — 192.0.2.5. Что строки разные, видно сразу. Но выглядит это как разное написание одного адреса: справа те же четыре октета, слева приписка, которую принимаешь за особенность формата. Поэтому проверять я пошёл конфиг, а не сравнение.

Читать далее

Память для ИИ-агента съела 144 процесса и недельный лимит. Разбор четырёх причин

Время на прочтение5 мин
Охват и читатели5.5K

Компьютер начал тупить в середине дня. VS Code переставал отвечать, новые вкладки редактора не открывались по минуте, а лимит подписки на ИИ-ассистента сгорал к обеду вместо конца недели. Виноватым оказался не ассистент, а плагин, который ведёт для него память между сессиями.

Читать далее

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

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели5.5K

Строчка, которая встречается в скриптах повсеместно:

mysql -u admin -pSecretPass123 -e "select 1"

Пока команда выполняется, этот пароль видит каждый, у кого есть доступ к устройству — обычный, непривилегированный. Достаточно посмотреть список процессов.

Читать далее

AVM изнутри задачи, сбои и состояние виртуальных машин

Время на прочтение7 мин
Охват и читатели4.7K

В первой части мы разобрали, почему Aeza ушла со сторонней платформы и как AVM устроен в общих чертах. Здесь уровень ниже: путь запроса от вызова до задачи на конкретной ноде, устройство конвейеров, поведение при сбоях и то, где система хранит состояние виртуальных машин.

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

Читать далее

От HAProxy до VLESS+Reality: все грабли одного MTProto-прокси

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели9.6K

От HAProxy до VLESS+Reality: все грабли одного MTProto-прокси

Если вы когда-нибудь поднимали свой MTProto-прокси для Telegram и он у вас "работает, но как-то не очень" — эта статья для вас. Я прошёл путь от "просто добавить relay" до "переписать всю цепочку на VLESS+Reality с нуля", и по дороге собрал приличную коллекцию граблей. Расскажу всё по порядку, чтобы вам не пришлось наступать на те же.

Исходная ситуация

Была задача простая на первый взгляд: поднять MTProto проксю для Telegram на сервере в РФ. Причина стандартная — хочется, чтобы телега работала

Взял mtg (ghcr.io/9seconds/mtg:2 — отличная реализация MTProto-прокси с поддержкой fake-TLS), поднял на сервере — и оно не работает. Точнее, работает, но еле-еле: то подключается, то нет, на мобильном интернете почти всегда фейл.

Первая мысль, которая приходит в голову почти всем в такой ситуации: "провайдер блокирует адреса Telegram". И это отчасти правда — но, как выяснилось, правда не вся.

Первая попытка: спрятать Telegram за релеем

Логика была такая: раз провайдер режет соединения именно к IP Telegram, то уберу эти IP из виду. Арендую второй сервер за границей, туда ставлю настоящий mtg, а на RU-сервере — просто TCP-релей (HAProxy или голый iptables DNAT), который прозрачно перекидывает байты дальше.

Клиент → RU-сервер (HAProxy, чистый TCP passthrough) → Зарубежный сервер (mtg) → Telegram

Казалось бы, логично: сервер в РФ теперь физически ничего не знает про Telegram, он просто гоняет байты во внешний IP. Провайдер не должен видеть ничего подозрительного.

Читать далее

Введение в воспроизводимые сборки

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели8.9K

И вновь я всех приветствую! Сегодня я бы хотел рассказать о такой теме как воспроизводимые приложения/сборки. 

Читать далее

Ближайшие события

Как мы управляем софтом в сложной ИТ‑инфраструктуре

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели8.1K

Сложная ИТ-инфраструктура неизбежно вызывает множество проблем: нужно обеспечивать её масштабируемость и работоспособность, сдерживать рост затрат на сопровождение и поддержку, повышать прозрачность использования инфраструктуры и работающего на ней ПО.

Привет, Хабр! Меня зовут Юрий Самойлов, я директор по продукту MWS B2B Store. Сегодня поговорим о том, как управлять сложными инфраструктурными и ИТ-ландшафтами в целом, обсудим проблемы стандартизации, упаковки и развёртывания ПО, а также вопросы контроля лицензий, в том числе уже приобретённых у разных вендоров. Кроме того, мы посмотрим, как эти задачи решаются в MWS.

За помощь в подготовке материала спасибо Евгению Тетенчуку, техлиду команды MWS B2B Store. Эта статья — текстовая версия вебинара.

Читать далее

Тарков решил, что я в США. Виновником оказался «белый IP» Билайна

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели9.1K

В июне я писал про билайновскую опцию «доступ к сервисам» — статичный IP за 180 рублей, с которым из коробки открываются ChatGPT, Spotify и ещё сотня ушедших из РФ сервисов. Спустя два месяца эта же опция не пустила меня в Тарков: лаунчер решил, что я захожу из США. Без VPN, из РФ, по проводу. Рассказываю, как я это «дебажил» и что, судя по всему, у «белого IP» под капотом.

Грин карта от Билайна?

Точечная маршрутизация на роутере через VLESS/Trojan-подписку со своей балансировкой (OpenWrt/Keenetic)

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели14K

Многие сервисы сегодня выдают клиенту не один конкретный конфиг для подключения, а VLESS/Trojan-подписку — ссылку, за которой стоит целый пул из десятков серверных конфигураций сразу. Провайдеру это удобно (не нужно вручную вести отдельный конфиг под каждого клиента), но у пользователя тут же встаёт главная практическая проблема: подключить роутер именно через такую подписку так, чтобы соединение работало стабильно. Один конкретный сервер из пула сегодня быстрый, завтра перегружен, послезавтра вообще не отвечает — а подписка в целом при этом продолжает исправно работать, просто нужно каждый раз заново находить, какой именно из десятков серверов сейчас реально живой.

Решает это балансировщик — механизм, который сам, постоянно, в фоне проверяет каждый сервер пула подписки и автоматически выбирает самый быстрый живой, без участия человека.

Об этом и статья: что такое точечная (доменная) маршрутизация на роутере, зачем нужна автоматическая балансировка между серверами одной VLESS/Trojan-подписки, и как это устроено в нашем универсальном проекте SmartRoute — для роутеров на OpenWrt и KeenticOS (через xkeen), который умеет и то, и другое из коробки.

Как мы научили роутер сам выбирать сервер

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

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели6.5K

restart-hook вернул 202, а сервис всё ещё не отвечает. Повторить запрос — рискнуть вторым перезапуском; закрыть инцидент — записать восстановление, которого не было. На этом конфликте построен recovery в Vigil: система проверяет сервис до и после действия, отсекает устаревшие задачи и останавливает автоматизацию, когда пора звать человека.

Читать далее

Режим инкогнито и очистка cookie: почему сайт всё равно узнаёт, что это снова вы

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7K

Обычная логика такая: не хочу, чтобы меня узнавали — открываю приватное окно, и всё, я новый посетитель. Логика была верной примерно до середины десятых годов.

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

Читать далее

«Кажется, у меня что-то стучится наружу»: как разобраться самому за десять минут

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6.5K

Регулярно слышу этот вопрос в разных формулировках. Индикатор сети мигает, когда ничего не открыто. Антивирус молчит, но кажется, что молчит зря. Или человек увидел в диспетчере задач незнакомое имя процесса и теперь не знает, что с этим делать.

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

Читать далее

Linux Capabilities: новый root, объяснения и примеры работы

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели8.2K

Изначально с Capabilities я лично столкнулся в своем проекте ServeHub-2, когда настраивал контейнеры в docker-compose. Если быть более конкретным, я настраивал WG-easy с использованием AmneziaWG, которому нужны были привилегии, связанные с загрузкой модулей ядра и настройками интерфейсов. До этого я слышал о Capabilities, но не знал что это такое, поэтому решил подробнее в этом разобраться.

Сначала разберу общее понятие, что вообще такое Capabilities (далее буду кратко писать CAP), потом постепенно перейду к примерам.

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

Читать далее
1
23 ...