Configuration File¶
IMPulse uses a single configuration file impulse.yml. You can customize its location using the CONFIG_PATH↰ environment variable.
The configuration can be reloaded while IMPulse is running without requiring a restart.
Required fields
Fields marked with "*" are mandatory within their parent section, but only if that parent section is present in the configuration.
Below are all the configuration options supported by IMPulse.
general¶
- description: general settings
- type: dict
general.timezone¶
- description: default timezone (used for Freeze delay)
- type: string
- default value: UTC
general.week_start¶
- description: first day of the week (used for Freeze delay)
- type: string
- default value: Mon
- allowed values: 0 to 7 (like in cron) or "Sun", "Mon"...
general.workday_start¶
- description: time when workday starts (used for Freeze delay)
- type: string ("23:59" format)
- default value: "09:00"
incident¶
- description: incidents behavior options
- type: dict
incident.notifications¶
- description: incident notifications settings
- type: dict
incident.notifications.assignment¶
- description: enable/disable notifications about incident assignment changes
- type: bool
- default value: True
incident.notifications.new_firing¶
- description: notification about new firing instances
- type: bool
- default value: True
incident.notifications.partial_resolved¶
- description: nofitication about some resolved instances
- type: bool
- default value: True
incident.notifications.status_update¶
- description: notifications about incident status updates
- type: bool
- default value: True
incident.timeouts¶
- description: incident status timeouts (see lifecycle)
- type: dict
incident.timeouts.firing¶
- description: after this time, incident status changes from firing to unknown if no alerts appear
- type: string
- default value: 6h
- allowed values:
waitinstruction format
incident.timeouts.unknown¶
- description: after this time, incident status changes from unknown to closed if no alerts appear
- type: string
- default value: 6h
- allowed values:
waitinstruction format
incident.timeouts.resolved¶
- description: after this time, incident status changes from resolved to closed if no alerts appear
- type: string
- default value: 12h
- allowed values:
waitinstruction format
incident.timeouts.closed¶
- description: after this time, closed incident will be deleted
- type: string
- default value: 90d
- allowed values:
waitinstruction format
inhibit_rules¶
- description: inhibition rules to suppress (freeze) target incidents when source incidents are active (see concepts)
- type: list
- examples:
inhibit_rules: # freeze 'warning' incidents when 'critical' incidents are in firing status # only applies to incidents with the same 'service' label - source_matchers: - severity = "critical" target_matchers: - severity = "warning" equal: - service # freeze 'info' incidents when 'warning' incidents are in firing status # only applies to incidents with the same 'service' label - source_matchers: - severity = "warning" target_matchers: - severity = "info" equal: - service
<rule>.source_matchers¶
- description: list of matchers that identify source incidents (parent)
- type: list
- allowed values: route matcher syntax
<rule>.target_matchers¶
- description: list of matchers that identify target incidents (childs)
- type: list
- allowed values: route matcher syntax
<rule>.equal¶
- description: list of label names that must have equal values in both source and target incidents for inhibition to apply
- type: list
- examples:
equal: - service
messenger *¶
- description: messenger configuration
- type: dict
messenger.address *¶
- impact:
mattermostonly - description: your messenger server address
- type: string
messenger.admin_users *¶
- description: IMPulse administrators (from
messenger.users↰) notified of any warnings - type: list
messenger.channels *¶
- description: define channels by their ID to use them in the route section. Use your messenger's UI to find the channel IDs.
- type: dict
-
examples:
messenger: channels: incidents_default: {id: C09NSUL269T}messenger: channels: incidents_default: {id: w8gvebq58fgo9civ8begs6renw}messenger: channels: incidents_default: {id: -1003748296152}
messenger.chains¶
- description: escallation chains (policies) - notification sequences for incident escalation. Referenced in the route section to determine which chains apply to which incidents.
- type: dict
-
details:
There are 3 chain types: simple, schedule, cloud. See their description below.
Steps
Each chain contains a list of steps. There are 6 step types:
chain↰ allows nesting any other chains. Nesting is supported to any depth.wait, which delays the execution of the next notification. Its format is similar to the sleep utility format, but it does not support floats or combined expressions like1m 3s. Valid units:s(seconds),m(minutes),h(hours),d(days). -
examples:
messenger: chains: programmers: - user: Valery - wait: 5m - chain: devops devops: - user: Dmitry - wait: 5m - user: Dmitry_s_boss
<simple chains>¶
- description: a basic escalation chain. It starts executing when an incident is created.
- type: list
-
examples:
# Defined two simple chains for DevOps team messenger: chains: devops: - user: Dmitry - wait: 5m - user: Dmitry_s_boss devops-critical: - user: Dmitry - wait: 3m - webhook: Dmitry_call - wait: 5m - user: Dmitry_s_boss - wait: 15m - user: CTO
<schedule chains>¶
- description: a chain that allows you to define notification logic based on a calendar schedule.
- type: dict
-
examples:
messenger: chains: support: type: schedule timezone: Asia/Tashkent schedule: - matcher: start_day_expr: dow start_day_values: ["Mon", "Tue"] start_time: "09:00" # 24h format duration: 24h steps: - user: Dmitry - matcher: start_day_expr: dow start_day_values: ["Wed", "Thu"] start_time: "09:00" # 24h format duration: 24h steps: - user: Alexander - steps: # will work at Sunday - user: AdministratorYou can also use modulus expressions for
dowanddom:- matcher: start_day_expr: dow % 2 start_day_values: [0] # matches when Tue, Thu, Satmessenger: chains: support: type: schedule timezone: Asia/Tashkent schedule: - {matcher: {start_day_expr: dow, start_day_values: [1, 2], start_time: "12:00", duration: 12h}, steps: [{user: Dmitry}]} - {matcher: {start_day_expr: dow, start_day_values: [3, 4], start_time: "12:00", duration: 12h}, steps: [{user: Alexander}]} - {matcher: {start_day_expr: dow, start_day_values: [5, 6], start_time: "12:00", duration: 12h}, steps: [{user: Maria}]} - {steps: [{user: Oleg }]} # full Sunday and 00:00 to 12:00 every day
<chain>.type *¶
- description: chain type
- type: string
- allowed values:
schedulefor schedule chain
<chain>.timezone¶
- description: time zone in "TZ identifier" format
- type: string
- default value: UTC
<chain>.schedule¶
- description: list of matchers with corresponding steps
- type: list
-
details:
IMPulse evaluates matchers from top to bottom. If a
matchermatches the current time, the correspondingstepsdefined for thatmatcherare selected<schedule>.matcher
- description: datetime matcher which will be compared with current datetime
- type: dict
<schedule>.matcher.start_day_expr *
- description: date matching strategy
- type: string
- allowed values:
- "dow" - day of week
- "dom" - day of month
- "date" - exact date
- "dow % 2" - least positive remainder (works with "dow", "dom")
<schedule>.matcher.start_day_values *
- description: values for the expression start_day_expr
- type: list
- allowed values:
- for
dow: 0 to 7 (like in cron) or "Sun", "Mon"... - for
dom: 1 to 31 - for
date: "2024-12-24" format
- for
<schedule>.matcher.start_time
- description: local time
- type: string
- allowed values: "HH:MM" format (24-hour)
<schedule>.matcher.duration
- description: duration of the active window
- type: string
- allowed values:
waitinstruction format
<schedule>.steps *
- description: list of chain steps
- type: list
- allowed values: simple chain format
-
examples:
messenger: chains: support: type: schedule timezone: Asia/Tashkent schedule: - matcher: start_day_expr: dow start_day_values: ["Mon", "Tue"] start_time: "09:00" duration: 24h steps: - user: Dmitry - steps: - user: Administrator
<cloud chains>¶
- description: a chain that allows you to define dynamic chains using calendar providers (e.g., Google).
- type: dict
-
details:
Configure
To use cloud chains you should generate service account file
key.json(see instructions forgoogleprovider) and add service account to your calendar.Also you should set special ENVs:
CHAIN_PROVIDER_DAYS_TO_SYNCCHAIN_PROVIDER_MAX_EVENTSCHAIN_PROVIDER_SYNC_INTERVAL_SECONDSGOOGLE_SERVICE_ACCOUNT_FILE
You can now create an Event in the calendar and add steps to the "Description" field using the standard format:
- user: Dmitry - wait: 10m - user: MariaThe chain will trigger at the time specified in the Event. If no Event exists, the chain specified in
default_stepswill be used.How it works
With event in calendar
name: Test event from: 2024-12-24 15:00 (Asia/Tashkent) to: 2024-12-25 15:00 (Asia/Tashkent) description: - user: Valeryand config
messenger: chains: devops: type: cloud provider: google calendar_id: b7ec15a9f4cb22d45819b7d3e96424a03e51987461adbc22385f964cf7103a62@group.calendar.google.com default_steps: - user: Dmitry - wait: 5m - user: MariaUnder the hood, the following
schedule chainwill be generated:messenger: chains: devops: type: schedule timezone: Asia/Tashkent schedule: - {matcher: {start_day_expr: date, start_day_values: ["2024-12-24"], start_time: "15:00", duration: 24h}, steps: [{user: Valery}]} - {steps: [{user: Dmitry}, {wait: 5m}, {user: Maria}]}
<chain>.type *¶
- description: chain type
- type: string
- allowed values:
cloudfor cloud chain
<chain>.provider *¶
- description: cloud calendar provider
- type: string
- allowed values:
googleonly (setup instruction)
<chain>.calendar_id *¶
- description: calendar ID. Get it on calendar settings page
- type: string
<chain>.default_steps¶
- description: chain steps if there are no calendar events at the moment
- type: list
- allowed values: simple chain format
<ui chains>¶
- description: a chain managed from the UI.
- type: dict
-
details:
Use UI chains for on-call rotations and quick shift updates without editing the config file.
A UI chain is declared in config and edited from the ui chains button in the web interface (see Footer).
<chain>.type *¶
- description: chain type
- type: string
-
allowed values:
uifor UI-managed chain -
examples:
messenger: chains: oncall: type: ui
messenger.groups¶
- impact:
mattermost,slackonly - description: Messenger groups
- type: dict
-
details:
Instructions how to get groups
id: Slack, Mattermost -
examples:
messenger: groups: devops_group: {id: S0A6WIL2F7T}messenger: groups: devops_group: {id: ic8pft3ac7rjrd9eopxp4kc7qy}
messenger.impulse_address *¶
- impact:
mattermost,telegramonly - description: IMPulse address for button callbacks. Telegram supported only HTTPS.
- type: string
messenger.users *¶
- description: users declaration. Defines users used in chains for direct notifications.
- type: dict
-
details:
Instructions how to find users
id: Slack, Mattermost, Telegram -
examples:
messenger: users: Dmitry: {id: U73MD1YLR4M}messenger: users: Dmitry: {id: ic8pft3ac7rjrd9eopxp4kc7qy}messenger: users: Dmitry: {id: 482913726}
messenger.user_groups¶
- description: groups of users for bulk notification. Used in chains.
- type: list
-
examples:
messenger: user_groups: developers: {users: ["Dmitry", "Alexander"]}
messenger.team *¶
- impact:
mattermostonly - description: team name
- type: string
messenger.template_files¶
- description: path to custom template files for
status_icons,header, andbody(see Incident Structure) - type: dict
- special variables:
incident,incidentsandpayloadsupported -
details:
IMPulse uses jinja2 templates to set messages format. And you can modify it.
Incident message contains three parts (picture). Default template files for theese parts is here. You can copy the default templates, modify them, and specify custom paths.
-
examples:
messenger: template_files: status_icons: ./templates/status_icons.yml header: ./templates/header.yml body: ./templates/body.yml
messenger.template_files.body¶
- description: path to the custom template file that defines the format of
body - type: string
- default value:
./templates/<messenger.type>_body.j2
messenger.template_files.header¶
- description: path to the custom template file that defines the format of
header - type: string
- default value:
./templates/<messenger.type>_header.j2
messenger.template_files.status_icons¶
- description: path to the custom template file that defines the format of
status_icons - type: string
- default value:
./templates/<messenger.type>_status_icons.j2
messenger.type *¶
- description: messenger type
- type: string
- allowed values:
slack- Slack messengermattermost- Mattermost messengertelegram- Telegram messengernone- disable messenger integration
route *¶
- description: incident routing rules based on alert fields
- type: dict
-
details:
-
examples:
route: channel: incidents_default # default channel where incidents will be created if their didn't match any matchers chain: devops # optional, but we recommend set it to handle alerts didn't match any matchers routes: # Infrastructure routes - matchers: - service =~ "cpu|disk|memory|network" # regex selector powered by Python regex channel: incidents-infrastructure # channel for not "critical" or "warning" severity # no chain here means users will not be notified, just incident created routes: - matchers: - severity = "critical" # simple selector channel: incidents-infrastructure chain: devops-critical - matchers: - severity = "warning" channel: incidents-infrastructure chain: devops # Services routes - matchers: - service = "fingernote" channel: incidents-services chain: fingernote-team routes: - matchers: - severity = "critical" channel: incidents-services chain: fingernote-team-critical - matchers: - service = "pickcase" channel: incidents-services chain: pickcase-team routes: - matchers: - severity = "critical" channel: incidents-services chain: pickcase-team-critical
route.channel *¶
- description: default channel where incidents will be created if they don't match any matchers
- type: string
route.chain¶
- description: default chain to notify users if alert don't match any matchers inside route.routes
- type: string
route.routes¶
- description: list of routing rules based on matchers to determine which channel and chain to use for incidents
- type: list
<route>.matchers¶
- description: conditions to match alert fields using Python regex patterns
- type: list
- allowed values: same as Alertmanager's matcher
<route>.channel¶
- description: channel where incidents will be created if they match the matchers
- type: string
<route>.chain¶
- description: chain to notify users if incidents match the matchers
- type: string
<route>.routes¶
- description: nested routing rules for more detailed incident classification (recursive structure)
- type: list
task_management¶
- description: task tracking system integration configuration (e.g., Jira). The
task_management:block enables Task button. - type: dict
task_management.type *¶
- description: task tracking system type
- type: string
- allowed values:
jiraonly - Jira integration (see integration)
task_management.project_key *¶
- description: project key in the task tracking system where tasks will be created
- type: string
-
examples:
task_management: type: jira project_key: PROJ
task_management.template_files¶
- description: path to custom template files for task creation
- type: dict
- special variables:
incidentsupported -
details:
IMPulse uses Jinja templates to format task summary and description. You can customize these templates to match your requirements.
-
examples:
# Custom templates for both summary and description task_management: type: jira project_key: PROJ template_files: summary: templates/jira_custom_summary.j2 description: templates/jira_custom_description.j2
task_management.template_files.summary¶
- description: path to the custom template file that defines the format of task summary
- type: string
- default value:
./templates/<task_management.type>_summary.j2
task_management.template_files.description¶
- description: path to the custom template file that defines the format of task description
- type: string
- default value:
./templates/<task_management.type>_description.j2
ui¶
- description: user interface configuration (see concepts). The
ui:block enables the web interface - type: dict
-
examples:
ui: columns: - name: status header: Status value: incident.status - name: created type: datetime header: Created value: incident.created - name: alertname header: Alertname type: link url: incident.link value: payload.commonLabels.alertname - name: severity header: Severity value: payload.commonLabels.severity - name: summary header: Summary value: payload.commonAnnotations.summary colors: severity: critical: "#FF0000" warning: "#FFA500" info: "#00FF00" filters: - severity="critical" sorting: - severity: desc order: ["info", "warning", "critical"] - created: desc
ui.colors¶
- description: allows you to color the border of a specific cell in a column based on its value.
- type: dict
-
examples:
ui: colors: severity: # column name critical: "#FF0000" # set red border for column severity="critical" warning: "#FFA500" # set orange border for column severity="warning" info: "#00FFFF" # set cyan border for column severity="info" team: # column name devops: "#00FFFF" # set cyan border for column team="info"
ui.columns *¶
- description: defines the columns that are used in the user interface
- type: list
<column>.name *¶
- description: unique identifier for the column, used for filtering and sorting
- type: string
<column>.header *¶
- description: display name shown in the column header
- type: string
<column>.value *¶
- description: data source variable (e.g.,
incident.status,payload.commonLabels.alertname) - type: string
- special variables:
incidentandpayloadsupported
<column>.type¶
- description: column data type that determines how the value is rendered
- type: string
- default value:
string - allowed values:
string- plain textdatetime- date/time values with formatting optionslink- clickable links (requires url field)
<column>.visible¶
- description: whether the column is visible by default in the UI. Invisible columns can be used in search fields.
- type: boolean
- default value: True
<column>.url¶
- description: variable containing the required link (e.g.,
incident.link) (used withtype: link) - type: string
- special variables:
envandincidentsupported
<column>.format¶
- description: formatting option for datetime columns (used with
type: datetime) - type: string
- default value: relative
-
allowed values:
absolute- full date and timerelative- relative time (e.g., "2h ago")
-
examples:
ui: columns: - name: status header: Status type: string value: incident.status visible: True - name: created type: datetime header: Created value: incident.created - name: alertname header: Alertname url: incident.link value: payload.commonLabels.alertname - name: severity header: Severity value: payload.commonLabels.severity - name: summary header: Summary value: payload.commonAnnotations.summary
ui.filters¶
- description: defines the default filters applied in the user interface
- type: list
-
examples:
ui: filters: - severity=~"warning|critical"
ui.sorting¶
- description: the default column sorting order
- type: list
-
details:
Sorting contains a list of column names and their sorting methods. There are three sorting methods:
ascsorts values in alphabetical orderdescsorts in reverse alphabetical ordernonedisables sorting by default. Used to define a custom order
Custom sorting is defined using the
orderfield, which specifies the exact sequence in which rows should appear whenascis selected. If you want to disable sorting by default but enable custom sorting on button click, use thenonemethod. -
examples:
ui: sorting: - created: desc - severity: none order: ["info", "warning", "critical"]
webhooks¶
- description: webhooks provide alternative notification options via HTTP POST requests to custom endpoints. See menu INTEGRATIONS / External Notifications menu for provider examples.
- type: dict
<webhook>.auth¶
- description: string for HTTP Basic Auth (e.g., user:password)
- type: string
- special variables:
envsupported
<webhook>.data¶
- description: data to be sent in the POST request body
- type: dict
- special variables:
envandincidentsupported - details: cannot be used together with
<webhook>.json -
examples:
webhooks: dmitry_call: url: 'http://internal_system:8080' data: channel_id: '{{ incident["channel_id"] }}' complex_jinja_example: url: http://internal_system:8081/ data: instances: '{{ incident.payload.alerts | map(attribute="labels.instance") | unique | join(", ") }}'
<webhook>.json¶
- description: JSON data to be sent in the POST request body
- type: dict or str
- special variables:
envandincidentsupported - details: cannot be used together with
<webhook>.data -
examples:
# Send alert payload webhooks: send_payload: url: 'http://another_host:5003/' json: '{{ incident["payload"] }}'# Create custom JSON webhooks: generate_json: url: 'http://another_host:5003/' json: channel: id: '{{ incident["channel_id"] }}' status: '{{ incident["status"] }}'
<webhook>.url *¶
- description: URL to which the HTTP POST request will be sent
- type: string
- special variables:
envsupported