Skip to content
Exlogare

Exlogare CLI

Установка и использование `exl` для отправки CI-логов и чтения AI-разборов из терминала.

exl — командная строка Exlogare. Используйте её, когда нужно отправить лог из shell-шага CI, посмотреть AI-разборы из терминала или автоматизировать Exlogare без полноценной интеграции с конкретной CI-платформой.

CLI оборачивает те же публичные API, которые описаны отдельно:

Установка

CLI распространяется как один Go-бинарь. Выберите способ, который удобен для вашей среды.

Ручная установка

Скачайте архив для вашей OS/arch на странице GitHub Releases, достаньте exl и положите его в директорию из $PATH.

exl version

Debian / Ubuntu package asset

curl -fsSL \
  https://github.com/exlogare/exlogare-cli/releases/latest/download/exlogare-cli_amd64.deb \
  -o exl.deb
sudo dpkg -i exl.deb

Fedora / RHEL package asset

sudo rpm -i \
  https://github.com/exlogare/exlogare-cli/releases/latest/download/exlogare-cli_amd64.rpm

Docker

Используйте Docker, если не хотите ставить бинарь внутрь runner image.

docker run --rm \
  -e EXLOGARE_TOKEN \
  ghcr.io/exlogare/exl:latest analyses list --since 24h

Аутентификация

Создайте API-токен в дашборде: Integration -> API tokens.

Для рабочей машины сохраните токен в keychain:

exl auth login

Вставьте токен в prompt. CLI сохранит его в OS-native secret store:

  • Linux: libsecret-compatible хранилище (GNOME Keyring, KWallet и т.п.).
  • macOS: Keychain.
  • Windows: Credential Manager.

Для CI-раннеров лучше использовать переменную окружения:

export EXLOGARE_TOKEN=exl_...

Проверить, видит ли CLI токен:

exl auth status

Выйти на рабочей машине:

exl auth logout

Приоритет настроек:

НастройкаПорядок выбора
ТокенEXLOGARE_TOKEN -> OS keychain
API URL--api-url -> EXLOGARE_API_URL -> https://api.exlogare.net

Глобальные флаги

Эти флаги доступны на всех командах.

ФлагЧто делаетКогда использовать
--api-url <url>Переопределяет API endpoint.Локальная разработка, staging, self-hosted API.
--jsonПечатает machine-readable JSON там, где команда это поддерживает.Скрипты, jq, CI-автоматизация.

Команды auth

exl auth login

Сохраняет API-токен в OS keychain.

exl auth login

Можно передать токен без интерактивного prompt:

exl auth login --token exl_...
ФлагОбязательныйЗначение
--token <token>НетAPI-токен. Если не указан, CLI сначала смотрит EXLOGARE_TOKEN, затем спрашивает токен интерактивно.

exl auth status

Показывает, настроен ли токен, не вызывая API.

exl auth status

Команда маскирует токен и показывает источник: EXLOGARE_TOKEN env или keychain.

exl auth logout

Удаляет токен из keychain. Если в окружении всё ещё задан EXLOGARE_TOKEN, он продолжит иметь приоритет.

exl auth logout

Отправить лог упавшей CI

exl ingest читает лог из --log-file, либо из stdin, если файл не указан.

make test 2>&1 | tee build.log

if [ "${PIPESTATUS[0]}" -ne 0 ]; then
  exl ingest \
    --provider buildkite \
    --project myorg/web \
    --status failed \
    --commit "$BUILDKITE_COMMIT" \
    --branch "$BUILDKITE_BRANCH" \
    --pipeline-url "$BUILDKITE_BUILD_URL" \
    --log-file build.log
fi

Основные флаги:

ФлагЗначение
--providerМетка CI-провайдера: например jenkins, buildkite, teamcity, generic.
--projectИдентификатор проекта или репозитория для группировки.
--statusСтатус CI. По умолчанию failed.
--log-fileПуть к логу упавшего шага. Если не указан, exl читает stdin.

CLI ограничивает лог 4 МиБ до отправки запроса. Очень большие логи лучше заранее обрезать до проблемного участка.

Полная расшифровка exl ingest

exl ingest \
  --provider buildkite \
  --project myorg/web \
  --status failed \
  --pipeline-id "$BUILDKITE_BUILD_ID" \
  --job-id "$BUILDKITE_JOB_ID" \
  --job-name "unit tests" \
  --branch "$BUILDKITE_BRANCH" \
  --commit "$BUILDKITE_COMMIT" \
  --pipeline-url "$BUILDKITE_BUILD_URL" \
  --build-number "$BUILDKITE_BUILD_NUMBER" \
  --log-file build.log
ФлагОбязательныйЗначение
--provider <slug>ДаНазвание CI или источника. Подойдут jenkins, buildkite, drone, teamcity, circleci, generic.
--project <id>ДаСтабильный идентификатор проекта: org/repo, team/service, slug пайплайна.
--status <status>НетСтатус запуска. По умолчанию failed. Обычно: failed, success, cancelled, timeout, error.
--pipeline-id <id>НетУникальный id запуска внутри CI. Нужен для дедупликации.
--job-id <id>НетId конкретного job/step. Вместе с pipeline-id помогает не плодить дубликаты.
--job-name <name>НетЧеловекочитаемое имя шага: unit tests, build image, deploy staging.
--branch <ref>НетВетка или ref.
--commit <sha>НетSHA коммита.
--pipeline-url <url>НетСсылка на CI run. Exlogare покажет её в разборе.
--build-number <n>НетНомер сборки. Используется как run identifier, если pipeline-id пустой.
--log-file <path>НетФайл с логом. Если не указан, лог читается из stdin.

Лучше всегда передавать pipeline-id и job-id, если CI их даёт. Это делает повторный запуск команды идемпотентным для одного и того же упавшего шага.

stdin вместо файла

cat build.log | exl ingest \
  --provider generic \
  --project myorg/web \
  --status failed

Или так:

exl ingest \
  --provider jenkins \
  --project myorg/web \
  --status failed < build.log

Как правильно вставлять в CI

Хороший паттерн: сначала сохранить лог в файл, потом отправить его только при падении команды.

set -o pipefail
make test 2>&1 | tee build.log
status=$?

if [ "$status" -ne 0 ]; then
  exl ingest \
    --provider generic \
    --project "$CI_PROJECT" \
    --status failed \
    --branch "$CI_BRANCH" \
    --commit "$CI_COMMIT_SHA" \
    --log-file build.log
fi

exit "$status"

Так pipeline остаётся красным, а Exlogare получает лог для разбора.

Читать разборы

Список последних разборов:

exl analyses list --since 24h

JSON для автоматизации:

exl analyses list --since 24h --severity high --json \
  | jq -r '.items[] | "[\(.severity)] \(.project_path): \(.root_cause)"'

Один конкретный разбор:

exl analyses show <analysis-id>

exl analyses list

Список разборов использует cursor pagination и поддерживает фильтры Read API.

exl analyses list \
  --since 24h \
  --until 2026-04-28T00:00:00Z \
  --severity high \
  --project myorg/web \
  --source generic_ingest \
  --limit 50
ФлагЗначение
--since <time>Нижняя граница времени. Можно ISO timestamp или duration: 24h, 7d, 2026-04-01T00:00:00Z.
--until <time>Верхняя граница времени. Обычно ISO timestamp.
--severity <level>Фильтр по severity: low, medium, high.
--project <id>Фильтр по проекту.
--source <source>Фильтр по источнику ingestion, например generic_ingest, github_webhook, circleci_ingest.
--limit <n>Размер страницы, от 1 до 100. По умолчанию 20.
--cursor <token>Курсор следующей страницы из предыдущего ответа.

Без --json команда печатает табличный summary. Если есть следующая страница, в конце будет строка:

next_cursor=...

С JSON удобно проходить все страницы в скрипте:

exl analyses list --since 7d --limit 100 --json

exl analyses show <analysis-id>

Показывает полный RCA payload:

exl analyses show 9d3c2c41-...

С JSON:

exl analyses show 9d3c2c41-... --json

В обычном выводе команда показывает id, время, provider/source, project, CI ids, severity, confidence, ссылки на pipeline/job, root_cause, explanation и fix_suggestion, если они есть.

Создавать короткоживущие токены для раннеров

Один раз используйте долгоживущий admin-токен, затем выпускайте короткие ingest-токены для CI:

exl tokens create \
  --name buildkite-prod \
  --scope ingest \
  --expires-in-days 7 \
  --json

Скопируйте токен сразу. Exlogare показывает raw token только один раз.

Полная расшифровка exl tokens create

ФлагОбязательныйЗначение
--name <name>ДаЧеловекочитаемое имя токена: jenkins-prod, buildkite-nightly, grafana-readonly.
--scope <scope>ДаScope токена. Можно повторять или передать CSV через Cobra string-slice. Поддерживаются ingest, read.
--expires-in-days <n>НетTTL в днях. 0 или отсутствие флага означает без срока действия.
--jsonНетВернуть полный JSON-ответ, удобно для секрет-менеджеров и автоматизации.

Примеры:

# Только отправка логов из CI
exl tokens create --name jenkins-prod --scope ingest --expires-in-days 30

# Read-only токен для Grafana/cron-отчётов
exl tokens create --name grafana --scope read --json

# Токен с двумя scope
exl tokens create --name automation --scope ingest --scope read --expires-in-days 7

Токен, которым вы вызываете tokens create, должен иметь право создавать токены. Первый seed-токен обычно создаётся в дашборде вручную.

Вывод и exit codes

  • При успехе команды возвращают exit code 0.
  • Ошибки валидации флагов, отсутствие токена, сетевые ошибки и API 4xx/5xx возвращают non-zero exit code.
  • Для CI-скриптов используйте --json, чтобы не парсить человекочитаемый вывод.
  • Если токен не найден, CLI подскажет: run exl auth login or set EXLOGARE_TOKEN.

Полезные проверки

exl version
exl auth status
exl --help
exl ingest --help
exl analyses list --help
exl tokens create --help

Исходники

CLI открыт под Apache-2.0: