<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Git Sync deployment scenarios on Grafana Labs</title><link>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/</link><description>Recent content in Git Sync deployment scenarios on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/index.xml" rel="self" type="application/rss+xml"/><item><title>Single instance Git Sync</title><link>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/single-instance/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/single-instance/</guid><content><![CDATA[&lt;h1 id=&#34;single-instance-git-sync&#34;&gt;Single instance Git Sync&lt;/h1&gt;
&lt;p&gt;Use a single Grafana instance synchronized with a Git repository. This is the foundation for Git Sync and helps you understand bidirectional synchronization.&lt;/p&gt;
&lt;h2 id=&#34;use-it-for&#34;&gt;Use it for&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Getting started&lt;/strong&gt;: You want to learn how Git Sync works before implementing complex scenarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personal projects&lt;/strong&gt;: Individual developers manage their own dashboards.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Small teams&lt;/strong&gt;: You have a simple setup without multiple environments or complex workflows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Development environments&lt;/strong&gt;: You need quick prototyping and testing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;┌─────────────────────────────────────────────────────┐
│           GitHub Repository                         │
│   Repository: your-org/grafana-manifests          │
│   Branch: main                                      │
│                                                     │
│   grafana-manifests/                              │
│   └── grafana/                                     │
│       ├── dashboard-1.json                         │
│       ├── dashboard-2.json                         │
│       └── dashboard-3.json                         │
└─────────────────────────────────────────────────────┘
                        ↕
              Git Sync (bidirectional)
                        ↕
        ┌─────────────────────────────┐
        │    Grafana Instance         │
        │                             │
        │  Repository Resource:       │
        │  - url: grafana-manifests  │
        │  - branch: main             │
        │  - path: grafana/           │
        │                             │
        │  Creates folder:            │
        │  &amp;#34;grafana-manifests&amp;#34;       │
        └─────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;repository-structure&#34;&gt;Repository structure&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;In Git:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/grafana-manifests
└── grafana/
    ├── dashboard-1.json
    ├── dashboard-2.json
    └── dashboard-3.json&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;In Grafana Dashboards view:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
└── 📁 grafana-manifests/
    ├── Dashboard 1
    ├── Dashboard 2
    └── Dashboard 3&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;A folder named &amp;ldquo;grafana-manifests&amp;rdquo; (from repository name) contains all synced dashboards.&lt;/li&gt;
&lt;li&gt;Each JSON file becomes a dashboard with its title displayed in the folder.&lt;/li&gt;
&lt;li&gt;Users browse dashboards organized under this folder structure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configuration-parameters&#34;&gt;Configuration parameters&lt;/h2&gt;
&lt;p&gt;Configure your Grafana instance to synchronize with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How it works&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;From Grafana to Git&lt;/strong&gt;: When users create or modify dashboards in Grafana, Git Sync commits changes to the &lt;code&gt;grafana/&lt;/code&gt; directory on the &lt;code&gt;main&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From Git to Grafana&lt;/strong&gt;: When dashboard JSON files are added or modified in the &lt;code&gt;grafana/&lt;/code&gt; directory, Git Sync pulls these changes into Grafana.&lt;/li&gt;
&lt;/ol&gt;
]]></content><description>&lt;h1 id="single-instance-git-sync">Single instance Git Sync&lt;/h1>
&lt;p>Use a single Grafana instance synchronized with a Git repository. This is the foundation for Git Sync and helps you understand bidirectional synchronization.&lt;/p></description></item><item><title>Git Sync for development and production environments</title><link>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/dev-prod/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/dev-prod/</guid><content><![CDATA[&lt;h1 id=&#34;git-sync-for-development-and-production-environments&#34;&gt;Git Sync for development and production environments&lt;/h1&gt;
&lt;p&gt;Use separate Grafana instances for development and production. Each syncs with different Git locations to test dashboards before production.&lt;/p&gt;
&lt;h2 id=&#34;use-it-for&#34;&gt;Use it for&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Staged deployments&lt;/strong&gt;: You need to test dashboard changes before production deployment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change control&lt;/strong&gt;: You require approvals before dashboards reach production.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quality assurance&lt;/strong&gt;: You verify dashboard functionality in a non-production environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Risk mitigation&lt;/strong&gt;: You minimize the risk of breaking production dashboards.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;┌────────────────────────────────────────────────────────────┐
│              GitHub Repository                             │
│   Repository: your-org/grafana-manifests                 │
│   Branch: main                                             │
│                                                            │
│   grafana-manifests/                                     │
│   ├── dev/                                                │
│   │   ├── dashboard-new.json    ← Development dashboards │
│   │   └── dashboard-test.json                            │
│   │                                                       │
│   └── prod/                                               │
│       ├── dashboard-stable.json  ← Production dashboards │
│       └── dashboard-approved.json                        │
└────────────────────────────────────────────────────────────┘
           ↕                                 ↕
    Git Sync (dev/)              Git Sync (prod/)
           ↕                                 ↕
┌─────────────────────┐          ┌─────────────────────┐
│  Dev Grafana        │          │  Prod Grafana       │
│                     │          │                     │
│  Repository:        │          │  Repository:        │
│  - path: dev/       │          │  - path: prod/      │
│                     │          │                     │
│  Creates folder:    │          │  Creates folder:    │
│  &amp;#34;grafana-manifests&amp;#34;│         │  &amp;#34;grafana-manifests&amp;#34;│
└─────────────────────┘          └─────────────────────┘&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;repository-structure&#34;&gt;Repository structure&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;In Git:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/grafana-manifests
├── dev/
│   ├── dashboard-new.json
│   └── dashboard-test.json
└── prod/
    ├── dashboard-stable.json
    └── dashboard-approved.json&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;In Grafana Dashboards view:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dev instance:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
└── 📁 grafana-manifests/
    ├── New Dashboard
    └── Test Dashboard&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Prod instance:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
└── 📁 grafana-manifests/
    ├── Stable Dashboard
    └── Approved Dashboard&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Both instances create a folder named &amp;ldquo;grafana-manifests&amp;rdquo; (from repository name)&lt;/li&gt;
&lt;li&gt;Each instance only shows dashboards from its configured path (&lt;code&gt;dev/&lt;/code&gt; or &lt;code&gt;prod/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Dashboards appear with their titles from the JSON files&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configuration-parameters&#34;&gt;Configuration parameters&lt;/h2&gt;
&lt;p&gt;Development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Repository: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Branch: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Path: &lt;code&gt;dev/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Production:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Repository: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Branch: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Path: &lt;code&gt;prod/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How it works&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Developers create and modify dashboards in development.&lt;/li&gt;
&lt;li&gt;Git Sync commits changes to &lt;code&gt;dev/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You review changes in Git.&lt;/li&gt;
&lt;li&gt;You promote approved dashboards from &lt;code&gt;dev/&lt;/code&gt; to &lt;code&gt;prod/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Production syncs from &lt;code&gt;prod/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Production dashboards update.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;alternative-use-branches&#34;&gt;Alternative: Use branches&lt;/h2&gt;
&lt;p&gt;Instead of using different paths, you can configure instances to use different branches:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Development instance:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;develop&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Production instance:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With this approach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Development changes go to the &lt;code&gt;develop&lt;/code&gt; branch&lt;/li&gt;
&lt;li&gt;Use Git merge or pull request workflows to promote changes from &lt;code&gt;develop&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Production automatically syncs from the &lt;code&gt;main&lt;/code&gt; branch&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;alternative-use-separate-repositories-for-stricter-isolation&#34;&gt;Alternative: Use separate repositories for stricter isolation&lt;/h2&gt;
&lt;p&gt;For stricter isolation, use completely separate repositories:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Development instance:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests-dev&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Production instance:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests-prod&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="git-sync-for-development-and-production-environments">Git Sync for development and production environments&lt;/h1>
&lt;p>Use separate Grafana instances for development and production. Each syncs with different Git locations to test dashboards before production.&lt;/p></description></item><item><title>Git Sync with regional replication</title><link>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/multi-region/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/multi-region/</guid><content><![CDATA[&lt;h1 id=&#34;git-sync-with-regional-replication&#34;&gt;Git Sync with regional replication&lt;/h1&gt;
&lt;p&gt;Deploy multiple Grafana instances across regions. Synchronize them with the same Git location to ensure consistent dashboards everywhere.&lt;/p&gt;
&lt;h2 id=&#34;use-it-for&#34;&gt;Use it for&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Geographic distribution&lt;/strong&gt;: You deploy Grafana close to users in different regions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Latency reduction&lt;/strong&gt;: Users need fast dashboard access from their location.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data sovereignty&lt;/strong&gt;: You keep dashboard data in specific regions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High availability&lt;/strong&gt;: You need dashboard availability across regions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistent experience&lt;/strong&gt;: All users see the same dashboards regardless of region.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;┌─────────────────────────────────────────────────────┐
│           GitHub Repository                         │
│   Repository: your-org/grafana-manifests          │
│   Branch: main                                      │
│                                                     │
│   grafana-manifests/                              │
│   └── shared/                                      │
│       ├── dashboard-global.json                    │
│       ├── dashboard-metrics.json                   │
│       └── dashboard-logs.json                      │
└─────────────────────────────────────────────────────┘
              ↕                           ↕
       Git Sync (shared/)         Git Sync (shared/)
              ↕                           ↕
┌────────────────────┐          ┌────────────────────┐
│  US Region         │          │  EU Region         │
│  Grafana           │          │  Grafana           │
│                    │          │                    │
│  Repository:       │          │  Repository:       │
│  - path: shared/   │          │  - path: shared/   │
└────────────────────┘          └────────────────────┘&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;repository-structure&#34;&gt;Repository structure&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;In Git:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/grafana-manifests
└── shared/
    ├── dashboard-global.json
    ├── dashboard-metrics.json
    └── dashboard-logs.json&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;In Grafana Dashboards view (all regions):&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
└── 📁 grafana-manifests/
    ├── Global Dashboard
    ├── Metrics Dashboard
    └── Logs Dashboard&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;All regional instances (US, EU, etc.) show identical folder structure&lt;/li&gt;
&lt;li&gt;Same folder name &amp;ldquo;grafana-manifests&amp;rdquo; in every region&lt;/li&gt;
&lt;li&gt;Same dashboards synced from the &lt;code&gt;shared/&lt;/code&gt; path appear everywhere&lt;/li&gt;
&lt;li&gt;Users in any region see the exact same dashboards with the same titles&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configuration-parameters&#34;&gt;Configuration parameters&lt;/h2&gt;
&lt;p&gt;All regions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Repository: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Branch: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Path: &lt;code&gt;shared/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How it works&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;All regional instances pull dashboards from &lt;code&gt;shared/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Any region’s change commits to Git.&lt;/li&gt;
&lt;li&gt;Other regions pull updates during the next sync (or via webhooks).&lt;/li&gt;
&lt;li&gt;Changes propagate across regions per sync interval.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;considerations&#34;&gt;Considerations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Write conflicts&lt;/strong&gt;: If users in different regions modify the same dashboard simultaneously, Git uses last-write-wins.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Primary region&lt;/strong&gt;: Consider designating one region as the primary location for making dashboard changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Propagation time&lt;/strong&gt;: Changes propagate to all regions within the configured sync interval, or instantly if webhooks are configured.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network reliability&lt;/strong&gt;: Ensure all regions have reliable connectivity to the Git repository.&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="git-sync-with-regional-replication">Git Sync with regional replication&lt;/h1>
&lt;p>Deploy multiple Grafana instances across regions. Synchronize them with the same Git location to ensure consistent dashboards everywhere.&lt;/p>
&lt;h2 id="use-it-for">Use it for&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Geographic distribution&lt;/strong>: You deploy Grafana close to users in different regions.&lt;/li>
&lt;li>&lt;strong>Latency reduction&lt;/strong>: Users need fast dashboard access from their location.&lt;/li>
&lt;li>&lt;strong>Data sovereignty&lt;/strong>: You keep dashboard data in specific regions.&lt;/li>
&lt;li>&lt;strong>High availability&lt;/strong>: You need dashboard availability across regions.&lt;/li>
&lt;li>&lt;strong>Consistent experience&lt;/strong>: All users see the same dashboards regardless of region.&lt;/li>
&lt;/ul>
&lt;h2 id="architecture">Architecture&lt;/h2>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">┌─────────────────────────────────────────────────────┐
│ GitHub Repository │
│ Repository: your-org/grafana-manifests │
│ Branch: main │
│ │
│ grafana-manifests/ │
│ └── shared/ │
│ ├── dashboard-global.json │
│ ├── dashboard-metrics.json │
│ └── dashboard-logs.json │
└─────────────────────────────────────────────────────┘
↕ ↕
Git Sync (shared/) Git Sync (shared/)
↕ ↕
┌────────────────────┐ ┌────────────────────┐
│ US Region │ │ EU Region │
│ Grafana │ │ Grafana │
│ │ │ │
│ Repository: │ │ Repository: │
│ - path: shared/ │ │ - path: shared/ │
└────────────────────┘ └────────────────────┘&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;h2 id="repository-structure">Repository structure&lt;/h2>
&lt;p>&lt;strong>In Git:&lt;/strong>&lt;/p></description></item><item><title>Git Sync for high availability environments</title><link>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/high-availability/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/high-availability/</guid><content><![CDATA[&lt;h1 id=&#34;git-sync-for-high-availability-environments&#34;&gt;Git Sync for high availability environments&lt;/h1&gt;
&lt;h2 id=&#34;primaryreplica-scenario&#34;&gt;Primary–replica scenario&lt;/h2&gt;
&lt;p&gt;Use a primary Grafana instance and one or more replicas synchronized with the same Git location to enable failover.&lt;/p&gt;
&lt;h3 id=&#34;use-it-for&#34;&gt;Use it for&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic failover&lt;/strong&gt;: You need service continuity when the primary instance fails.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High availability&lt;/strong&gt;: Your organization requires guaranteed dashboard availability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simple HA setup&lt;/strong&gt;: You want high availability without the complexity of active–active.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintenance windows&lt;/strong&gt;: You perform updates while another instance serves traffic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Business continuity&lt;/strong&gt;: Dashboard access can&amp;rsquo;t tolerate downtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;architecture&#34;&gt;Architecture&lt;/h3&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;┌─────────────────────────────────────────────────────┐
│           GitHub Repository                         │
│   Repository: your-org/grafana-manifests          │
│   Branch: main                                      │
│                                                     │
│   grafana-manifests/                              │
│   └── shared/                                      │
│       ├── dashboard-metrics.json                   │
│       ├── dashboard-alerts.json                    │
│       └── dashboard-logs.json                      │
└─────────────────────────────────────────────────────┘
              ↕                           ↕
        Git Sync (shared/)        Git Sync (shared/)
              ↕                           ↕
┌────────────────────┐          ┌────────────────────┐
│  Master Grafana    │          │  Replica Grafana   │
│    (Active)        │          │    (Standby)       │
│                    │          │                    │
│  Repository:       │          │  Repository:       │
│  - path: shared/   │          │  - path: shared/   │
└────────────────────┘          └────────────────────┘
         │                               │
         └───────────┬───────────────────┘
                     ↓
          ┌──────────────────────┐
          │  Reverse Proxy       │
          │  (Failover)          │
          └──────────────────────┘&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;repository-structure&#34;&gt;Repository structure&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;In Git:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/grafana-manifests
└── shared/
    ├── dashboard-metrics.json
    ├── dashboard-alerts.json
    └── dashboard-logs.json&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;In Grafana Dashboards view (both instances):&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
└── 📁 grafana-manifests/
    ├── Metrics Dashboard
    ├── Alerts Dashboard
    └── Logs Dashboard&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Master and replica instances show identical folder structure.&lt;/li&gt;
&lt;li&gt;Both sync from the same &lt;code&gt;shared/&lt;/code&gt; path.&lt;/li&gt;
&lt;li&gt;Reverse proxy routes traffic to master (active) instance.&lt;/li&gt;
&lt;li&gt;If master fails, proxy automatically fails over to replica (standby).&lt;/li&gt;
&lt;li&gt;Users see the same dashboards regardless of which instance is serving traffic.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;configuration-parameters&#34;&gt;Configuration parameters&lt;/h3&gt;
&lt;p&gt;Both master and replica instances use identical parameters:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Master instance:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;shared/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Replica instance:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;shared/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;how-it-works&#34;&gt;How it works&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Both instances stay synchronized through Git.&lt;/li&gt;
&lt;li&gt;Reverse proxy routes traffic to primary.&lt;/li&gt;
&lt;li&gt;Users edit on primary. Git Sync commits changes.&lt;/li&gt;
&lt;li&gt;Both instances pull latest changes to keep replica in sync.&lt;/li&gt;
&lt;li&gt;On primary failure, proxy fails over to replica.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;failover-considerations&#34;&gt;Failover considerations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Health checks and monitoring.&lt;/li&gt;
&lt;li&gt;Continuous syncing to minimize data loss.&lt;/li&gt;
&lt;li&gt;Plan failback (automatic or manual).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;load-balancer-scenario&#34;&gt;Load balancer scenario&lt;/h2&gt;
&lt;p&gt;Run multiple active Grafana instances behind a load balancer. All instances sync from the same Git location.&lt;/p&gt;
&lt;h3 id=&#34;use-it-for-1&#34;&gt;Use it for&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;High traffic&lt;/strong&gt;: Your deployment needs to handle significant user load.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Load distribution&lt;/strong&gt;: You want to distribute user requests across instances.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maximum availability&lt;/strong&gt;: You need service continuity during maintenance or failures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: You want to add instances as load increases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Users need fast response times under heavy load.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;architecture-1&#34;&gt;Architecture&lt;/h3&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;┌─────────────────────────────────────────────────────┐
│           GitHub Repository                         │
│   Repository: your-org/grafana-manifests          │
│   Branch: main                                      │
│                                                     │
│   grafana-manifests/                              │
│   └── shared/                                      │
│       ├── dashboard-metrics.json                   │
│       ├── dashboard-alerts.json                    │
│       └── dashboard-logs.json                      │
└─────────────────────────────────────────────────────┘
              ↕                           ↕
        Git Sync (shared/)        Git Sync (shared/)
              ↕                           ↕
┌────────────────────┐          ┌────────────────────┐
│  Grafana Instance 1│          │  Grafana Instance 2│
│    (Active)        │          │    (Active)        │
│                    │          │                    │
│  Repository:       │          │  Repository:       │
│  - path: shared/   │          │  - path: shared/   │
└────────────────────┘          └────────────────────┘
         │                               │
         └───────────┬───────────────────┘
                     ↓
          ┌──────────────────────┐
          │  Load Balancer       │
          │  (Round Robin)       │
          └──────────────────────┘&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;repository-structure-1&#34;&gt;Repository structure&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;In Git:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/grafana-manifests
└── shared/
    ├── dashboard-metrics.json
    ├── dashboard-alerts.json
    └── dashboard-logs.json&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;In Grafana Dashboards view (all instances):&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
└── 📁 grafana-manifests/
    ├── Metrics Dashboard
    ├── Alerts Dashboard
    └── Logs Dashboard&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;All instances show identical folder structure.&lt;/li&gt;
&lt;li&gt;All instances sync from the same &lt;code&gt;shared/&lt;/code&gt; path.&lt;/li&gt;
&lt;li&gt;Load balancer distributes requests across all active instances.&lt;/li&gt;
&lt;li&gt;Any instance can serve read requests.&lt;/li&gt;
&lt;li&gt;Any instance can accept dashboard modifications.&lt;/li&gt;
&lt;li&gt;Changes propagate to all instances through Git.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;configuration-parameters-1&#34;&gt;Configuration parameters&lt;/h3&gt;
&lt;p&gt;All instances use identical parameters:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Instance 1:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;shared/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Instance 2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;shared/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;how-it-works-1&#34;&gt;How it works&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;All instances stay synchronized through Git.&lt;/li&gt;
&lt;li&gt;Load balancer distributes incoming traffic across all active instances.&lt;/li&gt;
&lt;li&gt;Users can view dashboards from any instance.&lt;/li&gt;
&lt;li&gt;When a user modifies a dashboard on any instance, Git Sync commits the change.&lt;/li&gt;
&lt;li&gt;All other instances pull the updated dashboard during their next sync cycle, or instantly if webhooks are configured.&lt;/li&gt;
&lt;li&gt;If one instance fails, load balancer stops routing traffic to it and remaining instances continue serving.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;important-considerations&#34;&gt;Important considerations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Eventually consistent&lt;/strong&gt;: Due to sync intervals, instances may briefly have different dashboard versions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent edits&lt;/strong&gt;: Multiple users editing the same dashboard on different instances can cause conflicts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database sharing&lt;/strong&gt;: Instances should share the same backend database for user sessions, preferences, and annotations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stateless design&lt;/strong&gt;: Design for stateless operation where possible to maximize load balancing effectiveness.&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="git-sync-for-high-availability-environments">Git Sync for high availability environments&lt;/h1>
&lt;h2 id="primaryreplica-scenario">Primary–replica scenario&lt;/h2>
&lt;p>Use a primary Grafana instance and one or more replicas synchronized with the same Git location to enable failover.&lt;/p></description></item><item><title>Multiple team Git Sync</title><link>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/multi-team/</link><pubDate>Fri, 03 Apr 2026 12:35:46 -0500</pubDate><guid>https://grafana.com/docs/grafana/v12.4/as-code/observability-as-code/git-sync/scenarios/multi-team/</guid><content><![CDATA[&lt;h1 id=&#34;git-sync-in-a-grafana-instance-shared-by-multiple-teams&#34;&gt;Git Sync in a Grafana instance shared by multiple teams&lt;/h1&gt;
&lt;p&gt;Use a single Grafana instance with multiple Repository resources, one per team. Each team manages its own dashboards while sharing Grafana.&lt;/p&gt;
&lt;h2 id=&#34;use-it-for&#34;&gt;Use it for&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Team autonomy&lt;/strong&gt;: Different teams manage their own dashboards independently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organizational structure&lt;/strong&gt;: Dashboard organization aligns with team structure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource efficiency&lt;/strong&gt;: Multiple teams share Grafana infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost optimization&lt;/strong&gt;: You reduce infrastructure costs while maintaining team separation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collaboration&lt;/strong&gt;: Teams can view each other’s dashboards while managing their own.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;┌─────────────────────────┐  ┌─────────────────────────┐
│  Platform Team Repo     │  │  Data Team Repo         │
│  platform-dashboards    │  │  data-dashboards        │
│                         │  │                         │
│  platform-dashboards/   │  │  data-dashboards/       │
│  └── grafana/           │  │  └── grafana/           │
│      ├── k8s.json       │  │      ├── pipeline.json  │
│      └── infra.json     │  │      └── analytics.json │
└─────────────────────────┘  └─────────────────────────┘
           ↕                            ↕
    Git Sync (grafana/)          Git Sync (grafana/)
           ↕                            ↕
        ┌──────────────────────────────────────┐
        │       Grafana Instance               │
        │                                      │
        │  Repository 1:                       │
        │  - repo: platform-dashboards         │
        │  → Creates &amp;#34;platform-dashboards&amp;#34;     │
        │                                      │
        │  Repository 2:                       │
        │  - repo: data-dashboards             │
        │  → Creates &amp;#34;data-dashboards&amp;#34;         │
        └──────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;repository-structure&#34;&gt;Repository structure&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;In Git (separate repositories):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Platform team repository:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/platform-dashboards
└── grafana/
    ├── dashboard-k8s.json
    └── dashboard-infra.json&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Data team repository:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/data-dashboards
└── grafana/
    ├── dashboard-pipeline.json
    └── dashboard-analytics.json&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;In Grafana Dashboards view:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;Dashboards
├── 📁 platform-dashboards/
│   ├── Kubernetes Dashboard
│   └── Infrastructure Dashboard
└── 📁 data-dashboards/
    ├── Pipeline Dashboard
    └── Analytics Dashboard&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Two separate folders created (one per Repository resource).&lt;/li&gt;
&lt;li&gt;Folder names derived from repository names.&lt;/li&gt;
&lt;li&gt;Each team has complete control over their own repository.&lt;/li&gt;
&lt;li&gt;Teams can independently manage permissions, branches, and workflows in their repos.&lt;/li&gt;
&lt;li&gt;All teams can view each other&amp;rsquo;s dashboards in Grafana but manage only their own.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configuration-parameters&#34;&gt;Configuration parameters&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Platform team repository:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/platform-dashboards&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Data team repository:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/data-dashboards&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How it works&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Each team has their own Git repository for complete autonomy.&lt;/li&gt;
&lt;li&gt;Each repository resource in Grafana creates a separate folder.&lt;/li&gt;
&lt;li&gt;Platform team dashboards sync from &lt;code&gt;your-org/platform-dashboards&lt;/code&gt; repository.&lt;/li&gt;
&lt;li&gt;Data team dashboards sync from &lt;code&gt;your-org/data-dashboards&lt;/code&gt; repository.&lt;/li&gt;
&lt;li&gt;Teams can independently manage their repository settings, access controls, and workflows.&lt;/li&gt;
&lt;li&gt;All teams can view each other&amp;rsquo;s dashboards in Grafana but edit only their own.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;scale-to-more-teams&#34;&gt;Scale to more teams&lt;/h2&gt;
&lt;p&gt;Adding additional teams is straightforward. For a third team, create a new repository and configure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/security-dashboards&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This creates a new &amp;ldquo;security-dashboards&amp;rdquo; folder in the same Grafana instance.&lt;/p&gt;
&lt;h2 id=&#34;alternative-shared-repository-with-different-paths&#34;&gt;Alternative: Shared repository with different paths&lt;/h2&gt;
&lt;p&gt;For teams that prefer sharing a single repository, use different paths to separate team dashboards:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In Git:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;your-org/grafana-manifests
├── team-platform/
│   ├── dashboard-k8s.json
│   └── dashboard-infra.json
└── team-data/
    ├── dashboard-pipeline.json
    └── dashboard-analytics.json&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Platform team:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;team-platform/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Data team:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;team-data/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach provides simpler repository management but less isolation between teams.&lt;/p&gt;
&lt;h2 id=&#34;alternative-different-branches-per-team&#34;&gt;Alternative: Different branches per team&lt;/h2&gt;
&lt;p&gt;For teams wanting their own branch in a shared repository:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Platform team:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;team-platform&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Data team:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;code&gt;your-org/grafana-manifests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch&lt;/strong&gt;: &lt;code&gt;team-data&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt;: &lt;code&gt;grafana/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This allows teams to use Git branch workflows for collaboration while sharing the same repository.&lt;/p&gt;
]]></content><description>&lt;h1 id="git-sync-in-a-grafana-instance-shared-by-multiple-teams">Git Sync in a Grafana instance shared by multiple teams&lt;/h1>
&lt;p>Use a single Grafana instance with multiple Repository resources, one per team. Each team manages its own dashboards while sharing Grafana.&lt;/p></description></item></channel></rss>