Перейти к содержимому
ServerDeskОставить заявку
// кейс

Как мы держим собственный общий сервер под Pulse

Агент и мониторинг, которые мы ставим клиентам, работают и на нашем собственном общем сервере, а новые версии агента приходят на него первыми. На этом сервере восемь проектов, в том числе этот сайт и сам Pulse. Рассказываем, что настроено, что нашли и исправили и что ещё впереди.

5 мин чтения

// коротко
Задача
Восемь проектов на одном сервере: общий диск и общий nginx на входе. Ошибка одного проекта бьёт по всем.
Что сделали
Мониторы и агент Pulse, канарейка обновлений агента, почасовые и ночные копии с копией вне сервера, тревоги в Telegram.
Что получилось
Агент сам обновился с v1.0.2 до v1.0.7. Почасовая копия базы Pulse — 52 КБ вместо 1,2 МБ. Клиент Business на пределе тарифа — около 4 ГБ вместо 31 ГБ.
Что дальше
Внешний сторож вне сервера, вторая локация проверок, отдельный диск под базу Pulse по мере роста.

Что на сервере

На общем сервере ServerDesk работают восемь проектов. Среди них — serverdesk.ru и Pulse на app.serverdesk.ru: приложение, база PostgreSQL и планировщик проверок. Проекты живут в своих контейнерах, а на входе у всех общий nginx.

У такого устройства два следствия. Pulse наблюдает за сервером, на котором сам и работает, — значит, нужен ещё и взгляд снаружи. И любая ошибка одного проекта — переполненный диск, сломанная конфигурация nginx — бьёт по всем восьми.

Мониторы и агент

Организация ServerDesk в Pulse — на тарифе Business, как у клиента. На 9 октября в ней 12 мониторов; после выкладки исправлений аудита безопасности все двенадцать были в состоянии «работает».

С 8 октября на сервере работает агент Pulse: раз в минуту он присылает загрузку процессора, память, диски и службы. Тревога по диску стоит на 80 и 90 %. Раз в час Pulse строит прогноз для каждого диска, а норма нагрузки по дню недели и часу складывается за две-три недели работы агента. Как это устроено, мы подробно разобрали в статье «Агент на сервере».

Точки проверки тоже опробованы вживую: агент из другой сети прислал на прод результат проверки serverdesk.ru.

Канарейка обновлений

Наш сервер — канарейка: новая версия агента приходит на него сразу, остальным — только после того, как руководитель выпустит её для всех. С 8 октября агент на сервере сам обновился с v1.0.2 до v1.0.7, а с v1.0.4 служба обновления завершается чисто.

Зачем нужна канарейка, хорошо видно на версии 1.0.6. Проверка govulncheck нашла 34 уязвимости стандартной библиотеки на путях агента: он собирался на Go 1.23, а эта версия больше не поддерживается. Агент пересобрали на Go 1.27, уязвимостей стало ноль, и наш сервер получил новую версию первым — сам, по каналу «канарейка».

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

Копии и место на диске

Копии базы Pulse делаются каждый час и каждую ночь и уходят в том числе во внешнее хранилище. Почасовая копия нужна, чтобы при аварии терять не больше часа: инцидентов, настроек, обращений, чата.

Девятого октября мы посчитали, сколько места займёт клиент Pulse, выбравший тариф до предела. Размер строк замерили на проде: проверка — около 250 байт в базе с индексами, замер агента — 1,8 КБ, часовая сводка — 190 байт. Нашлось неприятное: на диске лежали 52 копии одной и той же базы, и копии весили впятеро больше самой базы. Клиент Business на пределе тарифа занял бы 31 ГБ.

Решения приняли в тот же день:

  • сырые проверки хранятся 7 дней вместо 30 — отчёты, SLA и графики длиннее суток считаются по часовым сводкам, а их Pulse хранит 400 дней;
  • замеры агента — 3 дня вместо 14: графики сервера показывают сутки, наблюдения считаются по часовым сводкам;
  • собственных ночных копий Pulse — 3 вместо 14: рядом лежат ночные копии всего сервера;
  • почасовые копии — без сырых проверок и замеров агента; схема и сводки в них остаются.

Политику конфиденциальности Pulse обновили в тот же день: срок хранения истории стал короче, и это в пользу клиента.

Результат проверили на проде: почасовой дамп Pulse уменьшился с 1,2 МБ до 52 КБ, в нём все 59 таблиц, копия ушла во внешнее хранилище. Сырых проверок в базе стало вдвое меньше — 23 тысячи строк вместо 46 тысяч, самой старой неделя. Клиент Business на пределе тарифа теперь займёт около 4 ГБ, Pro — 0,65 ГБ, Free — 0,05 ГБ.

Цена решения: при аварии теряются только сырые проверки, сделанные после последней ночной копии, — не больше суток. Инциденты, настройки, обращения и сводки есть в почасовой копии.

Ошибка одного проекта бьёт по всем

На общем сервере особенно ценны находки, которые касаются соседей. Аудит безопасности 9 октября нашёл две такие ошибки — в подключении доменов клиентов к общему nginx и в резервном хранении заявок с этого сайта. Обе исправлены, и теперь сбой одного проекта не задевает остальные: каждое изменение общей конфигурации проверяется отдельно, а всё, что пишется на общий диск, ограничено по объёму.

И одна находка нагрузочного теста — до первого крупного клиента. На отдельном стенде собрали организацию Business на пределе тарифа: 200 мониторов, 25 серверов с агентом и месяц истории — 8,6 млн проверок. Панель такой организации выбирала из базы все её проверки и обрезала их в памяти: страница не открылась за две минуты, процесс Pulse упал по памяти. На общем сервере это остановило бы Pulse для всех клиентов. Теперь последние проверки берутся одним запросом по индексу, и на тех же данных панель отвечает за 0,2 секунды.

Тревоги — в Telegram

Оповещения Pulse приходят в Telegram, с графиком времени ответа под тревогой. Тревоги клиентов на обслуживании дублируются в чат дежурной смены с пометкой «[Клиент]» и кнопками «Подтвердить» и «Взять в работу». Туда же приходят заявки с этого сайта. Как устроены дежурства — в статье «Дежурство без хаоса».

Даже репетиция запуска шла через настоящий чат смены. Весь путь первого клиента прошли на проде тестовым аккаунтом, а сообщения в чат приходили с пометкой «РЕПЕТИЦИЯ», чтобы на них не реагировали как на настоящие. После проверки тестовые аккаунты, организации и серверы удалили; записи в журнале доступа остаются, так задумано.

Что впереди

  • Внешний сторож — проверка, которая живёт вне сервера и сообщит, если сервер недоступен целиком: мониторинг на самом сервере этого сделать не может.
  • Вторая локация проверок на другом сервере — чтобы статус-страница показывала, из скольких локаций сервис недоступен.
  • Отдельный диск или сервер под базу Pulse — когда клиентов Business станет больше. Тревога по диску на 80 и 90 % предупредит заранее.
serverdesk // pulseбесплатный тариф без карты
Попробуйте на своём проекте

Pulse — бесплатно, без карты и без срока. Если нужны ещё и инженеры, на абонементе ServerDesk проверки настраивает наша смена, она же реагирует на инциденты по SLA.

// read next

Читайте также

// инциденты

Как подтвердить отказ, прежде чем будить человека

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

6 мин чтения

// дежурства

Дежурство без хаоса: ротация по людям, подмены и подтверждение из Telegram

Как в Pulse устроены дежурства: кто может дежурить, куда приходит пейдж, лестница эскалации, подмены, напоминание о смене и кнопка «Подтвердить» в Telegram.

6 мин чтения

// агент

Агент на сервере: что видно изнутри

Что агент Pulse видит на сервере Linux или Windows: нагрузка, диски и службы, прогноз заполнения диска, норма нагрузки по дню недели и часу, процессы — только с согласия.

6 мин чтения