Как построить фильтр для поиска логов в Kibana?

Ответ

В Kibana для фильтрации логов используется KQL (Kibana Query Language) или Lucene-синтаксис в строке запроса.

Базовые примеры KQL-запросов:

Цель Пример запроса KQL Пояснение
Поиск по полю status: 200 Логи, где поле status равно 200.
Поиск по тексту message: "TimeoutException" Логи, содержащие точную фразу.
Логическое И status >= 400 AND service: "auth-service" Ошибки (4xx/5xx) от конкретного сервиса.
Логическое ИЛИ level: "error" OR level: "fatal" Логи уровня error или fatal.
Отрицание NOT level: "debug" Исключить все debug-логи.
Регулярное выражение message: /failed after d+ attempts/ Поиск по паттерну.

Работа с временными интервалами:

  • Используйте панель выбора времени (Time Picker) для фильтрации по абсолютному или относительному диапазону (например, "Last 1 hour").

Сложный практический пример: Запрос для поиска ошибок 5xx в Nginx за последние 15 минут, исключая тестовое окружение:

response >= 500 AND component:"nginx" AND NOT environment:"test"
  • Часто используемые фильтры можно сохранять.
  • Для постоянного мониторинга создавайте визуализации (Visualizations) и добавляйте их на дашборды (Dashboards).

Ответ 18+ 🔞

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

В этой вашей Кибане есть две основные приблуды для поиска: KQL (Kibana Query Language) — это их родной, более умный язык, и старый добрый Lucene-синтаксис, который как дед в подвале — сидит и иногда нужен.

Вот тебе база, чтобы не выглядеть конченым идиотом:

Что хочешь сделать Как написать на KQL Что это значит, блядь?
Найти по значению поля status: 200 Ищешь логи, где в поле status красуется циферка 200. Всё, просто.
Найти по тексту message: "TimeoutException" Ищешь логи, где в сообщении есть эта самая точная фраза. Без вариантов.
Логическое «И» (оба условия) status >= 400 AND service: "auth-service" Найти всё, где статус ошибки (400 и выше) И сервис называется «auth-service». Двойной отбор, мать его.
Логическое «ИЛИ» (хотя бы одно) level: "error" OR level: "fatal" Тащи сюда всё, что уровня «error» ИЛИ «fatal». Хули мелочиться.
Исключить что-то NOT level: "debug" Всё покажи, кроме этого дебагового мусора. Чтобы глаза не ебало.
Поиск по шаблону (регулярки) message: /failed after d+ attempts/ Ищи сообщения, где есть «failed after», а потом какое-то количество цифр (это d+) и «attempts». Для продвинутых ебанатов.

Про время, ёпта! Не выёбывайся со временем в запросе, если не хочешь запудрить себе мозги. Сверху есть удобная хуйня — Time Picker. Ткнул на «Last 15 minutes» и всё, логи за последние 15 минут. Не надо изобретать велосипед.

А вот реальный пример из жизни, чтобы ты проникся: Допустим, накрылся твой Nginx, сыпет 500-ми ошибками. Но ты не хочешь видеть срач из тестового стенда. Пишешь так:

response >= 500 AND component:"nginx" AND NOT environment:"test"

Вот и весь сказ. Ищет где ответ >=500, компонент — nginx, и при этом окружение НЕ «test». Чисто, аккуратно, в рот меня чих-пых.

И запомни, чувак: если фильтр получается годный и ты его будешь юзать чаще, чем руку, — сохрани его, блядь! А для начальства, чтобы они видели красивые графики и не ебали тебя мозг, лепи визуализации (Visualizations) и сваливай их все на один дашборд (Dashboard). Сидишь, кофе пьёшь, на графики смотришь — красота, а не работа.