Skip to Content
We are live but in Staging 🎉
ComputeAPI ReferenceLogs, Events & Replicas

Logs, Events & Replicas — API Reference

Package: dodil.ignite.v1 · Service: ComputeService

App logs (stdout/stderr) and events (pod-lifecycle) are sourced live from the worker cluster and are not persisted — once a pod scales to zero, is evicted, or its K8s event TTL (~1h) elapses, the data is gone. Bring your own retention (Sentry / Datadog / writing to S3 from inside the handler). ListAppReplicas tells you which replica_ids are running so you can pin logs and events to a single pod. Build logs (GetBuildLog) are the one persisted stream here.

gRPC reaches every method at dodil.ignite.v1.ComputeService/<Method> on $IGNITE_GRPC; the HTTP gateway mirrors each one. Several of these RPCs are server-streaming (StreamAppLogs, StreamAppEvents, StreamCompileLogs) — they return a stream of messages rather than a single response. See Conventions → Using gRPC for grpcurl setup. gRPC requests use the proto field names (snake_case); HTTP uses pbjson (camelCase). Responses render camelCase.

RPCHTTP
GetAppLogsGET /v1/ignite/app/{organization_name}/{app_name}/logs
StreamAppLogsGET /v1/ignite/app/{organization_name}/{app_name}/logs/stream
GetAppEventsGET /v1/ignite/app/{organization_name}/{app_name}/events
StreamAppEventsGET /v1/ignite/app/{organization_name}/{app_name}/events/stream
ListAppReplicasGET /v1/ignite/app/{organization_name}/{app_name}/replicas
GetBuildLogGET /v1/ignite/app/{organization_name}/{app_name}/builds/{build_id}/log
StreamCompileLogsGET /v1/ignite/compile/{deploy_id}/logs

GetAppLogs

Recent stdout/stderr from the app’s currently-running pods. Aggregated across replicas unless replica_id is set; limit caps the line count (default 1000, capped server-side).

Request

curl -sS "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor/logs?limit=200" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

{ "lines": [ { "timestampMs": "1716894000123", "replicaId": "my-data-processor-7c9d8-abcde", "stream": "LOG_STREAM_STDOUT", "line": "processed batch 42 in 18ms" } ], "truncated": false }

StreamAppLogs

Server-streaming tail of LogLine messages — the stream stays open and each new log line arrives as its own message. Set from_start to replay the pod’s full history from container start before tailing.

Request

curl -sS -N "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor/logs/stream" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

Server-stream of LogLine messages (same shape as in GetAppLogs), one per emitted log line, until the caller disconnects.

GetAppEvents

K8s pod-lifecycle events — image pulls, scheduling, crashes, OOM kills, probe failures, KEDA wake/sleep. Distinct from logs: this is what the platform observes about the pod, not what the user’s code printed. K8s retains events for ~1h, so older events are gone.

Request

curl -sS "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor/events?severity=Warning" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

{ "events": [ { "timestampMs": "1716894001000", "kind": "APP_EVENT_KIND_OOM_KILLED", "reason": "OOMKilling", "message": "Memory cgroup out of memory: Killed process 1", "replicaId": "my-data-processor-7c9d8-abcde", "count": 1, "severity": "Warning" } ], "truncated": false }

StreamAppEvents

Server-streaming tail of AppEvent messages as the platform observes new pod-lifecycle events.

Request

curl -sS -N "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor/events/stream" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

Server-stream of AppEvent messages (same shape as in GetAppEvents).

ListAppReplicas

The app’s currently-running pod replicas — use it before filtering logs or events to learn which replica_ids exist.

Request

curl -sS "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor/replicas" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

{ "replicas": [ { "replicaId": "my-data-processor-7c9d8-abcde", "clusterId": "worker-eu-1", "nodeName": "ip-10-0-3-17", "status": "STATUS_RUNNING", "ready": true, "restartCount": 0, "startedMs": "1716893900000", "conditionsSummary": "PodScheduled=True, Initialized=True, ContainersReady=True", "cpuMillicoresUsed": "120", "memoryMbUsed": "210" } ] }

GetBuildLog

The persisted build log for a completed build — used to replay after the live StreamCompileLogs stream has ended. Logs are GC’d after a retention window (default 3 days); after GC the response has found=false and an empty body rather than an error.

Request

curl -sS "https://api.dev.dodil.io/v1/ignite/app/acme-corp/my-data-processor/builds/bld_01HZX9/log" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

{ "log": "U3RlcCAxLzg6IEZST00gcHl0aG9uOjMuMTItc2xpbQo=", "found": true }

log is base64-encoded over JSON (proto bytes); decode it to recover the plain-text build log.

StreamCompileLogs

Server-streaming compile log for a Wasm app deployment — keyed by deploy_id rather than the app path (the /v1/ignite/compile/{deploy_id}/logs route avoids a gateway collision with GetAppLogs). Set from_start to replay from the beginning of the build.

Request

curl -sS -N "https://api.dev.dodil.io/v1/ignite/compile/dpl_01HZX9/logs?fromStart=true" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

Server-stream of CompileLogChunk messages:

message CompileLogChunk { bytes data = 1; // a chunk of compile output (base64 over JSON) int64 timestamp_ms = 2; }

See also