Мониторы
Монитор — это одна вещь, за которой вы хотите следить, и правило, по которому решается, здорова ли она. Видов тридцать. Большинство из них делает запрос из нашей сети и оценивает ответ; два ждут, когда что-то придёт из вашей, а четыре собирают то, что ваши маршрутизаторы экспортируют на ваш собственный частный зонд.
Виды
Веб и сеть
| Вид | Что проверяет |
|---|---|
http | Что URL отвечает — с кодом статуса, временем ответа и, при желании, строкой, которая должна быть в теле. |
ping | Что хост отвечает на ICMP. |
tcp | Что порт принимает соединение. |
udp | Что на датаграмму приходит ответ. |
dns | Что имя разрешается — при желании именно в те записи, которых вы ждёте. |
Сертификаты и домены
| Вид | Что проверяет |
|---|---|
ssl_cert | Сколько осталось сертификату и цела ли цепочка. |
tls_audit | Девять рукопожатий: каждая версия TLS, слабые семейства шифров, длины ключей и заголовки безопасности. Проба, которую мы не можем выполнить, сообщает не проверено, а не «пройдено», — см. ниже. |
domain_expiry | Сколько осталось регистрации домена. |
blacklist | Есть ли адрес или домен в основных списках блокировки. |
Почта
| Вид | Что проверяет |
|---|---|
smtp, imap, pop3 | Что сервер ведёт настоящий диалог на собственном протоколе и договаривается о STARTTLS. Он никогда не аутентифицируется: доказать вход означало бы хранить рабочий пароль от почтового ящика для каждого монитора. |
mail_posture | Могут ли другие доверять почте домена. Читает SPF, DKIM и DMARC из DNS; при указанном почтовом ящике каждый час отправляет настоящее письмо через ваш собственный сервер и оценивает то, что доходит. |
Инфраструктурные протоколы
Они существуют потому, что проверка tcp по порту почти ничего о них не говорит. SMSC принимает TCP ещё долго после того, как перестаёт кого-либо регистрировать; стек SIP может зависнуть с открытым сокетом; сервер XMPP с истёкшим сертификатом прекрасно завершает рукопожатие TCP.
| Вид | Что проверяет |
|---|---|
snmp | Опрашивает список OID и сравнивает каждый с порогом, со своей серьёзностью на каждую проверку. |
smpp | Подключается и отключается. Он никогда не отправляет сообщение. |
sip | Отправляет OPTIONS. Финальный ответ вне 2xx — это деградация, а не отказ: прокси, отвечающий 405 незнакомцу, работает правильно и отказывает нам. |
xmpp | Открывает поток и договаривается о STARTTLS. |
grpc | Вызывает grpc.health.v1.Health/Check. gRPC передаёт свой статус в трейлерах HTTP/2, поэтому неудавшийся вызов всё равно отвечает 200 OK — именно поэтому монитор http его не заменит. Тариф Pro и выше. |
Базы данных
Pro и выше. Проверка tcp на 5432 подтверждает лишь то, что что-то приняло соединение, — а все интересные сбои базы данных оставляют сокет открытым: Postgres в режиме восстановления, исчерпанный протекающим приложением лимит подключений, роль с истёкшим паролем, переименованная база, не смонтированный каталог данных. Поэтому эти проверки открывают соединение, проходят аутентификацию и задают серверу один простейший вопрос.
| Тип | Что проверяется |
|---|---|
postgres | Подключается, входит и выполняет select version(). Имя базы обязательно, потому что в Postgres нельзя подключиться без него. |
mysql | То же самое, и покрывает MariaDB — это тот же протокол, а не вторая проверка. |
redis | Подключается, проходит аутентификацию и отправляет PING. Реплика, всё ещё загружающая данные, отвечает -LOADING, и это сообщается как отдельная причина, а не как таймаут. |
mongodb | Подключается, проходит аутентификацию и выполняет команду ping. Поддерживаются адреса mongodb+srv — именно так обычно обращаются к управляемому MongoDB. |
mssql | Подключается по TDS, входит и выполняет select @@version. |
Ни одна из них ничего не читает и не пишет. Это проверка доступности, а не синтетическая транзакция: выделите ей учётную запись, которая не может ничего, кроме подключения.
Учётные данные хранятся без шифрования, потому что зонд, выполняющий проверку, получает конфигурацию как есть. Поэтому эти пять работают только с зонда, допущенного к персональным данным, — то же ограничение, что у snmp и smpp.
Это одно из двух мест. Ваш собственный приватный зонд — именно на него эти проверки и рассчитаны: он работает на вашем оборудовании внутри вашей сети, поэтому конфигурация никогда не покидает вашу инфраструктуру, и чаще всего он — единственное, что вообще способно достучаться до базы, которую стоит наблюдать: база за VPC, приватным каналом или списком разрешённых адресов недостижима ни из чьей чужой сети, включая нашу. Иначе — наши собственные точки наблюдения в ЕС, для базы, которая действительно доступна публично.
Контейнеры
Pro и выше. Проверка опубликованного порта контейнера отвечает за прокси перед ним. Контейнер, падающий по кругу за политикой перезапуска, доступен по несколько секунд за раз, неудачный HEALTHCHECK оставляет порт открытым, а завершение из-за нехватки памяти с последующим перезапуском выглядит как один медленный запрос. Движок Docker знает обо всех трёх.
| Вид | Что проверяет |
|---|---|
docker | Запрашивает у движка один контейнер по имени или id. Запущен — доступен; неисправный HEALTHCHECK, приостановленный, остановленный или убитый из-за нехватки памяти контейнер — недоступен; проверка работоспособности, которая ещё запускается, или перезапуск по политике перезапуска за последние пять минут — деградация. Она ничего не запускает, не останавливает и не выполняет. |
Доступ к API движка — это root на этом хосте, поэтому адрес и клиентские сертификаты являются учётными данными, и этот вид запускается только с зонда, допущенного к персональным данным. Unix-сокет открывает только зонд, запущенный с DOCKER_SOCKET_ENABLED=true — это вы включаете на своём приватном зонде рядом со своим движком, а мы на своих не включаем никогда; в любом другом месте проверка воздерживается, а не объявляет ваш контейнер недоступным. Адрес tcp:// или https:// с клиентскими сертификатами работает с любого из них.
Сетевой трафик
Business и выше. Проверка доступности говорит, что канал отвечает; она не может сказать, что канал забит, что задание резервного копирования заливает его в полдень или что трафик к вашему веб-уровню тихо упал до нуля. Ваши маршрутизаторы и коммутаторы уже всё это считают и умеют экспортировать. Эти виды собирают экспорт и превращают его в скорости, разбивку по протоколам и самые загруженные порты и адреса.
| Вид | Что проверяет |
|---|---|
netflow | NetFlow v5 и v9 от маршрутизатора, на UDP 2055. Шаблоны запоминаются по мере поступления; записи, пришедшие раньше своего шаблона, подсчитываются и отбрасываются, но никогда не угадываются. |
jflow | J-Flow от маршрутизатора Juniper — по сути тот же NetFlow — на том же порту. |
ipfix | IPFIX, стандарт IETF и преемник NetFlow v9, на UDP 4739 — включая поля переменной длины и поля конкретных производителей. |
sflow | sFlow v5 от коммутатора, на UDP 6343: выборочные заголовки пакетов, через метки VLAN до IPv4 или IPv6, пересчитанные обратно по частоте выборки, которую сообщает коммутатор. |
Любой порог необязателен — максимальная битовая скорость, минимальная битовая скорость, максимальная скорость пакетов. Выше или ниже порога — деградация. Без порогов монитор записывает трафик и строит график, не оповещая по значению. Экспортёр, который молчит дольше, чем вы допускаете, — недоступен, а тот, что шлёт не тот протокол — sFlow на монитор NetFlow, — недоступен с сообщением, которое так и говорит.
Эти виды работают только на вашем собственном приватном зонде. Экспорт потоков идёт по UDP, в котором нет аутентификации: коллектор в нашей общей сети должен был бы доверять адресу отправителя, а его может подделать или присвоить кто угодно. До зонда внутри вашей сети могут достучаться только ваши маршрутизаторы. Кроме того, записи о трафике остаются у вас — в них адреса людей из вашей сети, поэтому зонд агрегирует их там, куда они приходят, и отправляет нам только скорости и топ-10 таблицы. Запустите зонд с FLOW_COLLECTOR_ENABLED=true, опубликуйте UDP-порты, направьте на него маршрутизаторы и выберите этот зонд при создании монитора.
То, что сообщает о себе нам
| Вид | Что проверяет |
|---|---|
heartbeat | Задание cron или пакетный процесс вызывает URL, когда заканчивает. Молчание сверх интервала и есть сбой. Берите это для того, чего больше никто не видит, — ночной резервной копии, ежечасного импорта. |
server_agent | Небольшой агент на вашей собственной машине сообщает о процессоре, памяти и диске. Заберите его через curl по ссылке на мониторе. |
Как часто это выполняется
Интервал выбираете вы; нижнюю границу задаёт ваш тариф. Free проверяет каждую минуту, Starter — каждые 45 секунд, Pro — каждые 30, Business — каждые 15, Enterprise — каждые 5.
У четырёх видов своя нижняя граница, независимо от тарифа, потому что ответ не меняется от минуты к минуте, а спрашивать чаще было бы шумом и нагрузкой на чужой сервер:
| Вид | Не чаще чем |
|---|---|
blacklist | раз в час |
ssl_cert | раз в шесть часов |
domain_expiry, tls_audit | дважды в сутки |
mail_posture | дважды в сутки при чтении записей, раз в час, когда отправляет настоящую почту |
Аутентификация почты — и настоящая отправка
Монитор mail_posture читает SPF, DKIM, DMARC, MTA-STS и TLS-RPT из DNS и сообщает, что сломано. Это находит испортившуюся запись — и не находит того, о чём эти записи являются предсказанием: домен может публиковать безупречный SPF и отправлять с сервера, который эта запись отвергает, публиковать ключ DKIM и подписывать уже сменённым, а шлюз посередине может переписать заголовок и сломать подпись, которая была верной при отправке.
Укажите монитору почтовый ящик — адрес и учётные данные SMTP и IMAP — и он будет измерять, а не предсказывать. Каждый час он передаёт письмо вашему собственному серверу исходящей почты на адрес нашего приёмника, который проверяет SPF и DKIM у того, что действительно пришло, а затем отвечает в ящик, чтобы следующий запуск подтвердил по IMAP, что ваш домен ещё и принимает почту. Обе стороны должны сработать. Домен, который безупречно отправляет и молча перестал принимать, — это настоящий сбой, и тот, который любая проверка «только на отправку» считает нормой.
Два момента, которые стоит знать заранее. Учётные данные хранятся незашифрованными и передаются зонду, который выполняет проверку, — это верно для конфигурации любого монитора, потому что запрос делает именно зонд, — поэтому монитор с почтовым ящиком работает только внутри Европейского союза и никогда на наших зондах в других местах. Используйте пароль приложения, если провайдер их выдаёт. А наш ответ удаляется из ящика, как только прочитан, чтобы папка не переполнялась.
Интервал — это не скорость, с которой вы узнаете о сбое
Эту часть стоит прочитать дважды. Одна неудачная проверка инцидента не открывает. Монитор должен не пройти три раза подряд — это настройка confirmations, и три стоит по умолчанию, — прежде чем кому-либо сообщат.
Но это не три интервала. Когда проверка не проходит, следующая переносится вперёд, а не ждёт полного интервала, так что пятиминутный монитор подтверждает сбой заметно быстрее пятнадцати минут. Результат может только приблизить следующую проверку и никогда не отдалить её.
Уменьшите confirmations, если предпочитаете, чтобы вас будили раньше и иногда напрасно. Увеличьте — для того, что, как вы знаете, «мигает».
Проверки чередуются между локациями
Мы проверяем из нескольких мест, по одному на интервал, по очереди. Три точки обзора у пятиминутного монитора означают, что каждая видит его раз в пятнадцать минут, тогда как сам монитор по-прежнему проверяется каждые пять.
Именно это придаёт подтверждению смысл: три неудачи подряд — это три неудачи, увиденные из трёх разных мест, так что зонд, который просто не достаёт до вашего сервера, безвреден: следующий регион проходит, и серия обнуляется.
Неудача при том, что в другой локации всё хорошо, — это деградация, а не отказ. Отказ должен означать, что ваш сайт недостижим, а не что его не видит одна точка обзора. Это по-прежнему считается неудачей, и инцидент всё равно открывается — с серьёзностью «деградация».
Файрвол — это не сбой
Сайт, заблокированный в одной локации, не проходит там ни одной проверки, работая при этом везде остальной. Считать это простоем значило бы превратить вашу цифру доступности в утверждение о нашей маршрутизации, а не о вашем сервисе.
Поэтому регион, который ни разу не достучался до монитора, исключается из него после трёх неудач. Регион, который раньше до него доходил, а теперь нет, продолжает считаться всегда: оттуда это настоящий сбой, и скрывать его было бы хуже.
Если мир вокруг сайта изменился — государственная блокировка, пропавший маршрут, добавленное позже географическое ограничение, — монитор можно перекалибровать с его страницы. Это сбрасывает историю всех регионов для этого одного монитора, и нынешнее поведение становится новой точкой отсчёта. Это делается по одному монитору и вручную, потому что одним измерением постоянную блокировку от постоянного сбоя не отличить.
Где выполняются проверки и что мы туда отправляем
Некоторые точки обзора находятся за пределами ЕЭЗ. Проверка, в конфигурации которой могут быть персональные данные — заголовок запроса, тело запроса, — выполняется только изнутри. Это обеспечивает планировщик, а не политика, и это проверяется на настоящей базе данных при каждой сборке. snmp, smpp и пять типов баз данных ограничены так же, потому что у обоих учётные данные и есть протокол.
«Не проверено» — это не «пройдено»
Для tls_audit у каждой пробы три исхода, а не два: поддерживается, отклонено или не проверено. OpenSSL 3 в Node не собирает ни RC4, ни 3DES, так что эти два семейства из нашего парка предложить нельзя никогда, — а молчание под этими заголовками читалось бы как «мы посмотрели, и они выключены», то есть как ложное «всё чисто» ровно по тем находкам, ради которых аудит TLS и открывают.
Зависимости
Скажите монитору, от чего он зависит — от базы данных, шлюза, вышестоящего API, — и когда зависимость упадёт, то, что за ней, будет помечено как следствие вместо того, чтобы открывать собственные инциденты. Один инцидент, а не сорок, и страница называет причину, а не симптомы.
Окна обслуживания
Запланируйте окно — и пока оно открыто, никого не поднимут. Берите это для развёртывания, о котором вы знаете, что оно уведёт сервис в офлайн. По умолчанию проверки продолжают выполняться и записываться, поэтому эти минуты входят в цифру доступности наравне с остальными: окно убирает оповещение, а не историю. Отключите «продолжать проверки» — и пока окно открыто, ничего не проверяется, так что в истории остаётся пропуск, а не провал. Окно может повторяться ежедневно, еженедельно или ежемесячно, и оповещения придерживает каждое повторение, а не только первое.
Пауза
Монитор на паузе не проверяется и ни против чего не считается. Он сохраняет свою историю, так что пауза и возобновление записи не теряют.