20/11/2024
Grafana og Subpaths: En Guide til Løsning af Fejlmeddelelsen
Det kan være en frustrerende oplevelse, når man har brugt tid på at sætte Grafana op, kun for at blive mødt af fejlen "If you're seeing this Grafana has failed to load its application files". Specielt når man ønsker at tilgå sin Grafana-instans via en subpath, hvilket er en almindelig konfiguration, især når Grafana kører bag en reverse proxy som en Web Application Firewall (WAF) eller Nginx. Denne artikel dykker ned i, hvorfor denne fejl opstår, og hvordan du kan løse den.

Forståelse af Problemet: Hvorfor Fejler Grafana med Subpaths?
Grafana forventer som standard at blive tilgået direkte via sin root_url. Når du konfigurerer Grafana til at køre under en subpath, som f.eks. https://mydomain.com/grafana/, skal Grafana vide, at alle dens ressourcer (CSS, JavaScript, billeder osv.) skal indlæses fra denne specifikke sti. Hvis denne konfiguration mangler, eller er forkert sat op i din reverse proxy, vil Grafana forsøge at indlæse disse filer fra den forkerte placering (typisk rodniveauet af domænet), hvilket resulterer i 404-fejl og den nævnte fejlmeddelelse.
Den primære årsag er, at Grafana, når det er konfigureret med en subpath, sender links og referencer i sin HTML-kode, der inkluderer denne subpath. Hvis reverse proxyen ikke håndterer disse stier korrekt, eller hvis Grafana selv ikke er informeret om subpathen, opstår der et mismatch, og filerne kan ikke findes.
Nøglekonfiguration: root_url i Grafana
Den mest kritiske indstilling for at løse dette problem er root_url i din grafana.ini konfigurationsfil. Denne indstilling skal præcist afspejle den URL, som brugerne vil tilgå Grafana via, inklusive subpathen.
Korrekt Konfiguration:
Hvis din Grafana-instans er tilgængelig via https://mydomain.com/grafana/, skal din grafana.ini indeholde:
[server] root_url = https://mydomain.com/grafana/
Det er vigtigt at inkludere den afsluttende skråstreg (/) i root_url, da dette angiver, at grafana er en undermappe.

Reverse Proxy Konfiguration: Nginx Eksempel
Din reverse proxy skal konfigureres til at videresende trafik til Grafana-serveren korrekt. Dette involverer at sende den korrekte X-Forwarded-Prefix header, hvis din proxy understøtter det, og at sikre, at Grafana-serveren kan håndtere de indkommende anmodninger.
Her er et eksempel på en Nginx-konfiguration, der håndterer en subpath:
server { server_name mydomain.com; location /grafana/ { proxy_pass http://localhost:3000/; # Eller din Grafana server IP og port proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Vigtigt for subpaths: proxy_set_header X-Forwarded-Prefix /grafana; } listen 80; listen [::]:80; } server { server_name mydomain.com; location /grafana/ { proxy_pass http://localhost:3000/; # Eller din Grafana server IP og port proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Vigtigt for subpaths: proxy_set_header X-Forwarded-Prefix /grafana; } listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } I dette eksempel sender vi X-Forwarded-Prefix /grafana. Grafana bruger denne header til at forstå, at den kører under /grafana.
Andre Potentielle Problemer og Løsninger
1. SSL Termination ved WAF/Reverse Proxy
Hvis din WAF eller reverse proxy håndterer SSL-terminering, skal du sikre dig, at den videresender den oprindelige protokol (HTTPS) til Grafana-serveren. Dette gøres typisk ved at sætte X-Forwarded-Proto headeren til https.
2. Cache Problemer
Nogle gange kan browser-cache eller proxy-cache forårsage problemer. Prøv at rydde din browser-cache eller bruge en inkognito-fane. Hvis du bruger en caching-mekanisme i din reverse proxy, kan det være nødvendigt at konfigurere den til at håndtere de dynamiske filer fra Grafana korrekt.

3. Grafana Genstart
Efter at have foretaget ændringer i grafana.ini, er det essentielt at genstarte Grafana-serveren for at ændringerne træder i kraft. En simpel genstart kan nogle gange løse uforklarlige problemer.
4. iOS Specifikke Problemer
Nogle brugere har rapporteret problemer specifikt på iOS-enheder. Dette kan skyldes måden, Safari eller Chrome på iOS håndterer relative stier eller specifikke HTTP-headers. Sørg for, at din reverse proxy sender alle nødvendige headers korrekt, og at root_url er sat præcist.
5. Anonymous Session Problemer
Hvis du oplever problemer med anonyme sessioner, hvor dashboards ikke indlæses korrekt, men det virker, når du er logget ind, kan det skyldes, at Grafana forsøger at indlæse dashboards eller ressourcer, som den anonyme bruger ikke har adgang til, eller at der er en fejl i, hvordan disse ressourcer efterspørges under en anonym session med en subpath.
Fejlfindingstrin
Her er en trinvis tilgang til fejlfinding:
- Bekræft
root_url: Dobbeltjek, atroot_urligrafana.inier sat korrekt med subpathen og en afsluttende skråstreg. - Genstart Grafana: Sørg for at genstarte
grafana-server-tjenesten. - Tjek Reverse Proxy Logs: Undersøg logfilerne for din reverse proxy (Nginx, Azure WAF osv.) for eventuelle fejlmeddelelser relateret til anmodninger til Grafana.
- Tjek Grafana Logs: Gennemgå Grafana's egne logfiler (typisk i
/var/log/grafana/grafana.log) for mere detaljerede fejl. Se efter 404-fejl på specifikke filer. - Test med Direkte Adgang: Hvis muligt, test Grafana ved at tilgå den direkte (uden reverse proxy) for at isolere problemet. Hvis det virker direkte, ligger problemet i proxy-konfigurationen.
- Valider Headers: Brug browserens udviklerværktøjer (Netværkstik) til at inspicere de indkommende anmodninger og se, hvilke filer der fejler med 404, og om de korrekte stier bruges.
Tabel: Almindelige Fejl og Løsninger
| Problem | Årsag | Løsning |
|---|---|---|
| "Grafana has failed to load its application files" | Forkert root_url i grafana.ini, manglende X-Forwarded-Prefix header. | Sæt root_url = https://yourdomain.com/subpath/ i grafana.ini. Konfigurer reverse proxy til at sende X-Forwarded-Prefix /subpath. |
| CSS/JS filer indlæses ikke (404) | Grafana forsøger at indlæse filer fra rodstien i stedet for subpathen. | Sørg for, at root_url er korrekt sat, og at alle relevante headers (X-Forwarded-Prefix, X-Forwarded-Host) sendes fra proxyen. |
| Problemer på iOS-enheder | Potentielle forskelle i, hvordan iOS-browsere håndterer stier/headers. | Dobbelttjek alle proxy-headers og root_url. Opdater Grafana til en nyere version, hvis muligt. |
| Anonym adgang fejler | Tilladelsesproblemer for anonyme brugere eller fejl i anmodninger under anonym session. | Tjek Grafana's anonyme adgangsindstillinger. Sørg for, at root_url er sat korrekt. |
Ofte Stillede Spørgsmål (FAQ)
Q: Hvad hvis jeg ikke bruger SSL?
A: Hvis du ikke bruger SSL, skal du blot bruge http:// i din root_url og i din reverse proxy konfiguration. Husk at indstille X-Forwarded-Proto til http i dette tilfælde.

Q: Skal jeg genstarte Nginx efter ændringer?
A: Ja, efter at have ændret Nginx-konfigurationsfilen, skal du genindlæse eller genstarte Nginx-tjenesten (f.eks. med sudo systemctl reload nginx eller sudo systemctl restart nginx).
Q: Hvilken version af Grafana er mest stabil med subpaths?
A: Selvom Grafana generelt håndterer subpaths godt i nyere versioner, er det altid en god idé at køre den seneste stabile version for at få de seneste fejlrettelser og forbedringer.
Q: Kan jeg bruge et wildcard i root_url?
A: Nej, root_url skal være den præcise URL, din Grafana-instans er tilgængelig via.
Konklusion
At få Grafana til at køre korrekt med en subpath kræver omhyggelig konfiguration af både Grafana selv og din reverse proxy. Ved at sikre, at root_url er sat præcist, og at de nødvendige headers som X-Forwarded-Prefix og X-Forwarded-Proto sendes korrekt, kan du overvinde den frustrerende fejlmeddelelse og få en smooth oplevelse med din Grafana-dashboard.
Hvis du vil læse andre artikler, der ligner Grafana og subpaths: Løs fejlmeddelelsen, kan du besøge kategorien Teknologi.
