Plan maintenance windows with silencing
As the Sensu backend processes check results, the server executes handlers to send alerts or otherwise relay observation events and metrics data to external services. Sensu’s built-in silencing capability allows you to suppress event handler execution as needed. This feature is useful when you’re planning maintenance.
You can configure silences to prevent handlers from taking actions based on check name, entity subscription, entity name, or a combination of these factors. In this guide, you’ll create a silenced entry for a specific entity and its associated check to prevent alerts and create a time window for maintenance.
Requirements
To follow this guide, install the Sensu backend, make sure at least one Sensu agent is running, and configure sensuctl to connect to the backend as the admin
user.
NOTE: If you already have an entity and running check to use as the silencing target, skip ahead to Create the silenced entry.
Configure a Sensu entity
Before you create a check, you’ll need a Sensu entity with the subscription website
to run the check.
Use sensuctl to add the website
subscription to an entity the Sensu agent is observing.
NOTE: To find your entity name, run sensuctl entity list
.
The ID
is the name of your entity.
Before you run the following code, replace <ENTITY_NAME>
with the name of the entity on your system.
sensuctl entity update <ENTITY_NAME>
- For
Entity Class
, press enter. - For
Subscriptions
, typewebsite
and press enter.
Before you continue, confirm both Sensu services are running:
systemctl status sensu-backend && systemctl status sensu-agent
The response should indicate active (running)
for both the Sensu backend and agent.
Register the http-checks dynamic runtime asset
To power the check in your silenced entry, you’ll use the sensu/http-checks dynamic runtime asset.
This community-tier asset includes http-check
, the http status check command that your check will rely on.
Register the sensu/http-checks dynamic runtime asset:
sensuctl asset add sensu/http-checks:0.5.0 -r http-checks
This example uses the -r
(rename) flag to specify a shorter name for the dynamic runtime asset: http-checks
.
The response will indicate that the asset was added.
Use sensuctl to confirm that the dynamic runtime asset is ready to use:
sensuctl asset list
The response should list the sensu/http-checks dynamic runtime asset (renamed to http-checks
):
Name URL Hash
────────────── ───────────────────────────────────────────────────────────────────── ──────────
http-checks //assets.bonsai.sensu.io/.../http-checks_0.5.0_windows_amd64.tar.gz 52ae075
http-checks //assets.bonsai.sensu.io/.../http-checks_0.5.0_darwin_amd64.tar.gz 72d0f15
http-checks //assets.bonsai.sensu.io/.../http-checks_0.5.0_linux_armv7.tar.gz ef18587
http-checks //assets.bonsai.sensu.io/.../http-checks_0.5.0_linux_arm64.tar.gz 3504ddf
http-checks //assets.bonsai.sensu.io/.../http-checks_0.5.0_linux_386.tar.gz 60b8883
http-checks //assets.bonsai.sensu.io/.../http-checks_0.5.0_linux_amd64.tar.gz 1db73a8
NOTE: Sensu does not download and install dynamic runtime asset builds onto the system until they are needed for command execution.
Create the check
With the dynamic runtime asset registered, you can create a check named check-website
to run the command http-check --url https://sensu.io
, at an interval of 15 seconds, for all agents subscribed to the website
subscription, using the sensu-site
proxy entity name.
To add the check, run:
cat << EOF | sensuctl create
---
type: CheckConfig
api_version: core/v2
metadata:
name: check-website
spec:
command: http-check --url https://sensu.io
interval: 15
proxy_entity_name: sensu-site
publish: true
round_robin: true
runtime_assets:
- http-checks
subscriptions:
- website
EOF
cat << EOF | sensuctl create
{
"type": "CheckConfig",
"api_version": "core/v2",
"metadata": {
"name": "check-website"
},
"spec": {
"command": "http-check --url https://sensu.io",
"interval": 15,
"proxy_entity_name": "sensu-site",
"publish": true,
"round_robin": true,
"runtime_assets": [
"http-checks"
],
"subscriptions": [
"website"
]
}
}
EOF
Use sensuctl to confirm that Sensu added the check:
sensuctl check list
The response should list check-sensu-site
:
Name Command Interval Cron Timeout TTL Subscriptions Handlers Assets Hooks Publish? Stdin? Metric Format Metric Handlers
──────────────── ─────────────────────────────────── ────────── ────── ───────── ───── ─────────────── ────────── ───────────── ─────── ────────── ──────── ─────────────── ──────────────────
check-website http-check --url https://sensu.io 15 0 0 website http-checks true false
Create the silenced entry
The silenced entry will silence the check check-http
on the entity sensu-site
for a planned maintenance window that:
- Starts at 04:00 UTC on March 14, 2022
- Automatically ends 1 hour later
- Adds your username as the creator of the silenced entry
To create the silenced entry, run:
sensuctl silenced create \
--subscription 'entity:sensu-site' \
--check 'check-http' \
--begin '2022-03-14 04:00:00 -00:00' \
--expire 3600 \
--reason 'Planned site maintenance'
Use sensuctl to verify that the silenced entry against the entity sensu-site
was created properly:
sensuctl silenced info 'entity:sensu-site:check-http' --format yaml
sensuctl silenced info 'entity:sensu-site:check-http' --format wrapped-json
The response will list the silenced resource definition, similar to the following:
type: Silenced
api_version: core/v2
metadata:
name: entity:sensu-site:check-http
spec:
begin: 1647230400
check: check-http
creator: admin
expire: 3600
expire_at: 1647234000
expire_on_resolve: false
reason: Planned site maintenance
subscription: entity:sensu-site
{
"type": "Silenced",
"api_version": "core/v2",
"metadata": {
"name": "entity:sensu-site:check-http"
},
"spec": {
"begin": 1647230400,
"check": "check-http",
"creator": "admin",
"expire": 3600,
"expire_at": 1647234000,
"expire_on_resolve": false,
"reason": "Planned site maintenance",
"subscription": "entity:sensu-site"
}
}
What’s next
When your silence goes into effect at the designated begin
time, you will still see events for check-http
on the sensu-site
entity in the Sensu web UI.
This is because silences do not stop events from being produced — they stop events from being handled.
If you followed this guide to create the check-http
check on the sensu-site
entity, you might have noticed that the check does not include a pipeline.
To observe the silenced entry’s effect, add a pipeline to the check-http
check definition (or recreate the silenced entry with your own entity and a check that includes a pipeline).
The pipeline must include a workflow with the built-in not_silenced
event filter and a handler.
WARNING: By default, silenced events will be handled unless the pipeline workflow includes the built-in not_silenced
event filter to discard silenced events.
Follow one of these guides to add a pipeline to your check:
- Send email alerts with a pipeline
- Send PagerDuty alerts with Sensu
- Send Slack alerts with a pipeline
Read the silencing reference for in-depth documentation about silenced entries and more examples for other silencing scenarios.
Learn more about the sensu/http-checks dynamic runtime asset.
The example in this guide uses RFC 3339 format with space delimiters and numeric zone offset, but sensuctl supports several time formats for the begin
flag.