Public preview Grafana Cloud
Last reviewed: November 9, 2026

Weekly service health summary

Note

Grafana Workflows is currently in public preview. Grafana Labs offers limited support, and breaking changes might occur prior to the feature being made generally available.

Every Friday morning, Grafana Assistant reviews the health of the services you own and posts a summary to Slack.

This Grafana Workflows blueprint is in the Reports category of the Blueprints library.

Before you begin

To use this blueprint, you need:

Steps

Steps run in order from first to last. A step inside a switch branch runs only when Workflows chooses that branch.

StepIDTypeDescription
Summarize service healthsummarizeassistant.promptAsks Grafana Assistant for a structured weekly health review. Replace checkout-api, payments-worker in the first line of the prompt with the services your team owns, as they appear in your telemetry. Adjust the focus areas to match what your team tracks.
Post the summary to Slackpost-summaryslack.message.postPosts the weekly summary. Set channelID to the channel where your team reviews service health.

For the inputs and outputs of each step type, refer to Step and trigger types reference.

Before you turn on the workflow, customize any steps that need input from you, such as a channel ID or a schedule name. Each step’s description says what to set.

Workflow definition

Save this definition as a YAML file to create the workflow with gcx, the Workflows API, or Terraform, or give it to a coding agent as an example. Replace FOLDER_UID with the UID of the folder for the workflow. Blueprints start disabled, so finish customizing the steps before you set enabled to true. For details, refer to Manage workflows as code.

YAML
apiVersion: workflows.ext.grafana.app/v1alpha1
kind: Definition
metadata:
  name: weekly-service-health-summary
  annotations:
    grafana.app/folder: <FOLDER_UID>
spec:
  name: Weekly service health summary
  enabled: false
  startWhen:
    matchingRules: []
    schedules:
      - 'CRON_TZ=America/New_York 0 9 * * 5'
  steps:
    - id: summarize
      type: assistant.prompt
      name: Summarize service health
      description: >-
        Asks Grafana Assistant for a structured weekly health review. Replace checkout-api,
        payments-worker in the first line of the prompt with the services your team owns, as they
        appear in your telemetry. Adjust the focus areas to match what your team tracks.
      inputs:
        prompt: |
          Produce a weekly health summary for these services: checkout-api, payments-worker

          Cover ${now() - duration('168h')} to ${now()}. For each service, check:
          - SLO status and how much error budget was burned this week
          - Incidents and alert groups that involved the service
          - Error rate and latency trends compared with the previous week
          - Anything unusual, such as new error types, saturation, or deploy-related regressions

          Rate each service healthy, degraded, or at_risk. Then name the top risks for next week.
          Write slackMessage in Slack mrkdwn, at most 2500 characters, with one line per service, an emoji for its status, and the top risks at the end.
        outputSchema: |
          {
            "type": "object",
            "required": ["overallStatus", "slackMessage"],
            "properties": {
              "overallStatus": { "type": "string", "enum": ["healthy", "degraded", "at_risk"] },
              "slackMessage": { "type": "string" }
            }
          }
        maxRetries: '3'
    - id: post-summary
      type: slack.message.post
      name: Post the summary to Slack
      description: Posts the weekly summary. Set channelID to the channel where your team reviews service health.
      inputs:
        channelID: ''
        messageText: |
          :bar_chart: *Weekly service health* (overall: *${steps.summarize.outputs.result.overallStatus}*)

          ${steps.summarize.outputs.result.slackMessage}

How it works

This section explains when the workflow runs and how its steps work together.

When it runs

This blueprint runs on the schedule CRON_TZ=America/New_York 0 9 * * 5.

How the steps fit together

These notes cover how the steps connect and which Workflows behaviors the blueprint relies on.

  • Schedule trigger using CRON_TZ so it runs at 9:00 AM New York time every Friday, adjusting for daylight saving time.
  • The assistant.prompt step asks Grafana Assistant to research SLOs, incidents, alerts, and golden signals for those services over the past 7 days and return JSON that matches outputSchema.
  • The Slack step reads the validated object at steps.summarize.outputs.result.
  • Schedule-triggered workflows cannot use runOnceFor, because scheduled runs are already deduplicated by tick.
  • Customize the service list, the schedule and timezone, the prompt focus areas, and the Slack channel.

Next steps