0. Введение
Эта методичка поможет техподдержке самостоятельно искать логи, диагностировать проблемы и оформлять баг-репорты для разработчиков. Работаем в kibana93.logan.wellsoft.pro (Kibana 9.3, Elasticsearch 9.3).
Что вы научитесь делать
- Искать записи через AI-агента и руками в Discover
- Фильтровать по проекту (
fields.ProjectName), уровню (level), времени и Request ID (fields.RequestId) - Отличать Information от Warning и Error
- Понимать, почему старых логов нет (ILM-политика удаляет)
- Оформлять issue со ссылками на конкретные записи (Single Document)
Зайдите в Kibana → AI-агент и задайте вопрос: «Какие последние ошибки были у проекта legion за последние 15 минут?». Затем откройте вкладку Discover, выберите DataView ascore и найдите хотя бы одну запись за последние 15 минут.
Это задание выполняется в рабочей системе, здесь только самопроверка.
1. AI-агент
AI-агент — чат-бот, встроенный в Kibana 9.3. Подключён к документации Kibana/Elastic и знает структуру наших индексов ascore-*. Модель — MiniMax с большим контекстным окном, поэтому длинные логи переваривает нормально.
Когда использовать
- Нужен быстрый первичный анализ ошибки
- Не уверены, какой DataView/поле искать
- Хотите сформулировать запрос на естественном языке
- Надо собрать цепочку по RequestId через несколько компонентов
fields.ProjectName часто отличается от «человеческого» имени (comfortCity, а не «Комфорт-Сити»; pskDom, а не «ПСК Дом»). Пишите ключ в кавычках и в правильном регистре. Ответ приходит за 15–20 секунд — не тыкайте «ещё раз».
Клиент жалуется: «Не проходит оплата в Легионе». Какой порядок действий оптимален?
2. Поиск в Kibana (Discover)
Вкладка Discover — основной инструмент. По умолчанию показывает последние 15 минут. Интервал меняется абсолютно (от-до) или относительно (последние N часов/дней).
DataView, которые реально есть
ascore— все индексыascore-*, основной для общих поисков. Поле времени@timestamp.ascore-errors— только ошибки (ascore-errors-*). Сюда пишутся исключения/ошибки отдельно.ascore-oauth— логи авторизации (ascore-oauth-*). Поле времениtimestamp(без @).
Ключевые элементы интерфейса
- Строка поиска — KQL (Kibana Query Language) или Lucene
- Фильтры (+) — точные фильтры по полям (
fields.ProjectName,level,fields.RequestId,fields.Environment) - Временной селектор — календарь или пресеты
- Раскрытие строки — стрелка слева → Single Document, видны все поля
Клиент сообщил об ошибке 16 апреля около 14:00. Какой временной диапазон выставить, чтобы не промахнуться и не ждать долгой выборки?
3. Фильтры и синтаксис поиска
Основные поля для фильтрации
fields.ProjectName | Внутренний ключ проекта: legion, comfortCity, enco, ukDrevo, pskDom, usi и др. |
level | Уровень: Information, Warning, Error (Fatal — редко, у нас в основном в ascore-errors-*) |
fields.RequestId | GUID запроса: 800124e2-0018-db00-b63f-84710c7967bb |
fields.Environment | Production / Staging / Development |
fields.Type | HttpRequest, HttpResponse, syncjob и т.д. |
message / messageTemplate | Текст лога и его шаблон |
Синтаксис KQL
*timeout*.
Найти все записи с уровнем Error по проекту comfortCity с конкретным RequestId rq-998. Составьте KQL-запрос:
Попробуйте фильтры. Введите, например, level:Error или legion и нажмите Search.
4. Типы логов и хранение
Уровни логирования
Information — штатное событие. Обычно HTTP-запрос/ответ. В проде их 99.86% от всех логов.
Warning — стоит обратить внимание, но не критично. Предвестник. ~0.14% объёма.
Error — что-то отвалилось, нужен разбор. ~0.003% объёма, но именно это важно.
Fatal — полный крах. Крайне редко, обычно попадает в индекс ascore-errors-*.
Политика хранения (целевая)
Поскольку 78% объёма — это HttpRequest/HttpResponse на уровне Information (нужны только для real-time диагностики), а Error-ов 0.003% (нужны долго) — храним их по-разному:
| Что | Индекс | Срок |
|---|---|---|
| HTTP-шум (Info + Type:HttpRequest/HttpResponse) | ascore-http-* | 3 дня |
| Остальной Information | ascore-logs-* | 7 дней |
| Warning | ascore-logs-* | 14 дней |
| Error / Fatal | ascore-errors-* | 30 дней |
ascore-errors-*. Если и там пусто — ошибки просто не было, и дело в клиенте/интеграции.
ascore-logs-ilm-policy). Следите за объявлениями в канале DevOps.
Сегодня 21 апреля. Клиент сообщил о странном поведении 3 апреля. Какие логи гарантированно ещё есть (после внедрения целевой политики)?
5. Dashboard: быстрая диагностика
Дашборд показывает только ошибки (Error/Fatal из ascore-errors-*) по проектам. Не замена детальному поиску, но за секунды отвечает: есть ли массовый сбой.
Как читать дашборд
- График ошибок по времени — всплеск = инцидент
- Таблица снизу — группировка по паттерну ошибки. Например: «TimeoutException — 30 раз за 10 минут»
- Если на проекте 0 новых ошибок за сутки, а клиент жалуется — проблема на стороне клиента или интеграции, а не в платформе
На дашборде видно: у проекта enco ошибки растут плавно в течение 3 часов, а у legion — 1 резкий скачок и тишина. Что сказать коллегам?
6. Практические кейсы
Кейс А: «Житель не может оплатить»
Клиент прислал скриншот. В тикете есть лицевой счёт и сумма. Что делать?
- Discover → DataView
ascore, интервал ±1–2 часа вокруг обращения - Фильтр
fields.ProjectName : "legion"(или нужный ЖК) - Поиск по лицевому счёту в
message:message : *лс123456* - Если пусто — по сумме:
message : *1500*(без запятой) - Если нашли запись — копируете
fields.RequestId, ищете по нему всю цепочку - Если ничего нет — смотрите в
ascore-errors-*по тому же проекту и времени
Кейс Б: Ответ "OK", но действие не выполнилось
Иногда запрос принят успешно (HTTP 200), но дальнейшая обработка (очередь, интеграция) отвалилась молча. В Kibana видно факт приёма, но не факт доведения до конца.
- Ищите по тому же
fields.RequestIdзаписи уровня Error/Warning — часто бывают следом. - Ищите в
ascore-errors-*по этому RequestId — туда пишется отдельно. - Если связанных ошибок нет — проблема вне Ascore (очередь, внешний сервис, клиент).
Вы нашли запись в ascore-logs-* с fields.RequestId : "pay-777", ответ HttpResponse 200 OK, но клиент говорит, что деньги не прошли. Где ещё искать?
Вы нашли подозрительный лог. Как правильно передать его разработчику?
7. Итоговый тест
Ответьте на 5 вопросов. Чтобы пройти, нужно минимум 4 правильных.
1. AI-агент гарантирует 100% точность названий проектов?
2. Как правильно найти подстроку в поле message?
3. Information-логи уровня HttpRequest от 10-дневной давности скорее всего...
4. Поле fields.RequestId позволяет...
5. На дашборде нет всплеска ошибок, но клиент жалуется. Что делать?