Skip to content
This is the documentation for main, which is not released yet. Read the latest.

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.