Azure Generation Rule Examples
Below is an example of how to configure Generation Rules and templates for Azure resources—in this case, Azure App Services. The final result automatically generates an SLX, SLI, and Runbook for each matched App Service.
Example Directory Layout
azure-appservice-triage
└── .runwhen
├── generation-rules
│ └── azure-appservice-triage.yaml
└── templates
├── azure-appservice-triage-slx.yaml
├── azure-appservice-triage-sli.yaml
└── azure-appservice-triage-taskset.yaml
Generation Rule
apiVersion: runwhen.com/v1
kind: GenerationRules
spec:
platform: azure
generationRules:
- resourceTypes:
- azure_appservice_web_apps
matchRules:
- type: pattern
pattern: ".+"
properties: [ name ]
mode: substring
slxs:
- baseName: az-appsvc-triage
qualifiers: [ "resource", "resource_group" ]
baseTemplateName: azure-appservice-triage
levelOfDetail: basic
outputItems:
- type: slx
- type: sli
- type: runbook
templateName: azure-appservice-triage-taskset.yaml
Explanation
resourceTypes: Targets Azure App Service Web Apps (
azure_appservice_web_apps
).matchRules: Matches any App Service name containing at least one character.
slxs: Generates an SLX, an SLI, and a Runbook for every matched resource. The templates are all prefixed by
azure-appservice-triage
.
SLX Template Example
apiVersion: runwhen.com/v1
kind: ServiceLevelX
metadata:
name: {{slx_name}}
labels:
{% include "common-labels.yaml" %}
annotations:
{% include "common-annotations.yaml" %}
spec:
imageURL: https://storage.googleapis.com/runwhen-nonprod-shared-images/icons/azure/app%20services/10035-icon-service-App-Services.svg
alias: Azure App Service Health for {{match_resource.resource.name}} in resource group {{resource_group.name}}
asMeasuredBy: An aggregate score that is evaluated from configuration, metric, event or log issues.
configProvided:
- name: AZ_RESOURCE_GROUP
value: {{resource_group.name}}
- name: APP_SERVICE_NAME
value: {{match_resource.resource.name}}
owners:
- {{workspace.owner_email}}
statement: >-
App Service {{match_resource.resource.name}} in resource group {{resource_group.name}} be available and healthy.
additionalContext:
name: "{{match_resource.resource.name}}"
Explanation
alias: Provides a more descriptive name for your SLX.
configProvided: Passes relevant Azure info (Resource Group and App Service name) to be used by your code or robots.
statement: Summarizes the primary objective.
SLI Template Example
apiVersion: runwhen.com/v1
kind: ServiceLevelIndicator
metadata:
name: {{slx_name}}
labels:
{% include "common-labels.yaml" %}
annotations:
{% include "common-annotations.yaml" %}
spec:
displayUnitsLong: OK
displayUnitsShort: ok
locations:
- {{default_location}}
description: Measures the health of Azure App Service {{match_resource.resource.name}} in resource group {{resource_group.name}}
codeBundle:
{% if repo_url %}
repoUrl: {{repo_url}}
{% else %}
repoUrl: https://github.com/runwhen-contrib/rw-cli-codecollection.git
{% endif %}
{% if ref %}
ref: {{ref}}
{% else %}
ref: main
{% endif %}
pathToRobot: codebundles/azure-appservice-triage/sli.robot
intervalStrategy: intermezzo
intervalSeconds: 600
configProvided:
- name: AZ_RESOURCE_GROUP
value: {{resource_group.name}}
- name: APP_SERVICE_NAME
value: {{match_resource.resource.name}}
- name: TIME_PERIOD_MINUTES
value: "10"
secretsProvided:
{% if wb_version %}
{% include "azure-auth.yaml" ignore missing %}
{% else %}
- name: azure_credentials
workspaceKey: AUTH DETAILS NOT FOUND
{% endif %}
alerts:
warning:
operator: <
threshold: '1'
for: '20m'
ticket:
operator: <
threshold: '1'
for: '30m'
page:
operator: '=='
threshold: '0'
for: ''
Explanation
intervalSeconds: Runs every 600 seconds (10 minutes).
configProvided: Passes the Resource Group name and App Service name into the SLI code.
secretsProvided: Provides Azure credentials.
alerts: Defines thresholds for warning, ticket, and page alerts.
Runbook Template Example
apiVersion: runwhen.com/v1
kind: Runbook
metadata:
name: {{slx_name}}
labels:
{% include "common-labels.yaml" %}
annotations:
{% include "common-annotations.yaml" %}
spec:
location: {{default_location}}
description: Generates a report for Azure App Service {{match_resource.resource.name}} in resource group {{resource_group.name}}
codeBundle:
{% if repo_url %}
repoUrl: {{repo_url}}
{% else %}
repoUrl: https://github.com/runwhen-contrib/rw-cli-codecollection.git
{% endif %}
{% if ref %}
ref: {{ref}}
{% else %}
ref: main
{% endif %}
pathToRobot: codebundles/azure-appservice-triage/runbook.robot
configProvided:
- name: AZ_RESOURCE_GROUP
value: {{resource_group.name}}
- name: APP_SERVICE_NAME
value: {{match_resource.resource.name}}
- name: TIME_PERIOD_MINUTES
value: "10"
secretsProvided:
{% if wb_version %}
{% include "azure-auth.yaml" ignore missing %}
{% else %}
- name: azure_credentials
workspaceKey: AUTH DETAILS NOT FOUND
{% endif %}
Explanation
pathToRobot: Points to the location of your runbook code in the CodeBundle.
configProvided: The Azure resource group and App Service name again.
location: Usually inherited from your workspace default location.
Summary
With these configurations:
A single Generation Rule matches Azure App Service Web Apps.
It emits an SLX, SLI, and Runbook for each matched App Service.
The templates reference relevant Azure metadata (e.g., Resource Group, App Service name) for triaging or health checks.
This approach can be extended to other Azure resource types by adjusting resourceTypes
, matchRules
, and the code bundles used in your templates.