Skip to main content

events, logs, metrics, trace

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

Every record in graphene has five dimensions; get reads the first (state), these four verbs read the rest. They work on ANY record — docker/nginx, agent/vm-1, and runs by bare id (events run my-run).

DimensionVerbSource
2 — eventseventsthe record's own workflow history: the plane of truth
3 — logslogstelemetry (the installation's log backend)
4 — metricsmetricstelemetry, the standard PromQL range answer
5 — tracetracetelemetry, standard Jaeger JSON

Flags

FlagCommandsWhat it does
--followevents, logskeep streaming new entries until you stop it

Plus the connection flags and the output forms (--jq runs per streamed message).

events

The record's own history, classified but never filtered — internal machinery passes through as internal-* lines (hidden in the table form, present in -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

Count what failed:

$ 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

For a run this includes the orchestrator container's own stdout — the raw inside of the worker, tailed by the server.

metrics

The backend's standard PromQL range response, as-is — pipe it to whatever draws:

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

trace

Standard Jaeger JSON of the record's traces:

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

A dimension without a configured backend answers with a clear unimplemented error, not silence. An empty dimension (a k8s record has no logs) is a normal empty answer.