Table of Contents

Class ActivityTags

Namespace
Quartz.Diagnostics
Assembly
Quartz.dll

The attribute names Quartz puts on its spans and its measurements.

public static class ActivityTags
Inheritance
ActivityTags
Inherited Members

Remarks

Every one of them is spelled under quartz., which is what OpenTelemetry asks of an attribute a library defines for itself: job.name is a name any other instrumented library in the same process could reasonably claim, and once two of them do, a dashboard has one attribute meaning two things and no way to tell which. The one exception is error.type, which Quartz writes on a failed operation: it is the semantic convention's shared attribute for that, and a Quartz-specific spelling would only keep these series from lining up with the rest of an application's failures.

The values are a telemetry contract rather than a compile-time one, so code reading them by these constants needs no change while a dashboard, alert or recording rule matching the 3.x spellings does.

Fields

BatchSize

How many triggers the scheduler asked its store for in one acquisition attempt.

public const string BatchSize = "quartz.jobstore.batch.size"

Field Value

string

ExecutionGroup

The execution group a trigger belongs to, which is the bucket a thread limit is applied per.

public const string ExecutionGroup = "quartz.execution.group"

Field Value

string

Remarks

A trigger that names no execution group carries no such attribute at all rather than an empty one: the two are the same series to a reader that treats a missing attribute as empty, and different series to one that does not, and "there is no group" is not a group name.

FireInstanceId

The identity of one firing, which is what an interrupt names.

public const string FireInstanceId = "quartz.fire.instance.id"

Field Value

string

JobGroup

The job's group.

public const string JobGroup = "quartz.job.group"

Field Value

string

JobName

The job's name.

public const string JobName = "quartz.job.name"

Field Value

string

JobResult

What a job run achieved: succeeded, failed, cancelled or skipped, the JobRunResult the execution history records, in lower case.

public const string JobResult = "quartz.job.result"

Field Value

string

Remarks

On quartz.job.execution.duration, so the histogram's count splits by result as the history does, and on the Quartz.Job.Execute span. Not on quartz.job.execution.active, whose increment is made before there is a result and whose decrement has to carry the increment's attributes, nor on any other span. error.type stays the name of what a failed run threw: a cancelled run has none, nor has a run its own JobRunReport called failed without throwing, and only a run that threw ends its span in error. A result outside the enum is _OTHER.

JobStoreLock

Which job store lock a measurement is about, as the LOCK_NAME column spells it — TRIGGER_ACCESS or STATE_ACCESS.

public const string JobStoreLock = "quartz.jobstore.lock"

Field Value

string

Remarks

The two locks are contended for by different work and stall for different reasons, so folding them into one series would hide a check-in that cannot get STATE_ACCESS behind the trigger traffic that dominates the other.

JobStoreLockReason

Why a firing round took TRIGGER_ACCESS, on an acquisition measurement whose JobStoreLock says it did: serial_job, overlap_policy, cluster_limit, older_peer, definition_changed, hysteresis, or the configuration — option_off, acquire_within_lock, isolation_level, lock_all_operations, delegate. Absent on a round that took no lock.

public const string JobStoreLockReason = "quartz.jobstore.lock.reason"

Field Value

string

Remarks

A round of work that allows concurrent execution takes no lock since 4.6 (#4067), so on a cluster the share of rounds tagged TRIGGER_ACCESS, and why, is what says whether a schedule is getting the saving.

JobStoreOperation

Which store operation a measurement is about — one of the OperationName.JobStore names, which is also what the operation's span is called.

public const string JobStoreOperation = "quartz.jobstore.operation"

Field Value

string

JobType

The job's type, as the assembly-qualified name the store holds.

public const string JobType = "quartz.job.type"

Field Value

string

RecoveredInstanceId

The instance id of the cluster node whose work is being recovered, which is a node other than the one reporting the measurement.

public const string RecoveredInstanceId = "quartz.cluster.recovered.instance.id"

Field Value

string

Remarks

Deliberately not SchedulerId: every measurement carries that already, and it names the node that made the measurement. A recovery is one node saying something about another, so the two ids are two attributes.

SchedulerId

The scheduler's instance id, which is what tells two nodes of a cluster apart.

public const string SchedulerId = "quartz.scheduler.id"

Field Value

string

SchedulerName

The scheduler's name.

public const string SchedulerName = "quartz.scheduler.name"

Field Value

string

TriggerCount

How many triggers a store operation was asked for, or handed back.

public const string TriggerCount = "quartz.jobstore.trigger.count"

Field Value

string

TriggerGroup

The trigger's group.

public const string TriggerGroup = "quartz.trigger.group"

Field Value

string

TriggerName

The trigger's name.

public const string TriggerName = "quartz.trigger.name"

Field Value

string

TriggersFiredOnAcquire

How many of the triggers an acquisition returned the store fired as it acquired them, because they were already due. Those have no TriggersFired span of their own.

public const string TriggersFiredOnAcquire = "quartz.jobstore.trigger.fired_on_acquire"

Field Value

string