> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt

# Linking Grafana as a source - Docs

Copy page

# Linking Grafana as a source - Docs

![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_9608fcca70)

![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_dark_a92b0e022d)

Let AI connect your sources for you

Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog.

`npx @posthog/wizard warehouse`

[Learn more](/wizard.md)

![PostHog Wizard hedgehog](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)

![](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)Let AI connect your sources for you

**Alpha release**

This source is currently in **alpha**. The interface and available tables may change.

The Grafana connector syncs your Grafana instance's metadata – dashboards, folders, teams, users, data sources, service accounts, alert rules, and annotations – into the PostHog Data warehouse, so you can query your observability setup alongside the rest of your data.

## Prerequisites

-   A Grafana Cloud stack or a self-hosted Grafana instance reachable from the public internet.
-   Permission to create a service account and token in Grafana (or, for self-hosted OSS, a user account you can authenticate with).

## Adding a data source

1.  In PostHog, go to the [Sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section.
2.  Click **\+ New source** and click **Link** next to this source.
3.  Enter your credentials (see [Configuration](#configuration) below) and click **Next**.
4.  Select the tables you want to sync, choose a sync method and frequency, then click **Import**.

Once the syncs are complete, you can start querying this data in PostHog.

When linking Grafana, you'll need:

-   **Instance URL** – your Grafana instance's public URL, for example `https://yourstack.grafana.net`.
-   **Authentication method** – choose one of the following:
    -   **Service account token (recommended)** – in Grafana, go to **Administration** > **Users and access** > **Service accounts**, create a service account, and add a token (it starts with `glsa_`). The Viewer role covers dashboards, folders, and annotations. To sync the remaining tables, grant these extra read permissions: `users:read`, `teams:read`, `datasources:read`, `serviceaccounts:read`, and `alert.provisioning:read`.
    -   **Username & password (self-hosted only)** – the username and password of a Grafana user with read access to the data you want to sync. Grafana Cloud doesn't support basic auth on its HTTP API, so use a service account token there.
-   **Organization ID (optional)** – if your instance serves multiple organizations, set this to choose which organization to sync.

## Sync modes

Each table can be synced in one of several modes, depending on what the source supports:

-   **Webhook** (when available) – the source pushes changes to PostHog in real time. Fastest freshness, lowest ongoing cost, and the only mode that reliably captures updates and deletes.
-   **Incremental** – only new or updated rows are synced on each run, using a cursor field (such as an `updated_at` timestamp). Cheaper than a full refresh, but deletes aren't captured.
-   **Append only** – new rows are appended using a cursor field; existing rows are never updated. Ideal for immutable, append-only tables like event logs.
-   **Full refresh** – the whole table is reloaded on every sync. Use it when a table has no reliable cursor or when you need deletions reflected.

See [sync methods](/docs/cdp/sources.md#sync-methods) for a full explanation of how each mode works and how to choose between them.

Only the `annotations` table supports incremental sync (on the `time` field). All other tables are configuration and metadata endpoints without a server-side change cursor, so they sync as full refreshes.

## Configuration

| Option | Type | Required |
| --- | --- | --- |
| Instance URL | text | Yes |
| Authentication method | select | Yes |
| Organization ID (optional, multi-org instances only) | text | No |

## Supported tables

| Table | Description | Sync method | Incremental field | Primary key |
| --- | --- | --- | --- | --- |
| dashboards | Dashboard metadata from the search API; does not include panel definitions | Full refresh | — | — |
| folders | Dashboard folders in the organization. | Full refresh | — | — |
| teams | Teams in the organization. | Full refresh | — | — |
| users | Users with membership in the organization. | Full refresh | — | — |
| datasources | Data source connections configured in the organization. Secure fields (passwords, secrets) are never returned by the Grafana API. | Full refresh | — | — |
| service_accounts | Service accounts in the organization (machine identities used for API access). | Full refresh | — | — |
| alert_rules | Grafana-managed alert rules, as exposed by the alert provisioning API. | Full refresh | — | — |
| annotations | User- and API-created annotations. Alert state history entries are not included (they have no stable identifier in the Grafana API) | Incremental, Full refresh | time | — |

## Troubleshooting

-   **"Your Grafana credentials are missing the `<permission>` permission"** – grant the named read permission to your service account in Grafana, then retry. You can also deselect the affected table if you don't need it.
-   **Alert state history is missing from the annotations table** – this is expected. The Grafana API returns alert state history entries without a stable identifier, so only user- and API-created annotations are synced.
-   **Authentication errors** – your credentials may be invalid or expired. Create a new service account token and reconnect.
-   **Host rejected** – use your instance's public URL. Internal or private addresses aren't allowed.

If your sync is failing or data looks wrong, see the [Data warehouse troubleshooting guide](/docs/data-warehouse/troubleshooting.md). If that doesn't help, [contact support](https://us.posthog.com/#panel=support%3Asupport%3Adata_warehouse%3A%3Atrue) – we're happy to help.

### Was this page useful?

HelpfulCould be better