Перейти к основному содержимому

events, logs, metrics, trace

graphenectl events <kind> <id> [--follow]
graphenectl logs <kind> <id> [--follow]
graphenectl metrics <kind> <id>
graphenectl trace <kind> <id>

У каждой записи graphene пять измерений; get читает первое (состояние), эти четыре глагола — остальные. Они работают на ЛЮБОЙ записи — docker/nginx, agent/vm-1, и на прогонах по голому id (events run my-run).

ИзмерениеГлаголИсточник
2 — событияeventsсобственная workflow-history записи: плоскость истины
3 — логиlogsтелеметрия (лог-бекенд инсталляции)
4 — метрикиmetricsтелеметрия, стандартный PromQL range-ответ
5 — трассаtraceтелеметрия, стандартный Jaeger JSON

Флаги

ФлагКомандыЧто делает
--followevents, logsпродолжать стримить новые записи, пока не остановите

Плюс флаги подключения и формы вывода (--jq выполняется на каждое стрим-сообщение).

events

Собственная история записи, классифицированная, но никогда не отфильтрованная — внутренняя механика проходит строками internal-* (в табличной форме скрыта, в -o json присутствует):

$ graphenectl events run logs-test-2
20:55:55.091 run-started
20:55:57.549 activity-scheduled server.agent.declare
20:56:03.128 activity-completed server.agent.declare
20:57:12.331 activity-failed k8s.apply @edge-1 error: secret "kubeconfig" not found

Посчитать, что падало:

$ graphenectl events run logs-test-2 --jq '.kind' | sort | uniq -c | sort -rn
6 activity-scheduled
1 run-terminated
1 run-started

logs

$ graphenectl logs run logs-test-2
20:55:58.269 INFO Started Worker Namespace default TaskQueue run/logs-test-2
20:55:58.269 DEBUG ExecuteActivity ... ActivityType k8s.apply

Для прогона сюда входит и сырой stdout orchestrator-контейнера — его тейлит сервер.

metrics

Стандартный PromQL range-ответ бекенда, как есть — отдавайте тому, кто рисует:

$ graphenectl metrics run logs-test-2
{"status":"success","data":{"resultType":"matrix","result":[...]}}

trace

Стандартный Jaeger JSON трасс записи:

$ graphenectl trace run logs-test-2
{"data":[{"processes":{"p2":{"serviceName":"graphene-pipeline",...}}}]}

Измерение без настроенного бекенда отвечает внятной ошибкой unimplemented, а не тишиной. Пустое измерение (у k8s-записи нет логов) — нормальный пустой ответ.