---
title: "Weekly service health summary | Grafana Cloud documentation"
description: "Every Friday morning, Grafana Assistant reviews the health of the services you own and posts a summary to Slack."
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

# Weekly service health summary

> Note
> 
> Grafana Workflows is currently in [public preview](https://grafana.com/docs/release-life-cycle/). 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:

- Slack connected to Grafana IRM. For details, refer to [Configure Slack for Grafana IRM](https://grafana.com/docs/grafana-cloud/alerting-and-irm/irm/integrations/chat-and-collaboration/slack/).
- Grafana Assistant in use on your stack.

## Steps

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

Expand table

| Step                      | ID             | Type                 | Description                                                                                                                                                                                                                                                    |
|---------------------------|----------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Summarize service health  | `summarize`    | `assistant.prompt`   | 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. |
| Post the summary to Slack | `post-summary` | `slack.message.post` | Posts 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](https://grafana.com/docs/grafana-cloud/platform/workflows/reference/step-trigger-types).

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](https://grafana.com/docs/grafana-cloud/platform/workflows/as-code).

YAML ![Copy code to clipboard](https://grafana.com/media/images/icons/icon-copy-small-2.svg) Copy

```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

- [Blueprints](https://grafana.com/docs/grafana-cloud/platform/workflows/reference/blueprints)
- [Start from a blueprint](https://grafana.com/docs/grafana-cloud/platform/workflows/build/use-blueprints)
- [Manage workflows as code](https://grafana.com/docs/grafana-cloud/platform/workflows/as-code)
- [Step and trigger types reference](https://grafana.com/docs/grafana-cloud/platform/workflows/reference/step-trigger-types)
