> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashduty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Hosted Graphite alert integration

> Send threshold alert triggers and recoveries from Hosted Graphite to Flashduty On-call through the alert Webhook notification channel.

Use a Hosted Graphite Webhook notification channel to send metric alert triggers (`alerting`) and recoveries (`recovered`) to Flashduty On-call. An alert opens when its rule crosses the threshold on a metric and closes when the metric recovers.

<div className="hide">
  ## In Flashduty On-call

  ***

  You can get the integration push URL in either of the following ways.

  ### Dedicated integration

  1. In the Flashduty console, choose **Channels** and open a channel
  2. Choose **Configuration** → **Integrations** → **Private integration**, and click **Add an integration**
  3. Select **Hosted Graphite** and click **Save**
  4. Open the integration card and copy the **push URL**

  ### Shared integration

  1. In the Flashduty console, choose **Integration Center → Alert events**
  2. Select **Hosted Graphite** and enter an integration name
  3. Configure the default route and choose a channel; add more rules under **Routes** after creation
  4. Click **Save** and copy the **push URL**
</div>

## In Hosted Graphite

***

<Steps>
  <Step title="Create a Webhook notification channel">
    In Hosted Graphite, create a Notification Channel of type **Webhook** for alerts and paste the full Flashduty push URL as its URL.
  </Step>

  <Step title="Attach it to alerts">
    Edit each alert you want to send, add the Webhook channel to its notification channels, and save.
  </Step>

  <Step title="Verify the lifecycle">
    Push a metric above the alert threshold and confirm Flashduty receives an active alert. Bring the metric back within the threshold and confirm the alert recovers.
  </Step>
</Steps>

<Warning>
  Hosted Graphite notifications carry no alert ID, so Flashduty tells alerts apart by alert name plus metric name. Two alerts with the same name and metric merge into one Flashduty alert. Give every alert a unique name.
</Warning>

## Payload

***

Hosted Graphite POSTs these fields as `application/json`. Flashduty parses them directly; no template is needed.

| Field | Meaning | In Flashduty |
| :- | :- | :- |
| `name` | Alert name | Alert title, labels `alert_name`, `check` |
| `metric` | Metric that fired | Label `metric` |
| `status` | `alerting` or `recovered` | Trigger or recovery |
| `criteria` | Condition description | Label `criteria`, in the description |
| `value` | Current value | Label `value`, in the description |
| `graph` | Graph link | Label `graph` |
| `info` | Extra information | In the description |
| `timestamp`, `backoff_minutes` | Send time, backoff setting | Not stored |

## Alert Key

***

Flashduty computes the Alert Key as the MD5 of the alert name and metric name joined by a delimiter. The trigger and recovery of one alert on one metric carry the same name and metric, so they land on the same Flashduty alert; alerts with a different name or metric stay separate. Changing the condition or the current value does not change the Alert Key.

Hosted Graphite provides no alert ID, so this combination is inferred: two alerts with the same name and metric merge. If `name` is missing, Flashduty returns a parameter error.

## Status and severity

***

Hosted Graphite notifications carry no severity, so Flashduty treats every alert as Warning.

| Hosted Graphite `status` | Flashduty state or severity |
| :- | :- |
| `alerting` | Warning |
| `recovered` | Recovery, original severity Warning |

Requests with an empty or unknown `status` are rejected so they cannot corrupt an alert lifecycle.

## FAQ

***

<AccordionGroup>
  <Accordion title="Do Hosted Graphite retries create duplicate alerts?">
    No. When a request fails, Hosted Graphite retries several times within seconds. The retries carry the same name and metric and merge into the same alert.
  </Accordion>

  <Accordion title="Is there a test button?">
    No test button was observed for the Webhook channel. Verify by pushing a metric across the threshold, as in the last setup step.
  </Accordion>
</AccordionGroup>

## Troubleshooting

***

* **Hosted Graphite fails to deliver**: check that the URL is the full push URL including `integration_key`
* **Flashduty returns a parameter error**: check that the body is JSON, `name` is not empty, and `status` is `alerting` or `recovered`
* **An alert does not recover**: the recovery must carry the same alert name and metric as the trigger; renaming an alert produces a new Alert Key
* **Two alerts merged**: give them different names
