Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
ba45078
docs(ci-results): rewrite publishing.md for pull-based flow
ccasanueva7 May 23, 2026
45dabe0
docs(ci-results): fix architecture.md report-source URLs
ccasanueva7 May 23, 2026
90e801d
docs(ci-results): rewrite maintenance.md for pull pipeline
ccasanueva7 May 23, 2026
8f2c996
docs(ci-results): fix device coverage table
ccasanueva7 May 23, 2026
5d8f6b7
docs(observability): list Lab Overview dashboard alongside the others
ccasanueva7 May 23, 2026
dbf4064
docs(observability): document Lab Services and WireGuard sections
ccasanueva7 May 23, 2026
805607d
docs(observability): list lab-overview.json in Key files table
ccasanueva7 May 23, 2026
eae4a40
docs(observability): describe Lab Overview dashboard sections
ccasanueva7 May 23, 2026
0060e76
docs(observability): note network errors and drops panel on DUTs
ccasanueva7 May 23, 2026
9b3f9a7
docs(ci-results): fix registered devices table
ccasanueva7 May 23, 2026
49fca32
docs(ci-results): update search examples to current place names
ccasanueva7 May 23, 2026
771a315
docs(glossary): add auto-merge entry
ccasanueva7 May 23, 2026
5cededa
docs(glossary): define node_openwrt_info and node_systemd_unit_state
ccasanueva7 May 23, 2026
c9e8d97
docs(glossary): add PAT entry
ccasanueva7 May 23, 2026
a431382
docs(test-flow): cross-link to CI dashboard publishing
ccasanueva7 May 23, 2026
4eb8f3d
docs(test-run-flow): replace publish-results section with pull flow
ccasanueva7 May 23, 2026
2c265af
docs(debugging-faq): point to collect-lime-results when card has no d…
ccasanueva7 May 23, 2026
cd5909c
feat(grafana): agregar panel de offset NTP en dashboard del orchestrator
ccasanueva7 May 24, 2026
86e8609
feat(grafana): agregar panel de uso de conntrack al dashboard del orc…
ccasanueva7 May 24, 2026
8442be5
feat(grafana): agregar fila de load1 al dashboard Lab Overview
ccasanueva7 May 24, 2026
930e887
feat(grafana): agregar fila de swap al dashboard Lab Overview
ccasanueva7 May 24, 2026
a13034c
feat(grafana): agregar fila de tráfico de red al dashboard Lab Overview
ccasanueva7 May 24, 2026
c4e384a
feat(observability): agregar reglas de alerting de Grafana
ccasanueva7 May 24, 2026
db3fe72
fix
ccasanueva7 May 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
279 changes: 279 additions & 0 deletions ansible/roles/observability/files/alerting/fcefyn-alerts.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,279 @@
apiVersion: 1

groups:
- orgId: 1
name: fcefyn-testbed
folder: FCEFyN Alerts
interval: 1m
rules:

# -----------------------------------------------------------------------
# Target down
# Fires when any Prometheus target (DUT or orchestrator) stops responding.
# -----------------------------------------------------------------------
- uid: fcefyn-target-down
title: Target down
condition: C
for: 2m
annotations:
summary: "{{ $labels.job }} / {{ $labels.instance }} is down"
description: "Prometheus target has been unreachable for more than 2 minutes."
labels:
severity: critical
data:
- refId: A
relativeTimeRange:
from: 300
to: 0
datasourceUid: prometheus
model:
expr: "up == 0"
instant: true
refId: A
- refId: C
datasourceUid: __expr__
model:
type: classic_conditions
refId: C
conditions:
- evaluator:
type: gt
params: [0]
operator:
type: and
query:
params: [A]
reducer:
type: last

# -----------------------------------------------------------------------
# High CPU (orchestrator host)
# -----------------------------------------------------------------------
- uid: fcefyn-high-cpu
title: High CPU usage
condition: C
for: 5m
annotations:
summary: "High CPU on {{ $labels.instance }}"
description: "CPU usage has been above 90% for more than 5 minutes."
labels:
severity: warning
data:
- refId: A
relativeTimeRange:
from: 600
to: 0
datasourceUid: prometheus
model:
expr: "100 - (avg by (instance, dut) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)"
instant: true
refId: A
- refId: C
datasourceUid: __expr__
model:
type: classic_conditions
refId: C
conditions:
- evaluator:
type: gt
params: [90]
operator:
type: and
query:
params: [A]
reducer:
type: last

# -----------------------------------------------------------------------
# High memory
# -----------------------------------------------------------------------
- uid: fcefyn-high-memory
title: High memory usage
condition: C
for: 5m
annotations:
summary: "High memory on {{ $labels.instance }}"
description: "Memory usage has been above 90% for more than 5 minutes."
labels:
severity: warning
data:
- refId: A
relativeTimeRange:
from: 300
to: 0
datasourceUid: prometheus
model:
expr: "(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100"
instant: true
refId: A
- refId: C
datasourceUid: __expr__
model:
type: classic_conditions
refId: C
conditions:
- evaluator:
type: gt
params: [90]
operator:
type: and
query:
params: [A]
reducer:
type: last

# -----------------------------------------------------------------------
# Low disk space
# -----------------------------------------------------------------------
- uid: fcefyn-low-disk
title: Low disk space
condition: C
for: 0m
annotations:
summary: "Low disk on {{ $labels.instance }} ({{ $labels.mountpoint }})"
description: "Disk usage is above 85% on {{ $labels.mountpoint }}."
labels:
severity: warning
data:
- refId: A
relativeTimeRange:
from: 300
to: 0
datasourceUid: prometheus
model:
expr: "(1 - node_filesystem_avail_bytes{fstype!~\"tmpfs|overlay\"} / node_filesystem_size_bytes{fstype!~\"tmpfs|overlay\"}) * 100"
instant: true
refId: A
- refId: C
datasourceUid: __expr__
model:
type: classic_conditions
refId: C
conditions:
- evaluator:
type: gt
params: [85]
operator:
type: and
query:
params: [A]
reducer:
type: last

# -----------------------------------------------------------------------
# DUT metrics tunnel down
# Checks that autossh tunnel units are not in failed state.
# Metric comes from the orchestrator's node_exporter.
# -----------------------------------------------------------------------
- uid: fcefyn-tunnel-down
title: DUT metrics tunnel down
condition: C
for: 2m
annotations:
summary: "Metrics tunnel failed: {{ $labels.name }}"
description: "autossh unit {{ $labels.name }} is in failed state — DUT metrics may be stale."
labels:
severity: warning
data:
- refId: A
relativeTimeRange:
from: 300
to: 0
datasourceUid: prometheus
model:
expr: "node_systemd_unit_state{name=~\"dut-metrics-tunnel-.+\\.service\", state=\"failed\"} == 1"
instant: true
refId: A
- refId: C
datasourceUid: __expr__
model:
type: classic_conditions
refId: C
conditions:
- evaluator:
type: gt
params: [0]
operator:
type: and
query:
params: [A]
reducer:
type: last

# -----------------------------------------------------------------------
# Systemd units in failed state (orchestrator host)
# Catches prometheus, grafana, labgrid-coordinator, etc.
# -----------------------------------------------------------------------
- uid: fcefyn-systemd-failed
title: Systemd unit failed
condition: C
for: 1m
annotations:
summary: "Systemd unit failed on {{ $labels.instance }}: {{ $labels.name }}"
description: "A systemd unit is in failed state on the orchestration host."
labels:
severity: warning
data:
- refId: A
relativeTimeRange:
from: 300
to: 0
datasourceUid: prometheus
model:
expr: "node_systemd_unit_state{state=\"failed\", name!~\"dut-metrics-tunnel-.+\\.service\"} == 1"
instant: true
refId: A
- refId: C
datasourceUid: __expr__
model:
type: classic_conditions
refId: C
conditions:
- evaluator:
type: gt
params: [0]
operator:
type: and
query:
params: [A]
reducer:
type: last

# -----------------------------------------------------------------------
# Network errors (orchestrator host)
# Sustained error rate on physical interfaces.
# -----------------------------------------------------------------------
- uid: fcefyn-network-errors
title: Network interface errors
condition: C
for: 5m
annotations:
summary: "Network errors on {{ $labels.instance }} / {{ $labels.device }}"
description: "Interface {{ $labels.device }} has a sustained error/drop rate over 5 minutes."
labels:
severity: warning
data:
- refId: A
relativeTimeRange:
from: 600
to: 0
datasourceUid: prometheus
model:
expr: "rate(node_network_receive_errs_total{device!~\"lo|veth.+|docker.+\"}[5m]) + rate(node_network_transmit_errs_total{device!~\"lo|veth.+|docker.+\"}[5m]) + rate(node_network_receive_drop_total{device!~\"lo|veth.+|docker.+\"}[5m]) > 0.1"
instant: true
refId: A
- refId: C
datasourceUid: __expr__
model:
type: classic_conditions
refId: C
conditions:
- evaluator:
type: gt
params: [0]
operator:
type: and
query:
params: [A]
reducer:
type: last
Loading
Loading