JournalindexDockup / fältanteckning
Note / self-host-grafana

Så självhostar du Grafana 2026: Dashboards, alerts och persistent state

Distribuera Grafana med rätt port, beständig lagring, TLS, autentisering och backuper. Felsök när dashboards försvinner tillsammans med SQLite-filen i produktion.

Det finns två versioner av att ”köra Grafana”: en container existerar, eller så utför tjänsten faktiskt sitt jobb. Det är bara den andra som spelar roll. Här består beviset av att lägga till en read-only data source, spara en panel, utvärdera en alert rule och leverera en testnotis via en contact point.

Grafana används för dashboards och alerts över metrics, logs och traces. Distribueringen måste bevara delarna bakom detta beteende; en port, en volume och ett certifikat är förutsättningar, inte resultatet.

Grafanas produktionsupplägg

Grafanas HTTP-process lyssnar på port 3000. Behåll porten i applikationsnätverket och publicera endast plattformens route. Grafanas nätverkskontrakt består av nåbara data sources samt SMTP om alertleverans krävs. Behåll privata endpoints i intern DNS, tillåt endast nödvändiga utgående anrop och ge Grafana en avgränsad service credential.

Skriv ner gränsen som ett kort kontrakt: vem som äger kravet, vilken credential som används, vilken timeout som är acceptabel och hur ett fel visar sig. Kör sedan denna transaktion: lägg till en read-only data source, spara en panel, utvärdera en alert rule och leverera en testnotis via en contact point. Observera query fan-out, dashboardernas refreshintervall, alertutvärdering och plugin-minne under körningen i stället för Grafanas egna lagrade metrics, eftersom den belastningen ger en mer användbar startstorlek än en inaktiv container.

Starta Grafana utan att dölja de rörliga delarna

Starta Grafana på ett sätt som håller routen privat tills bootstrapen är klar.

docker run -d \
  --name grafana \
  --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  -v grafana-data:/var/lib/grafana \
  -e GF_SECURITY_ADMIN_PASSWORD=replace-with-a-long-random-value \
  grafana/grafana:latest

Om processen startar om i en loop, jämför image-användaren som förväntas med ägaren till varje monterad sökväg. Om den fortsätter köra testar du port 3000 lokalt och går sedan direkt vidare till arbetsflödet: lägg till en read-only data source, spara en panel, utvärdera en alert rule och leverera en testnotis via en contact point. Versionslås imagen först när denna end-to-end-kontroll har godkänts, och dokumentera den exakta konfigurationen bredvid tjänsten.

Ge Grafana en enda canonical address

TLS-utgivning är bara halva Grafana-routen. Sätt GF_SERVER_ROOT_URL till den publika HTTPS-URL:en. Skicka trafik internt till port 3000 och vidarebefordra det externa schemat så att genererade URL:er och säkra cookies förblir konsekventa.

Använd hela Grafana-scenariot från ett rent nätverk, inte bara root-sidan. Ett 502-fel eller ett certifikatfel kan isoleras med automatisk domän- och TLS-konfiguration. Om trafiken når processen och dashboards försvinner tillsammans med SQLite-filen, eller om OAuth-callbacks använder localhost, felsöker du det tillståndet där det uppstår i stället för att lägga på fler redirects.

Utforma Grafanas restore innan lansering

Den beständiga recovery-mängden består av Grafana-databasen, plugins och provisionerad konfiguration. Montera /var/lib/grafana före bootstrapen, skriv ofarliga exempeldata och ersätt containern för att bevisa att sökvägen faktiskt är persistent. En volume skyddar data från att containern ersätts, men inte från förlust av hosten, oavsiktlig radering eller korruption på applikationsnivå.

Ta backuper som förstår data sourcens egenskaper: använd logical dumps för aktiva databaser när det behövs och kopiera filer endast från ett konsistent tillstånd. Förvara en krypterad kopia utanför Grafana-hosten. Acceptanskriteriet för en restore är specifikt — users, folders, dashboards, alert rules och data-source metadata ska återkomma och testalerten ska utvärderas. Guiden för restore-testade backuper förklarar varför det inte räcker att jobbet lyckas.

Stäng tillfällig setup-åtkomst

En säker Grafana-distribution börjar med att ta bort behörigheter. Undvik att oavsiktligt behålla admin/admin eller exponera anonym åtkomst. Byt i stället bootstrap-adminens lösenord, begränsa redigering av data sources och håll service-account tokens avgränsade.

Byt ut GF_SECURITY_ADMIN_PASSWORD omedelbart, lagra det utanför imagen och rotera det som en administratörscredential om det exponeras. Begränsa administrativa routes, använd privat DNS för beroenden och granska varje bind mount. När loggar skickas centralt ska du filtrera bort secrets och privat innehåll innan de lämnar servern.

Repetera den riskfyllda Grafana-ändringen

En grön container är nödvändig men inte tillräcklig. Service-level-indikatorn är att ”lägga till en read-only data source, spara en panel, utvärdera en alert rule och leverera en testnotis via en contact point” slutförs framgångsrikt. De sannolika belastningssignalerna är query fan-out, dashboardernas refreshintervall, alertutvärdering och plugin-minne snarare än Grafanas egna lagrade metrics.

Change control är viktigt eftersom Grafana-databasmigreringar och plugin-kompatibilitet kräver en stegvis uppgradering med samma provisioning-filer. Bevara den gamla imagen, testa migreringar på en kopierad state och dokumentera om rollback stöds efter att schemat har flyttats. Om dashboards försvinner tillsammans med SQLite-filen eller OAuth-callbacks använder localhost, felsöker du den första gräns som skiljer sig från den fungerande miljön.

Dokumentera en Grafana-distribution som fungerar

För Grafana ska du definiera en känd fungerande transaktion före lansering: lägg till en read-only data source, spara en panel, utvärdera en alert rule och leverera en testnotis via en contact point. Lägg dess förutsättningar, förväntade svar och cleanup-steg i version control utan secret-värden. Lås den image som användes för att etablera referensen.

Använd transaktionen för att validera ett utbyte och en oberoende restore. Den återställda tjänsten är godkänd först när users, folders, dashboards, alert rules och data-source metadata återkommer och testalerten utvärderas. Observera samtidigt query fan-out, dashboardernas refreshintervall, alertutvärdering och plugin-minne i stället för Grafanas egna lagrade metrics, och omvandla den långsammaste eller mest begränsade delen till en service-level alert.

Gaten behöver också ett negativt testfall: neka tillfälligt testidentiteten åtkomst till nåbara data sources och SMTP om alertleverans krävs. Bekräfta att Grafana genererar ett åtgärdbart fel samtidigt som data bevaras, återställ det giltiga tillståndet och upprepa den kända fungerande transaktionen. Genom att spara båda resultaten förhindrar du att en ytlig health endpoint blir det enda produktionsbeviset.

Där Dockup minskar arbetet för Grafana

Routing, certifikat, service replacement och ansluten lagring är rimliga mål för automation. Dockup hanterar detta för Grafana och kan provisionera den relaterade managed databasen eller ansluta till tjänster på kundens egen server.

Det Dockup inte ska hitta på är Grafanas trust policy. Efter deployment sätter du GF_SERVER_ROOT_URL till den publika HTTPS-URL:en, tillämpar denna gräns — byt bootstrap-adminens lösenord, begränsa redigering av data sources och håll service-account tokens avgränsade — och verifierar resultatet av detta scenario: lägg till en read-only data source, spara en panel, utvärdera en alert rule och leverera en testnotis via en contact point. Resultatet är infrastruktur med ett klick och ett applikationsspecifikt acceptanstest.

Vanliga frågor

Vad behöver Grafana för en produktionsdistribution?

Routa Grafana-containern på port 3000 genom ett HTTPS-origin. Det stödjande nätverkskravet är nåbara data sources samt SMTP om alertleverans krävs. Anse inte Grafana vara redo förrän du kan lägga till en read-only data source, spara en panel, utvärdera en alert rule och leverera en testnotis via en contact point.

Vilka Grafana-data ska ingå i en backup?

Persist /var/lib/grafana och inkludera Grafana-databasen, plugins och provisionerad konfiguration i samma recovery-manifest. En ren Grafana-restore är godkänd först när users, folders, dashboards, alert rules och data-source metadata återkommer och testalerten utvärderas.

Kräver Grafana HTTPS bakom en reverse proxy?

Använd HTTPS för det publika Grafana-originet och behåll port 3000 på den interna routen. Tillämpa Grafana-inställningen korrekt: sätt GF_SERVER_ROOT_URL till den publika HTTPS-URL:en. För Grafana skyddar HTTPS credentials eller användarinnehåll under överföring och håller origin-känsligt klientbeteende konsekvent.

Hur bör en Grafana-uppgradering testas?

Återställ aktuell Grafana-state i en isolerad deployment, tillämpa kandidatversionen och upprepa dess acceptanstransaktion. Var särskilt uppmärksam eftersom Grafana-databasmigreringar och plugin-kompatibilitet kräver en stegvis uppgradering med samma provisioning-filer. Behåll den tidigare Grafana-imagen tills gränsen för datamigrering och rollback är klarlagd.