Skip to content

Events

The events the daemon records of what it did to runners, providers and scale sets, and why. rungar events shows them; each event below is named as the command prints it, and by its action in --json.

Fields

FieldDescription
timeWhen it happened.
kindWhat it is about: a runner, a provider or a scale set.
nameThe runner’s, the provider’s or the scale set’s name.
actionWhat happened: one of the events below.
scale_setThe scale set it happened for.
providerThe provider it happened on: the runner’s, or the provider itself.
messageWhat happened, in a line for a person.
attributesWhat happened, for a program: each event’s are in its table.

The file

The daemon keeps the events in events.file, /var/log/rungar/events.jsonl unless set, one JSON object a line, so that they outlive a restart. It keeps the most recent events.max_count, 10,000 unless set, and, with events.max_age set, none older. rungar events asks the running daemon for them; with no daemon running, the file can be read as it is, with jq say.

In the file, kind and action are lower case, runner and removed; rungar events --json writes them as the API’s names, EVENT_KIND_RUNNER and EVENT_ACTION_REMOVED:

{"time":"2026-09-28T10:21:13Z","kind":"runner","name":"rungar-c2-m4-1ff1015a","action":"removed","scale_set":"rungar-c2-m4","provider":"compute1","message":"Runner removed from compute1: its job completed","attributes":{"reason":"job_completed"}}

Runners

EventactionAttributesWhat it means
CreatedEVENT_ACTION_CREATEDcreate_durationThe daemon created the runner: registered it with GitHub and created its machine. create_duration is how long that took, as a Go duration, the providers tried before the one that created it included.
AdoptedEVENT_ACTION_ADOPTEDThe daemon took over a runner found on the fleet: when it starts, one an earlier daemon left; later, one it did not know of.
ConnectedEVENT_ACTION_CONNECTEDboot_durationA runner the daemon created connected to GitHub for the first time. boot_duration is how long after its machine was created, as a Go duration; see rungar_runner_boot_duration_seconds for how closely it is measured. An adopted runner has none.
Job startedEVENT_ACTION_JOB_STARTEDjob_id, repository, workflow_run_id, wait, runner_waitThe runner took a job. job_id is GitHub’s ID of the job, repository its repository as owner/name, and workflow_run_id its workflow run’s. wait is how long the job waited since GitHub queued it, and runner_wait how much of that was since GitHub assigned it to the scale set, as Go durations; both are left out when GitHub’s message did not give the times. The same as rungar_job_wait_seconds’s and rungar_job_runner_wait_seconds’s.
RemovedEVENT_ACTION_REMOVEDreasonThe daemon removed the runner, deleting its machine if it had one. reason is job_completed, when its job completed; scaled_down, when its scale set needed fewer runners; never_connected, when it did not connect to GitHub within start_timeout; unregistered, when GitHub no longer had its registration; disconnected, when it was disconnected from GitHub for longer than start_timeout; stuck, when it was running a job while disconnected for longer than start_timeout; outdated, when it was created from another revision of its runner block; expired, when it was older than max_idle_age or max_age; requested, when it was removed with rungar runners rm or with its scale set; or orphaned, when GitHub had it disconnected with no machine on the fleet for longer than start_timeout. A runner with no machine has only its registration removed, and no provider. The same as rungar_runners_removed_total’s.
LostEVENT_ACTION_LOSTreasonThe runner ended without the daemon removing it or its job completing. reason is ended, when its machine ended – stopped, or gone from its provider – and GitHub still had its registration after start_timeout: it crashed, never connected, or was taken back, as a Spot machine can be; its machine is deleted. Or unreachable, when its provider had been unreachable for five minutes, and the scale set replaces it elsewhere; its machine is left alone. The same as rungar_runners_lost_total’s.

A runner created by the daemon is Created, Connected, has its Job started and is Removed, so rungar events --runner NAME is its timeline: how long its machine took to create, to boot, and how long its job waited.

Providers

EventactionAttributesWhat it means
FullEVENT_ACTION_FULLrunner, error, skipped_forThe provider was full for a runner, which was tried on the scale set’s next provider; the scale set skips this one for a while. runner is the runner refused; error the provider’s reason; and skipped_for how long the scale set skips it, as a Go duration: 15 seconds, doubling each time in a row, up to 2 minutes.
FailingEVENT_ACTION_FAILINGrunner, error, skipped_for, refusalsThe provider failed to create a runner’s machine, which was tried on the scale set’s next provider; the scale set skips this one for a while. runner is the runner; error the provider’s error; skipped_for how long the scale set skips it, as for Full; and refusals how many of the scale set’s runners in a row it has refused, this one included.

Scale sets

EventactionAttributesWhat it means
PausedEVENT_ACTION_PAUSEDThe scale set was paused with rungar scale-sets pause: it takes no jobs and creates no runners, and its runners not running a job are removed. One paused by the configuration records none.
ResumedEVENT_ACTION_RESUMEDThe scale set was resumed with rungar scale-sets resume, and takes jobs again.
Min runners changedEVENT_ACTION_MIN_RUNNERS_CHANGEDfrom, to, windowThe scale set’s schedule changed the min_runners in force, as a window opened or closed. from and to are the numbers, and window the window now in force, such as mon-fri 08:00-19:00, absent outside every window. The daemon starting records none.