elasticsearch-esql
elasticsearch-esql — официальный навык Elastic для выполнения запросов на языке ES|QL, анализа логов и метрик, исследования данных и подготовки результатов для графиков и dashboards. ES|QL использует конвейер с символом pipe: например, FROM index | WHERE condition | STATS aggregation BY field | SORT field | LIMIT n. Это отдельный язык, который нельзя автоматически считать Elasticsearch Query DSL, SQL или EQL. Перед составлением запроса навык требует проверить подключение, определить тип развёртывания и обнаружить реальные индексы и mappings, потому что имена индексов и полей зависят от конкретного кластера. Первый диагностический шаг — node scripts/esql.js test. Он определяет deployment type и версию; для Elastic Cloud Serverless авторитетным признаком служит build_flavor serverless, при котором version.number не используется для ограничения возможностей. Для обычного self-managed или hosted кластера feature availability сопоставляется с major.minor версии. После проверки подключения выполняются indices и schema, а при необходимости — запросы к настройкам index.mode. Навык прямо запрещает угадывать имена индексов и полей. Предпочтение отдаётся одному наиболее подходящему индексу, а объединение разнородных индексов и лишние поля не добавляются без запроса пользователя. Важное ограничение ES|QL связано с версией и источником данных. Для выполнения ES|QL нужен включённый _source; если _source отключён, запросы завершатся ошибкой. Язык появился в 8.11 как tech preview и стал GA в 8.14, а отдельные возможности имеют свои пороги: MATCH доступен с 8.17, LOOKUP JOIN с 8.18, KQL с 8.18 или 9.0+, INLINE STATS с 9.2. До 8.18 для LOOKUP JOIN может использоваться ENRICH, но для INLINE STATS и counter-field RATE() нет fallback до 9.2. Для snapshot-сборок учитывается major.minor без суффикса -SNAPSHOT; Serverless проверяется по build_flavor, а не по похожему на «последний» номеру версии. Команда raw выполняет собственно ES|QL-запрос, а флаг --tsv даёт чистый tab-separated вывод с возможностью убрать заголовок. Базовые конструкции включают WHERE для фильтрации, EVAL для вычисления, STATS для агрегаций и группировки, SORT и LIMIT для управляемого результата. Для поиска текста предпочтён MATCH, для сложной булевой или многополевой логики — QSTR, для Kibana-переходов — KQL. Для временных рядов используются STATS с BUCKET или TS с TBUCKET; для счётчиков применяются SUM(RATE(...)), для gauge — AVG. При работе с TSDS сначала подходят METRICS_INFO и TS_INFO, затем агрегация. Навык содержит дополнительные правила для CATEGORIZE, CHANGE_POINT, DISSECT, GROK, SPLIT и других функций, но требует читать соответствующие references перед сложными TS, PROMQL, поисковыми или временными запросами. Практический сценарий поэтому выглядит так: проверить соединение, обнаружить индекс и schema, выбрать минимальный запрос под намерение, выполнить его с ограниченным KEEP/SORT/LIMIT и только затем расширять анализ. Если проверка соединения неуспешна, исследование останавливается; если поле или версия не подтверждены, их нельзя выдумывать. Этот навык помогает безопасно строить ES|QL-запросы, но не предоставляет самих credentials, не гарантирует наличие нужных индексов и не отменяет различия между версиями Elastic.
Для чего подходит
- Запросы и агрегации Elasticsearch через ES|QL
- Анализ логов и time-series метрик
- Подготовка данных для графиков и dashboards
Установка
Сначала прочитайте SKILL.md и scripts в исходном репозитории. Затем выполните команду в каталоге проекта:
npx skills add https://github.com/elastic/agent-skills/tree/main/skills/elasticsearch/elasticsearch-esql