Skip to content
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

### 3.0 Cleanup

* [CHANGE] **BREAKING CHANGE** Remove ingesters and compactor alerts [#6369](https://github.com/grafana/tempo/pull/6369) (@javiermolinar)
* [CHANGE] **BREAKING CHANGE** Removed `v2` block encoding and compactor component. [#6273](https://github.com/grafana/tempo/pull/6273) (@joe-elliott)
This includes the removal of the following CLI commands which were `v2` specific: `list block`, `list index`, `view index`, `gen index`, `gen bloom`.
* [CHANGE] **BREAKING CHANGE** Sets the `all` target to be 3.0 compatible and removes the `scalable-single-binary` target [#6283](https://github.com/grafana/tempo/pull/6283) (@joe-elliott)
Expand Down
66 changes: 5 additions & 61 deletions operations/tempo-mixin-compiled/alerts.yaml
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
"groups":
- "name": "tempo_alerts"
"rules":
- "alert": "TempoCompactorUnhealthy"
"annotations":
"message": "There are {{ printf \"%f\" $value }} unhealthy compactor(s)."
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactorUnhealthy"
"expr": |
max by (cluster, namespace) (tempo_ring_members{state="Unhealthy", name="compactor", namespace=~".*"}) > 0
"for": "15m"
"labels":
"severity": "critical"
- "alert": "TempoDistributorUnhealthy"
"annotations":
"message": "There are {{ printf \"%f\" $value }} unhealthy distributor(s)."
Expand All @@ -19,15 +10,6 @@
"for": "15m"
"labels":
"severity": "warning"
- "alert": "TempoIngesterUnhealthy"
"annotations":
"message": "There are {{ printf \"%f\" $value }} unhealthy ingester(s)."
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoIngesterUnhealthy"
"expr": |
max by (cluster, namespace) (tempo_ring_members{state="Unhealthy", name="ingester", namespace=~".*"}) > 0
"for": "15m"
"labels":
"severity": "critical"
- "alert": "TempoLiveStoreUnhealthy"
"annotations":
"message": "There are {{ printf \"%f\" $value }} unhealthy livestore(s)."
Expand Down Expand Up @@ -56,26 +38,6 @@
"for": "1h"
"labels":
"severity": "critical"
- "alert": "TempoIngesterFlushesUnhealthy"
"annotations":
"message": "Greater than 2 flush retries have occurred in the past hour."
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoIngesterFlushesFailing"
"expr": |
sum by (cluster, namespace) (increase(tempo_ingester_failed_flushes_total{}[1h])) > 2 and
sum by (cluster, namespace) (increase(tempo_ingester_failed_flushes_total{}[5m])) > 0
"for": "5m"
"labels":
"severity": "warning"
- "alert": "TempoIngesterFlushesFailing"
"annotations":
"message": "Greater than 2 flush retries have failed in the past hour."
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoIngesterFlushesFailing"
"expr": |
sum by (cluster, namespace) (increase(tempo_ingester_flush_failed_retries_total{}[1h])) > 2 and
sum by (cluster, namespace) (increase(tempo_ingester_flush_failed_retries_total{}[5m])) > 0
"for": "5m"
"labels":
"severity": "critical"
- "alert": "TempoPollsFailing"
"annotations":
"message": "Greater than 2 polls have failed in the past hour."
Expand Down Expand Up @@ -140,42 +102,24 @@
sum by (cluster, namespace) (increase(tempo_overrides_user_configurable_overrides_reload_failed_total{}[5m])) > 0
"labels":
"severity": "critical"
- "alert": "TempoProvisioningTooManyWrites"
"annotations":
"message": "Ingesters in {{ $labels.cluster }}/{{ $labels.namespace }} are receiving more data/second than desired, add more ingesters."
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoProvisioningTooManyWrites"
"expr": |
avg by (cluster, namespace) (rate(tempo_ingester_bytes_received_total{job=~".+/ingester"}[5m])) / 1024 / 1024 > 30
"for": "15m"
"labels":
"severity": "warning"
- "alert": "TempoCompactorsTooManyOutstandingBlocks"
- "alert": "TempoCompactionTooManyOutstandingBlocks"
"annotations":
"message": "There are too many outstanding compaction blocks in {{ $labels.cluster }}/{{ $labels.namespace }} for tenant {{ $labels.tenant }}, increase compactor's CPU or add more compactors."
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactorsTooManyOutstandingBlocks"
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactionTooManyOutstandingBlocks"
"expr": |
sum by (cluster, namespace, tenant) (tempodb_compaction_outstanding_blocks{container="compactor", namespace=~".*"}) / ignoring(tenant) group_left count(tempo_build_info{container="compactor", namespace=~".*"}) by (cluster, namespace) > 100
"for": "6h"
"labels":
"severity": "warning"
- "alert": "TempoCompactorsTooManyOutstandingBlocks"
- "alert": "TempoCompactionTooManyOutstandingBlocks"
"annotations":
"message": "There are too many outstanding compaction blocks in {{ $labels.cluster }}/{{ $labels.namespace }} for tenant {{ $labels.tenant }}, increase compactor's CPU or add more compactors."
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactorsTooManyOutstandingBlocks"
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactionTooManyOutstandingBlocks"
"expr": |
sum by (cluster, namespace, tenant) (tempodb_compaction_outstanding_blocks{container="compactor", namespace=~".*"}) / ignoring(tenant) group_left count(tempo_build_info{container="compactor", namespace=~".*"}) by (cluster, namespace) > 250
"for": "24h"
"labels":
"severity": "critical"
- "alert": "TempoIngesterReplayErrors"
"annotations":
"message": "Tempo ingester has encountered errors while replaying a block on startup in {{ $labels.cluster }}/{{ $labels.namespace }} for tenant {{ $labels.tenant }}"
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoIngesterReplayErrors"
"expr": |
sum by (cluster, namespace, tenant) (increase(tempo_ingester_replay_errors_total{namespace=~".*"}[5m])) > 0
"for": "5m"
"labels":
"severity": "critical"
- "alert": "TempoMetricsGeneratorPartitionLagCritical"
"annotations":
"message": "Tempo partition {{ $labels.partition }} is lagging by more than 900 seconds in {{ $labels.cluster }}/{{ $labels.namespace }}."
Expand Down Expand Up @@ -294,7 +238,7 @@
"message": "Tempo block-builder partitions mismatch in {{ $labels.cluster }}/{{ $labels.namespace }}."
"runbook_url": "https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoBlockBuildersPartitionsMismatch"
"expr": |
max(tempo_partition_ring_partitions{name=~"ingester-partitions|livestore-partitions", state=~"Active|Inactive"}) by (namespace,cluster)
max(tempo_partition_ring_partitions{name=~"livestore-partitions", state=~"Active|Inactive"}) by (namespace,cluster)
>
sum(tempo_block_builder_owned_partitions) by(namespace,cluster)
"for": "10m"
Expand Down
100 changes: 5 additions & 95 deletions operations/tempo-mixin/alerts.libsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,6 @@
{
name: 'tempo_alerts',
rules: [
{
alert: 'TempoCompactorUnhealthy',
expr: |||
max by (%s) (tempo_ring_members{state="Unhealthy", name="%s", namespace=~"%s"}) > 0
||| % [$._config.group_by_cluster, $._config.jobs.compactor, $._config.namespace],
'for': '15m',
labels: {
severity: 'critical',
},
annotations: {
message: 'There are {{ printf "%f" $value }} unhealthy compactor(s).',
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactorUnhealthy',
},
},
{
alert: 'TempoDistributorUnhealthy',
'for': '15m',
Expand All @@ -32,20 +18,6 @@
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoDistributorUnhealthy',
},
},
{
alert: 'TempoIngesterUnhealthy',
'for': '15m',
expr: |||
max by (%s) (tempo_ring_members{state="Unhealthy", name="%s", namespace=~"%s"}) > 0
||| % [$._config.group_by_cluster, $._config.jobs.ingester, $._config.namespace],
labels: {
severity: 'critical',
},
annotations: {
message: 'There are {{ printf "%f" $value }} unhealthy ingester(s).',
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoIngesterUnhealthy',
},
},
{
alert: 'TempoLiveStoreUnhealthy',
'for': '15m',
Expand Down Expand Up @@ -89,38 +61,6 @@
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactionsFailing',
},
},
{
// wait 5m for failed flushes to self-heal using retries
alert: 'TempoIngesterFlushesUnhealthy',
expr: |||
sum by (%s) (increase(tempo_ingester_failed_flushes_total{}[1h])) > %s and
sum by (%s) (increase(tempo_ingester_failed_flushes_total{}[5m])) > 0
||| % [$._config.group_by_cluster, $._config.alerts.flushes_per_hour_failed, $._config.group_by_cluster],
'for': '5m',
labels: {
severity: 'warning',
},
annotations: {
message: 'Greater than %s flush retries have occurred in the past hour.' % $._config.alerts.flushes_per_hour_failed,
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoIngesterFlushesFailing',
},
},
{
// wait 10m for failed flushes to self-heal using retries
alert: 'TempoIngesterFlushesFailing',
expr: |||
sum by (%s) (increase(tempo_ingester_flush_failed_retries_total{}[1h])) > %s and
sum by (%s) (increase(tempo_ingester_flush_failed_retries_total{}[5m])) > 0
||| % [$._config.group_by_cluster, $._config.alerts.flushes_per_hour_failed, $._config.group_by_cluster],
'for': '5m',
labels: {
severity: 'critical',
},
annotations: {
message: 'Greater than %s flush retries have failed in the past hour.' % $._config.alerts.flushes_per_hour_failed,
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoIngesterFlushesFailing',
},
},
{
alert: 'TempoPollsFailing',
expr: |||
Expand Down Expand Up @@ -220,25 +160,9 @@
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoTenantIndexFailures',
},
},
// ingesters
{
alert: 'TempoProvisioningTooManyWrites',
// 30MB/s written to the WAL per ingester max
expr: |||
avg by (%s) (rate(tempo_ingester_bytes_received_total{job=~".+/ingester"}[5m])) / 1024 / 1024 > 30
||| % $._config.group_by_cluster,
'for': '15m',
labels: {
severity: 'warning',
},
annotations: {
message: 'Ingesters in {{ $labels.%s }}/{{ $labels.namespace }} are receiving more data/second than desired, add more ingesters.' % $._config.per_cluster_label,
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoProvisioningTooManyWrites',
},
},
// compactors
{
alert: 'TempoCompactorsTooManyOutstandingBlocks',
alert: 'TempoCompactionTooManyOutstandingBlocks',
expr: |||
sum by (%s) (tempodb_compaction_outstanding_blocks{container="compactor", namespace=~"%s"}) / ignoring(tenant) group_left count(tempo_build_info{container="compactor", namespace=~"%s"}) by (%s) > %d
||| % [$._config.group_by_tenant, $._config.namespace, $._config.namespace, $._config.group_by_cluster, $._config.alerts.outstanding_blocks_warning],
Expand All @@ -248,11 +172,11 @@
},
annotations: {
message: "There are too many outstanding compaction blocks in {{ $labels.%s }}/{{ $labels.namespace }} for tenant {{ $labels.tenant }}, increase compactor's CPU or add more compactors." % $._config.per_cluster_label,
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactorsTooManyOutstandingBlocks',
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactionTooManyOutstandingBlocks',
},
},
{
alert: 'TempoCompactorsTooManyOutstandingBlocks',
alert: 'TempoCompactionTooManyOutstandingBlocks',
expr: |||
sum by (%s) (tempodb_compaction_outstanding_blocks{container="compactor", namespace=~"%s"}) / ignoring(tenant) group_left count(tempo_build_info{container="compactor", namespace=~"%s"}) by (%s) > %d
||| % [$._config.group_by_tenant, $._config.namespace, $._config.namespace, $._config.group_by_cluster, $._config.alerts.outstanding_blocks_critical],
Expand All @@ -262,21 +186,7 @@
},
annotations: {
message: "There are too many outstanding compaction blocks in {{ $labels.%s }}/{{ $labels.namespace }} for tenant {{ $labels.tenant }}, increase compactor's CPU or add more compactors." % $._config.per_cluster_label,
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactorsTooManyOutstandingBlocks',
},
},
{
alert: 'TempoIngesterReplayErrors',
'for': '5m',
expr: |||
sum by (%s) (increase(tempo_ingester_replay_errors_total{namespace=~"%s"}[5m])) > 0
||| % [$._config.group_by_tenant, $._config.namespace],
labels: {
severity: 'critical',
},
annotations: {
message: 'Tempo ingester has encountered errors while replaying a block on startup in {{ $labels.%s }}/{{ $labels.namespace }} for tenant {{ $labels.tenant }}' % $._config.per_cluster_label,
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoIngesterReplayErrors',
runbook_url: 'https://github.com/grafana/tempo/tree/main/operations/tempo-mixin/runbook.md#TempoCompactionTooManyOutstandingBlocks',
},
},
{
Expand Down Expand Up @@ -457,7 +367,7 @@
{
alert: 'TempoBlockBuildersPartitionsMismatch',
expr: |||
max(tempo_partition_ring_partitions{name=~"ingester-partitions|livestore-partitions", state=~"Active|Inactive"}) by (namespace,cluster)
max(tempo_partition_ring_partitions{name=~"livestore-partitions", state=~"Active|Inactive"}) by (namespace,cluster)
>
sum(tempo_block_builder_owned_partitions) by(namespace,cluster)
Comment on lines 368 to 372

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore ingester partition coverage in block-builder alert

The updated expression only checks livestore-partitions and drops ingester-partitions. The ingester module still defines and uses the ingester-partitions ring (modules/ingester/ingester.go), so deployments that haven’t migrated off ingesters will no longer get the block‑builder mismatch alert even if partitions are unowned. That’s a regression in monitoring coverage for those clusters: the alert will stay silent while the block‑builder falls behind the ingester partition ring. Consider keeping ingester-partitions in the selector (or gating it by configuration) until ingesters are fully removed.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch but I'm aware of this

|||,
Expand Down
Loading