Документация/Продакшен
Queues: очереди Kafka и RabbitMQ
Как в одном виде смотреть топики и очереди Kafka и RabbitMQ, группы потребителей с их отставанием, DLQ и сообщения — и как дать агенту доступ к брокерам на том уровне, который выберете вы.
«Queues» — вид для брокеров сообщений Kafka и RabbitMQ. Он показывает, кто перестал читать сообщения и почему, разбирает очереди мёртвых писем и даёт прочитать сами сообщения, а для RabbitMQ ещё и хранит историю очередей. В очередь мёртвых писем (DLQ) попадают сообщения, которые не удалось обработать. К брокеру приложение подключается с вашего компьютера.
Агенту для работы с брокерами нужен модуль «Queues». Модуль — набор инструментов, инструкций и навыков агента для одной области, подробнее — на странице Модули. Вам самим модуль не нужен: вид работает и без него. Агент с модулем может читать то же самое, но только на том уровне доступа, который вы ему дадите: по умолчанию брокеры для агента закрыты.
Как открыть
- В полосе заголовка окна выберите «Другие инструменты» → «Queues». Кнопку «Queues» можно вынести в саму полосу: это делается в «Настройки → Расположение панелей».
- Или наберите в поле чата слэш-команду
/queues(её синоним —/kafka).
Слева в виде — список подключений, справа — вкладки выбранного подключения. Красная отметка на кнопке «Queues» значит, что есть алерты, а отметка ожидания — что во вкладке «Запросы» запрос агента ждёт вашего решения. Отличить их можно по подсказке: наведите курсор на кнопку, и она покажет число алертов («Queues: алертов — N») или запросов агента («Queues: агент просит — N»). Чтобы вернуться на шаг назад внутри вида, нажмите «←» в строке подключения, ⌘ [ (на Windows и Linux — Ctrl [) или Alt ←. Вид можно открепить в отдельное окно. Кнопка «Агент» показывает разговор с агентом рядом с видом.
Как подключить брокер
- Нажмите «Добавить подключение» (или «+» над списком подключений).
- Заполните «Имя» и выберите «Брокер».
- Kafka: в поле «Адреса» укажите
host:port, несколько адресов — через запятую. В «Вход» выберите «без входа», «SASL PLAIN», «SASL SCRAM-SHA-256» или «SASL SCRAM-SHA-512»; для вариантов с SASL заполните ещё «Пользователь» и пароль. Нужен TLS — включите «TLS» и укажите «Файл CA (PEM)». Если сообщения закодированы по схемам, добавьте «Schema registry»: подойдёт любой registry, совместимый с Confluent. - RabbitMQ: в «Где брокер» выберите «по адресу» и укажите «Адрес management». Это адрес веб-интерфейса плагина
management, обычно
http(s)://host:15672; порт AMQP 5672 сюда не подходит. Или выберите «в Kubernetes» и заполните «Context», «Namespace», «Service» и «Порт» — приложение само откроет проброс порта к этому сервису. Затем заполните «Пользователь», пароль и «vhost». Пустой «vhost» значит все vhost, которые видит учётная запись. - В «Откуда пароль» выберите «ввести здесь (связка ключей)» или «из хранилища секретов». Во втором случае укажите
ссылку:
vault://путь#ключ,env://ИМЯилиk8s://namespace/secret/ключ. Значение по ссылке приложение читает при подключении и нигде не сохраняет. - Нажмите «Проверить». Если всё в порядке, появится «Отвечает: …». Затем нажмите «Сохранить».
В блоке «Дополнительно» есть ещё настройки:
- «Окружение» —
prod,stageи т. п. Политика организации может быть для окружения строже: запретить в нём действия над брокером и задать для агента более строгое маскирование; - «Следить, пока приложение открыто» — по умолчанию выключено. Если включить, приложение раз в минуту ищет остановленных потребителей, отставание и рост DLQ, даже когда вид закрыт;
- «Проект для инцидентов и схем» — если поле пустое, приложение берёт проект, открытый в окне;
- для Kafka — «Ещё топики DLQ», для RabbitMQ — сбор истории, адрес Prometheus и пороги «Когда отмечать проблему».
Совет
Для RabbitMQ нужен плагин rabbitmq_management. Историю задним числом приложение берёт из
rabbitmq_prometheus и вашего Prometheus. Для вкладки «Трассировка» нужен rabbitmq_tracing, для повторной отправки
из DLQ — rabbitmq_shovel и rabbitmq_shovel_management. Смотреть хватит учётной записи с тегом monitoring, а для
действий лучше завести отдельную учётную запись с правами на запись.
Kafka
У подключения Kafka такие вкладки: «Topics», «Consumer groups», «DLQ», «Сообщения», «Запросы», «Алерты», «Журнал».
- «Topics» — партиции, число сообщений, размер, входящий поток, отставание. Нажмите на топик, чтобы открыть его сообщения.
- «Consumer groups» — карточки групп, проблемные стоят сверху. На каждой карточке короткий вердикт: «Читает», «Отстаёт», «Остановился», «Партиция стоит», «Никто не читает», «Коммитов ещё нет». Если раскрыть карточку, видны партиции и участники группы.
- «DLQ» — топики с окончаниями
.dlq,-dlq,_dlq,.DLT,-dlt,dead-letter,deadletterи те, что вы указали сами. Блок «Почему не обработались» собирает причины из заголовков сообщений. - «Сообщения» — до 500 сообщений: последние, с начала, с офсета или с момента времени. Фильтровать можно по ключу, заголовку и тексту. Чтение ничего не забирает из топика и не сдвигает офсеты потребителей.
Тело сообщения раскодируется по схеме из registry (Avro, Protobuf, JSON Schema). Без registry приложение ищет схему в
проекте: в файле .koder/queues.json вида {"topics": {"orders": {"value": "schemas/order.avsc"}}} или по имени
<топик>.avsc, <топик>-value.avsc, <топик>.proto в папках schemas/, schema/, avro/, proto/. Схемы нет —
тело показывается как JSON, текст или байты.
RabbitMQ
У подключения RabbitMQ такие вкладки: «Queues», «История», «Consumers», «Топология», «Сообщения», «Трассировка», «Запросы», «Алерты», «Журнал».
- «Queues» — очереди с числами ready и unacked, скоростями и вердиктом: «Читается», «Никто не читает», «Консьюмер завис», «Цикл redelivery», «Растёт».
- «История» — графики сообщений, скоростей и консьюмеров за час, сутки, неделю или свой период и список «Что произошло». Сам RabbitMQ историю не хранит, поэтому её собирает приложение, пока оно открыто, и хранит 7 дней. Если указан Prometheus, приложение берёт историю из него.
- «Consumers» — кто какую очередь читает, prefetch, режим подтверждения и какие консьюмеры зависли.
- «Топология» — граф exchange → привязка → очередь → консьюмер → сервис.
- «Сообщения» — «Прочитать (get)», до 100 сообщений. Такое чтение оставляет след: RabbitMQ возвращает сообщения в очередь с флагом redelivered, и порядок может измениться. Приложение предупреждает об этом перед каждым чтением. Unacked-сообщения прочитать нельзя.
- «Трассировка» — вы задаёте время и объём, а трассировка ловит сообщения очереди, exchange или routing key и потом выключается сама. Пойманные сообщения хранятся только на вашем компьютере.
Действия над брокером
Для Kafka есть действия «Повторная отправка из DLQ», «Сдвиг офсетов группы», «Очистка топика» и «Тестовое сообщение». Для RabbitMQ — повторная отправка из DLQ, очистка очереди, тестовое сообщение и закрытие соединения клиента.
По умолчанию ни одно действие не разрешено, и кнопок для них в виде нет. Чтобы разрешить действия, откройте «Настройки → Безопасность агента → Подключения», раскройте «Ещё: брокеры сообщений, браузер, Jira, скрытие данных…» и в блоке «Брокеры сообщений» найдите нужное подключение. В строке «Разрешённые здесь действия» у него отдельный флажок на каждое действие этого брокера, Kafka или RabbitMQ: отметьте те, что хотите разрешить. Действие, которое запрещает политика организации, отметить нельзя.
Каждое действие проходит три шага: форма → «Показать план» (куда, сколько сообщений и первые из них) → «Выполнить».
Перед выполнением приложение заново читает брокер, и если он заметно изменился, вы увидите новый план. Чтобы очистить
топик или очередь, закрыть соединение или сильно сдвинуть офсеты назад, нужно ввести имя объекта. К тестовым сообщениям
приложение добавляет заголовок x-koder-test: 1. Каждое выполненное действие попадает во вкладку «Журнал».
Алерты
Алерты бывают такие: «Потребитель остановился», «Большое отставание», «Растёт DLQ», «Цикл redelivery», «Очередь растёт». Приложение проверяет их, пока вид открыт, а у подключений со «Следить» — ещё и раз в минуту в фоне, пока приложение запущено. «Queues» — не система мониторинга: закрыли приложение, и алертов нет. Если окно не в фокусе, придёт системное уведомление. Если подключение открыто агенту хотя бы на уровне «Метаданные», алерт попадает ещё и в инциденты проекта.
Агент и брокеры
Как включить
- Включите модуль «Queues» в «Настройки → Модули» или кнопкой «Включить для агента». Кнопка стоит на плашке под шапкой вида «Queues»: плашка видна, пока модуль выключен и есть хотя бы одно подключение. Модуль начинает работать, как только появится хотя бы одно подключение. Шаг можно пропустить: когда на шаге 2 вы выберете подключению уровень доступа выше «Закрыто», приложение само включит модуль, если организация его не запретила.
- Откройте подключение агенту: «Настройки → Безопасность агента → Подключения» → «Ещё: …» → «Брокеры сообщений».
- Изменения действуют в новых чатах.
У каждого подключения свой уровень доступа:
| Уровень | Что видит агент |
|---|---|
| «Закрыто» (по умолчанию) | только имя подключения |
| «Метаданные» | топики, группы, отставание, счётчики DLQ, у RabbitMQ ещё история и топология — без тел, ключей и заголовков сообщений |
| «Сообщения» | ещё сообщения и примеры из DLQ, в маскированном виде |
| «Сообщения и запросы» | ещё может попросить вас о действии над брокером |
Там же доступ можно сузить списками vhost, очередей, топиков и exchange: то, что вы закрыли, агент не увидит даже по имени. Подробнее об уровнях — на странице «Доступ агента к базам, кластерам и очередям».
Что может агент
- Читать списки топиков и очередей с вердиктами, отставание групп, DLQ, историю и топологию RabbitMQ.
- Читать сообщения Kafka. На уровне «Сообщения» подтверждение не нужно: чтение брокер не меняет.
- Читать сообщения RabbitMQ и включать трассировку — только после того, как вы нажмёте «Разрешить», и так на каждый вызов. Варианта «Больше не спрашивать» здесь нет, разрешить с телефона тоже нельзя.
- Менять брокер агент не может. На уровне «Сообщения и запросы» он оставляет запрос с планом во вкладке «Запросы», а вы нажимаете там «Посмотреть и решить…» или «Отклонить» с причиной. Запрос ждёт час и пропадает, если перезапустить приложение. Просить агент может только о действиях, которые разрешены на подключении.
Когда агент обращается к брокеру, вид «Queues» сам выходит в центр окна, но не чаще раза в 30 секунд и не тогда, когда вы печатаете.
Маскирование
Всё, что получает агент, — тела, ключи, заголовки, причины из DLQ, тексты алертов — приложение маскирует, прежде чем отдать ему. «Стандартный набор» скрывает почту, телефоны, ФИО, паспорта, СНИЛС, ИНН, номера карт, адреса, токены и пароли. «Только структура» оставляет ключи и типы и прячет значения. Свои правила на JSONPath можно добавить в блоке «Маскирование для агента». Сами вы в виде видите сообщения без маскирования.
Ограничения
- Брокер должен быть доступен с вашего компьютера: приложение подключается к нему оттуда.
- Если проект на сервере по SSH, приложение всё равно опрашивает брокер с этого компьютера, и инструменты агента работают. Схемы из репозитория и инциденты для такого проекта не используются.
- История RabbitMQ есть только с того момента, как включён сбор, и только за время, когда приложение было открыто, — если приложение не берёт её из Prometheus.
- Stream-очереди RabbitMQ прочитать нельзя. Число сообщений в compacted-топиках Kafka приблизительное.
Какие данные куда уходят
Приложение само соединяется с брокером, registry, Prometheus, Vault и Kubernetes — с вашего компьютера и под вашими
учётными данными. Подключения хранятся в ~/.koder/ade/queues.json, пароли — в системной связке ключей. То, что
прочитал агент, уже в маскированном виде попадает в запрос к модели и идёт к ней через сервер DevMachine. Подробнее —
на странице «Данные и приватность».
Что дальше
Обновлено · Нашли неточность? Напишите на support@devmachine.ai или в Telegram.
