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.yamlGeneration Rule
apiVersion: runwhen.com/v1kind: GenerationRulesspec: 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.yamlExplanation
- 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/v1kind: ServiceLevelXmetadata: 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/v1kind: ServiceLevelIndicatormetadata: 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/v1kind: Runbookmetadata: 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.