docs: review Monitor documentation in all seven translations

This commit is contained in:
Jonatan
2026-10-17 15:08:53 +02:00
parent ce1a3de719
commit dace78214a
209 changed files with 43788 additions and 1942 deletions
@@ -0,0 +1,396 @@
{
"meta": {
"title": "Autentisering för Proxmox-panelen — 2FA, API-token, profil, omvänd proxy | ProxMenux Monitor",
"description": "Åtkomst och skydd för ProxMenux Monitor: första starten, lösenord med namn och avatar, profil, TOTP 2FA, API-token för skript, HTTPS, exempel för Nginx/Caddy/Traefik, granskningslogg och valfri Fail2Ban-jail.",
"ogTitle": "Proxmox-autentisering — 2FA, API-token, omvänd proxy",
"ogDescription": "Skydda ProxMenux Monitor med lösenord, TOTP 2FA, API-token, HTTPS, exempel för omvänd proxy och valfri Fail2Ban-jail.",
"twitterTitle": "Proxmox Dashboardautentisering | ProxMenux Monitor",
"twitterDescription": "Lösenord + TOTP 2FA, API tokens, HTTPS, Nginx/Caddy/Traefik snippets och revisionslogg."
},
"header": {
"title": "Åtkomst och autentisering",
"description": "Åtkomst till panelen, första starten och skyddslager: lösenord och TOTP, JWT-sessioner, API-token, HTTPS, omvänd proxy, Secure Gateway och valfri Fail2Ban-jail.",
"section": "ProxMenux-övervakning"
},
"intro": {
"title": "Autentisering är valfritt",
"body": "Vid första starten visas dialogen <em>”Skydda instrumentpanelen?”</em> med knapparna <strong>Ja, ange lösenord</strong> och <strong>Nej, fortsätt utan skydd</strong>. Det andra alternativet lämnar API-ändpunkterna öppna på TCP 8008. Det kan fungera i ett isolerat labbnätverk men är farligt i andra miljöer. Tvåfaktorsautentisering (2FA) ingår <strong>inte</strong> i det första valet, utan ställs in senare på <strong>fliken Säkerhet</strong> när ett lösenord har angetts."
},
"reaching": {
"heading": "Öppna instrumentpanelen",
"intro": "ProxMenux Monitor binder till <code>0.0.0.0:8008</code>. Det finns tre vanliga sätt att nå den:",
"outro": "Direktåtkomst motsvarar standardenheten för systemd. Omvänd proxy och Secure Gateway beskrivs nedan. Klient-IP från <code>X-Forwarded-For</code> kräver PROXMENUX_TRUST_PROXY=1 och en proxy du kontrollerar. Enbart <code>X-Forwarded-Proto</code> eller <code>X-Forwarded-Host</code> aktiverar inte detta förtroende; frontend bygger API-URL:er från webbläsarens ursprung."
},
"firstLaunch": {
"heading": "Första starten",
"intro": "När panelen öppnas första gången anropar frontend <code>GET /api/auth/status</code>. Om konfigurationen aldrig har sparats (<code>configured: false</code>) visas <em>”Skydda instrumentpanelen?”</em> med två val:",
"imageAlt": "Dialogen ”Skydda instrumentpanelen?” med val att ange lösenord eller fortsätta utan skydd",
"imageCaption": "Första valet mellan lösenordsskydd och inget skydd. Visas igen efter nyinstallation eller avaktiverad autentisering i inställningarna.",
"headerButton": "Knapp",
"headerWhat": "Vad händer",
"headerApi": "API-anrop",
"rows": [
{
"button": "Ja, ange lösenord",
"what": "Öppnar ett formulär med obligatoriskt användarnamn och lösenord, samt valfritt <em>visningsnamn</em> och <em>avatarbild</em>. Aktiverar autentisering i <code>auth.json</code> med <code>enabled: true</code> och returnerar ett JWT för inloggning. Valfria profilfält sparas med efterföljande anrop enligt nedan.",
"api": "POST /api/auth/setup"
},
{
"button": "Nej, fortsätt utan skydd",
"what": "Anger <code>declined: true</code> i <code>auth.json</code>. API-ändpunkterna är öppna tills du aktiverar skyddet i inställningarna.",
"api": "POST /api/auth/skip"
}
],
"twofaCalloutTitle": "2FA är konfigurerad senare, inte här",
"twofaCalloutBody": "Den första dialogen gäller endast lösenordsskyddet. <strong>Tvåfaktorsautentisering (TOTP)</strong> ställs sedan in på <strong>fliken Säkerhet</strong> efter inloggning med lösenord. Hela anvisningen finns längre ned.",
"createTitle": "Skapa den första användaren",
"createIntro": "<em>Ja, ange lösenord</em> öppnar ett formulär som skapar kontot och kan fylla i profilen, så att avataren visas direkt när du sparar. Fälten är:",
"headerField": "Fält",
"headerRequired": "Krav",
"headerNotes": "Anteckningar",
"fieldRows": [
{
"field": "Användarnamn",
"required": "Ja",
"notes": "Identifierare för inloggning. Kan inte ändras i gränssnittet; du måste redigera <code>auth.json</code> direkt."
},
{
"field": "Lösenord",
"required": "Ja",
"notes": "Minst 10 tecken från minst 3 av 4 kategorier: gemener, versaler, siffror och symboler. Enkla lösenord som <code>password</code>, <code>12345678</code> och <code>proxmenux</code> avvisas. Samma regler gäller på servern och kan inte kringgås med curl."
},
{
"field": "Visningsnamn",
"required": "Nej",
"notes": "Namn i menyn i sidhuvudet och på profilsidan. Om det är tomt används användarnamnet. Kan ändras via <strong>Avatar → Visa profil</strong>."
},
{
"field": "Avatarbild",
"required": "Nej",
"notes": "PNG, JPEG, WebP eller GIF upp till 2 MB. Visas i en cirkel i sidhuvudet och profilen. Utan bild visas första bokstaven i visningsnamnet eller användarnamnet på färgad bakgrund. Bilden kan senare laddas upp, ersättas eller tas bort i profilen."
}
],
"createImageAlt": "Kontoformulär med obligatoriskt användarnamn och lösenord samt valfritt visningsnamn och avatar",
"createImageCaption": "Formulär vid första starten. Namn och avatar är valfria; utan dem skapas kontot med en bokstav i en cirkel i sidhuvudet.",
"saveCalloutTitle": "En sparning, upp till tre API-anrop",
"saveCalloutBody": "Formuläret skickar först <code>POST /api/auth/setup</code> med användarnamn och lösenord. Det nya JWT:t används sedan till <code>PUT /api/auth/profile</code> för namn och <code>POST /api/auth/profile/avatar</code> för bilden, om de angetts. Profilfel avbryter inte kontot; profilen kan slutföras senare.",
"avatarTitle": "Avatar meny och profilsida",
"avatarBody1": "Efter konfigureringen visas avataren uppe till höger, bredvid temaväljaren. Menyn öppnar profil och Säkerhet och har åtgärden <strong>Logga ut</strong>. Du kan även logga ut från Säkerhet.",
"avatarBody2": "Profilen visar avatar, skrivskyddat användarnamn och redigerbart visningsnamn. Uppladdningar, ersättningar och borttagningar av avataren är atomära; sidhuvudet uppdateras automatiskt efter en lyckad ändring. Kontoformuläret och profilen använder samma ändpunkter som beskrivs nedan.",
"profileImageAlt": "Profil med avatarförhandsvisning, knappar för uppladdning, ersättning och borttagning, skrivskyddat användarnamn och redigerbart visningsnamn",
"profileImageCaption": "Profilsidan. Användarnamnet är skrivskyddat; visningsnamn och avatar kan ändras här utan att öppna Säkerhet.",
"headerEndpoint": "Ändpunkt",
"headerEpWhat": "Vad det gör",
"endpointRows": [
{
"endpoint": "GET /api/auth/profile",
"what": "Returnerar användarnamn, visningsnamn och avatarstatus (<code>has_avatar</code>, <code>avatar_mtime</code>)."
},
{
"endpoint": "PUT /api/auth/profile",
"what": "Uppdaterar visningsnamnet. Begärans innehåll: <code>'{' \"display_name\": \"...\" '}'</code>."
},
{
"endpoint": "GET /api/auth/profile/avatar",
"what": "Returnerar avatarbilden som PNG / JPEG / WebP / GIF med rätt innehållstyp. Kräver Bearer-headern; frontend hämtar en blob och skapar en lokal objekt-URL för visning."
},
{
"endpoint": "POST /api/auth/profile/avatar",
"what": "Laddar upp en ny avatar, högst 2 MB. Innehållstypen ska motsvara filen. Den gamla bilden ersätts atomärt."
},
{
"endpoint": "DELETE /api/auth/profile/avatar",
"what": "Tar bort avataren. Sidhuvudet visar åter en bokstav i en färgad cirkel."
}
],
"reversibleTitle": "Du kan aktivera skyddet senare",
"reversibleBody": "Efter <em>Nej, fortsätt utan skydd</em> visas inte välkomstdialogen igen. Aktivera autentisering på <strong>fliken Säkerhet</strong> eller redigera <code>/root/.config/proxmenux-monitor/auth.json</code>, ta bort flaggan <code>declined</code> och starta om tjänsten."
},
"password": {
"heading": "Lösenordsautentisering",
"intro": "Efter konfigureringen kräver skyddade API-anrop ett JWT i <code>Authorization: Bearer &lt;token&gt;</code>:",
"items": [
"<strong>Sessionstoken:</strong> giltigt i 24 timmar, utfärdas av <code>POST /api/auth/login</code>.",
"<strong>API-token för integrationer:</strong> giltigt i 365 dagar, utfärdas av <code>POST /api/auth/generate-api-token</code>. Se nästa avsnitt."
],
"loginImageAlt": "Inloggningsskärm som visas efter autentisering är konfigurerad - användarnamn och lösenordsfält",
"loginImageCaption": "När autentiseringen är konfigurerad börjar varje besök på instrumentbrädan här. Med 2FA aktiverad ber skärmen om 6-siffrig kod i ett andra steg efter att lösenordet accepteras.",
"loginFlowTitle": "Inloggningsflöde",
"twofaIntro": "Med 2FA returnerar första anropet <code>requires_totp: true</code>. Upprepa det med den sexsiffriga koden:",
"publicTitle": "Offentlig åtkomst och skyddade kontroller",
"publicIntro": "Inloggning och autentiseringsstatus är offentliga. Kontot kan skapas så länge användarnamn och lösenord inte sparats, även efter att skydd avböjts. Systemdata kräver autentisering när skyddet är aktivt:",
"publicItems": [
"<code>/api/auth/login</code> och <code>/api/auth/status</code> är offentliga. <code>/api/auth/setup</code> skapar första kontot och vägrar skriva över befintliga inloggningsuppgifter.",
"<code>/api/system-info</code> är en offentlig ändpunkt med grundläggande systeminformation, inklusive <code>health.status</code>. Den kräver ingen token. Även /api/auth/status är offentlig och passar för en tillgänglighetskontroll."
],
"cryptoTitle": "Kryptografi och lagring",
"cryptoIntro": "ProxMenux Monitor har öppen källkod. Här beskrivs skyddet för uppgifter på värden så att du kan bedöma det innan du väljer att lita på det. Algoritmerna används i <code>scripts/auth_manager.py</code>; avsnittet beskriver koden.",
"headerAsset": "Uppgift",
"headerAlgo": "Algoritm",
"headerWhere": "Lagringsplats",
"cryptoRows": [
{
"asset": "Lösenord",
"algorithm": "PBKDF2-HMAC-SHA256 med ett slumpmässigt salt per lösenord och många iterationer enligt OWASP 2023+. Lagras som <code>pbkdf2_sha256$&lt;iters&gt;$&lt;salt&gt;$&lt;hash&gt;</code>.",
"where": "<code>auth.json</code> → <code>password_hash</code>"
},
{
"asset": "Sessions-JWT / API-JWT",
"algorithm": "HS256-signering med en hemlighet per installation, skapad vid första starten (<code>secrets.token_urlsafe</code>, ≥48 byte). Token innehåller <code>iss=proxmenux-monitor</code> och <code>aud=api</code>; varje begäran verifierar signaturen med den aktuella hemligheten.",
"where": "Hemlighet: <code>auth.json</code> → <code>jwt_secret</code>. JWT själv: bara på klienten."
},
{
"asset": "Metadata för API-token",
"algorithm": "JWT:ts SHA-256-hash lagras med fingeravtrycket <code>signed_with</code> av använt <code>jwt_secret</code>. Det gör att metadata kan visas och token upptäckas efter byte av signeringshemlighet.",
"where": "<code>auth.json</code> → <code>api_tokens[]</code>"
},
{
"asset": "TOTP-hemlighet för 2FA",
"algorithm": "Standard-TOTP (RFC 6238) med base32-kodad hemlighet. De åtta engångskoderna för återställning lagras som SHA-256-hashar.",
"where": "<code>auth.json</code> → <code>totp_secret</code> + <code>backup_codes[]</code>"
},
{
"asset": "Återkallelser",
"algorithm": "Vid återkallelse läggs tokenets SHA-256-hash i en spärrlista som läses vid varje verifiering. En minnescache på cirka 30 s undviker upprepade diskläsningar.",
"where": "<code>auth.json</code> → <code>revoked_tokens[]</code>"
}
],
"authJsonTitle": "auth.json — innehåll och skydd",
"authJsonBody": "Autentiseringsuppgifterna finns i <code>/root/.config/proxmenux-monitor/auth.json</code>, med läge <code>0600</code> och ägare <code>root</code>. Filen innehåller PBKDF2-<em>hashar</em> och <em>kryptografiska hemligheter</em> (<code>jwt_secret</code>, <code>totp_secret</code>), aldrig lösenord i klartext. Kryptera mål för säkerhetskopiering eller replikering och lägg aldrig filen i versionshantering.",
"rotateTitle": "Byte av jwt_secret gör alla befintliga JWT ogiltiga",
"rotateBody": "Om <code>auth.json</code> återskapas eller återställs med en annan hemlighet ändras <code>jwt_secret</code>. Gamla sessions- och API-JWT misslyckas med \"Invalid or expired token\". Gränssnittet visar <strong>Ogiltigt — skapa på nytt</strong>. Återkalla och ersätt berörda token även i Home Assistant, skript och andra klienter.",
"recoverTitle": "Återställa ett förlorat lösenord",
"recoverIntro": "Lösenordsåterställning kräver skalåtkomst till värden. ProxMenux har en guidad återställning i konfigurationsmenyn så att du slipper redigera <code>auth.json</code> manuellt:",
"survivesTitle": "Vad överlever återställningen",
"survivesBody": "Den interaktiva inloggningen tas bort, men <code>jwt_secret</code> och registrerade <code>api_tokens</code> behålls. Home Assistant och andra skript kan fortsätta med samma token. För att börja om helt med en ny hemlighet, radera <code>auth.json</code> och starta om tjänsten. Alla gamla token blir då ogiltiga.",
"physicalTitle": "Krav på åtkomst till värden",
"physicalBody": "Kräver ett <strong>root-skal på värden</strong>. Den som kör <code>menu</code> som root styr redan hela maskinen; lösenordsåterställningen ger inga ytterligare rättigheter. Monitor-inloggningen skyddar därför inte mot någon som redan har root-åtkomst."
},
"twofa": {
"heading": "Tvåfaktorsautentisering (TOTP)",
"intro": "2FA lägger till en sexsiffrig kod som ändras var 30:e sekund på telefonen eller i lösenordshanteraren. Enbart lösenordet räcker då inte för inloggning. ProxMenux Monitor använder standardprotokollet <strong>TOTP</strong> (RFC 6238), som fungerar med autentiseringsappar.",
"pickTitle": "Välj en autentiseringsapp",
"pickIntro": "En befintlig TOTP-app kan användas här. Tabellen visar vanliga alternativ: vissa gratis, andra med abonnemang. Även plattformar och säkerhetskopiering skiljer sig.",
"headerApp": "App",
"headerPlatforms": "Plattformar",
"headerAppNotes": "Anteckningar",
"apps": [
{
"name": "Google Authenticator",
"href": "https://safety.google/authentication/",
"platforms": "iOS, Android",
"notes": "Vanligt val. Valfri molnsäkerhetskopiering via Google-kontot."
},
{
"name": "Microsoft Authenticator",
"href": "https://www.microsoft.com/en-us/security/mobile-authenticator-app",
"platforms": "iOS, Android",
"notes": "Säkerhetskopiering via Microsoft-konto. Hanterar även Microsofts pushmeddelanden för arbete."
},
{
"name": "Authy",
"href": "https://authy.com/",
"platforms": "iOS, Android",
"notes": "Krypterad synkronisering mellan enheter. Skrivbordsappen stöds inte längre sedan den 19 mars 2024."
},
{
"name": "Apple Passwords",
"href": "https://support.apple.com/guide/passwords/welcome/mac",
"platforms": "iOS, iPadOS, macOS, visionOS, Windows (via iCloud)",
"notes": "Inbyggd i Apples system; separat Passwords-app sedan iOS 18 / macOS Sequoia. Sparar TOTP tillsammans med lösenord och synkroniserar via iCloud-nyckelring."
},
{
"name": "Bitwarden",
"href": "https://bitwarden.com/",
"platforms": "iOS, Android, skrivbord, webbläsare",
"notes": "Öppen källkod. TOTP kan lagras tillsammans med lösenord i valvet. Det är bekvämt men håller inte faktorerna på separata enheter."
},
{
"name": "1Password",
"href": "https://1password.com/",
"platforms": "iOS, Android, skrivbord, webbläsare",
"notes": "Samma idé som Bitwarden - TOTP integrerad med lösenordsvalvet. Prenumeration."
},
{
"name": "Aegis Authenticator",
"href": "https://getaegis.app/",
"platforms": "Android",
"notes": "Öppen källkod. Krypterad säkerhetskopia på enheten under din kontroll. Inget moln eller konto krävs."
},
{
"name": "Raivo OTP",
"href": "https://raivo-otp.com/",
"platforms": "iOS, macOS",
"notes": "Öppen källkod. Valfri iCloud-synkronisering. Ett alternativ i Apples ekosystem som liknar Aegis."
},
{
"name": "Ente Auth",
"href": "https://ente.io/auth/",
"platforms": "iOS, Android, skrivbord, webb",
"notes": "Öppen källkod. Molnsynkronisering mellan enheter med totalsträckskryptering."
},
{
"name": "2FAS",
"href": "https://2fas.com/",
"platforms": "iOS, Android, webbläsartillägg",
"notes": "Öppen källkod. Valfri krypterad molnsäkerhetskopia; webbläsartillägget kan fylla i koder automatiskt."
},
{
"name": "FreeOTP+",
"href": "https://github.com/helloworld1/FreeOTPPlus",
"platforms": "Android",
"notes": "Vidareutveckling av FreeOTP för Android med öppen källkod samt import och export. Inget konto krävs."
}
],
"backupTitle": "Varför säkerhetskopior behövs",
"backupBody": "Om enheten försvinner, använd en sparad återställningskod eller återställ en säkerhetskopia som du ordnat i förväg. Molnsynkronisering och exporter skiljer sig mellan appar; kontrollera att TOTP-hemligheterna kan återställas. Root-åtkomst på värden möjliggör också återställning enligt nedan. Spara en separat, säker kopia.",
"setupTitle": "Ställ in steg för steg från panelen",
"setupImageAlt": "2FA-inställning med QR-kod och återställningskoder",
"setupImageCaption": "2FA-dialogen visar QR-kod, Base32-hemlighet för manuell inmatning och åtta engångskoder för återställning. Kopiera dem innan dialogen stängs; de visas inte igen.",
"setupSteps": [
"<strong>Installera autentiseringsappen på din telefon</strong> (eller öppna din lösenordshanterare). En av apparna från tabellen ovan. Du behöver bara göra det en gång - samma app kommer att hålla koder för varje tjänst du skyddar.",
"<strong>Logga in på panelen</strong> med användarnamn och lösenord.",
"<strong>Öppna fliken Säkerhet</strong> och välj <strong>Aktivera 2FA</strong>. Dialogen visar QR-kod, Base32-hemlighet och åtta återställningskoder.",
"<strong>Lägg till posten i autentiseringsappen:</strong>",
"<strong>Spara återställningskoderna.</strong> Förvara alla åtta i en lösenordshanterare, krypterad anteckning eller säker papperskopia. Varje kod fungerar en gång när appen är otillgänglig.",
"<strong>Bekräfta med den aktuella sexsiffriga koden</strong> från appen i fältet \"Verifieringskod\" och skicka. Koden ändras var 30:e sekund; använd nästa om den hinner löpa ut.",
"<strong>Klart.</strong> 2FA är aktivt. Nästa inloggning frågar först efter lösenord och sedan den aktuella sexsiffriga koden."
],
"setupStep4Sub": [
"<em>Enkel metod:</em> välj <em>Lägg till konto</em> → <em>Skanna QR-kod</em> i appen och rikta kameran mot koden. Posten får automatiskt ett namn som <code>ProxMenux Monitor (your-username)</code> och visar en sexsiffrig kod som ändras var 30:e sekund.",
"<em>Manuellt alternativ</em> när skanning inte är möjlig, exempelvis på samma telefon: <em>Lägg till konto</em> → <em>Ange inställningsnyckel</em>. Välj ett namn som <em>Proxmox Monitor</em>, klistra in Base32-hemligheten, lämna <em>Typ</em> som <em>Tidsbaserad</em> och spara."
],
"testTitle": "Test innan du loggar ut",
"testBody": "Behåll den nuvarande sessionen och testa en ny inloggning i ett privat fönster <em>omedelbart</em> efter inställningen. Kontrollera serverns och telefonens klockor om koden nekas, innan du stänger den fungerande sessionen. Om åtkomsten redan är förlorad, använd återställningskod eller redigera <code>auth.json</code> från värdens skal.",
"lostTitle": "Förlorad autentiseringsapp",
"lostIntro": "Tre återställningsmetoder, från minst till mest ingripande:",
"lostItems": [
"<strong>Använd en återställningskod.</strong> Ange en av de åtta sparade koderna i TOTP-fältet. Den fungerar en gång; oanvända koder förblir giltiga. Ställ sedan in 2FA på nytt i inställningarna för åtta nya koder.",
"<strong>Återställ appen från moln eller säkerhetskopia.</strong> Med inställd molnsynkronisering kan appen installeras och kontot öppnas på en ny enhet: Google, Microsoft, Authy, Apple Passwords via iCloud-nyckelring, Ente eller 2FAS. Med en exportfil från Aegis, Raivo eller FreeOTP+, installera appen och importera filen.",
"<strong>Stäng av 2FA från värdens skal.</strong> Om övriga metoder saknas, redigera <code>/root/.config/proxmenux-monitor/auth.json</code> som root via SSH eller konsol. Sätt <code>totp_enabled</code> till <code>false</code>, spara och starta om tjänsten:"
],
"lostShellOutro": "Du kan logga in med användarnamn + lösenord bara, sedan aktivera 2FA från Inställningar.",
"disableTitle": "Inaktivera 2FA",
"disableBody": "Öppna <strong>Säkerhet</strong> och välj <strong>Inaktivera 2FA</strong>. <code>POST /api/auth/totp/disable</code> kräver aktuellt lösenord och giltig TOTP- eller återställningskod. Hemligheten och återställningskoderna tas bort. Ta även bort den gamla posten i appen.",
"rejectedTitle": "Den sexsiffriga koden nekas alltid",
"rejectedIntro": "TOTP är tidsbaserat. Serverns och telefonens klockor bör skilja mindre än cirka 30 s. Två kontroller:",
"rejectedItems": [
"<strong>Telefon:</strong> Inställningar → Datum och tid → aktivera automatisk / nätverkssynkronisering.",
"<strong>Proxmox-värd:</strong> <code>timedatectl status</code> ska visa \"System clock synchronized: yes\". Kör annars <code>timedatectl set-ntp true</code> och vänta en minut."
],
"rejectedOutro": "När klockorna är synkroniserade accepteras koden inom nästa 30-sekundersintervall."
},
"apiTokens": {
"heading": "API-token med lång giltighetstid",
"intro": "Sessioner löper ut efter 24 timmar. Skapa ett separat <strong>API-token</strong> giltigt i 365 dagar för Homepage, Home Assistant, Grafana eller Uptime Kuma. JWT:t använder samma signeringshemlighet; fältet <code>token_name</code> gör att det kan identifieras och återkallas separat.",
"imageAlt": "API-tokenlista med namn, prefix, datum för skapande och utgångsdatum",
"imageCaption": "Listan i inställningarna visar namn, prefix med de fyra sista tecknen för identifiering, skapande- och utgångsdatum samt återkallelse.",
"generateTitle": "Generera en token",
"generateIntro": "Från panelen:",
"generateSteps": [
"Öppna <strong>Säkerhet → API-åtkomsttoken</strong>.",
"Skriv ett beskrivande namn (<em>t.ex. \"Home Assistant\"</em>).",
"Skriv in ditt lösenord. Om 2FA är på, även den nuvarande 6-siffriga koden.",
"Välj <strong>Generera token</strong>. Det visas <strong>endast en gång</strong>: kopiera direkt."
],
"generateCli": "Från kommandoraden:",
"useTitle": "Använd en token",
"revokeTitle": "Återkalla en token",
"revokeBody": "Varje rad har <strong>Återkalla</strong>, vilket lägger till hashen i <code>revoked_tokens</code> i <code>auth.json</code>. Tokenet nekas från nästa begäran.",
"cheatTitle": "Snabbguide för tokensäkerhet",
"cheatItems": [
"Spara token i integrationens lagring för hemligheter: Homepage <code>secrets.yaml</code>, Home Assistant <code>!secret</code> eller miljövariabler. Lägg dem aldrig i Git.",
"Ett token per integration, med integrationens namn. Återkalla det när integrationen tas bort.",
"Rotera varje 6-12 månader. Utgången är en hård gräns, inte en rekommendation."
],
"outro": "Lagringsråd och exempel: <apiLink>API-referens → Tokenhantering</apiLink> och <intLink>Integrationer</intLink>."
},
"https": {
"heading": "HTTPS",
"intro": "Två vägar till TLS:",
"items": [
"<strong>Omvänd proxy rekommenderas.</strong> Avsluta TLS på Nginx / Caddy / Traefik och vidarebefordra HTTP till Flask på port 8008. Exempel nedan.",
"<strong>Direkt HTTPS i AppImage.</strong> Ange certifikat via <code>POST /api/ssl/configure</code> (gränssnitt: <strong>Inställningar → SSL</strong>). HTTPS använder <code>gevent.pywsgi</code> med standardhanteraren; flask-sock hanterar WebSocket för WSS. Certifikatsökvägar sparas i SSL-konfigurationen."
],
"calloutTitle": "Direkt HTTPS begränsningar",
"calloutBody": "Monitor kan använda ett certifikat hanterat av Proxmox eller egna certifikatsfiler. Det utfärdar inte ACME-certifikat självt. Använd Proxmox ACME eller Caddy, Traefik eller Nginx för automatisk utfärdning och förnyelse, och se till att förnyade certifikat läses in."
},
"gateway": {
"heading": "Säker gateway (Tailscale)",
"intro": "En omvänd proxy möjliggör fjärråtkomst. <strong>Secure Gateway</strong> ger åtkomst utan att exponera TCP 8008: en Alpine-LXC kör <a>Tailscale</a> som undernätsrouter. Åtkomst till värdens LAN-IP beror på godkända rutter och åtkomstregler i tailnet.",
"calloutTitle": "Varför detta är bekvämt",
"calloutBody": "Använd LAN-adressen <code>http://&lt;proxmox-lan-ip&gt;:8008</code> via godkänd rutt. Tailscales undernätsroutrar använder SNAT som standard. Monitor ser normalt gatewayens LAN-IP, inte klientens <code>100.x.y.z</code>. Loggar och Fail2Ban identifierar därför den källadress som faktiskt når värden.",
"deployBody": "Välj LXC-lagring, klistra in en Tailscale-nyckel skapad på <a>login.tailscale.com/admin/settings/keys</a>, välj undernät och distribuera. LXC:n startas på cirka 30 sekunder och registreras i tailnet.",
"outro": "Distribution, undernätsrutter, Tailscale-ACL och Exit Node beskrivs i <link>Panel → Säkerhet → Secure Gateway</link>, där även guiden finns. Här beskrivs åtkomsten."
},
"proxy": {
"heading": "Konfigurationsexempel för omvänd proxy",
"intro": "Använd ett <strong>eget värdnamn</strong>, exempelvis <code>monitor.example.com</code>, vidarebefordrat till port 8008 på Proxmox-värden. Exemplen följer detta mönster. En undersökväg som <code>example.com/proxmenux-monitor/</code> behöver anpassningar av frontend och proxy; att ta bort prefixet räcker inte.",
"nginxTitle": "Nginx",
"caddyTitle": "Caddy",
"traefikTitle": "Traefik (etiketter — Docker / Kubernetes)",
"subPathTitle": "Avancerat: distribution under en undersökväg",
"subPathBody": "Frontend saknar en inställd bas för undersökvägar och bygger API-anrop från roten med <code>/api/*</code>. Att ta bort ett prefix som <code>example.com/proxmenux-monitor/</code> hanterar varken anropen eller alla frontendfiler. Använd ett eget värdnamn. Undersökvägar kräver samordnade ändringar och särskild testning."
},
"audit": {
"heading": "Granskningslogg",
"intro": "Misslyckade inloggningar och varningar om begränsning skrivs radvis till <code>/var/log/proxmenux-auth.log</code>. Denna logger registrerar inte lyckade inloggningar:",
"outro": "Följ loggen med <code>tail -F /var/log/proxmenux-auth.log</code>. Extra konfiguration för <code>logrotate</code> möjliggör rotation; Monitor gör den inte självt."
},
"fail2ban": {
"heading": "Valfritt: Fail2Ban-jail",
"calloutTitle": "Fail2Ban ingår inte i Monitor",
"calloutBody": "Fail2Ban är <strong>inte</strong> installerad av ProxMenux Monitor själv. Installera den via <link>Säkerhet → Fail2Ban</link> i menyn ProxMenux (eller med standardpaketet Debian). Utan den skriver monitorn fortfarande granskningsloggen ovan – den förbjuder helt enkelt inte återkommande brottslingar automatiskt.",
"intro": "ProxMenux-integrationen innehåller en jail <code>[proxmenux]</code> som:",
"items": [
"Läser <code>/var/log/proxmenux-auth.log</code>",
"Matchar <code>authentication failure; rhost=&lt;ip&gt;</code> mönster med ett dedikerat filter.",
"Blockerar normalt den berörda IP-adressen i kärnans brandvägg.",
"Flasks <code>before_request</code>-hook kontrollerar begäran mot spärrlistan, cachad i 30 s. Bakom en omvänd proxy kräver IP-blockering även PROXMENUX_TRUST_PROXY=1 och en kontrollerad proxy som anger tillförlitliga vidarebefordringshuvuden."
],
"outro": "Konfiguration, spärrtid och upplåsning: <link>Säkerhet → Fail2Ban</link>."
},
"troubleshoot": {
"heading": "Felsökning",
"noScreenTitle": "Den första lanseringsskärmen visas aldrig",
"noScreenBody": "Autentisering är redan inställd (<code>configured: true</code>) eller har hoppats över. För att börja om:",
"noScreenOutro": "Raderar autentisering, TOTP-hemligheter och API-token. Säkerhetskopiera <code>auth.json</code> först om du vill behålla dem.",
"tokenTitle": "HTTP 401 på varje begäran från en fungerande API token",
"tokenBody": "Token gick ut (365 d-gräns) eller kom in i <code>revoked_tokens</code>-listan. Skapa en ny i Inställningar och uppdatera integrationen. För att kontrollera:",
"tokenOutro": "Utgångna eller återkallade tokens returnerar <code>'{'\"error\":\"Invalid or expired token\"'}'</code>.",
"no2faTitle": "Kan inte logga in efter att 2FA aktiverats och appen saknas",
"no2faBody": "Ange en återställningskod i TOTP-fältet. Om ingen finns, redigera <code>/root/.config/proxmenux-monitor/auth.json</code> från värdens skal, sätt <code>totp_enabled</code> till <code>false</code> och starta om tjänsten.",
"wsTitle": "Omvänd proxy fungerar men den terminala fliken kopplar bort varje minut",
"wsBody": "WebSocket-anslutningens tidsgräns för inaktivitet i proxyn. Öka lästiden (Nginx: <code>proxy_read_timeout 86400s</code>; Traefik: <code>idleTimeout</code> i ingångspunkt eller middleware). Kontrollera i Nginx att <code>proxy_set_header Upgrade $http_upgrade</code> och <code>Connection \"upgrade\"</code> finns."
},
"whereNext": {
"heading": "Nästa steg",
"items": [
{
"label": "API-referens → Tokenhantering",
"href": "/docs/monitor/api",
"tail": " — skapa, lista och återkalla API-token; säkerhet och lagring av hemligheter."
},
{
"label": "Integrationer",
"href": "/docs/monitor/integrations",
"tail": " — Homepage, Home Assistant, Grafana / Prometheus, Uptime Kuma och allmänna cURL-exempel."
},
{
"label": "Dashboard → Säkerhet → Secure Gateway",
"href": "/docs/monitor/dashboard/security",
"tail": " — distribuera Tailscale-gatewayens LXC steg för steg: undernätsrutter, ACL och Exit Node."
},
{
"label": "Säkerhet - Fail2Ban",
"href": "/docs/security/fail2ban",
"tail": " — installera och konfigurera den valfria jailen."
},
{
"label": "Inställningar → ProxMenux Monitor",
"href": "/docs/settings/proxmenux-monitor",
"tail": " — starta och stoppa systemd-tjänsten via ProxMenux TUI."
}
]
}
}
@@ -0,0 +1,342 @@
{
"meta": {
"title": "Proxmox AI-assistent — OpenAI, Claude, Gemini, Groq, Ollama | ProxMenux Monitor",
"description": "Den valfria AI-assistenten skriver om Proxmox VE-aviseringar på tydligt språk. Sex leverantörer: OpenAI, Anthropic Claude, Google Gemini, Groq, OpenRouter och Ollama. Gränssnittet erbjuder tretton språk, tre detaljnivåer per kanal, egna promptar med ett communitybibliotek och händelsekontext med drifttid, återkommande händelser och SMART-data.",
"ogTitle": "Proxmox AI-assistent — OpenAI, Claude, Gemini, Groq, Ollama",
"ogDescription": "Skriv om Proxmox VE-aviseringar på tydligt språk med OpenAI, Anthropic Claude, Google Gemini, Groq, OpenRouter eller lokal Ollama.",
"twitterTitle": "Proxmox AI-assistent | ProxMenux Monitor",
"twitterDescription": "Skriv om Proxmox VE-aviseringar på tydligt språk med OpenAI, Anthropic, Gemini, Groq, OpenRouter eller lokal Ollama."
},
"header": {
"title": "AI-assistent",
"description": "Valfri AI-omskrivning gör lämpliga aviseringsmallar till tydliga meddelanden med detaljnivå per kanal, tretton språk i gränssnittet, egna promptar, ett offentligt communitybibliotek och berikad kontext. Rapporterna <code>backup_complete</code> och <code>backup_fail</code> går helt förbi AI.",
"section": "ProxMenux-övervakning"
},
"intro": {
"title": "Avstängt som standard, aktiveras med ett reglage",
"body": "AI-omskrivning är avstängd som standard. Aktivera den under <em>Inställningar → Aviseringar → Avancerat: AI-förbättring</em>. Om kontextberikning eller omskrivning misslyckas skickas originalmallen. Varje omskrivning har högst 25 sekunders väntetid; därefter används mallen i stället för obegränsad väntan."
},
"howItWorks": {
"heading": "Hur det fungerar",
"intro": "Händelser som Monitor skickar följer samma flöde. AI-omskrivning är ett valfritt steg mellan malltexten och sändningen till kanalen. En händelse går igenom fyra steg:",
"steps": [
"<strong>Händelse och mall.</strong> En händelse kommer från en av sex insamlare och formateras av <code>notification_templates.py</code> till strukturerad vanlig text. Kanalen skulle skicka den texten om AI-omskrivning var avstängd.",
"<strong>Kontextberikning.</strong> Sändningsmodulen lägger vid behov till relevanta uppgifter: systemets drifttid vid kritiska systemfel, händelsefrekvens, SMART-data för diskhändelser, träffar i databasen med kända fel och loggrader.",
"<strong>Skapa prompten.</strong> Systemprompten byggs av mallen och kanalens inställningar: språk, detaljnivå, emoji-regler från <em>Formaterade meddelanden</em> och valfria AI-förslag. En egen prompt ersätter hela systemprompten. Användarmeddelandet innehåller malltext och berikade kontextblock.",
"<strong>Anrop till leverantören.</strong> Groq, OpenAI, Anthropic, Gemini, Ollama eller OpenRouter returnerar omskriven rubrik och meddelandetext. Sändningsmodulen tolkar svaret, ersätter innehållet för kanalen och skickar det via kanaladaptern."
],
"notesIntro": "Tre detaljer värda att hålla fast vid innan du läser resten av denna sida:",
"notes": [
"<strong>AI skapar inga händelser.</strong> Varje händelse kommer från en verklig signal, exempelvis en hälsokontroll, loggrad eller PVE-webhook. En mall formaterar texten innan AI ser den. AI översätter och formaterar, den övervakar inte systemet.",
"<strong>AI körs per kanal.</strong> Telegram och Discord kan få en kort omskrivning medan e-post får en detaljerad rapport: samma händelse i olika format, med ett leverantörsanrop per kanal.",
"<strong>Vid fel används mallen.</strong> Om leverantören returnerar ett 5xx-fel, överskrider tidsgränsen, ger felaktig utdata eller avvisar begäran loggar sändningsmodulen felet och skickar kanalens ursprungliga malltext."
]
},
"enabling": {
"heading": "Aktivera panelen",
"intro": "AI-inställningarna finns längst ned i panelen Aviseringar under fliken Inställningar, i det hopfällbara blocket <em>Avancerat: AI-förbättring</em>. Klicka på rubriken för att öppna det:",
"collapsedAlt": "Hopfälld rubrik för avancerade AI-inställningar med pilsymbol",
"collapsedCaption": "Hopfällt som standard; ett klick öppnar panelen.",
"panelAlt": "Utökad panel för AI-förbättringar med huvudreglage för AI-förbättrade meddelanden, leverantören Google Gemini, dold API-nyckel, modellen gemini-2.5-flash, standardläge för prompten, engelska som språk, detaljnivå per kanal för Telegram, Discord, Gotify och e-post samt reglage för AI-förslag och knappen Testa anslutning",
"panelCaption": "Hela AI-panelen: varje reglage som beskrivs på sidan motsvarar ett av fälten ovan.",
"outro": "Uppifrån: huvudreglaget <em>AI-förbättrade meddelanden</em>, leverantör med informationsruta, API-nyckel eller Ollama-URL, modellista hämtad efter nyckeln, läget <em>Standard</em> / <em>Anpassat</em>, språk, detaljnivå per kanal, <em>AI-förslag</em> och <em>Testa anslutning</em>, som skickar ett testmeddelande för att kontrollera inloggningsuppgifterna."
},
"context": {
"heading": "Vilket sammanhang AI får",
"intro": "Innan prompten byggs väljer sändningsmodulen vilka extra uppgifter som är relevanta för händelsen. Syftet är att ge LLM tillräckligt underlag för ett användbart meddelande utan onödigt innehåll och onödiga kostnader. Fem kontextblock kan läggas till:",
"headerBlock": "Block",
"headerWhen": "När den injiceras",
"headerWhat": "Vad den bär",
"rows": [
{
"block": "Systemuppetid",
"when": "Endast vid kritiska systemfel: <code>crash</code>, <code>panic</code>, <code>oom</code>, <code>kernel</code>, <code>split_brain</code>, <code>quorum_lost</code>, <code>node_offline</code>, <code>node_fail</code>, <code>system_fail</code>, <code>boot_fail</code>. Utelämnas vid diskfel, varningar och rutinåtgärder för att hålla prompten kort.",
"what": "En linje som <code>System uptime: 14 days (stable system)</code>. Låt LLM skilja startproblem från långvariga misslyckanden."
},
{
"block": "Händelsefrekvens",
"when": "När Monitor har sett samma händelsefingeravtryck tidigare.",
"what": "Antal förekomster, tid för första observationen och valfritt mönster: återkommande, enstaka eller topp. LLM använder uppgifterna för att skilja återkommande problem från den första observationen."
},
{
"block": "SMART-data",
"when": "Endast för diskrelaterade händelser (händelse typ innehåller <code>disk</code>, <code>smart</code>, <code>storage</code>, <code>io_error</code>, eller kroppen nämner <code>/dev/sd</code>, <code>ata</code>, <code>i/o error</code>).",
"what": "Utgång av <code>smartctl</code> för den drabbade enheten - övergripande hälsa (PASSED / FAILED) plus relevanta attribut för felläget."
},
{
"block": "Databas med kända fel",
"when": "När texten eller loggkontexten matchar ett Proxmox-specifikt felmönster som följer med Monitor.",
"what": "Ett <code>KNOWN PROXMOX ERROR DETECTED</code>-block med den matchade orsaken och en konkret lösning. Prompten instruerar LLM att översätta detta verbatim - ingen parafrasering av den rekommenderade fixen."
},
{
"block": "Journalloggar",
"when": "När den ursprungliga insamlaren har fångat loggrader för händelsen, främst journal- och uppgiftsövervakningen.",
"what": "Obearbetade utdrag från <code>journalctl</code>. Prompten ber LLM att hämta ID:n, tidsstämplar och ledtrådar till grundorsaken och ignorera orelaterade poster."
}
],
"afterBlocks": "När blocken har sammanfogats har användarmeddelandet till LLM följande form:",
"calloutTitle": "Ingen telemetri bortom själva händelsen",
"calloutBody": "Övervakaren skickar bara vad den har till hands för den aktuella händelsen - ingen systemomfattande telemetri, ingen historisk metrisk serie, inga lagerdumpar. De fem blocken ovan är den övre gränsen för vad som lämnar värden på en enda AI-rewrite."
},
"tokens": {
"heading": "Tokens - vad de är och hur de konsumeras",
"intro1": "Kommersiella leverantörer tar betalt per <em>token</em>. En token motsvarar ungefär fyra engelska tecken eller tre fjärdedelar av ett ord. Den engelska frasen <em>\"Backup completed on storage local-bak\"</em> är omkring åtta token. Tio loggrader kan vara 200–400 token beroende på det tekniska innehållet.",
"intro2": "Två saker faktureras på varje samtal:",
"items": [
"<strong>Indatatoken</strong> omfattar systemprompt och användarmeddelande med allvarlighetsgrad, rubrik, malltext och berikad kontext. Antalet beror på prompt och händelse. Varje omskriven kanal kan förbruka egna indatatoken; rapporter om slutförd eller misslyckad säkerhetskopiering går förbi AI.",
"<strong>Utdatatoken</strong> är modellens svar. Monitor begränsar dem med <code>max_tokens</code>. Taket är en <em>gräns</em>, inte fast förbrukning: ger modellen 250 token med gränsen 1500 betalar du för 250."
],
"capsIntro": "Dessa är de gränser som sändningsmodulen använder, direkt från <code>AI_DETAIL_TOKENS</code> i <code>notification_templates.py</code>:",
"headerLevel": "detaljnivå",
"headerCap": "Utdatagräns (token)",
"headerConsumption": "Typisk faktisk förbrukning",
"capRows": [
{
"level": "kortfattad",
"cap": "500",
"consumption": "50–200 utdatatoken för korta händelser."
},
{
"level": "standard",
"cap": "1500",
"consumption": "200–700 utdatatoken för typiska händelser med begränsad kontext."
},
{
"level": "detaljerad",
"cap": "3000",
"consumption": "500–2000 utdatatoken för fullständiga e-postrapporter med loggar och SMART-tabeller."
}
],
"customNote": "Läget med egen prompt har en fast gräns på 500 utdatatoken oavsett detaljnivå. Du styr prompten och gränsen motverkar alltför långa svar.",
"sizingTitle": "Praktisk storlek",
"sizingBody": "Uppskatta förbrukningen som omskrivna händelser × AI-kanaler × in- och utdatatoken per anrop. Exempel: 50 händelser × en kanal × (500 indata + 300 utdata) = 40 000 token per dag. Förbrukning och kostnad beror på modell, kontext, cache och leverantörsgränser. <link>Detaljnivå per kanal</link> visar <code>brief</code> för chatt i stället för <code>standard</code>, med fortsatt detaljerad e-post."
},
"providers": {
"heading": "AI-leverantörer",
"intro": "Monitor stöder sex leverantörer. Listrutan visar alla och informationsknappen bredvid öppnar en ruta med en kort beskrivning av varje. Nedan finns länkar för API-nycklar, gränssnittets beskrivningar och relevanta kodnoteringar.",
"imageAlt": "Informationsruta för sex AI-leverantörer: Groq, OpenAI, Anthropic Claude, Google Gemini, Ollama och OpenRouter, med ikon, kort beskrivning och anmärkning om OpenAI-kompatibla API:er",
"imageCaption": "Informationsrutan i appen: sex kort, ett per leverantör, med beskrivningarna nedan.",
"groq": {
"heading": "Groq",
"tagline": "Mycket snabb, generös fri nivå (30 req/min). Perfekt att börja.",
"items": [
"API-nyckel: <a>console.groq.com/keys</a>",
"Exempel från den medföljande modellistan: <code>allam-2-7b</code>, <code>qwen/qwen3.8-27b</code>, <code>openai/gpt-oss-20b</code>, <code>groq/compound-mini</code>.",
"Medföljande rekommendation: <strong><code>openai/gpt-oss-20b</code></strong>. Kontrollera tillgängligheten för ditt konto med leverantörsväljaren och anslutningstestet."
]
},
"openai": {
"heading": "OpenAI",
"tagline": "Industristandard. Mycket exakt och allmänt används.",
"items": [
"API-nyckel: <a>platform.openai.com/api-keys</a>",
"Exempel från den medföljande modellistan: <code>gpt-4.1-nano</code>, <code>gpt-4.1-mini</code>, <code>gpt-4o-mini</code>, <code>gpt-4.1</code>, <code>gpt-4o</code>, <code>gpt-5-nano</code>.",
"Medföljande rekommendation: <strong><code>gpt-4.1-nano</code></strong>. Adaptern hanterar även särskilda krav för resonemangsmodeller; listan innehåller gpt-5-nano, så sådana modeller är inte generellt uteslutna."
],
"baseUrlTitle": "OpenAI-kompatibel bas URL",
"baseUrlBody": "OpenAI-leverantören accepterar en egen <em>Bas-URL</em> för kompatibla tjänster som <strong>BytePlus / ByteDance (Kimi K2.5)</strong>, <strong>LocalAI</strong>, <strong>LM Studio</strong>, <strong>vLLM</strong>, <strong>Together AI</strong> och <strong>Fireworks AI</strong>, som stöder formatet <code>/v1/chat/completions</code>. Ange URL:en på OpenAI-fliken bredvid API-nyckeln."
},
"anthropic": {
"heading": "Anthropic (Claude)",
"tagline": "Utmärkt för att skriva och översätta. Snabb och ekonomisk.",
"items": [
"API-nyckel: <a>console.anthropic.com/settings/keys</a>",
"Exempel från den medföljande modellistan: <code>claude-haiku-4-5-20251001</code>, <code>claude-sonnet-4-6</code>, <code>claude-opus-4-6</code>.",
"Medföljande rekommendation: <strong><code>claude-haiku-4-5-20251001</code></strong>. Denna exakta version är rekommenderad; de äldre Claude 3.5-posterna finns inte längre i listan."
]
},
"gemini": {
"heading": "Google Gemini",
"tagline": "Gratis nivå tillgänglig, bra kvalitet / priskvot.",
"items": [
"API-nyckel: <a>aistudio.google.com/app/apikey</a>",
"Exempel från den medföljande modellistan: <code>gemini-2.5-flash-lite</code>, <code>gemini-2.5-flash</code>, <code>gemini-3-flash-preview</code>.",
"Rekommenderas: <strong><code>gemini-2.5-flash-lite</code></strong> - flash och flash-lite passerar verifiern konsekvent. Pro-varianterna avvisar <code>thinkingBudget=0</code>-inställningen Monitor använder och är överkill för denna arbetsbelastning."
]
},
"openrouter": {
"heading": "OpenRouter",
"tagline": "Aggregator med tillgång till 100+-modeller med en enda API-nyckel. maximal flexibilitet.",
"items": [
"API-nyckel: <a>openrouter.ai/keys</a>",
"Exempel från den medföljande modellistan: <code>meta-llama/llama-3.3-70b-instruct</code>, <code>meta-llama/llama-3.1-70b-instruct</code>, <code>meta-llama/llama-3.1-8b-instruct</code>, <code>anthropic/claude-haiku-4.5</code>, <code>google/gemini-2.5-flash-lite</code>, <code>openai/gpt-4o-mini</code>, <code>mistralai/mistral-medium-3</code>.",
"Rekommenderas: <strong><code>meta-llama/llama-3.3-70b-instruct</code></strong> - samma modell som Groq-posten men dirigeras genom OpenRouter, vilket innebär en enda nyckel för alla listade modeller."
]
},
"ollama": {
"heading": "Ollama (lokal)",
"tagline": "Använder modeller som din konfigurerade Ollama-server visar. Lokala modeller körs där; Ollamas molnmodeller vidarebefordrar anrop till en molnleverantör. Lokal körning undviker avgifter för ett hostat API men använder egen hårdvara och el.",
"items": [
"Ingen API nyckel. Ställ in <em>Ollama URL</em>-fältet till din server (standard <code>http://localhost:11434</code> eller vilken värd som helst kör din Ollama-instans).",
"Modellerna <strong>filtreras inte.</strong> Monitor läser modeller som hämtats med <code>ollama pull &lt;model&gt;</code>. Listrutan hämtas från <code>GET /api/tags</code> på din Ollama-server.",
"Installation: <a>ollama.com/download</a> — Linux, macOS och Windows. Välj en modell som ryms i RAM och har tillräckligt kontextfönster för loggblocken som sändningsmodulen lägger till."
]
}
},
"models": {
"heading": "Varför dessa specifika modeller",
"intro": "Modellvalen för kommersiella leverantörer använder katalogen <code>verified_ai_models.json</code> och adaptrarnas tillgänglighetskontroller. Adaptrarna översätter den interna begäran <code>system_prompt + user_message + max_tokens</code> till respektive API-format. Katalogen innehåller testade och manuellt tillagda poster; den garanterar varken aktuell kontoåtkomst eller samma verifiering för varje post.",
"consequencesIntro": "Två konsekvenser värt att vara medveten om:",
"consequences": [
"<strong>Den medföljande rekommendationen</strong> är en utgångspunkt för aviseringar. Bedöm språkkvalitet, latens och kostnad för dina händelser och ditt konto; den är ingen allmän modellrankning.",
"<strong>Du kan välja en annan listad modell</strong> efter kvot eller önskemål. Kontrollera tillgängligheten med anslutningstestet; en listning garanterar inte aktuell åtkomst för ditt konto."
],
"ollamaTitle": "Ollama är undantaget",
"ollamaBody": "Ollamas lista filtreras inte av den kommersiella katalogen; den visar serverns modeller. Välj en lokal modell som ryms i RAM och har kontext för loggblocken för lokal körning. Molnmodeller är fortfarande fjärrmodeller även via en lokal Ollama-server."
},
"defaultPrompt": {
"heading": "Standardprompt",
"intro": "I läget <em>Standard</em> använder Monitor systemprompten nedan. Före anropet ersätts platshållarna: <code>'{'language'}'</code>, <code>'{'detail_level'}'</code>, <code>'{'emoji_instructions'}'</code>, <code>'{'suggestions_addon'}'</code>. Därefter visas varianter för formaterade och enkla kanaler samt tillägget med AI-förslag.",
"showFullSummary": "Visa hela standardsystemprompten",
"passagesIntro": "Två textvarianter väljs utifrån reglaget <em>Formaterade meddelanden</em> för varje kanal:",
"passages": [
"<strong>Formatering på</strong> → ett block listar tillåtna emoji, kräver att värdnamnsprefixet i rubriken bevaras exakt och visar exempel: start och slutförande av säkerhetskopiering, uppdateringar, VM-start och försämrad hälsa. Det ger emoji i början av meddelanden i Telegram och Discord.",
"<strong>Formatering av</strong> → ett kort block begär vanlig ASCII utan emoji eller Unicode-symboler. Det används för e-post och kanaler där extra formatering stör inkorgsregler eller läsbarhet."
],
"suggestionsPlaceholder": "Och <code>'{'suggestions_addon'}'</code> platshållare är tom om du inte aktiverar AI-förslag (nästa avsnitt), i vilket fall detta block injiceras:",
"showAddonSummary": "Visa tillägget med AI-förslag"
},
"customPrompt": {
"heading": "Anpassat uppmaningsläge",
"intro": "Läget <em>Anpassat</em> ersätter hela standardsystemprompten med din egen text. Den sparas i SQLite-inställningarna och skickas oförändrad vid varje AI-anrop. Då kan du välja en annan ton, struktur eller inriktning.",
"imageAlt": "Egen prompt med textfält för översättningsregler, knappar för export och import samt länk till communitypromptar",
"imageCaption": "Custom Prompt - stor textarea med användarens prompt, plus <em>Export</em>, <em>Import</em> och en länk till gemenskapsgalleriet på GitHub.",
"changesTitle": "Vad som ändras i anpassat läge",
"changes": [
"<strong>Standardprompten ersätts helt.</strong> Proxmox-mappningar, kontextregler och emoji-instruktioner följer inte med. Klistra in dem i din egen prompt om du vill behålla dem. Medföljande <code>EXAMPLE_CUSTOM_PROMPT</code> nedan är en utgångspunkt.",
"<strong>Språkväljaren ignoreras.</strong> Standardprompten har platshållaren <code>'{'language'}'</code>, den egna prompten har det inte. Ange språket i instruktionen, exempelvis ”Översätt till spanska” eller ”Skriv allt på franska”.",
"<strong>Anpassat läge har en fast gräns på 500 token</strong>, oavsett sparad detaljnivå per kanal. Standardläget använder 500 / 1500 / 3000. Att ändra prompten höjer inte gränsen; begär ett kortare svar eller välj en lämplig standardnivå.",
"<strong>Utdatamarkörerna är fortfarande obligatoriska.</strong> Inkludera <code>[TITLE]</code> och <code>[BODY]</code> i svarsformatet. Parsern hämtar innehållet; saknas en markör används originalmallen.",
"<strong>Emoji-regler för formaterade meddelanden läggs inte till automatiskt.</strong> Ange i din egen prompt om emoji ska användas eller undvikas för vanlig text. Reglaget styr bara standardblocken, inte din text."
],
"starterTitle": "Startprompt",
"starterIntro": "Textfältet <em>Egen prompt</em> är förifyllt med ett enkelt exempel som du kan anpassa:",
"showStarterSummary": "Visa exempel på egen prompt",
"shareTitle": "Dela promptar med communityn",
"shareIntro": "<em>Exportera</em> sparar din prompt i en fil (<code>.txt</code> / <code>.md</code>) för säkerhetskopiering eller delning. <em>Importera</em> läser in en fil. Den tredje knappen öppnar det offentliga communitygalleriet på GitHub:",
"shareLinkLabel": "github.com/MacRimi/ProxMenux/discussions — Dela egna promptar för AI-aviseringar",
"shareOutro": "Läs diskussionen för att se andra administratörers promptar: korta larm, utförliga tekniska rapporter och språkvarianter. Dela din egen variant om du är nöjd, gärna med ett stycke om syftet. Återkoppling om vad som fungerar och inte fungerar är också välkommen."
},
"suggestions": {
"heading": "AI-förslag (BETA)",
"intro": "AI-förslag kan lägga till <strong>ett</strong> kort och användbart tips sist i texten. Läget <em>Standard</em>, AI-huvudreglaget och <em>AI-förslag</em> måste vara aktiva. Prompten ber modellen utelämna tipset om orsaken eller lösningen är oklar.",
"formatIntro": "När ett tips läggs till följer det detta exakta format:",
"rulesIntro": "Reglerna bakade i tillägget (synliga i det kollapsbara blocket under standardpromptavsnittet ovan):",
"rules": [
"Tipset tas med <em>endast</em> om loggkontexten eller databasen med kända fel tydligt pekar på en konkret lösning.",
"Prompten begär ett tips under 100 tecken; parsern kontrollerar inte längden separat.",
"Prompten kräver ett konkret kommando eller en sökväg och ber modellen undvika allmänna råd.",
"Om ett känt fel ger en lösning, måste LLM använda den lösningen, inte uppfinna en ny.",
"Prompten ber modellen utelämna tipset om underlaget inte stöder en konkret lösning."
],
"betaTitle": "Varför BETA",
"betaBody": "Tipsens kvalitet beror på modellen och loggkontexten. En modell som Claude 3.5 Haiku, GPT-4.1 Mini eller Llama 3.3 70B med smartctl-data och loggrader kan ge användbara tips. En liten lokal Ollama-modell med en enda händelserad kan ge ett svagt resultat eller inget tips. Stäng av förslagen om de stör och aktivera dem igen när du vill."
},
"detailLevel": {
"heading": "Detaljnivå per kanal",
"intro": "Telegram, Discord, Gotify och e-post har varsin detaljväljare. Tre värden styr gränsen för utdatatoken och instruktionerna i standardprompten:",
"headerLevel": "Nivå",
"headerLabel": "UI-märkning",
"headerCap": "Utdatagräns",
"headerProduce": "Vad prompten ber LLM att skriva",
"rows": [
{
"level": "kortfattad",
"label": "2–3 rader, bara det väsentliga",
"cap": "500 token",
"produce": "\"Vad hände + var\". Inget annat."
},
{
"level": "standard",
"label": "Koncis med grundläggande sammanhang",
"cap": "1500 token",
"produce": "3–6 rader: vad, var, orsak och berörda enheter."
},
{
"level": "detaljerad",
"label": "Fullständiga tekniska detaljer",
"cap": "3000 token",
"produce": "Fullständig rapport: vad, var, orsak, berörda enheter, loggar, SMART-data och historik."
}
],
"defaultsIntro": "Standarder som Monitorn tillämpar på första installationen:",
"defaults": [
"<strong>Telegram, Discord, Gotify</strong> — <code>standard</code>.",
"<strong>E-post</strong> — <code>detailed</code>. E-post är den kanal där du vanligtvis vill ha hela bilden för arkiv."
],
"emailTitle": "Detaljerad e-post lägger till originalet",
"emailBody": "Om AI-formateraren returnerar ett resultat för e-post med <code>detailed</code> och originaltexten är längre än 50 tecken läggs den till efter 40 bindestreck och <code>Original message:</code>. Det bevarar detaljer för senare sökningar. När AI hoppas över eller misslyckas kan bara originalmallen skickas."
},
"language": {
"heading": "Språk",
"intro": "Gränssnittets väljare erbjuder tretton språk. Den sparar <code>ai_language</code>, som standardprompten använder i <em>\"translate alerts into '{'language'}'\"</em>. Listan:",
"list": "Engelska (<code>en</code>), slovakiska (<code>sk</code>), spanska (<code>es</code>), franska (<code>fr</code>), tyska (<code>de</code>), portugisiska (<code>pt</code>), italienska (<code>it</code>), ryska (<code>ru</code>), svenska (<code>sv</code>), norska (<code>no</code>), japanska (<code>ja</code>), kinesiska (<code>zh</code>), nederländska (<code>nl</code>).",
"rulesIntro": "Två viktiga regler som tagits direkt från prompten:",
"rules": [
"<strong>Översätt</strong>: etiketter, beskrivningar, statusord och enheter, exempelvis GB → Go på franska.",
"<strong>Översätt inte</strong>: värdnamn, IP-adresser, sökvägar, VM/CT-ID:n, enhetsnamn som <code>/dev/sdX</code> och tekniska identifierare. De bevaras exakt oavsett språk."
],
"customNote": "Egen prompt <strong>använder inte språkväljaren</strong>. Ange önskat utdataspråk direkt i din prompt."
},
"templates": {
"heading": "En anteckning på mallar",
"body1": "AI får färdig malltext, inte rå händelsedata. Typer som <code>vm_start</code>, <code>auth_fail</code> och <code>health_degraded</code> har mallar i <code>notification_templates.py</code>. AI skriver om lämpliga mallutdata; <code>backup_complete</code> och <code>backup_fail</code> behåller deterministiska rapporter utan AI.",
"body2": "Två praktiska konsekvenser: AI ser aldrig ett värdnamn eller VMID det måste uppfinna - dessa fält placeras av mallen innan omskrivningen. Och om AI är inaktiverad är den mallade kroppen det som skickas direkt. <link>Notifications</link>-sidan dokumenterar sändningspipeline i sin helhet och är rätt korsreferens för allt som händer en händelse innan det når detta lager."
},
"privacy": {
"heading": "Integritet och dataflöde",
"intro": "Med AI-omskrivning aktiverad skickar Monitor malltext och berikade kontextblock till leverantören. Det kan innehålla värdnamn, IP-adresser, användarnamn, enhetssökvägar, loggrader och SMART-attribut för berörd enhet. Om uppgifterna lämnar värden beror på leverantören:",
"headerProvider": "Leverantör",
"headerDestination": "Datadestination",
"rows": [
{
"provider": "Ollama",
"destination": "Lokala modeller körs på den konfigurerade Ollama-värden. Är det själva Proxmox-noden stannar deras anrop där. Ollamas molnmodeller skickar anrop utanför värden även via en lokal Ollama-server."
},
{
"provider": "OpenAI",
"destination": "<code>api.openai.com</code> som standard eller en egen bas-URL. Den faktiska endpointoperatörens datapolicy gäller."
},
{
"provider": "Anthropic",
"destination": "<code>api.anthropic.com</code>."
},
{
"provider": "Google Gemini",
"destination": "<code>generativelanguage.googleapis.com</code>."
},
{
"provider": "Groq",
"destination": "<code>api.groq.com</code>."
},
{
"provider": "OpenRouter",
"destination": "<code>openrouter.ai</code> vidarebefordrar till modellleverantören som valts i fältet <code>model</code>. Två steg i stället för ett."
}
],
"calloutTitle": "Om händelseinnehåll inte kan lämna nätverket",
"calloutBody": "Använd en lokalt hostad endpoint med lokal modell, som lokal Ollama eller en OpenAI-kompatibel server, eller stäng av AI. Ollamas molnmodeller behandlar inte data lokalt. Sändningsmodulen anonymiserar inte värdnamn eller IP-adresser; prompten byggs av händelsens verkliga innehåll."
},
"whereNext": {
"heading": "Gå vidare",
"items": [
{
"label": "Aviseringar",
"href": "/docs/monitor/notifications",
"tail": " — sändningsflödet, kanaler, händelsereglage och PVE-webhookintegrationen kring denna del."
},
{
"label": "Hälsoövervakare",
"href": "/docs/monitor/health-monitor",
"tail": " — den största enskilda källan till händelser som AI skriver om, med egna undertryckningstider per kategori."
},
{
"label": "Arkitektur",
"href": "/docs/monitor/architecture",
"tail": " - där AI Enhancer passar in i den bredare övervakningsprocessen (det är en modul, inte en separat tjänst)."
}
],
"communityLabel": "Communitypromptar på GitHub",
"communityTail": " — Bläddra, dela, fråga."
}
}
@@ -0,0 +1,760 @@
{
"meta": {
"title": "Proxmox Monitor-API — Integrationsreferens | ProxMenux",
"description": "HTTP-slutpunkter i ProxMenux Monitor för Home Assistant, Homepage, Grafana, Prometheus, n8n och egna paneler. Läs status och anropa dokumenterade åtgärder: VM-styrning, säkerhetskopiering, aviseringar och bekräftelse av varningar.",
"ogTitle": "Proxmox Monitor-API — Integrationsreferens",
"ogDescription": "ProxMenux Monitor-slutpunkter för Home Assistant, Homepage, Grafana, Prometheus, n8n och egna paneler.",
"twitterTitle": "Proxmox Monitor-API | ProxMenux",
"twitterDescription": "Slutpunkter för Home Assistant, Homepage, Grafana, Prometheus, n8n och egna paneler."
},
"header": {
"title": "API-referens",
"description": "HTTP-slutpunkter för att läsa status och anropa dokumenterade åtgärder: Home Assistant-sensorer, Homepage-kort, Grafana-paneler, Prometheus-insamling, n8n-flöden och egna skript. Med kategorier, exporterade mätvärden och curl-exempel.",
"section": "ProxMenux Monitor"
},
"intro": {
"title": "Vad sidan används till",
"body": "Sidan samlar slutpunkter för integrationer: dataläsning, start av säkerhetskopiering, egna aviseringar och bekräftelse av varningar. API:t körs i panelens Flask-process på TCP <strong>8008</strong>. Bindningsadress och TLS beskrivs i <link>Åtkomst och autentisering</link>."
},
"headerEndpoint": "Slutpunkt",
"headerMethod": "Metod",
"headerUse": "Användning",
"auth": {
"heading": "Autentisering",
"intro": "När autentisering är på väntar skyddade slutpunkter ett JWT Bearer-token i begärans header:",
"tokensIntro": "Två sätt att få token:",
"items": [
"<strong>API-token, rekommenderade för integrationer.</strong> Giltiga i 365 dagar, skapade under <strong>Säkerhet → API-token</strong>. De namnges och kan återkallas var för sig. Använd read_only för data och full_admin bara för nödvändiga administrationsåtgärder.",
"<strong>Inloggning, JWT i 24 timmar.</strong> <code>POST /api/auth/login</code> med användarnamn, lösenord och TOTP när 2FA kräver det. JWT:t går ut efter 24 timmar; skript måste då autentisera igen."
],
"flowLink": "Inloggning, lösenord, 2FA, granskningslogg och TLS beskrivs i <link>Åtkomst och autentisering</link>.",
"rows": [
{
"endpoint": "/api/auth/login",
"method": "POST",
"use": "Fält i begäran (schema): <code>'{'\"username\",\"password\",\"totp_token?\"'}'</code>. Returnerar ett JWT för 24 timmar."
},
{
"endpoint": "/api/auth/api-tokens",
"method": "GET",
"use": "Lista API tokens (endast metadata - namn, prefix, datum; aldrig den faktiska hemligheten)."
},
{
"endpoint": "/api/auth/generate-api-token",
"method": "POST",
"use": "Skapar ett API-token för 365 dagar i en autentiserad session. Fält: <code>password, token_name?, totp_token?, scope?</code>. Lösenord och krävd TOTP kontrolleras igen. scope är read_only som standard; full_admin måste väljas uttryckligen. Hemligheten returneras bara en gång."
},
{
"endpoint": "/api/auth/api-tokens/<id>",
"method": "DELETE",
"use": "Återkalla en specifik API token av dess ID."
}
]
},
"conventions": {
"heading": "Konventioner",
"items": [
"De flesta använder JSON. Nedladdningar kan ge vanlig text; <code>/api/prometheus</code> använder Prometheus textformat 0.0.4 i stället för OpenMetrics. Kontrollera svarstypen för den aktuella slutpunkten.",
"Många skrivningar returnerar <code>'{'\"success\": true, ...'}'</code>. Felformat varierar; ett vanligt format är <code>'{'\"success\": false, \"error\": \"'<'reason'>'\"'}'</code>. Kontrollera HTTP-status och fält: vissa autentiseringsutmaningar använder HTTP 200 med success false.",
"Frågeparametrar varierar per slutpunkt. Använd <code>limit</code>, <code>offset</code>, <code>since</code> och kategorifilter bara där de stöds.",
"Tidsformat varierar: Unix-tidsstämplar, ISO-8601-strängar och systemd-datum förekommer. Anta inte samma enhet eller uttrycklig tidszon för alla fält."
]
},
"system": {
"heading": "System & hårdvara",
"rows": [
{
"endpoint": "/api/system",
"method": "GET",
"use": "Aktuella värden för CPU, minne, swap, drifttid och belastning."
},
{
"endpoint": "/api/info",
"method": "GET",
"use": "Statisk värdinformation: värdnamn, kärna, PVE-version, CPU-modell och distribution."
},
{
"endpoint": "/api/system-info",
"method": "GET",
"use": "Utökade systemdata för panelens sidhuvud: övergripande mätvärden och starttid."
},
{
"endpoint": "/api/hardware",
"method": "GET",
"use": "Detaljerad maskinvaruinventering: PCI-enheter, GPU:er och sensorer."
},
{
"endpoint": "/api/hardware/live",
"method": "GET",
"use": "Aktuella värden från sensorer som ändras snabbt."
},
{
"endpoint": "/api/temperature/history",
"method": "GET",
"use": "Tidsserier för CPU- och kapslingstemperatur."
},
{
"endpoint": "/api/gpu/<slot>/realtime",
"method": "GET",
"use": "Aktuella GPU-mätvärden för NVIDIA, Intel och AMD per PCI-plats."
}
]
},
"actions": {
"heading": "Systemåtgärder",
"intro": "Dessa asynkrona systemåtgärder körs i tillfälliga systemd-enheter. Med autentisering på kräver skrivningar <code>full_admin</code>; <code>read_only</code> kan läsa <code>.../status</code>. Godkänd start ger HTTP 202 och status; läs <code>.../status</code> för förloppet. Gäststyrning och säkerhetskopiering har andra svar som beskrivs nedan.",
"shapeTitle": "Vanlig svarsform",
"shapeIntro": "Asynkrona systemåtgärder delar JSON-statusobjektet nedan. Gäststyrning och säkerhetskopiering har andra format:",
"shapeCode": "{\n \"unit\": \"proxmenux-action-pve-update.service\",\n \"state\": \"idle | running | success | failed | cancelled\",\n \"started_at\": \"Sat 2026-08-01 11:01:32 CEST\",\n \"finished_at\": null,\n \"exit_code\": null,\n \"result\": null\n}",
"concurrencyTitle": "Samtidig körning och avbrott",
"concurrencyBody": "En ny start av samma aktiva åtgärd ger HTTP 409. Avbrott finns bara med dokumenterad DELETE-slutpunkt, som för PVE-uppdatering. Status blir <code>cancelled</code> med bevarade tidsstämplar. Slutstatus ligger i processminnet och kan försvinna när Monitor startas om.",
"rows": [
{
"endpoint": "/api/system/power/reboot",
"method": "POST",
"use": "Startar om Proxmox-värden. HTTP-anslutningen kan stängas när systemd börjar avstängningen."
},
{
"endpoint": "/api/system/power/reboot/status",
"method": "GET",
"use": "Status för aktuell eller senaste omstart."
},
{
"endpoint": "/api/system/power/shutdown",
"method": "POST",
"use": "Stänger av Proxmox-värden, exempelvis som svar på en avstängningssignal från UPS."
},
{
"endpoint": "/api/system/power/shutdown/status",
"method": "GET",
"use": "Status för aktuell eller senaste avstängning."
},
{
"endpoint": "/api/system/pve-update/run",
"method": "POST",
"use": "Startar samma PVE-uppdatering som Uppdatera nu i Health Monitor och skalmenyn; anropar update-pve-safe.sh."
},
{
"endpoint": "/api/system/pve-update/status",
"method": "GET",
"use": "Status för aktuell eller senaste PVE-uppdatering."
},
{
"endpoint": "/api/system/pve-update",
"method": "DELETE",
"use": "Avbryter en pågående PVE-uppdatering med SIGTERM."
},
{
"endpoint": "/api/proxmenux/self-update/run",
"method": "POST",
"use": "Uppdaterar ProxMenux med installationsprogrammet för vald stabil- eller betakanal. En egen systemd-enhet låter jobbet fortsätta när installationsprogrammet startar om proxmenux-monitor."
},
{
"endpoint": "/api/proxmenux/self-update/status",
"method": "GET",
"use": "Status för aktuell eller senaste ProxMenux-uppdatering."
},
{
"endpoint": "/api/vms/<vmid>/control",
"method": "POST",
"use": "Skickar en styrorder för VM eller LXC. Fältet <code>action</code> accepterar <code>start</code>, <code>stop</code>, <code>shutdown</code> eller <code>reboot</code>. Ett lyckat svar ger en bekräftad PVE-uppgift, men betyder inte att den är klar. Läs gästens control-task-slutpunkt för resultatet."
},
{
"endpoint": "/api/vms/<vmid>/backup",
"method": "POST",
"use": "Skapar en vzdump-säkerhetskopia av VM eller LXC. Valfria fält att anpassa till lagringen: <code>storage</code> (PVE-mål), <code>mode</code> (<code>snapshot</code>, <code>suspend</code> eller <code>stop</code>), <code>compress</code> (<code>zstd</code>, <code>lzo</code>, <code>gzip</code> eller <code>none</code>), <code>protected</code> (<code>true</code> eller <code>false</code>), <code>notes</code>, <code>notification</code> (<code>auto</code>, <code>always</code>, <code>failure</code> eller <code>never</code>) och <code>pbs_change_detection</code> (<code>default</code>, <code>legacy</code> eller <code>data</code>). Returnerar PVE-uppgiftens UPID."
},
{
"endpoint": "/api/vms/<vmid>/backups",
"method": "GET",
"use": "Lista tidigare säkerhetskopior för en VM eller LXC över alla tillgängliga lager."
}
],
"syncVsAsyncTitle": "Två typer av åtgärder",
"syncVsAsyncBody": "Värdens strömstyrning och uppdateringar använder tillfälliga systemd-enheter med <code>.../status</code>. Bara PVE-uppdatering har här en <code>DELETE</code>-slutpunkt för avbrott. VM/LXC-styrning ger en uppgift att följa; säkerhetskopiering ger ett UPID för ett bakgrundsjobb. Godkännande betyder inte slutförande. Autentisering och behörighet beror på slutpunkten.",
"curlTitle": "curl-exempel",
"curlBody": "Startar en PVE-uppdatering och följer den tills den är klar, som en Home Assistant-automation eller en Ansible-playbook.",
"curlCode": "TOKEN=<your full_admin token>\n\ncurl -sSf -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://<host>:8008/api/system/pve-update/run\n\nwhile true; do\n state=$(curl -sSf -H \"Authorization: Bearer $TOKEN\" \\\n https://<host>:8008/api/system/pve-update/status | jq -r .state)\n [ \"$state\" != \"running\" ] && break\n sleep 30\ndone\necho \"final state: $state\"",
"haTitle": "Exempel för Home Assistant",
"haBody": "En <code>rest</code>-sensor läser status och <code>rest_command</code> startar uppdateringen. Koppla dem till en panelknapp och önskade automationer:",
"haCode": "# configuration.yaml\nsensor:\n - platform: rest\n resource: https://pve.local:8008/api/system/pve-update/status\n name: pve_update_state\n value_template: \"{{ value_json.state }}\"\n scan_interval: 60\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\nrest_command:\n pve_update:\n url: https://pve.local:8008/api/system/pve-update/run\n method: POST\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\n # Start VM 100 (works for LXC too — same endpoint)\n vm_100_start:\n url: https://pve.local:8008/api/vms/100/control\n method: POST\n content_type: 'application/json'\n payload: '{\"action\": \"start\"}'\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\n # Backup VM 100 to the 'pbs-main' storage\n vm_100_backup:\n url: https://pve.local:8008/api/vms/100/backup\n method: POST\n content_type: 'application/json'\n payload: '{\"storage\": \"pbs-main\", \"mode\": \"snapshot\", \"compress\": \"zstd\"}'\n headers:\n Authorization: \"Bearer !secret proxmenux_token\""
},
"health": {
"heading": "Hälsoövervakare",
"rows": [
{
"endpoint": "/api/health",
"method": "GET",
"use": "Lätt kontroll som ger JSON med <code>status</code>, <code>timestamp</code> och <code>version</code>. Lämplig för nyckelordskontroll i Uptime Kuma; med autentisering på måste klienten skicka Bearer-headern."
},
{
"endpoint": "/api/health/status",
"method": "GET",
"use": "Övergripande status: en allvarlighetsgrad och en sammanfattning."
},
{
"endpoint": "/api/health/details",
"method": "GET",
"use": "Alla tio kategorier med status och strukturerade data från varje kontroll."
},
{
"endpoint": "/api/health/full",
"method": "GET",
"use": "Fullständiga data: kategorier, aktiva fel, avfärdade varningar och inställningar för undertryckning. Använder bakgrundsresultat yngre än sex minuter; annars eller vid tvingad uppdatering körs en ny kontroll."
},
{
"endpoint": "/api/health/active-errors",
"method": "GET",
"use": "Aktiv lista, filtrerad av <code>?category=&lt;name&gt;</code>."
},
{
"endpoint": "/api/health/dismissed",
"method": "GET",
"use": "Avfärdade varningar med återstående timmar av undertryckning."
},
{
"endpoint": "/api/health/settings",
"method": "GET",
"use": "Konfigurerad tid för undertryckning per kategori."
},
{
"endpoint": "/api/health/remote-storages",
"method": "GET",
"use": "Inventering av fjärrlagring definierad i Proxmox, med tillgänglighetsstatus."
},
{
"endpoint": "/api/health/interfaces",
"method": "GET",
"use": "Nätverksgränssnitt med typ (brygga / bond / fysiskt), IP och länkhastighet."
},
{
"endpoint": "/api/health/acknowledge",
"method": "POST",
"use": "Begärans innehåll: <code>'{'\"error_key\":\"smart_sdh\"'}'</code>. Undertrycker en varning under kategorins inställda tid."
},
{
"endpoint": "/api/health/cleanup-orphans",
"method": "POST",
"use": "Manuell rensning av fel vars underliggande enhet eller VM är borta. Idempotent."
}
],
"outro": "Svarsformat och kategorier beskrivs i <link>Health Monitor</link>."
},
"storage": {
"heading": "Lagring",
"rows": [
{
"endpoint": "/api/storage",
"method": "GET",
"use": "Diskar som är synliga för värden: blockenheter, ZFS-pooler och LVM."
},
{
"endpoint": "/api/storage/summary",
"method": "GET",
"use": "Kompakt sammanfattning som används av instrumentpanelkort."
},
{
"endpoint": "/api/proxmox-storage",
"method": "GET",
"use": "Lagring definierad i <code>/etc/pve/storage.cfg</code>, med tillgänglighetsstatus och ledigt utrymme."
},
{
"endpoint": "/api/storage/observations",
"method": "GET",
"use": "Beständig observationshistorik: SMART-varningar, I/O-fel och ZFS-händelser. Bevaras efter automatisk lösning av varningar."
},
{
"endpoint": "/api/storage/smart/<disk>",
"method": "GET",
"use": "Nuvarande SMART attribut för en disk."
},
{
"endpoint": "/api/storage/smart/<disk>/latest",
"method": "GET",
"use": "Senaste SMART självtest för disken."
},
{
"endpoint": "/api/storage/smart/<disk>/history",
"method": "GET",
"use": "Lista över lagrade SMART-rapporter för disken."
},
{
"endpoint": "/api/storage/smart/<disk>/history/<file>",
"method": "GET",
"use": "Läs en specifik lagrad SMART-rapport."
},
{
"endpoint": "/api/storage/smart/<disk>/test",
"method": "POST",
"use": "Startar ett SMART-självtest. Schema för begäran: <code>'{'\"type\":\"short\"|\"long\"'}'</code>."
},
{
"endpoint": "/api/storage/smart/schedules",
"method": "GET",
"use": "Lista de schemalagda SMART-testerna."
},
{
"endpoint": "/api/storage/smart/tools",
"method": "GET",
"use": "Kontrollerar om <code>smartctl</code> och relaterade verktyg är installerade."
}
]
},
"network": {
"heading": "Nätverk",
"rows": [
{
"endpoint": "/api/network",
"method": "GET",
"use": "Alla gränssnitt med länkstatus och adresser."
},
{
"endpoint": "/api/network/summary",
"method": "GET",
"use": "Kompakt vy för panelen."
},
{
"endpoint": "/api/network/<iface>/metrics",
"method": "GET",
"use": "RX/TX per gränssnitt, felräknare och RRD-tidsserier."
},
{
"endpoint": "/api/network/latency/current",
"method": "GET",
"use": "Senaste latensmätning till gatewayen."
},
{
"endpoint": "/api/network/latency/history",
"method": "GET",
"use": "Tidsserie av gateway latens."
}
]
},
"vms": {
"heading": "VM och containrar",
"rows": [
{
"endpoint": "/api/vms",
"method": "GET",
"use": "VM och CT på den lokala noden med status, vmid och namn."
},
{
"endpoint": "/api/vms/<vmid>",
"method": "GET",
"use": "Full detalj för en gäst (konfig, nätverk, diskar)."
},
{
"endpoint": "/api/vms/<vmid>/metrics",
"method": "GET",
"use": "CPU / minne / disk I / O tidsserie för en gäst (RRD)."
},
{
"endpoint": "/api/vms/<vmid>/logs",
"method": "GET",
"use": "Loggar för gästens senaste uppgifter."
},
{
"endpoint": "/api/vms/<vmid>/backups",
"method": "GET",
"use": "Säkerhetskopior som sparats för den här gästen."
},
{
"endpoint": "/api/vms/<vmid>/control",
"method": "POST",
"use": "Välj en åtgärd i schemat: <code>'{'\"action\":\"start|stop|reboot|shutdown\"'}'</code>. Styr gästens strömtillstånd."
},
{
"endpoint": "/api/vms/<vmid>/backup",
"method": "POST",
"use": "Startar <code>vzdump</code> för gästen. Innehållet väljer lagring och läge (<code>snapshot</code> / <code>suspend</code> / <code>stop</code>)."
},
{
"endpoint": "/api/vms/<vmid>/config",
"method": "PUT",
"use": "Uppdatera beskrivningsfältet (noter) av en VM / CT. Andra konfignycklar är inte modifierbara från denna slutpunkt."
},
{
"endpoint": "/api/node/metrics",
"method": "GET",
"use": "Aggregerade nodmätvärden som RRD-tidsserier."
}
]
},
"backups": {
"heading": "Säkerhetskopieringar",
"rows": [
{
"endpoint": "/api/backups",
"method": "GET",
"use": "Säkerhetskopior i dir-, NFS-, CIFS- och PBS-lagring som frågas via den lokala noden. Ingen fullständig genomsökning av alla klusternoder."
},
{
"endpoint": "/api/backup-storages",
"method": "GET",
"use": "Lagring markerad som mål för säkerhetskopiering, med ledigt utrymme."
}
]
},
"logs": {
"heading": "Loggar, uppgifter, händelser",
"rows": [
{
"endpoint": "/api/logs",
"method": "GET",
"use": "Filtrerade journalposter. Query: <code>?level=&service=&limit=</code>"
},
{
"endpoint": "/api/logs/download",
"method": "GET",
"use": "Exporterar det filtrerade intervallet som vanlig text."
},
{
"endpoint": "/api/events",
"method": "GET",
"use": "Intern händelseström - samma som matar meddelanden."
},
{
"endpoint": "/api/task-log/<upid>",
"method": "GET",
"use": "Fullständig logg i vanlig text för en Proxmox-uppgift identifierad med UPID."
}
]
},
"notifications": {
"heading": "Aviseringar och AI",
"intro": "Sändning, kanaler och AI-omformulering beskrivs i <notifLink>Aviseringar</notifLink> och <aiLink>AI-assistent</aiLink>.",
"rows": [
{
"endpoint": "/api/notifications",
"method": "GET",
"use": "Senaste aviseringar som visas på panelen."
},
{
"endpoint": "/api/notifications/download",
"method": "GET",
"use": "Exporterar aviseringar som text."
},
{
"endpoint": "/api/notifications/status",
"method": "GET",
"use": "Sändningsstatus: aktiv bakgrundsprocess, kölängd och senaste sändning."
},
{
"endpoint": "/api/notifications/settings",
"method": "GET",
"use": "Läser aviseringsinställningar: kanaler, händelsereglage, AI-omformulering och visningsnamn."
},
{
"endpoint": "/api/notifications/history",
"method": "GET",
"use": "Sändningshistorik. Parametrar: <code>?limit=&offset=&severity=&channel=</code>."
},
{
"endpoint": "/api/notifications/history",
"method": "DELETE",
"use": "Tömmer tabellen för sändningshistorik."
},
{
"endpoint": "/api/notifications/test",
"method": "POST",
"use": "Skickar en testavisering till en kanal. Begärans innehåll: <code>'{'\"channel\":\"telegram\"'}'</code>."
},
{
"endpoint": "/api/notifications/send",
"method": "POST",
"use": "Skapar en egen händelse. Begärans innehåll: <code>'{'\"event_type\":\"custom\",\"severity\":\"WARNING\",\"title\":\"...\",\"body\":\"...\",\"data\":'{''}''}'</code>."
},
{
"endpoint": "/api/notifications/test-ai",
"method": "POST",
"use": "Testar anslutningen till AI-leverantören. Fält i begäran (schema): <code>'{'\"provider\",\"api_key\",\"model\",\"ollama_url?\"'}'</code>."
},
{
"endpoint": "/api/notifications/provider-models",
"method": "POST",
"use": "Lista tillgängliga modeller för den valda AI-leverantören."
},
{
"endpoint": "/api/notifications/proxmox/setup-webhook",
"method": "POST",
"use": "Registrera Monitor som ett webhook-mål i <code>/etc/pve/notifications.cfg</code>."
},
{
"endpoint": "/api/notifications/proxmox/cleanup-webhook",
"method": "POST",
"use": "Tar bort Monitor-målet från PVE:s aviseringsinställningar."
},
{
"endpoint": "/api/notifications/proxmox/read-cfg",
"method": "GET",
"use": "Läs PVE: s nuvarande <code>notifications.cfg</code> som PVE ser det."
}
]
},
"security": {
"heading": "Säkerhet (läs)",
"rows": [
{
"endpoint": "/api/security/firewall/status",
"method": "GET",
"use": "PVE brandvägg och aktiva regler."
},
{
"endpoint": "/api/security/fail2ban/details",
"method": "GET",
"use": "Status för Fail2Ban-jail; kräver att den valfria komponenten är installerad."
},
{
"endpoint": "/api/security/fail2ban/activity",
"method": "GET",
"use": "Senaste Fail2Ban-händelser: blockeringar, hävda blockeringar och jailstarter."
},
{
"endpoint": "/api/security/lynis/status",
"method": "GET",
"use": "Lynis-status: installation och tidpunkt för senaste kontroll."
},
{
"endpoint": "/api/security/lynis/report",
"method": "GET",
"use": "Senaste Lynis-rapport: varningar, förslag och härdningsindex."
},
{
"endpoint": "/api/security/tools",
"method": "GET",
"use": "Upptäck vilka valfria säkerhetsverktyg (Fail2Ban, Lynis) som är installerade."
}
]
},
"proxmenuxIntegration": {
"heading": "ProxMenux-integration",
"rows": [
{
"endpoint": "/api/proxmenux/update-status",
"method": "GET",
"use": "Tillgänglig ProxMenux Monitor-uppdatering samt installerad och senaste version."
},
{
"endpoint": "/api/proxmenux/installed-tools",
"method": "GET",
"use": "Lista över varje ProxMenux efterinstallationsoptimering som för närvarande är registrerad på värden (från <code>/usr/local/share/proxmenux/installed_tools.json</code>)."
},
{
"endpoint": "/api/proxmenux/tool-source/<key>",
"method": "GET",
"use": "Källkod för den kopplade efterinstallationsfunktionen från aktuella värdskript eller bevarad äldre kod. Ingen garanterad kopia av exakt den kod som ursprungligen kördes."
}
]
},
"prometheus": {
"heading": "Prometheus-mätvärden",
"intro": "Den autentiserade slutpunkten <code>GET /api/prometheus</code> ger Prometheus textformat 0.0.4. Varje mätvärde innehåller <code>node=\"&lt;hostname&gt;\"</code> och en uttrycklig tidsstämpel. Samla med Prometheus eller en kompatibel tidsseriedatabas.",
"exportedTitle": "Exporterade mätvärden",
"headerGroup": "Grupp",
"headerMetric": "Mätvärde",
"headerDesc": "Beskrivning",
"groups": [
{
"group": "System",
"metrics": [
{
"metric": "proxmox_cpu_usage",
"desc": "CPU-användning i procent, typen gauge."
},
{
"metric": "proxmox_memory_total_bytes",
"desc": "Totalt fysiskt minne i byte."
},
{
"metric": "proxmox_memory_used_bytes",
"desc": "Använt minne i byte."
},
{
"metric": "proxmox_memory_usage_percent",
"desc": "Minnesanvändningsprocent."
},
{
"metric": "proxmox_load_average",
"desc": "Genomsnittlig systembelastning. Etikett <code>period=\"1m\" | \"5m\" | \"15m\"</code>."
}
]
},
{
"group": "Drifttid",
"metrics": [
{
"metric": "proxmox_uptime_seconds",
"desc": "Sekunder sedan senaste start."
}
]
},
{
"group": "Hårdvara",
"metrics": [
{
"metric": "proxmox_cpu_temperature_celsius",
"desc": "CPU:ns kapslingstemperatur."
},
{
"metric": "proxmox_disk_temperature_celsius",
"desc": "Temperatur per disk. Etikett <code>disk</code>."
},
{
"metric": "proxmox_fan_speed_rpm",
"desc": "Fläkthastigheter. Etikett <code>fan</code>."
}
]
},
{
"group": "Diskutrymme",
"metrics": [
{
"metric": "proxmox_disk_total_bytes",
"desc": "Total kapacitet per exporterad diskpost. Etikett <code>disk</code>."
},
{
"metric": "proxmox_disk_used_bytes",
"desc": "Använd kapacitet per exporterad diskpost."
},
{
"metric": "proxmox_disk_usage_percent",
"desc": "Använd kapacitet i procent per exporterad diskpost."
}
]
},
{
"group": "Nätverk",
"metrics": [
{
"metric": "proxmox_network_bytes_sent_total",
"desc": "Totalt antal skickade byte, typen counter."
},
{
"metric": "proxmox_network_bytes_received_total",
"desc": "Totalt antal mottagna byte, typen counter."
},
{
"metric": "proxmox_interface_bytes_sent_total",
"desc": "Skickade byte per gränssnitt. Etikett <code>interface</code>."
},
{
"metric": "proxmox_interface_bytes_received_total",
"desc": "Mottagna byte per gränssnitt."
}
]
},
{
"group": "VMs / CTs",
"metrics": [
{
"metric": "proxmox_vms_total",
"desc": "Totalt antal VM och LXC."
},
{
"metric": "proxmox_vms_running",
"desc": "Antal körande gäster."
},
{
"metric": "proxmox_vms_stopped",
"desc": "Antal stoppade gäster."
},
{
"metric": "proxmox_vm_status",
"desc": "Status per VM/CT: 1 körs, 0 annars. Etiketter <code>node</code>, <code>vmid</code> och <code>name</code>."
},
{
"metric": "proxmox_vm_cpu_usage",
"desc": "CPU-användning per VM/CT, med samma etiketter."
},
{
"metric": "proxmox_vm_memory_used_bytes / _max_bytes",
"desc": "Använt minne och konfigurerat maximum per VM/CT."
}
]
},
{
"group": "GPU",
"metrics": [
{
"metric": "proxmox_gpu_temperature_celsius",
"desc": "GPU-temperatur. Etiketter <code>slot</code> och <code>vendor</code>; gpu innehåller även GPU-namnet."
},
{
"metric": "proxmox_gpu_utilization_percent",
"desc": "GPU-användning i procent."
},
{
"metric": "proxmox_gpu_memory_total_bytes",
"desc": "Totalt GPU-minne."
},
{
"metric": "proxmox_gpu_power_draw_watts",
"desc": "GPU:ns effektförbrukning i watt."
},
{
"metric": "proxmox_gpu_clock_speed_mhz",
"desc": "GPU:ns kärnklockfrekvens."
},
{
"metric": "proxmox_gpu_memory_clock_mhz",
"desc": "GPU:ns minnesklockfrekvens."
}
]
},
{
"group": "UPS",
"metrics": [
{
"metric": "proxmox_ups_battery_charge_percent",
"desc": "Batteriets laddning i procent."
},
{
"metric": "proxmox_ups_load_percent",
"desc": "Nuvarande belastning på UPS."
},
{
"metric": "proxmox_ups_runtime_seconds",
"desc": "Beräknad drifttid på batteri."
},
{
"metric": "proxmox_ups_input_voltage_volts",
"desc": "Ingångsspänning"
}
]
}
],
"scrapeTitle": "Insamlingskonfiguration för Prometheus",
"scrapeIntro": "Med autentisering på anger du ett API-token i Bearer-headern för Prometheus insamlingskonfiguration:",
"perHostTitle": "Insamling per värd",
"perHostBody": "Varje instans exporterar mätvärden för sin egen värd. Låt Prometheus samla från varje nod i ett kluster. Etiketten <code>node</code> skiljer serierna i Grafana (<code>proxmox_vms_running'{'node=\"pve01\"'}'</code>)."
},
"puttingItTogether": {
"heading": "Kombinera integrationerna",
"body": "Se <link>Integrationer</link> för att ansluta slutpunkterna till Home Assistant-sensorer, Homepage-kort, Grafana-paneler, n8n-flöden och fler verktyg. Där finns vanliga konfigurationer att kopiera. Den här sidan samlar slutpunktskatalogen."
},
"whereNext": {
"heading": "Gå vidare",
"items": [
{
"label": "Åtkomst och autentisering",
"href": "/docs/monitor/access-auth",
"tail": " — skapande av token, granskningslogg, valfri Fail2Ban-jail och TLS."
},
{
"label": "Aviseringar",
"href": "/docs/monitor/notifications",
"tailRich": " — innehåll i <code>data</code> per händelsetyp vid anrop till <code>/api/notifications/send</code>."
},
{
"label": "AI-assistent",
"href": "/docs/monitor/ai-assistant",
"tailRich": " — hur <code>/api/notifications/test-ai</code> och <code>/api/notifications/provider-models</code> fungerar."
},
{
"label": "Hälsoövervakare",
"href": "/docs/monitor/health-monitor",
"tailRich": " — svarsformat för <code>/api/health/*</code> och betydelsen av de tio kategorierna."
}
]
}
}
@@ -0,0 +1,303 @@
{
"meta": {
"title": "Arkitektur för ProxMenux Monitor — AppImage, Flask, SQLite, WebSocket | ProxMenux",
"description": "ProxMenux Monitors uppbyggnad: AppImage-struktur, Flask-blueprints, bakgrundsuppgifter, data från psutil, pvesh, smartctl och journalctl, SQLite-lagring, WebSocket-terminal, AI-leverantörer, aviseringskanaler, omvänd proxy och valfri Fail2Ban.",
"ogTitle": "ProxMenux Monitor Arkitektur",
"ogDescription": "Inuti ProxMenux Monitor: AppImage, Flask-blueprints, bakgrundsuppgifter, SQLite, WebSocket, AI-leverantörer och aviseringskanaler.",
"twitterTitle": "ProxMenux Monitor Arkitektur",
"twitterDescription": "AppImage, Flask, SQLite, WebSocket, AI-leverantörer och meddelandekanaler - inuti Monitorn."
},
"header": {
"title": "Arkitektur",
"description": "Hur ProxMenux Monitor distribueras, vad AppImage innehåller och hur webbläsarens begäranden går genom Flask till värdens verktyg och SQLite-lagring.",
"section": "ProxMenux Monitor"
},
"intro": {
"title": "En process, många ansvar",
"body": "En Python-process lyssnar på TCP 8008. Den serverar den statiska Next.js-versionen, exponerar REST-API:t, hanterar WebSocket-terminalen, kör Health Monitor och skickar aviseringar. Separat webbserver, meddelandemäklare eller extern databas krävs inte."
},
"requestFlow": {
"heading": "En begärans väg",
"intro": "En typisk databegäran följer denna väg; webbläsarinställningar kan hanteras lokalt:",
"diagramCaption": "Skyddade slutpunkter validerar JWT när autentisering är på. Kärnrutter och blueprints returnerar cachade eller nyinsamlade värddata. Den valfria Fail2Ban-kontrollen använder sin cachade blockeringslista. Vidarebefordrade IP-headers betros bara med PROXMENUX_TRUST_PROXY=1; annars används motpartens adress. Beständigt tillstånd finns i SQLite och JSON-filer som auth.json.",
"diagramArrowLabel": "HTTP / WS",
"nodes": {
"clientLabel": "Klient",
"clientDetail": "Webbläsare eller PWA\n+ valfri proxy\nNginx / Caddy /\nTraefik",
"flaskLabel": "Flask :8008",
"flaskDetail": "Blueprints\nJWT-middleware\nFail2Ban-kontroll\n(om installerad)",
"hostLabel": "Värdverktyg",
"hostDetail": "psutil\npvesh\nsmartctl\njournalctl",
"stateLabel": "Lokalt tillstånd",
"stateDetail": "SQLite DB\n+ auth.json"
},
"threadsIntro": "Processen kör även <strong>bakgrundstrådar</strong>. Exemplen samlar data, uppdaterar cache och SQLite och skickar aviseringar. Fler uppgifter finns; sändning beror på att den är aktiverad:",
"headerThread": "Tråd",
"headerCadence": "Intervall",
"headerJob": "Jobb",
"rows": [
{
"thread": "_temperature_collector_loop",
"cadence": "60 s",
"job": "Sparar CPU-temperatur och latensmätningar i historikdatabasen, så att grafer får data även utan ansluten webbläsare."
},
{
"thread": "_health_collector_loop",
"cadence": "5 min",
"job": "Kör Health Monitor-cykeln med tio kategorier, sparar fel och diskobservationer, hanterar avfärdanden och skickar nya händelser till aviseringsmotorn."
},
{
"thread": "_vital_signs_sampler",
"cadence": "CPU 5 s; temperatur 15 s; minne 30 s",
"job": "Samplar CPU-användning, minne och CPU-temperatur för aktuella indikatorer och varaktiga tillstånd, oberoende av femminuterskontrollen."
},
{
"thread": "notification_manager.start()",
"cadence": "Händelsestyrt",
"job": "Startar bevakare för journal, uppgifter och hookar (<code>JournalWatcher</code>, <code>TaskWatcher</code>, <code>ProxmoxHookWatcher</code>) och skickar till konfigurerade kanaler med valfri AI-omformulering."
}
]
},
"systemd": {
"heading": "systemd-enhet",
"intro": "Installationsprogrammet skapar enheten <code>/etc/systemd/system/proxmenux-monitor.service</code>. Standardkonfiguration:",
"items": [
"<strong><code>User=root</code></strong>: tjänsten använder root-behörighet för SMART, <code>pvesh</code> och ZFS-hantering. Webbterminalens processer ärver behörigheten.",
"<strong><code>Restart=on-failure</code></strong> med tio sekunders väntan: tjänsten startas om automatiskt efter ett fel.",
"<strong><code>After=network.target</code></strong>: ordnar start efter målet; garanterar inte tilldelad IP, DNS eller extern anslutning."
],
"inspectTitle": "Granska aktuell enhet"
},
"appimage": {
"heading": "Vad AppImage innehåller",
"intro": "AppImage innehåller ett filsystem som monteras vid körning. <code>AppRun</code> i roten ställer in miljön och startar <code>flask_server.py</code>:",
"consequencesIntro": "Två konsekvenser av denna layout:",
"consequences": [
"<strong>Medföljande Python-miljö.</strong> Tolken och paketen finns i AppImage utan installation i värdens system-Python. Appen använder fortfarande kärngränssnitt och externa värdverktyg.",
"<strong>Maskinvaruklienter ingår.</strong> Här finns <code>ipmitool</code>, <code>lm-sensors</code> och <code>upsc</code>. Mätningar kräver maskinvarustöd, sensoråtkomst och för UPS en konfigurerad NUT-server."
]
},
"flask": {
"heading": "Flask-appens struktur",
"intro": "<code>flask_server.py</code> skapar en <code>Flask(__name__)</code>-instans med begränsat CORS, registrerar nio blueprints direkt och initierar terminalen. Tabellen visar huvudmoduler; även granskning, VM-säkerhetskopiering och PBS registreras. PVE-förladdning körs bara på PVE-värdar.",
"headerBlueprint": "Blueprint / modul",
"headerPrefix": "Ruttprefix",
"headerOwns": "Ansvar",
"rows": [
{
"blueprint": "flask_server.py",
"prefix": [
"/api/system",
"/api/storage",
"/api/network",
"/api/vms",
"/api/hardware",
"/api/logs",
"/api/prometheus"
],
"owns": "Kärnslutpunkter, statisk webb och valfri Fail2Ban-kontroll när jail <code>proxmenux</code> finns på värden."
},
{
"blueprint": "flask_auth_routes.py",
"prefix": [
"/api/auth/*"
],
"owns": "Inloggning, JWT-utfärdande, TOTP-inställning och kontroll, lösenordsbyte och API-token."
},
{
"blueprint": "flask_health_routes.py",
"prefix": [
"/api/health/*"
],
"owns": "Hälsokontroller, detaljerad status, aktiva och avfärdade fel samt undertryckningsinställningar. Skyddade slutpunkter kräver autentisering när den är på."
},
{
"blueprint": "flask_terminal_routes.py",
"prefix": [
"/api/terminal/* + WS"
],
"owns": "Tilldelar ett PTY per session och ansluter det via WebSocket till <code>xterm.js</code> i webbläsaren."
},
{
"blueprint": "flask_notification_routes.py",
"prefix": [
"/api/notifications/*"
],
"owns": "Skapa, läsa, ändra och ta bort kanaler; tester, AI, historik och manuella sändningar."
},
{
"blueprint": "flask_security_routes.py",
"prefix": [
"/api/security/*"
],
"owns": "Inloggningsfel och, med Fail2Ban installerat, jailstatus, blockeringar och manuell avblockering."
},
{
"blueprint": "flask_proxmenux_routes.py",
"prefix": [
"/api/proxmenux/*"
],
"owns": "Läser ProxMenux-optimeringar som registrerats på värden."
},
{
"blueprint": "flask_oci_routes.py",
"prefix": [
"/api/oci/*"
],
"owns": "Funktioner för distribution av OCI- och containerappar på Proxmox VE 9.1+."
}
],
"endpointsLink": "Integrationsslutpunkter och deras format beskrivs i <link>API-referens</link>."
},
"dataSources": {
"heading": "Datakällor",
"intro": "Värddata kommer främst från standardbibliotek, filer och administrationskommandon. Vissa gästdata beror även på QEMU Guest Agent eller kommandon i en CT:",
"headerSource": "Källa",
"headerUsedFor": "Används för",
"rows": [
{
"source": "psutil",
"usedFor": "CPU-belastning, minne, swap, monteringsanvändning, nätverksräknare och processer."
},
{
"source": "pvesh / qm / pct",
"usedFor": "Proxmox-nodinformation, VM/CT-inventering och konfiguration, lagring och uppgiftshistorik."
},
{
"source": "smartctl",
"usedFor": "SATA/NVMe-attribut, SMART-status, slitage, livslängd, modell och serienummer."
},
{
"source": "zpool / zfs",
"usedFor": "Poolstatus (ONLINE / DEGRADED / FAULTED / UNAVAIL), scrubförlopp och datasetanvändning."
},
{
"source": "journalctl",
"usedFor": "Systemloggar, OOM-avslutade processer, ATA/NVMe/dm-fel, säkerhet och egna tjänsteenheter."
},
{
"source": "ip / iproute2",
"usedFor": "Gränssnitt, adresser, bryggor, bond-gränssnitt och OVS-hanterade enheter."
},
{
"source": "nvidia-smi · intel_gpu_top",
"usedFor": "Tillgängliga GPU-data om användning, VRAM, temperatur och kodning/avkodning. Fälten beror på tillverkare, verktyg och drivrutin."
},
{
"source": "lspci · lscpu · dmidecode",
"usedFor": "PCIe-topologi, CPU-modell och topologi samt moderkort och BIOS."
},
{
"source": "ipmitool · sensors",
"usedFor": "Out-of-band-sensorer, fläkthastigheter och moderkortstemperaturer när maskinvaran stöder dem."
},
{
"source": "upsc (NUT)",
"usedFor": "Batteristatus, belastning och återstående drifttid för UPS med konfigurerad NUT-server."
}
],
"cacheTitle": "Cache minskar anrop till värden",
"cacheBody": "Krävande resultat från <code>smartctl -a</code> och <code>pvesh get</code> cachas i Flask-processen för att minska upprepade anrop till diskar och kluster-API. Tiden beror på källan: sekunder för aktuella mätvärden och minuter för SMART."
},
"persistence": {
"heading": "Persistens",
"intro": "Flera tillståndsfiler har olika innehåll och åtkomstkrav:",
"headerPath": "Path",
"headerOwner": "Ägare",
"headerContents": "Innehåll",
"rows": [
{
"path": "/usr/local/share/proxmenux/health_monitor.db",
"owner": "root:root",
"contents": "SQLite-databas. Tabeller: <code>errors</code>, <code>events</code>, <code>disk_registry</code>, <code>disk_observations</code>, <code>user_settings</code>, <code>notification_history</code>, <code>excluded_storages</code>, <code>excluded_interfaces</code>. Journalläge WAL."
},
{
"path": "/usr/local/share/proxmenux/.notification_key",
"owner": "root <code>0600</code>",
"contents": "32-byte huvudnyckel för aviseringshemligheter i ENC2-format. Använder slumpmässigt salt per värde, härledda nycklar och MAC. Äldre XOR-värden stöds för migrering."
},
{
"path": "/root/.config/proxmenux-monitor/auth.json",
"owner": "root:root",
"contents": "Inloggningskonfiguration: aktivering, användarnamn, saltad PBKDF2-HMAC-SHA256-lösenordshash, TOTP-hemlighet, återställningskoder, installationens JWT-nyckel, API-tokenmetadata och återkallningshashar. Äldre SHA-256-hashar migreras vid lyckad inloggning."
},
{
"path": "/var/log/proxmenux-auth.log",
"owner": "root:root",
"contents": "Autentiseringslogg i vanlig text, oberoende av Fail2Ban. Om jail <code>[proxmenux]</code> är installerad och aktiv läser den loggen för att upptäcka upprepade inloggningsfel. Utan jail kan loggen fortfarande granskas."
}
],
"backupTitle": "Säkerhetskopiera auth.json före ominstallation",
"backupBody": "Byte av AppImage bevarar normalt <code>/root/.config/proxmenux-monitor/auth.json</code> och <code>/usr/local/share/proxmenux/health_monitor.db</code>. Bevara <code>auth.json</code> med dess jwt_secret för tokenens giltighet och metadata. Databasen lagrar hälso- och aviseringsstatus separat. Spara <code>.notification_key</code> med den för krypterade kanalinställningar; databasen ensam återställer inte API-autentisering."
},
"health": {
"heading": "Health Monitor-cykeln",
"intro": "Ungefär var femte minut anropar bakgrundsinsamlaren <code>health_monitor.py</code> för kontrollerna i panelens tio kategorier:",
"items": [
"Kritiska PVE-tjänster (<code>pveproxy</code>, <code>pvedaemon</code>, <code>pvestatd</code>, <code>pve-cluster</code>).",
"Proxmox-lagring: <code>pvesh get /storage</code> och tillgänglighet för varje lagring.",
"Diskar och filsystem: SMART, I/O-fel i dmesg, ZFS-status och monteringskapacitet.",
"VM och CT: startfel, krascher, QMP-fel och avstängningsfel.",
"Nätverk: brygg- och bondstatus, länkstatus och latens till gatewayen.",
"Uppdateringar: väntande paket och säkerhetsuppdateringar.",
"Loggar: ihållande mönster, toppar och kaskader i systemjournalen.",
"Minne: OOM-händelser och ihållande minnestryck.",
"Temperatur: CPU- och diskvärden jämförs med övervakningsgränser; tillgängliga sensorer beror på maskinvaran.",
"Säkerhet: inloggningsfel, blockeringar och Fail2Ban-jailstatus."
],
"afterIntro": "Resultat använder stabil <code>error_key</code>, kategori och allvarlighetsgrad. Rader i <code>errors</code> uppdateras med <code>last_seen</code> och räknare utan dubbletter. Aviseringssändning har även egna fingeravtryck och väntetider.",
"cycleEnd": "Rensning kan lösa gamla fel med kategorins <em>tid för undertryckning</em> och statusregler, ta bort övergivna poster för borttagna resurser och radera <code>events</code> äldre än 30 dagar. Kategorierna beskrivs i <link>Panel → Health Monitor</link>."
},
"notifications": {
"heading": "Aviseringsmotor",
"intro": "<code>notification_manager.py</code> samordnar sändning: laddar kanaler, hanterar kön och erbjuder ett Python-API för Flask och Health Monitor samt en CLI-ingång för ProxMenux <code>.sh</code>-hookar.",
"items": [
"<strong>Bevakare</strong> skapar händelser: <code>JournalWatcher</code> följer journalen, <code>TaskWatcher</code> frågar efter Proxmox-uppgifter, <code>ProxmoxHookWatcher</code> tar emot hookar för säkerhetskopiering, replikering och ögonblicksbilder och <code>PollingCollector</code> hanterar långsamma källor.",
"<strong>Mallar</strong> omvandlar händelser till titel och text. Vald AI-leverantör (OpenAI / Anthropic / Gemini / Groq / Ollama / OpenRouter) kan omformulera dem på vanligt språk. Båda versionerna sparas i <code>notification_history</code>.",
"<strong>Kanaler</strong> skickar via tjänster som Telegram, Discord, e-post, Gotify, Pushover och Apprise. Implementationerna i <code>notification_channels.py</code> delar gränssnittet <code>create_channel()</code> / <code>send()</code>.",
"<strong>Kryptering.</strong> Känsliga inställningar (<code>telegram.bot_token</code>, <code>discord.webhook_url</code>, <code>pushover.user_key</code>, <code>pushover.api_token</code>, <code>ai_api_key_*</code>, <code>email.password</code>) krypteras med nyckeln i <code>.notification_key</code> före lagring och maskeras i gränssnittet."
],
"linksFooter": "Händelsereglage, kanalinställningar och AI beskrivs i <notifLink>Inställningar → Aviseringar</notifLink> och <aiLink>Inställningar → AI-assistent</aiLink>."
},
"websocket": {
"heading": "WebSocket-terminal",
"intro": "Fliken <em>Terminal</em> ansluter en lätt <code>xterm.js</code>-klient till ett PTY på servern via WebSocket. Två lägen finns:",
"items": [
"<strong>HTTP-läge, standard:</strong> den inbyggda Flask-servern med <code>flask-sock</code> hanterar byte till WebSocket-protokollet.",
"<strong>HTTPS-/WSS-läge:</strong> använder <code>gevent.pywsgi.WSGIServer</code> med <code>geventwebsocket.handler.WebSocketHandler</code> för WebSocket över TLS."
],
"outro": "Terminalprocesser ärver <code>User=root</code>. Med autentisering på kräver WebSocket en kortlivad engångsbiljett från den autentiserade biljettslutpunkten med administratörsbehörighet. Om autentisering är avstängd eller avböjd följer anslutningen det oautentiserade läget.",
"proxyNote": "Med omvänd proxy måste WebSocket och dess headers <code>Upgrade</code> och <code>Connection</code> vidarebefordras. Terminalen kräver det."
},
"proxy": {
"heading": "Omvänd proxy och Fail2Ban",
"intro": "Val av klient-IP och valfri blockering i appen beror på dessa inställningar och komponenter:",
"items": [
"<strong>Val av klient-IP.</strong> Kontrollen <code>before_request</code> och inloggningsloggen litar på <code>X-Forwarded-For</code> och sedan <code>X-Real-IP</code> bara med PROXMENUX_TRUST_PROXY=1. Annars används <code>request.remote_addr</code>. Vidarebefordrade headers godtas inte automatiskt.",
"<strong>Valfri Fail2Ban-kontroll i appen.</strong> En proxyanslutning kan visa proxyns IP som TCP-motpart. Med betrodd klientadress och aktiv jail <code>proxmenux</code> avvisar Flask blockerade IP-adresser med HTTP 403. Listan cachas i 30 sekunder och förnyas av en begäran efter utgång, utan separat timer."
],
"calloutTitle": "Fail2Ban ingår inte",
"calloutBody": "Fail2Ban ingår <strong>inte</strong> och installeras inte automatiskt. Det kan installeras under Monitors Säkerhet eller <link>Säkerhet → Fail2Ban</link> i ProxMenux Scripts. Utan <code>fail2ban-client</code> eller jail <code>proxmenux</code> blockerar kontrollen inga begäranden. Inställd autentiseringspolicy gäller fortfarande.",
"outro": "Exempel för Nginx/Caddy/Traefik och jailguiden finns i <accessLink>Åtkomst och autentisering</accessLink> och <fail2banLink>Säkerhet → Fail2Ban</fail2banLink>."
},
"whereNext": {
"heading": "Gå vidare",
"items": [
{
"label": "Åtkomst och autentisering",
"href": "/docs/monitor/access-auth",
"tail": " — första start, lösenord och TOTP-2FA, exempel för omvänd proxy och Fail2Ban-jail."
},
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tail": " — integrationsslutpunkter, tokenhantering och autentiseringskonventioner."
},
{
"label": "Inställningar → ProxMenux Monitor",
"href": "/docs/settings/proxmenux-monitor",
"tail": " — tjänstestyrning och statuskontroll i ProxMenux textmeny."
}
]
}
}
@@ -0,0 +1,218 @@
{
"meta": {
"title": "Bedömning och inventering | Granskning och rapporter",
"description": "Bedömning i Granskning och rapporter: rapportprofiler, klassificering av resultat, accepterade risker, oläsbara källor, Lynis och nodens inventering."
},
"header": {
"title": "Bedömning och inventering",
"description": "Bedömningen inspekterar noden, håller sina resultat och svarar på olika frågor beroende på rapportprofilen.",
"section": "Granskning och rapporter"
},
"sections": [
{
"id": "read-only",
"blocks": [
{
"calloutInfo": {
"title": "En bedömning inspekterar; den ändrar inte konfigurationen",
"body": "Den läser värdens konfiguration och tillstånd. Det skriver sina resultat, rapporter och loggar, och startkontrollerna kan montera EFI-systempartitioner för ett ögonblick. Konfigurationen den bedömer är inte modifierad."
}
},
{
"p": "<strong>Kör bedömning</strong> startar en körning med profilen som valts i <strong>Rapport</strong>. Vyn visar datumet för den senaste körningen och hur lång tid som gått."
}
]
},
{
"id": "profiles",
"title": "Rapportprofiler",
"intro": "Varje profil svarar på en annan fråga. Kontrollerna och sektionerna väljs innan dokumentet komponeras.",
"blocks": [
{
"table": {
"headers": [
"Profil",
"Vad det täcker"
],
"rows": [
[
"Fullständig granskning",
"Alla kontroller och all tillgänglig struktur."
],
[
"Snabbdiagnos",
"Varje kontroll; resultatet öppnas med de kritiska resultaten, varningarna och avläsningarna som inte kunde verifieras."
],
[
"Inventering",
"En beskrivning av noden, utan kontroller och ingen klassificering."
],
[
"Säkerhetsgranskning",
"Exponering, åtkomst, privilegier, certifikat, uppdateringar, repositorier och Lynis."
],
[
"Kontroll av säkerhetskopior",
"Täckning, ålder, resultat, verifiering, lagring och återhämtning av säkerhetskopiorna."
],
[
"Kapacitet och slitage",
"Tillväxtmarginal, minne, utrymmesanvändning och diskarnas livslängd."
]
]
}
},
{
"p": "Innehållet i varje dokument beskrivs i <reportsLink>Rapporter och jämförelser</reportsLink>."
}
]
},
{
"id": "results",
"title": "Hur resultat klassificeras",
"blocks": [
{
"table": {
"headers": [
"Klassificering",
"Betydelse"
],
"rows": [
[
"Kritisk",
"Ett misslyckat tillstånd som har prioritet."
],
[
"Varning",
"Ett villkor som behöver en översyn, med tanke på bevisen eller policyn."
],
[
"observation",
"Information om noden som inte rapporteras som ett misslyckande."
],
[
"Ej verifierat",
"Källan som kontrollen behöver kunde inte läsas. Det betyder inte att problemet saknas."
],
[
"Uppfyllt",
"Villkoret möter det kriterium som tillämpas."
],
[
"Ej tillämpligt",
"Inget inom ramen för kontrollen gäller."
],
[
"Accepterad risk",
"Resultatet finns och ett beslut om det har registrerats."
],
[
"Undantagen enligt policy",
"Policyn förklarar att elementet lämnas utanför räkningen."
]
]
}
},
{
"p": "Resultat kan filtreras efter område: System, lagring, nätverk, säkerhet, säkerhetskopiering, gäster och hårdvara. Varje fynd håller sina bevis, med källan det lästes från."
}
]
},
{
"id": "unverified",
"title": "När en källa inte kan läsas",
"blocks": [
{
"table": {
"headers": [
"fall",
"Beteende"
],
"rows": [
[
"Ej verifierat",
"Kontrollen behåller sin identitet, anger i underlaget vilken källa som misslyckades och gör inte saknade data till ett godkänt resultat."
],
[
"Ofullständiga underlag",
"Rapporten anger källa och insamlingstid så att ett verkligt problem kan skiljas från en otillräcklig avläsning."
],
[
"En ny körning",
"När åtkomsten, paketet eller tjänsten korrigeras körs samma profil igen och jämförelsen visar om resultatet kan verifieras."
]
]
}
}
]
},
{
"id": "lynis",
"title": "Lynis",
"blocks": [
{
"p": "Säkerhetsgranskningen använder värdens Lynis-rapport. Om Lynis aldrig har körts eller rapporten är äldre än policyn tillåter erbjuder en dialog <strong>Kör med Lynis</strong>, som tar några minuter extra, eller <strong>Kör utan Lynis</strong>, som använder befintlig rapport."
},
{
"figure": {
"src": "/monitor/audit/lynis-dialog.png",
"alt": "Dialog som erbjuder att köra bedömningen med eller utan Lynis",
"caption": "Lynis-dialogen före en säkerhetsgranskning."
}
}
]
},
{
"id": "accept",
"title": "Acceptera en risk",
"blocks": [
{
"p": "<strong>Acceptera risk</strong> registrerar ett beslut om ett fynd. En motivering krävs och sparas med författare och datum."
},
{
"table": {
"headers": [
"Fält",
"Alternativ"
],
"rows": [
[
"Orsak",
"Fritext, obligatoriskt."
],
[
"Slutar gälla efter",
"90 dagar, 180 dagar, 1 år eller utan utgångsdatum. När perioden löper ut blir fyndet aktivt igen."
],
[
"Påminn mig om att granska",
"En påminnelse som tar beslutet tillbaka till uppmärksamhet medan det är i kraft."
]
]
}
},
{
"p": "Ett accepterat fynd är synligt med beslutet; <strong>Återställ till aktiv</strong> återkallar acceptansen. Att acceptera en risk åtgärdar den inte: jämförelsen visar den som accepterad, inte som löst."
}
]
},
{
"id": "inventory",
"title": "Inventering",
"blocks": [
{
"list": {
"items": [
"Identitet, Proxmox VE version, kärna, abonnemang och kluster.",
"CPU, minne, moderkort, BIOS, styrenheter och IOMMU.",
"Disker, SMART, power-on timmar och inspelade händelser.",
"Adaptrar, bondningar, bryggor, latens och anslutningar.",
"Lagring, gäster med sina diskar och gränssnitt och säkerhetskopior.",
"PCI genomgång och programvaran ProxMenux hanterar."
]
}
}
]
}
]
}
@@ -0,0 +1,208 @@
{
"meta": {
"title": "Ändringar | Granskning och rapporter",
"description": "Ändringslogg i Granskning och rapporter: vad ProxMenux ändrat på värden, tidigare tillstånd, skillnader och om ändringen kan ångras."
},
"header": {
"title": "Ändringar",
"description": "Logg över ProxMenux åtgärder på värden och, när det registrerats, tillståndet före och efter varje åtgärd.",
"section": "Granskning och rapporter"
},
"sections": [
{
"id": "purpose",
"blocks": [
{
"calloutInfo": {
"title": "Från körningen av skriptet till ändringen det gjorde",
"body": "En lång funktion kan ändra bara två rader. Loggen sparar varje konkret åtgärd med ansvarigt skript, funktion och version, berörd resurs, skillnad och om den kan ångras."
}
},
{
"flow": {
"nodes": [
{
"label": "Skript",
"detail": "Funktion + version"
},
{
"label": "Registrering",
"detail": "innehåll före"
},
{
"label": "Åtgärd",
"detail": "fil · paket · service"
},
{
"label": "Logg",
"detail": "attribution + skillnad"
}
],
"caption": "Registreringen görs när åtgärden körs och sammanställs när Monitor läser loggen."
}
},
{
"figure": {
"src": "/monitor/audit/changes-view.png",
"alt": "Vyn Ändringar i Granskning och rapporter med poster grupperade efter efterinstallationsalternativ och skript",
"caption": "Förändringsvyn, med skillnaden i en fil redigerad av ProxMenux."
}
}
]
},
{
"id": "types",
"title": "Typer av poster",
"intro": "Filtret på toppen skiljer posterna efter typ.",
"blocks": [
{
"table": {
"headers": [
"Typ",
"Vad den registrerar"
],
"rows": [
[
"Konfiguration",
"ProxMenux skrev, redigerade eller tog bort en fil, ändrade en inställning eller ändrade en tjänst."
],
[
"Installationer",
"ProxMenux lade till ett paket eller en komponent, och de paket som faktiskt visas registreras."
],
[
"Körningar",
"ProxMenux körde ett kommando; ändringarna beror på kommandot självt."
],
[
"Tillämpat",
"En funktion tillämpades innan loggen fanns; tidigare tillstånd registrerades inte."
]
]
}
}
]
},
{
"id": "groups",
"title": "Hur vyn är organiserad",
"blocks": [
{
"table": {
"headers": [
"Avsnitt",
"Innehåll"
],
"rows": [
[
"Optimeringar efter installation",
"Grupperas av post-install alternativet som användaren valt."
],
[
"ProxMenux-skript",
"GPU, Coral, nätverk, lagring, säkerhet, verktyg och andra instrumenterade skript, inklusive ProxMenux installatör och ProxMenux Monitor."
],
[
"Installerade paket och verktyg",
"Programvara som ProxMenux installerat på värden."
]
]
}
},
{
"p": "<strong>Efter funktion</strong> grupperar posterna i varje avsnitt under funktionen som skapade dem."
}
]
},
{
"id": "entry",
"title": "Vad varje post visar",
"blocks": [
{
"list": {
"items": [
"Ansvarigt skript, funktion och version.",
"Datumet och den berörda resursen.",
"Det kända tillståndet före och efter ändringen.",
"Raderna som lagts till och tagits bort.",
"De paket som faktiskt lades till.",
"En tjänsts tillståndsändring.",
"<strong>Ångra detta</strong>: <em>Återställer exakt tidigare tillstånd</em>, <em>Tar bort filen (den fanns inte tidigare)</em>, <em>Paketet kan avinstalleras</em>, delvis återställning eller <em>Kan inte ångras från loggen</em>."
]
}
}
]
},
{
"id": "before",
"title": "Vad tidigare tillstånd betyder",
"blocks": [
{
"p": "Tidigare tillstånd kan vara registrerat innehåll, en fil som skapats för första gången eller ett okänt tillstånd. Ändringar från tiden före loggen kan inte rekonstrueras; när funktionen körs igen registreras först tillståndet som finns då."
}
]
},
{
"id": "limits",
"title": "Loggens omfattning",
"blocks": [
{
"list": {
"items": [
"Manuella ändringar och ändringar som görs av annan programvara registreras inte.",
"Endast operationer som går igenom ProxMenux-revisionsprimitiva täcks.",
"Inspelningen blockerar aldrig den operation som den beskriver: om inträdet inte kan skrivas fortsätter operationen.",
"Successiva ändringar av en resurs visas som det kända ursprungstillståndet jämfört med det aktuella."
]
}
}
]
},
{
"id": "retention",
"title": "Lagrade bevis",
"blocks": [
{
"table": {
"headers": [
"Element",
"Beteende"
],
"rows": [
[
"Inlägg",
"Posterna sparas på värden; inget tas bort automatiskt från loggen."
],
[
"Registrerat innehåll",
"Ett fångat objekt hålls medan en post hänvisar till det."
],
[
"Storlek på en registrering",
"Innehåll över 1 MiB lagras inte hela; posten registrerar att fångsten hoppades på grund av dess storlek."
],
[
"Läsning",
"Monitorn laddar inte lagrade objekt över 2 MiB."
],
[
"Skillnad",
"Högst 400 rader visas; en längre skillnad markeras som avkortad."
],
[
"Lista",
"API:t returnerar som standard 200 poster per begäran, högst 1000."
]
]
}
},
{
"calloutWarning": {
"title": "Sparat innehåll innebär ingen automatisk återställning",
"body": "Tidigare innehåll kan granskas och återställas manuellt, men vyn Ändringar ångrar inga åtgärder. En körningspost registrerar kommandot utan att känna till alla effekter av verktyget som kördes."
}
}
]
}
]
}
@@ -0,0 +1,136 @@
{
"meta": {
"title": "Granskning och rapporter | ProxMenux Monitor",
"description": "Bedöm en Proxmox VE-nod, registrera ProxMenux ändringar och ange förväntningar på gäster och lagring, med utskrivbara rapporter."
},
"header": {
"title": "Granskning och rapporter",
"description": "Bedömning av noden, logg över ProxMenux ändringar och angivna förväntningar, med dokument som kan skrivas ut eller sparas som PDF.",
"section": "ProxMenux Monitor"
},
"sections": [
{
"id": "views",
"blocks": [
{
"calloutInfo": {
"title": "Tre vyer, tre frågor",
"body": "Granskning och rapporter skiljer mellan fakta om noden, ProxMenux ingrepp och angivna förväntningar. En konfiguration som inte kan bedömas mot ett angivet syfte beskrivs utan att rapporteras som ett fel."
}
},
{
"cards": {
"items": [
{
"icon": "shield",
"title": "Bedömning - hur är noden?",
"body": "Kör kontrollerna av den valda profilen, komponerar inventeringen och klassificerar vad som behöver uppmärksamhet, med bevis på varje resultat."
},
{
"icon": "refresh",
"title": "Förändringar – vad gjorde ProxMenux?",
"body": "Listar filer, paket, tjänster och kommandon som ändrats av instrumenterade ProxMenux-skript, med tidigare tillstånd när det har registrerats."
},
{
"icon": "fileText",
"title": "Policy – vad förväntas?",
"body": "Anger vilka gäster som behöver säkerhetskopieras eller startas med värden, vilken lagring som är nödvändig och kontrollernas tröskelvärden."
}
]
}
},
{
"flow": {
"nodes": [
{
"label": "Bedömning",
"detail": "Fakta"
},
{
"label": "Policy",
"detail": "kontext"
},
{
"label": "Ändringar",
"detail": "interventioner"
}
],
"caption": "Bedömningen ger fakta, policyn ger dem sammanhang och loggen registrerar ProxMenux åtgärder."
}
},
{
"figure": {
"src": "/monitor/audit/assessment-view.png",
"alt": "Granskning och rapporter i ProxMenux Monitor med vyerna Bedömning, Ändringar och Policy",
"caption": "Audit & Report, med bedömningsvyn öppen."
}
}
]
},
{
"id": "boundaries",
"title": "Tre olika funktioner",
"blocks": [
{
"table": {
"headers": [
"Funktion",
"Vad det gör"
],
"rows": [
[
"<healthLink>Hälsoövervakning</healthLink>",
"Bevakar mätvärden och händelser kontinuerligt och kan utlösa aviseringar."
],
[
"Granskning och rapporter",
"Kör en bedömning på begäran, dokumenterar noden och jämför körningar med varandra."
],
[
"Ändringslogg",
"Registrerar åtgärder som ProxMenux utför genom sina grundläggande granskningsfunktioner."
]
]
}
}
]
},
{
"id": "pages",
"title": "Sidor i detta avsnitt",
"blocks": [
{
"next": {
"items": [
{
"label": "Bedömning och inventering",
"href": "/docs/monitor/audit-report/assessment",
"tail": "profiler, resultat, accepterade risker och inventering."
},
{
"label": "Ändringar",
"href": "/docs/monitor/audit-report/changes",
"tail": "loggen över vad ProxMenux ändrat på värden."
},
{
"label": "Policy",
"href": "/docs/monitor/audit-report/policy",
"tail": "gäster, lagring och tröskelvärden."
},
{
"label": "Rapporter och jämförelser",
"href": "/docs/monitor/audit-report/reports",
"tail": "de sex dokumenten och referenskörningen."
},
{
"label": "Omfattning och garantier",
"href": "/docs/monitor/audit-report/scope",
"tail": "källor, gränser och lagrade data."
}
]
}
}
]
}
]
}
@@ -0,0 +1,111 @@
{
"meta": {
"title": "Policy | Granskning och rapporter",
"description": "Nodens policy i Granskning och rapporter: säkerhetskopiering, autostart och återställningsmål för varje gäst, varje lagrings roll och kontrollernas tröskelvärden."
},
"header": {
"title": "Policy",
"description": "Policyn anger vad ingen inspektion kan härleda: syftet med varje gäst och lagring samt tröskelvärdena som kontrollerna tillämpar.",
"section": "Granskning och rapporter"
},
"sections": [
{
"id": "principle",
"blocks": [
{
"calloutInfo": {
"title": "Utan angivna förväntningar beskriver rapporten; med dem bedömer den",
"body": "En bedömning ser vad värden gör, inte vad det är för. En gäst utan en säkerhetskopia vars syfte inte förklaras rapporteras som en observation. Om dess backup förklaras krävs, rapporteras samma frånvaro som en varning. Ingenting måste förklaras."
}
},
{
"figure": {
"src": "/monitor/audit/policy-view.png",
"alt": "Policyvisning med gästerna, lagringen och trösklarna på noden",
"caption": "Policyvyn."
}
}
]
},
{
"id": "guests",
"title": "Gäster",
"intro": "Varje VM och LXC av noden har tre fält. Ett värde kvar som standard tar det allmänna värdet, som visas bredvid det.",
"blocks": [
{
"table": {
"headers": [
"Fält",
"Värden",
"Effekt på bedömningen"
],
"rows": [
[
"Säkerhetskopiering",
"Krävs, Krävs inte, Ej angivet",
"En saknad säkerhetskopia är en varning när det krävs, en observation när det inte anges, och det lämnas ur räkningen när det inte krävs."
],
[
"Autostart",
"Krävs, Krävs inte, Ej angivet",
"Om gästen måste starta tillsammans med värden."
],
[
"Återställningsmål",
"Timmar",
"Den högsta acceptabla åldern för den sista säkerhetskopian."
]
]
}
}
]
},
{
"id": "storage",
"title": "Lagring",
"blocks": [
{
"p": "Lagring som inte kan nås rapporteras som kritisk om den angetts som nödvändig eller används av en gäst som körs, som en varning om rollen inte angetts och som en observation om den angetts som valfri."
}
],
"intro": "Varje lagring av noden deklareras som väsentlig, valfri eller ej angiven."
},
{
"id": "thresholds",
"title": "Trösklar",
"intro": "Ett tomt tröskelfält använder det medföljande standardvärdet, som visas som platshållare.",
"blocks": [
{
"list": {
"items": [
"Granskning av lagringskapacitet (%) och fyllnadsgrad i thin pool (%).",
"Kvot för thin-överallokering och överallokering av minne.",
"Intervall för ZFS-scrub (dagar).",
"Reservgräns för säkerhetskopians ålder (dagar) och marginal mot schemat (kvot).",
"Certifikat utgångsmeddelande (dagar).",
"Disk livslängd (timmar) och nyligen diskfel fönster (dagar).",
"Lynis-rapportens ålder (dagar) och paketindexets ålder (dagar).",
"Journalens användning i förhållande till sitt tak (%).",
"Granskning av filsystemets utrymme (%) och inoder (%)."
]
}
}
]
},
{
"id": "save",
"title": "Hur policyn sparas",
"blocks": [
{
"p": "Deklarationen valideras och sparas atomiskt i <code>/usr/local/share/proxmenux/audit_policy.json</code>. Varje sparning har en revision: om en annan session ändrat deklarationen sparas inte utkastet och vyn erbjuder att läsa in den sparade versionen igen."
},
{
"calloutWarning": {
"title": "Policyn härleds aldrig automatiskt",
"body": "ProxMenux lägger inte till egna krav. Ett tomt fält behåller standardvärdet eller förblir ej angivet; en delvis ifylld deklaration påverkar bara de namngivna delarna."
}
}
]
}
]
}
@@ -0,0 +1,247 @@
{
"meta": {
"title": "Rapporter och jämförelser | Granskning och rapporter",
"description": "De sex dokumenten i Granskning och rapporter, hur de skrivs ut eller sparas som PDF och hur körningar jämförs med en referenskörning."
},
"header": {
"title": "Rapporter och jämförelser",
"description": "Sex dokument för olika frågor och jämförelse av varje körning med en referenskörning.",
"section": "Granskning och rapporter"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "Sex dokument, inte sex stilar",
"body": "Motorn väljer kontroller och avsnitt innan dokumentet skapas. En snabbdiagnos är inte en fullständig granskning med färre sidor, och en inventering visar inga bedömningsresultat. Exempeldokumenten nedan använder fiktiva data."
}
}
]
},
{
"id": "documents",
"title": "De sex dokumenten",
"blocks": [
{
"downloads": {
"items": [
{
"title": "Fullständig granskning",
"body": "Dokumenterar hela noden som ett tekniskt underlag.",
"href": "/monitor/audit/sample-audit-full-report.pdf",
"facts": [
{
"label": "kontroller",
"value": "Alla tillgängliga kontroller."
},
{
"label": "Innehåll",
"value": "Sammanfattning; identitet och kluster; hårdvara; nätverk och latens; lagring; gäster; passthrough; applikationer; fynd med underlag; källor och omfattning."
}
]
},
{
"title": "Snabbdiagnos",
"body": "Visar vad som behöver uppmärksamhet utan den fullständiga inventeringen.",
"href": "/monitor/audit/sample-audit-diagnostic-report.pdf",
"facts": [
{
"label": "kontroller",
"value": "Samma kontroller som fullständig revision."
},
{
"label": "Innehåll",
"value": "Minimal identitet; kritiska fynd; varningar; relevanta observationer; overifierade avläsningar och prioriterade åtgärder. Diagram, inventering och långa bilagor utelämnas."
}
]
},
{
"title": "Inventering",
"body": "Beskriver vad som finns på noden utan att bedöma det.",
"href": "/monitor/audit/sample-audit-inventory-report.pdf",
"facts": [
{
"label": "kontroller",
"value": "Ingen; ingen upptäckt klassificeras."
},
{
"label": "Innehåll",
"value": "Identitet; kluster; CPU och minne; moderkort, BIOS och styrenheter; nätverk; lagring; virtuella maskiner och LXC; passthrough; applikationer och delar som hanteras av ProxMenux."
}
]
},
{
"title": "Säkerhetsgranskning",
"body": "Täcker exponering och kontrollerna över tillgången till noden.",
"href": "/monitor/audit/sample-audit-security-report.pdf",
"facts": [
{
"label": "kontroller",
"value": "Säkerhetsområdet, plus containerprivilegier, uppdateringar, repositorier och APT-kedjan."
},
{
"label": "Innehåll",
"value": "Identitet och kluster; nätverk och latens; tillgång; brandvägg; 2FA; certifikat; privilegier; uppdateringar; repositorier; tillstånd och ålder av Lynis."
}
]
},
{
"title": "Kontroll av säkerhetskopior",
"body": "Kontrollerar att det deklarerade skyddet finns och att dess säkerhetskopior är användbara.",
"href": "/monitor/audit/sample-audit-backup-report.pdf",
"facts": [
{
"label": "kontroller",
"value": "Backup-området, plus lagringsanslutning och meddelandeleverans."
},
{
"label": "Innehåll",
"value": "Täckning per gäst; deklarerat återhämtningsmål; ålder och resultat; destination; bevarande; verifiering; misslyckade jobb; återhämtning och ofullständiga källor."
}
]
},
{
"title": "Kapacitet och slitage",
"body": "Mäter tillväxtmarginal och tecken på utmattning eller åldrande.",
"href": "/monitor/audit/sample-audit-capacity-report.pdf",
"facts": [
{
"label": "kontroller",
"value": "Lagrings- och hårdvaruområden, plus minne, swap, journal och värdfilsystemet."
},
{
"label": "Innehåll",
"value": "Användning och tröskelvärden; thin pools; överallokering; minne; inoder; ZFS; temperaturer; drifttimmar; SMART-fel och NVMe/SSD-livslängd."
}
]
}
]
}
},
{
"figure": {
"src": "/monitor/audit/audit-report-preview.png",
"alt": "Första sidan i en fullständig revisionsrapport",
"caption": "Varje dokument delar rapportidentifieraren, numrerade sektioner, datum, nod, profil och sidfot."
}
},
{
"p": "Beroende på profil innehåller dokumentet nodidentitet och bedömningsdatum, sammanfattat resultat, sammanfattning per område, hårdvaru-, nätverks- och lagringsstruktur, gästernas skydd, fynd med underlag, oläsbara källor samt tillämpad omfattning och policy."
}
]
},
{
"id": "print",
"title": "Skriva ut eller spara som PDF",
"blocks": [
{
"steps": {
"items": [
{
"title": "Kör",
"body": "Bedömningen använder profilen som valts i <strong>Rapport</strong>."
},
{
"title": "Granska",
"body": "Den färdiga körningen visar sina resultat, de källor som den inte kunde läsa och den politik den tillämpade."
},
{
"title": "Skapa rapport",
"body": "<strong>Skapa rapport</strong> öppnar vyn som förberetts som ett dokument."
},
{
"title": "Skriv ut",
"body": "<strong>Skriv ut eller spara som PDF</strong> öppnar webbläsarens utskriftsdialog där du väljer en skrivare eller <em>Spara som PDF</em>."
}
]
}
},
{
"calloutTip": {
"title": "Utskriften är ett dokument, inte en skärmdump",
"body": "Handlingsfältet är dolt, en tabell som fortsätter på nästa sida upprepar sin rubrik, block undviker onödiga raster och varje sida håller identifieringen och numreringen."
}
}
]
},
{
"id": "compare",
"title": "Jämför med en referenskörning",
"intro": "<strong>Använd som referens</strong> markerar en avslutad körning. Senare körningar jämförs med den och fynden delas upp i:",
"blocks": [
{
"table": {
"headers": [
"Grupp",
"Betydelse"
],
"rows": [
[
"Nya",
"Rapporterade nu och inte tidigare."
],
[
"Försämrade",
"Rapporteras fortfarande men är allvarligare eller mer omfattande än tidigare."
],
[
"Förbättrade",
"Rapporteras fortfarande men är mindre allvarliga eller omfattande än tidigare."
],
[
"Lösta",
"Rapporteras inte längre och har inte accepterats av någon."
],
[
"Accepterade",
"Inte längre räknas eftersom en risk accepterades, inte för att värden ändrades."
],
[
"Bedöms inte längre",
"Fanns tidigare men saknas i denna körning; det har inte verifierats att de upphört."
]
]
}
},
{
"table": {
"headers": [
"Referenskörning",
"Beteende"
],
"rows": [
[
"Ställa in den",
"Varje färdig körning kan markeras; ingen markeras automatiskt."
],
[
"Ändra den",
"Att markera en annan körning flyttar referensen utan att ta bort historiken."
],
[
"Jämför",
"När inga två körningar väljs använder jämförelsen referensen och den valda eller senaste körningen."
],
[
"Behålla körningar",
"De 30 senaste körningarna sparas; referenskörningen tas aldrig bort."
],
[
"Utan en referens",
"Vyn anger att ingen referenskörning valts ännu och att det därför inte finns något att jämföra med."
]
]
}
},
{
"calloutWarning": {
"title": "En rapport beskriver ett ögonblick",
"body": "En bedömning certifierar inte en hel period. Äldre resultat slutar beskriva aktuellt tillstånd; vyn visar senaste körningens ålder och varje källa behåller sin insamlingstid."
}
}
]
}
]
}
@@ -0,0 +1,115 @@
{
"meta": {
"title": "Omfattning och garantier | Granskning och rapporter",
"description": "Var data i Granskning och rapporter kommer från, vad som ligger utanför dess vy, designens garantier och var data lagras."
},
"header": {
"title": "Omfattning och garantier",
"description": "Var bedömningsdata kommer från, vad som ligger utanför dess vy och var Granskning och rapporter lagrar data.",
"section": "Granskning och rapporter"
},
"sections": [
{
"id": "sees",
"title": "Vad den observerar",
"blocks": [
{
"list": {
"items": [
"Konfiguration och tillstånd av den lokala noden.",
"Den deklarerade konfigurationen av VM och LXC.",
"Lagringens tillstånd som det är känt för Proxmox VE.",
"Den tillgängliga historien om säkerhetskopior och verifieringar.",
"SMART data och de händelser som Monitor har samlat in.",
"Tillstånd för tjänster, kluster, HA och lokala källor."
]
}
}
]
},
{
"id": "outside",
"title": "Vad är utanför dess syn",
"blocks": [
{
"list": {
"items": [
"Insidan av gästerna, bortom vad de förklarar för Proxmox VE.",
"Nätverksutrustning utanför värden.",
"Fjärrberoenden som noden inte kan observera.",
"Fysiskt tillstånd som hårdvaran inte exponerar.",
"Ändringsloggen omfattar inte manuella åtgärder eller åtgärder från annan programvara."
]
}
},
{
"calloutWarning": {
"title": "Avsaknad av bevis är inte bevis på frånvaro",
"body": "En källa som inte kan läsas ger ett overifierat eller ofullständigt resultat, aldrig ett godkänt resultat. Rapporten listar de källor som inte var tillgängliga."
}
}
]
},
{
"id": "guarantees",
"title": "Garantier av designen",
"blocks": [
{
"list": {
"items": [
"Stabila identifierare för kontrollerna.",
"Historik över körningar och fynd.",
"En validerad policy, sparad atomiskt.",
"Godtagna risker med en anledning, synliga.",
"Koppling av ändringar till skript och funktion.",
"Registrering av tillstånd före och efter, när det är tillgängligt.",
"Ett uttryckligt resultat när något inte kan mätas eller fångas."
]
}
}
]
},
{
"id": "storage",
"title": "Där data lagras",
"blocks": [
{
"table": {
"headers": [
"Data",
"Plats"
],
"rows": [
[
"Policy",
"<code>/usr/local/share/proxmenux/audit_policy.json</code>"
],
[
"Bedömningar",
"Revisionsdatabasen för Monitor"
],
[
"Registrerade objekt",
"<code>/usr/local/share/proxmenux/changes/objects/</code>"
],
[
"Väntande poster",
"<code>/usr/local/share/proxmenux/changes/spool/</code>"
],
[
"Sammanställd logg",
"<code>/usr/local/share/proxmenux/changes.db</code>"
]
]
}
},
{
"calloutInfo": {
"title": "Ett verktyg för att granska, inte en certifiering",
"body": "Granskning och rapporter granskar, jämför och dokumenterar noden. Resultaten tolkas tillsammans med systemets syfte, angiven policy och tillgängliga källor."
}
}
]
}
]
}
@@ -0,0 +1,174 @@
{
"meta": {
"title": "Apps-panelen: en startvy för alla webblänkar | ProxMenux",
"description": "Använd instrumentpanelen Apps för att öppna registrerade LXC Web Links och anpassade länkar, organisera dem efter kategori och hoppa tillbaka till gästen som äger varje tjänst."
},
"header": {
"title": "Dashboard: Apps flik",
"description": "En enda launcher för webbgränssnitten du använder över noden, oavsett om de kommer från en registrerad LXC-applikation eller en anpassad webblänk.",
"section": "ProxMenux Monitor · Översikt"
},
"intro": {
"title": "En launcher, inte en applikation installer",
"body": "Fliken <strong>Apps</strong> installerar inte program och upptäcker inte tjänster själv. Den samlar sparade länkar i ett sökbart rutnät. LXC-länkar ställs in på gästens <appTabLink>App-flik</appTabLink>; egna länkar kan lägga till VM-tjänster, omvända proxyservrar och externa paneler."
},
"sources": {
"heading": "Vad som visas i Apps",
"intro": "Varje lanseringsbar URL blir ett eget kort. Källan bestämmer var kortet redigeras, men inte hur det ser ut under normal användning.",
"colSource": "Källa",
"colAppears": "Vad som visas",
"colManagedFrom": "Där den hanteras",
"rows": [
{
"source": "Registrerad LXC-applikation",
"appears": "Ett kort för varje webblänk sparad på applikationsposten.",
"managedFrom": "VM och LXC → LXC-dialog → App"
},
{
"source": "Anpassad länk bunden till en gäst",
"appears": "En tjänst URL associerad med en specifik VM eller LXC.",
"managedFrom": "Apps → redigera"
},
{
"source": "Egen länk utan gästkoppling",
"appears": "Valfritt HTTP(S)-mål, inklusive externa tjänster eller tjänster bakom en omvänd proxy.",
"managedFrom": "Apps → redigera"
}
],
"relationshipTitle": "Appar och LXC App-fliken har olika jobb",
"relationshipBody": "LXC-gästens <appTabLink>App-flik</appTabLink> hanterar identitet, webblänkar och valfri versionsspårning. <strong>Apps</strong> använder länkarna som snabb åtkomst. Redigering av ett LXC-kort leder därför till gästens post utan att duplicera konfigurationen."
},
"cards": {
"heading": "Hur man använder ett kort",
"intro": "Hela kortet är lanseringsmålet, medan dess mindre kontroller ger kontext utan att öppna tjänsten.",
"items": [
"Klicka på kortet för att öppna sin URL i en ny webbläsarflik.",
"Logotypen använder Web Link-logotypen först och faller tillbaka till applikationslogotypen när så är lämpligt.",
"Kategorietiketten använder samma färg och text som motsvarande webblänk i LXC-gästens App-flik.",
"Gästetiketten visar kopplad VM eller LXC. Ett klick öppnar dess dialog: LXC-länkar öppnar <strong>App</strong>, VM-länkar <strong>Status</strong>.",
"En lila uppåtpil innebär att den specifika applikationen eller Docker-bilden har en tillgänglig uppdatering. Det är inte en allmän uppdatering räknas för hela gästen."
]
},
"toolbar": {
"heading": "Sök, filter och sortera",
"intro": "Verktygsfältet begränsar en stor applikationssamling utan att ändra sparade poster.",
"items": [
"Sök matchar applikationsnamnet, gästnamnet, VMID och kategori.",
"Kategorifiltret visar en kategori åt gången eller alla applikationer.",
"Sortera efter <strong>Namn</strong>, <strong>ID</strong> eller <strong>Kategori</strong>. Kategorisortering lägger in rubriker mellan kortgrupper.",
"Sorteringen sparas i denna webbläsare. Söktext och kategorifilter återställs när sidan besöks igen.",
"Fliken Apps förblir tillgänglig när nätet är tomt, så den första anpassade länken kan läggas till utan att registrera en LXC-applikation först."
]
},
"customLinks": {
"heading": "Lägga till och redigera anpassade webblänkar",
"intro": "Använd en anpassad länk när tjänsten inte representeras av en registrerad LXC-applikation.",
"steps": [
"Välj <strong>Lägg till länk</strong> i verktygsfältet eller den tomma vyn.",
"Ange ett namn och en komplett <code>http://</code> eller <code>https://</code> URL.",
"Alternativt lägga till en logotyp, välj eller skapa en kategori och bind länken till en VM eller LXC.",
"Spara länken. Kortet visas direkt i rutnätet.",
"Välj <strong>Redigera</strong> och pennan på kortet för att ändra eller ta bort en egen länk."
],
"colField": "Fält",
"colRequired": "Krav",
"colPurpose": "syfte",
"fields": [
{
"field": "Namn",
"required": "Ja",
"purpose": "Kortet titel och sökterm."
},
{
"field": "URL",
"required": "Ja",
"purpose": "Den kompletta HTTP (S) destination öppnas av kortet."
},
{
"field": "Logotyp URL",
"required": "Nej",
"purpose": "En fjärrbild som visas på kortet."
},
{
"field": "Kategori",
"required": "Nej",
"purpose": "Lägger till ett delat märke och möjliggör kategorifiltrering."
},
{
"field": "Gästkoppling",
"required": "Nej",
"purpose": "Kopplar länken till en VM eller LXC och aktiverar gästgenvägen."
}
],
"editTitle": "Redigera källan till sanning",
"editBody": "Redigeringsläget visar pennor bara för egna länkar. För ett LXC-applikationskort öppnar du gästens <appTabLink>App-flik</appTabLink> och redigerar den sparade länken."
},
"categories": {
"heading": "Kategorier och uppdateringssignaler",
"intro": "Kategorier organiserar länkar; uppdateringssignaler rapporterar programvarutillstånd. De är avsiktligt separata.",
"items": [
"Katalogstödd LXC-registrering kan fylla i en kategori, men den är fortfarande redigerbar.",
"Anpassade kategorinamn kan skapas från samma väljare och sedan återanvändas av filtret.",
"Kategorifärger är deterministiska och anpassar sig till ljus eller mörkt tema. Lila och röda intervall är reserverade för uppdatering och farliga tillstånd.",
"För Docker-webblänkar kopplar ProxMenux kortet till dess container eller avbildning och visar avbildningens uppdateringsstatus. Docker Engine-uppdateringar finns kvar på LXC-gästens <updatesLink>Uppdateringar-flik</updatesLink>."
]
},
"persistence": {
"heading": "Persistens och cache beteende",
"intro": "Dashboarden är utformad för att öppna från redan tillgängliga Monitor-data istället för att rescan varje gäst.",
"items": [
"Egna länkar sparas atomiskt i <code>/etc/proxmenux/custom_links.json</code> och läses in i minnet när Monitor startar.",
"Registrerade LXC-länkar förblir en del av deras applikations sparade Monitor-post; Apps-instrumentpanelen duplicerar dem inte i den anpassade länkfilen.",
"Skapa, redigera eller ta bort en anpassad länk uppdaterar in-memory-listan omedelbart.",
"Sorteringsvalet gäller lokalt i webbläsaren och synkroniseras inte mellan enheter eller användare.",
"Apps position i huvudnavigeringen ställs in separat under <settingsLink>Inställningar → Navigeringsordning</settingsLink>."
]
},
"troubleshooting": {
"heading": "Vanliga situationer",
"colProblem": "Situation",
"colResolution": "Lösning",
"rows": [
{
"problem": "En LXC-applikation är registrerad men inget kort visas",
"resolution": "Öppna sin App-flik och lägg till minst en webblänk. Version spårning ensam skapar inte ett lanseringskort."
},
{
"problem": "URL eller logotyp är fel",
"resolution": "Redigera den anpassade länken i Apps, eller redigera webblänken i den egna LXC App-fliken."
},
{
"problem": "En Docker-tjänst saknas",
"resolution": "Redigera den registrerade Docker-applikationen och spara tjänstens publicerade webbport som en webblänk."
},
{
"problem": "Den lila pilen hänvisar till fel Docker-uppdatering",
"resolution": "Granska webblänkens namn och beskrivning så att de kan matchas till den avsedda containern eller avbildningen."
},
{
"problem": "Appar öppnar först istället för Systemöversikt",
"resolution": "Det första sparade objektet i Inställningar → Navigationsorder blir landningsfliken. Återställ standardordningen eller flytta översikt först."
}
]
},
"whereNext": {
"heading": "Var till nästa",
"items": [
{
"label": "LXC App fliken",
"href": "/docs/monitor/dashboard/vms-lxcs/app",
"tail": " - registrera applikationer, webblänkar och valfri versionsspårning."
},
{
"label": "LXC Updates fliken",
"href": "/docs/monitor/dashboard/vms-lxcs/updates",
"tail": " — konfigurera och köra uppdateringar av applikationer, Docker Engine och avbildningar."
},
{
"label": "Inställningar flik",
"href": "/docs/monitor/dashboard/settings#navigation-order",
"tail": " — ändra navigeringsordningen och startfliken."
}
]
}
}
@@ -0,0 +1,248 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt: Hårdvara | ProxMenux-dokumentation",
"description": "Fliken Hårdvara inventerar den fysiska maskinen: CPU och moderkort, minnesmoduler, temperatursensorer, GPU:er med realtidsövervakning per plats och drivrutinsinstallation med ett klick, Coral TPU-acceleratorer, lagringssammanfattning med länkhastigheter, PCI- och USB-listor, effekt, nätaggregat, fläktar och UPS-status."
},
"header": {
"title": "Översikt: Hårdvara",
"description": "Den fysiska maskinen i en skärm - CPU och moderkortsidentitet, varje minnesmodul, termiska sensorer över alla delsystem, GPU med levande utnyttjande och en inbyggd drivrutininstallatör, Coral TPU, varje PCI och USB-enhet med sin kärndrivrutin, hela diskinventeringen med förhandlade länkhastigheter, plus ström, kylning och UPS.",
"section": "ProxMenux Monitor · Översikt"
},
"intro": {
"title": "Byggd av standardverktyg",
"body": "De flesta data kommer från <code>lscpu</code>, <code>dmidecode</code>, <code>lspci</code>, <code>lsusb</code>, <code>lsblk</code>, <code>smartctl</code>, <code>nvme</code>, <code>sensors</code>, <code>nvidia-smi</code>, <code>intel_gpu_top</code>, <code>amdgpu_top</code>, <code>ipmitool</code> och <code>upsc</code>. Avsnitten visas bara när verktyget ger data: utan UPS visas inget UPS-kort och utan IPMI saknas effektvärden från separat maskinvaruövervakning."
},
"thresholds": {
"title": "Statusfärger och trösklar som tillämpas här",
"intro": "Alla temperaturindikatorer och värden använder samma skala: <green/> <strong>grön</strong> under Varning, <amber/> <strong>bärnstensfärgad</strong> mellan Varning och Kritisk, <red/> <strong>röd</strong> från Kritisk och uppåt. Rekommenderade standardvärden i ProxMenux:",
"items": [
"<strong>CPU-temperatur</strong> — varning 80 °C, kritisk 90 °C.",
"<strong>Disktemperatur</strong> HDD 60/65 °C · SSD 70/75 °C · NVMe 80/85 °C · SAS 55/65 °C (varning / kritisk)."
],
"outro": "Alla värden kan ställas in per värd. <link>Inställningar → Tröskelvärden för hälsokontrollen</link> är den centrala referensen och förklarar hur de anpassas."
},
"sections": {
"heading": "Avsnitt",
"intro": "Avsnitten visas i den här ordningen uppifrån och ner. Vissa kräver motsvarande hårdvara eller verktyg och markeras med <em>(villkorligt)</em>.",
"systemInfoTitle": "Systeminformation",
"systemInfoIntro": "Två sida vid sida block, alltid närvarande:",
"systemInfoItems": [
"<strong>CPU</strong> — modell, mikroarkitektur, socklar/kärnor/trådar, bas- och boostfrekvens, virtualiseringsstöd (VT-x / AMD-V) och cachetopologi.",
"<strong>Moderkort</strong> — tillverkare, modell, BIOS-version och datum samt SMBIOS-UUID. Hjälper dig hitta rätt nedladdningssida för firmware hos tillverkaren."
],
"memoryTitle": "Minnesmoduler",
"memoryBody": "En rad per upptagen plats från <code>dmidecode</code>: platsnamn, modulstorlek, typ (DDR4 / DDR5 / ECC-varianter), inställd och nominell hastighet, tillverkare, artikelnummer och serienummer. Tomma platser är nedtonade för att visa möjligheten till utbyggnad.",
"thermalTitle": "Termisk övervakning",
"thermalIntro": "Sju block med data från <code>lm-sensors</code>, <code>sysfs</code> och verktygsspecifika insamlare. Lagringens hwmon-sensorer kopplas till den fysiska blockenheten med modell och sökväg <code>/dev/...</code>. Ett block döljs om kategorin saknar sensorer.",
"thermalItems": [
"<strong>CPU</strong> — temperatur för CPU-paketet och varje kärna.",
"<strong>GPU</strong> — sensorer för dedikerade GPU:er via <code>nvidia-smi</code> / <code>amdgpu_top</code> samt Intel iGPU. Visar hetaste punkt och minnesövergångens temperatur när drivrutinen tillhandahåller dem.",
"<strong>NVME</strong> — styrenhetens sammansatta temperatur kopplad till dess exakta NVMe-namnrymd.",
"<strong>HDD</strong> - <code>drivetemp</code>-avläsningar för rotationsblockenheter.",
"<strong>SSD</strong> - <code>drivetemp</code>-avläsningar för icke-rotationella SATA / SAS-blockenheter.",
"<strong>PCI</strong> - sensorer som dyker upp som PCI-fästa enheter (HBA, nätverkskort med interna sensorer).",
"<strong>OTHER</strong> - chipset, VRM, omgivande sensorer som inte passar någon annanstans."
]
},
"graphics": {
"heading": "Grafikkort",
"intro": "Varje videokontroller visas som ett kort med tillverkare, modell, typ (<em>Integrerad</em> / <em>PCI</em> / BMC), PCI-adress (BDF), kärndrivrutin och moduler. <strong>Byt läge</strong> växlar mellan LXC-delning med inbyggd drivrutin och VM-passthrough (<code>vfio-pci</code>). <link>Byt GPU-läge (VM ↔ LXC)</link> beskriver ändringarna på värden.",
"vfioImageAlt": "Grafikkort: integrerad Matrox G200EH kopplad till mgag200, redo för LXC, och NVIDIA Quadro P400 kopplad till vfio-pci, redo för VM-passthrough",
"vfioImageCaption": "Två GPU:er: Matrox BMC-kretsen använder sin vanliga drivrutin och är redo för LXC; NVIDIA Quadro P400 är kopplad till <code>vfio-pci</code>, redo för VM-passthrough.",
"lxcImageAlt": "Grafikkort: Intel UHD Graphics iGPU med i915 och NVIDIA Quadro P1000 med nvidia, båda redo för LXC-containrar",
"lxcImageCaption": "Samma nod efter att ha bytt NVIDIA-kortet tillbaka till den infödda drivrutinen - både GPU: er nu redo för LXC-containrar.",
"realtimeTitle": "Dialogruta för realtidsövervakning",
"realtimeBody": "Ett klick öppnar övervakning per GPU-plats och hämtar data med tillverkarens verktyg var tredje sekund. Den visar tillverkare, typ, PCI-plats, drivrutin, kärnmoduler, motorbelastning (Render/3D, Video, Blitter, VideoEnhance), grafik- och minnesfrekvenser, temperatur, rapporterad effekt, VRAM och aktiva processer med belastning per process. Data från <code>/api/gpu/&lt;slot&gt;/realtime</code>.",
"toolsIntro": "Tillverkarverktyget som används för varje GPU:",
"headerVendor": "Tillverkare",
"headerTool": "Verktyg",
"headerProject": "Projekt",
"tools": [
{
"vendor": "NVIDIA",
"tool": "nvidia-smi",
"projectLabel": "developer.nvidia.com",
"projectHref": "https://developer.nvidia.com/nvidia-system-management-interface"
},
{
"vendor": "Intel iGPU",
"tool": "intel_gpu_top (igt-gpu-tools)",
"projectLabel": "gitlab.freedesktop.org",
"projectHref": "https://gitlab.freedesktop.org/drm/igt-gpu-tools"
},
{
"vendor": "AMD",
"tool": "amdgpu_top",
"projectLabel": "github.com/Umio-Yasuno/amdgpu_top",
"projectHref": "https://github.com/Umio-Yasuno/amdgpu_top"
},
{
"vendor": "Matrox / ASPEED (BMC)",
"tool": "— (endast visning)",
"projectLabel": "Upptäckt och märkt som BMC; inget realtidsblock."
}
],
"nvidiaImageAlt": "Övervakning av NVIDIA Quadro P1000: tillverkare NVIDIA, drivrutinen nvidia laddad, grafikfrekvens 1.26 GHz, minnesfrekvens 2.50 GHz, temperatur 50 °C, alla motorer på 0 %, inga aktiva processer, totalt 4096 MiB minne",
"nvidiaImageCaption": "NVIDIA Quadro P1000 med proprietär drivrutin: frekvenser, temperatur, belastningsstaplar för motorerna och aktiva processer.",
"intelImageAlt": "Övervakning av Intel UHD Graphics iGPU med i915: effekt 11.31 W, videobelastning 1 % och en ffmpeg-process som använder 8 MB",
"intelImageCaption": "Intel iGPU med <code>i915</code> aktiv. Tabellen Aktiva Processer plockar upp ett ffmpeg jobb med hjälp av videomotorn.",
"amdImageAlt": "Övervakning av integrerad AMD Lucienne GPU med amdgpu: motorbelastning 0 % och amdgpu_top som aktiv process",
"amdImageCaption": "AMD iGPU övervakas med <code>amdgpu_top</code>. Verktyget visas som aktiv process eftersom det samlar in livevärdena.",
"installTitle": "Installera NVIDIA-drivrutinen från dialogrutan",
"installBody": "Med <code>nouveau</code>/<code>nvidiafb</code> utan proprietär NVIDIA-drivrutin saknas frekvenser, effekt och processbelastning. Dialogrutan visar <strong>Installera NVIDIA-drivrutiner</strong>, som kör skriptet i <link>Installera NVIDIA-drivrutiner på värden</link>.",
"noDriverAlt": "Övervakning av NVIDIA Quadro P620 med nvidiafb och nouveau laddade, meddelandet Utökad övervakning saknas och en blå knapp Installera NVIDIA-drivrutiner",
"noDriverCaption": "Ingen proprietär drivrutin installerad ännu — dialogrutan erbjuder installation med ett klick.",
"promptAlt": "Bekräftelse på installation av NVIDIA-drivrutin med upptäckta GPU:er, LXC-containrar med NVIDIA-passthrough och knapparna Ja/Avbryt",
"promptCaption": "Sammanfattning före installation: upptäckta GPU:er, LXC-containrar med NVIDIA-passthrough och skriptets åtgärder. Inget ändras före bekräftelsen.",
"successAlt": "Terminalutdata med NVIDIA-drivrutinen 580.105.08 installerad och nvidia-smi som visar en Quadro P620",
"successCaption": "Framgångsrik installation - NVIDIA <code>.run</code> byggd via DKMS, uthållighetstjänsten är på plats, och <code>nvidia-smi</code> rapporterar GPU.",
"warningTitle": "Välj en drivrutinsversion som din GPU stöder",
"warningBody": "Nyare NVIDIA-grenar slutar stödja äldre GPU-familjer som Maxwell och Kepler. Om <code>nvidia-smi</code> visar <em>\"No devices were found\"</em> efter installationen eller DKMS misslyckas kan grenen sakna stöd för din GPU. Kör igen med en äldre gren, exempelvis legacy 470.x för Kepler. Kontrollera stödet på <a>den officiella sidan för drivrutinssökning</a>.",
"whereGoIntro": "Vart ska man gå härifrån:",
"whereGoItems": [
"<link1>Installera NVIDIA-drivrutiner på värden</link1> — fullständig guide, kompatibilitetsmatris för kärnan, valfri NVENC-patch och överföring till LXC.",
"<link2>Byt GPU-läge (VM ↔ LXC)</link2> — vad reglaget <em>Byt läge</em> på kortet gör.",
"<link3>Lägg till GPU i VM (passthrough)</link3> och <link4>Lägg till GPU i LXC</link4> — första tilldelning av en obunden GPU."
]
},
"coral": {
"heading": "Coral TPU / AI-acceleratorer",
"subHeading": "(villkorligt)",
"intro": "Visas när Google Coral eller andra AI-acceleratorer är anslutna. Enhetsdialogrutan visar anslutning (M.2 / mini-PCIe / USB), PCIe-bredd, tillverkar-/produkt-ID, programstöd (<code>apex</code> i kärnan för PCIe, <code>libedgetpu</code> i användarrymden för USB), moduler (<code>gasket</code> + <code>apex</code>), enhetsnoder (<code>/dev/apex_*</code>), Edge TPU-runtime-status, aktuell temperatur och firmwaregränser för varningar.",
"imageAlt": "Coral Edge TPU-detaljer: PCIe/M.2, länk 5.0 GT/s x1, ID 1ac1:089a, kärndrivrutin apex, gasket och apex laddade, /dev/apex_0 finns, Edge TPU Runtime ej installerad, 53.5 °C och maskinvarugränser för temperaturvarningar",
"imageCaption": "M.2 Coral med värdens kärnmoduler laddade, enhetsnoden tillgänglig och firmwaregränser för temperaturvarningar synliga. Runtime-raden blir grön när rätt Edge TPU Runtime är installerad.",
"pathsIntro": "Två installationsvägar finns beroende på formfaktorn:",
"pathsItems": [
"<strong>M.2 / Mini-PCIe</strong> — värden behöver kärnmodulerna <code>gasket</code> + <code>apex</code> byggda med DKMS så att enhetsnoden <code>/dev/apex_0</code> finns vid start.",
"<strong>USB-accelerator</strong> — värden behöver bara Edge TPU-runtime i användarrymden (<code>libedgetpu1-std</code>) från Googles APT-förråd."
],
"outro": "<installLink>Installera Coral TPU på värden</installLink> upptäcker och hanterar båda varianterna. Bakgrund och officiell runtime finns på <a>coral.ai/docs</a>. Tilldela sedan enheten till en container med <lxcLink>Lägg till Coral TPU i LXC</lxcLink>."
},
"storage": {
"heading": "Lagringssammanfattning",
"intro": "Alla blockenheter som kärnan känner till, grupperade efter typ. Varje disk visar namn (<code>sda</code>, <code>nvme0n1</code>, <code>zram0</code>…), typ (<em>SSD</em>, <em>HDD</em>, <em>NVMe SSD</em>), modell och förhandlad länk. Klicka för modell, serienummer, kapacitet, gränssnitt samt aktuell och maximal länkhastighet.",
"imageAlt": "Storage Sammanfattningskort som listar elva blockenheter (SATA SSDs, SATA HDDs, NVMe SSDs och zram) med modellsträngar och förhandlade länkhastigheter; de två NVMe-enheterna visar 3.0 x4 med den aktuella hastigheten markerad",
"imageCaption": "Elva enheter på noden. SATA-länkar visas som <em>SATA &lt;version&gt;, &lt;Gb/s&gt; (current: ...)</em>; NVMe som <em>&lt;PCIe gen&gt; x&lt;width&gt;</em>.",
"nvmeBody": "För varje NVMe jämförs den förhandlade länken med enhetens maximum. Vid skillnad, exempelvis en Gen3 x4 SSD på <strong>3.0 x1</strong> i en plats med en enda bana, visas aktuellt värde i bärnstensfärg. Det hjälper vid felsökning av långsamma diskar eller ändrad bantilldelning efter en BIOS-uppdatering.",
"nvmeModalAlt": "NVMe-enhetsdetalj modal för nvme0n1: NVMe SSD-typ, 953.9 GB-kapacitet, nuvarande länkhastighet 3.0 x1 markerad i amber, maximal kopplingshastighet 3.0 x4, modell WDC CL SN720, serienummer, PCIe / NVMe gränssnitt",
"nvmeModalCaption": "NVMe-detaljer med färre banor: enheten stöder x4 men platsen är kopplad som x1.",
"outro": "SMART-data, självtester, historik och PDF-rapport finns under <storageLink>Översikt: Lagring</storageLink>. Samma data används av <smartLink>SMART-diskstatus och tester</smartLink>. Ett långt test från skriptet skriver den JSON som Monitor visar under <em>Lagring → Historik</em>."
},
"pci": {
"heading": "PCI-enheter",
"intro": "PCI-enheter identifieras med <strong>PCI BDF</strong> (Bus:Device.Function, exempelvis <code>03:00.0</code>) och klass (<em>Lagringskontroller</em>, <em>USB-kontroller</em>, <em>Grafikkort</em>, <em>Nätverkskontroller</em>, <em>Ljudkontroller</em>…). Varje kort visar tillverkare, namn och <strong>kopplad kärndrivrutin</strong>, användbart för felsökning av passthrough, IOMMU-grupper och fel drivrutin.",
"imageAlt": "PCI-enheter sektion som listar femton enheter grupperade av klass: lagringskontroller på ahci / nvme, USB-kontroller, grafikkort (en på vfio-pci, en på den infödda drivrutinen), nätverkskontroller på igb / tg3, en ljudkontroller tillsammans med en genomgående GPU",
"imageCaption": "Femton enheter på denna nod. Notera GPU och dess följeslagare ljudfunktion både bunden till <code>vfio-pci</code> - det är ett kort förberedt för VM genomgång.",
"bdfTitle": "Läsa BDF",
"bdfBody": "<code>03:00.0</code> betyder PCI-buss <code>03</code>, enhet <code>00</code>, funktion <code>0</code>. Dedikerade GPU:er använder oftast <code>.0</code> för grafik och <code>.1</code> för HDMI-ljud. Båda funktionerna förs vidare till VM:n tillsammans; därför rensar <link>Byt GPU-läge</link> även överblivna ljudkopplingar när VM-läget lämnas."
},
"usb": {
"heading": "USB-enheter",
"intro": "USB-enheter med tillverkare och produkt, USB-version, adress <code>bus:device</code>, ID <code>vendor:product</code> och kärndrivrutin. De grupperas efter roll: <em>Kommunikation</em> (Z-Wave-/Zigbee-adaptrar), <em>UPS</em>, lagring och HID. Då kan du identifiera adaptrarna utan att jämföra deras ID.",
"imageAlt": "USB-enheter kort som listar tre enheter: en Aeotec Z-Wave Z-Stick, en ConBee II Zigbee koordinator och en Ellipse ECO UPS, var och en med USB-version, adress, leverantör: produkt ID och bunden drivrutin",
"imageCaption": "Tre USB-enheter - två hemautomationsradio på <code>usbfs</code> och en UPS på <code>usbfs</code> (NUT talar med det genom libusb)."
},
"power": {
"heading": "Energiförbrukning",
"subHeading": "(villkorligt)",
"intro": "Visas om värden tillhandahåller effektdata. Två oberoende källor visas när de finns:",
"items": [
"<strong>Total effekt ACPI / IPMI</strong> — hela systemets effekt från en moderkortssensor eller BMC. Vanligt på serverkort.",
"<strong>CPU-paketets effekt</strong> — Intel RAPL-räknare eller AMD:s motsvarighet. Skiljer CPU-effekten från resten på konsumentkort utan totalmätning."
],
"supplyImageAlt": "Effekt: 198 W totalt via ACPI och två nätaggregat med status OK och uteffekt 185 W respektive 5 W",
"supplyImageCaption": "Serverkort med en ACPI-effektsensor och två nätaggregat via IPMI: det andra är redundant och ger 5 W i viloläge.",
"cpuImageAlt": "Effekt på konsumentkort: endast CPU-effekt 8.7 W via Intel RAPL",
"cpuImageCaption": "Konsumentkort utan totalsensor — endast CPU-effekt via RAPL visas."
},
"psu": {
"heading": "Strömförsörjning",
"subHeading": "(villkorligt)",
"body": "På servrar med dubbla nätaggregat visar IPMI närvaro (PSU 1 / PSU 2 / …), ingångsspänning, uteffekt och status OK/fel. Kontrollera detta efter ett strömavbrott på en nod med redundanta nätaggregat."
},
"fans": {
"heading": "Systemfläktar",
"subHeading": "(villkorligt)",
"body": "Varvtal per fläkt med minidiagram när det stöds. Utan individuella värden visas en enda avläsning för chassifläkten."
},
"ups": {
"heading": "UPS-status",
"subHeading": "(villkorligt)",
"body": "Visas när en NUT-server (Network UPS Tools) är konfigurerad och nåbar. Visar status (nät / batteri / laddning / låg batterinivå), batterinivå, uppskattad drifttid, belastningsprocent, ingångsspänning, modell och firmware. Samma data används i <em>Säkerhet och certifikat</em> i hälsokontrollen; batteridrift uppmärksammas direkt."
},
"dataCollected": {
"heading": "Hur data samlas in",
"headerSection": "Avsnitt av fliken",
"headerEndpoint": "Slutpunkt",
"headerSource": "Källa",
"rows": [
{
"section": "Statisk inventering (PCI, CPU, BIOS)",
"endpoint": "/api/hardware",
"source": "<code>lspci -vmm</code>, <code>/proc/cpuinfo</code>, <code>dmidecode</code>; cachad för livslängden av processen."
},
{
"section": "Live sensor värden",
"endpoint": "/api/hardware/live",
"source": "<code>sensors</code> (lm-sensors), <code>/sys/class/hwmon</code> och <code>/sys/block</code> identifierar lagringsenheterna. Temperaturerna är aktuella; endast kopplingen mellan hwmon och enheter cachas i 60 sekunder."
},
{
"section": "CPU temperaturhistoria",
"endpoint": "/api/temperature/history",
"source": "Tidsserie som temperaturinsamlaren registrerar var 60:e sekund och sparar i SQLite."
},
{
"section": "GPU-mätvärden i realtid",
"endpoint": "/api/gpu/<slot>/realtime",
"source": "NVIDIA: <code>nvidia-smi --query-gpu=...</code>. Intel: <code>intel_gpu_top</code>. AMD: sysfs <code>/sys/class/drm/cardN</code>."
}
],
"codeComment1": "# Jämför inventeringen med operativsystemets vy",
"codeComment2": "# Bekräfta GPU-kortet instrumentpanelen ser"
},
"whereNext": {
"heading": "Nästa steg",
"items": [
{
"label": "Installera NVIDIA-drivrutiner på värden",
"href": "/docs/hardware/nvidia-host",
"tail": " — skriptet som installationsknappen i GPU-dialogrutan kör."
},
{
"label": "Byt GPU-läge (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
"tail": " — ändringarna på värden när läget växlas på ett GPU-kort."
},
{
"label": "Installera Coral TPU på värden",
"href": "/docs/hardware/install-coral-tpu-host",
"tail": " — installation av Coral-kärnmodul och runtime."
},
{
"label": "SMART-status och disktest",
"href": "/docs/disk-manager/smart-disk-test",
"tail": " — skriptet bakom SMART-data i diskdetaljerna på fliken Lagring."
},
{
"label": "Dashboard: Storage Tab",
"href": "/docs/monitor/dashboard/storage",
"tail": " - Full SMART attributtabell, självtesthistoria och PDF-rapport."
},
{
"label": "Hälsoövervakare",
"href": "/docs/monitor/health-monitor",
"tail": " — kategorin CPU och temperatur, som använder samma sensorer."
},
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tail": " — slutpunkterna för hårdvara och GPU."
},
{
"label": "Översiktsindex",
"href": "/docs/monitor/dashboard",
"tail": " — de andra flikarna."
}
]
}
}
@@ -0,0 +1,101 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt | ProxMenux-dokumentation",
"description": "Panelen är ProxMenux Monitors huvudgränssnitt: tio innehållsflikar inklusive Apps-startaren, ett gemensamt sidhuvud och en konfigurerbar ordning i huvudnavigeringen."
},
"header": {
"title": "Översikt",
"description": "ProxMenux Monitors vardagsvy: tio innehållsflikar inklusive Apps-startaren, ett gemensamt sidhuvud och en konfigurerbar ordning i huvudnavigeringen.",
"section": "ProxMenux Monitor"
},
"oneHeader": {
"title": "En rubrik, tio flikar",
"body": "Sidhuvudet med logotyp, nodnamn, statusindikator, drifttid, uppdatering och tema förblir synligt. Den aktiva fliken ändrar hela innehållsytan nedanför. Statusfärgen visar den allvarligaste kategorin i <link>hälsoövervakningen</link>; samma värde visas i panelen."
},
"tabs": {
"heading": "De tio flikarna",
"intro": "Varje flik har sin egen dedikerade sida. Sidor läggs inkrementellt som dokumentationen fylls i; nedan är den fullständiga listan och vad var och en är ansvarig för.",
"headerTab": "Flik",
"headerOwns": "Vad fliken omfattar",
"rows": [
{
"name": "Systemöversikt",
"linksTo": "/docs/monitor/dashboard/system-overview",
"owns": "CPU / minne / temperatur widgets, aktiva VM & LXC räkna, historiska metriska diagram, lagring och nätverkssammanfattningar. Standardlandningsfliken tills navigationsordern är anpassad."
},
{
"name": "Appar",
"linksTo": "/docs/monitor/dashboard/apps",
"owns": "Gemensam startvy för registrerade LXC-webblänkar och egna länkar, med kategorier, sökning, gästgenvägar och uppdateringsindikatorer per applikation."
},
{
"name": "Lagring",
"owns": "Proxmox pooler, fysiska diskar, SMART data, ZFS tillstånd, slitage och livstid, observationshistorik."
},
{
"name": "Nätverk",
"owns": "Fysiska gränssnitt, bondningar, bryggor och OVS, IP/MAC-adresser, RX/TX-diagram och RRD-historik per gränssnitt."
},
{
"name": "VM och LXC",
"owns": "Inventering av gäster, detaljvyer för konfiguration, mätvärden och loggar samt start, stopp, omstart och avstängning."
},
{
"name": "Hårdvara",
"owns": "CPU modell och topologi, minne layout, PCIe topologi, GPU med per-slot realtid övervakning."
},
{
"name": "Systemloggar",
"owns": "Live <code>journalctl</code> med filter, Proxmox aktivitetshistorik, anmälningslogg, nedladdningsbara loggpaket."
},
{
"name": "Terminal",
"owns": "Skal till värden eller valfri VM/CT i webbläsaren, med <code>xterm.js</code> över WebSockets."
},
{
"name": "Säkerhet",
"owns": "Auth installation, lösenord / 2FA / API tokens, revisionslogg, valfri Fail2Ban panel, Secure Gateway distribution."
},
{
"name": "Inställningar",
"owns": "Monitors språk, navigeringsordning, aviseringskanaler, AI-leverantör, hälsotrösklar, undantag och inventering av efterinstallationsoptimeringar."
}
]
},
"headerAnatomy": {
"heading": "Header anatomi",
"items": [
"<strong>Logo + produktnamn</strong> till vänster. Logotypen förvandlas till en \"uppdatering tillgänglig\" variant när en nyare Monitor release upptäcks.",
"<strong>Nodidentitet</strong>: namn från <code>pvesh get /nodes</code>, med <code>hostname</code> som reserv.",
"<strong>Statusindikator</strong>: Frisk (grön), Varning (gul), Kritisk (röd). Ett klick öppnar hälsoövervakningen. Ett blått <em>info</em>-märke visas när avfärdade poster fortfarande är inom sin undertryckningstid.",
"<strong>Drifttid</strong>: värdens drifttid i lättläst format.",
"<strong>Uppdateringsknapp</strong>: upprepar API-anropen för aktuella data utan att ladda om hela sidan.",
"<strong>Temaväljare</strong>: ljust, mörkt eller system. Sparas i <code>localStorage</code>."
]
},
"whereNext": {
"heading": "Var till nästa",
"items": [
{
"label": "Apps flik",
"href": "/docs/monitor/dashboard/apps",
"tail": " — gemensam startvy för webblänkar och dess relation till registrerade LXC-applikationer."
},
{
"label": "Systemöversikt flik",
"href": "/docs/monitor/dashboard/system-overview",
"tail": " - landningsfliken, fullt dokumenterad."
},
{
"label": "Hälsoövervakare",
"href": "/docs/monitor/health-monitor",
"tail": " — dialogen bakom statusindikatorn med detaljer för tio kategorier."
},
{
"label": "Arkitektur",
"href": "/docs/monitor/architecture",
"tail": " — Hur instrumentpanelen pratar med Flask backend."
}
]
}
}
@@ -0,0 +1,251 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt: fliken Nätverk | ProxMenux-dokumentation",
"description": "Fliken Nätverk listar värdens gränssnitt: fysiska nätverkskort, bryggor, bond-gränssnitt, VLAN och virtuella VM/LXC-gränssnitt. Detaljvyn visar IP, MAC, status, bond-medlemmar, trafik sedan start och RRD-historik."
},
"header": {
"title": "Översikt: fliken Nätverk",
"description": "Gränssnitten som kärnan rapporterar — fysiska kort, bryggor, bond-gränssnitt, VLAN och virtuella VM/LXC-portar — grupperas i tre kort. Klicka på en rad för att visa adresser, trafikräknare och historiska RRD-data.",
"section": "ProxMenux Monitor · Översikt"
},
"intro": {
"title": "Aktuella och historiska data",
"body": "Aktuell status kommer från <code>psutil.net_if_stats()</code> och <code>ip</code>, bandbreddshistoriken från Proxmox RRD-lagring via <code>/api/network/&lt;interface&gt;/metrics</code>. Räknarna uppdateras ungefär var femte sekund och RRD-data för diagrammet hämtas vid behov."
},
"topRow": {
"heading": "Översta raden: fyra statistikkort",
"headerCard": "Kort",
"headerWhat": "Vad det visar",
"rows": [
{
"card": "Nätverkstrafik",
"what": "Aggregerad RX / TX-hastighet över alla gränssnitt, formaterad i rätt enhet (bps / Kbps / Mbps / Gbps)."
},
{
"card": "Aktiva gränssnitt",
"what": "Två räknare: <em>Physical X / Y</em> och <em>Bridges X / Y</em>, aktiva av totalt antal. En första kontroll när något slutar fungera."
},
{
"card": "Nätverksstatus",
"what": "Snabb bedömning: Bra / Varning / Kritiskt utifrån länkstatus, gatewayens nåbarhet och bryggans integritet. Motsvarar kategorin <em>Nätverksgränssnitt</em> i Health Monitor."
},
{
"card": "Nätverkslatens",
"what": "Svarstid till gatewayen med ett litet diagram. Ett klick öppnar <strong>dialogen Nätverkslatens</strong> som beskrivs nedan: historik och pingtest vid behov mot gatewayen, Cloudflare eller Google med en nedladdningsbar PDF-rapport."
}
]
},
"flow": {
"heading": "Nätverksflödesdiagram",
"intro": "Mellan den översta raden och de tre korten visar <strong>Network Flow</strong> aktuell topologi. Paketvägarna går från fysiska nätverkskort via bryggor i mitten till VM och containrar. Animerade pulser visar aktuell rx/tx-trafik på varje länk.",
"imageAlt": "Nätverksflödesdiagram - NICs till vänster, värd och broar i mitten, VM och LXCs till höger, med animerade pulser på varje anslutning",
"imageCaption": "Nätverksflöde - färgkodade noder plus animerade kometer vars riktning och tjocklek återspeglar levande trafik.",
"elementsTitle": "Vad diagrammet visar",
"elementsIntro": "Varje nod representerar en post i samma inventering som korten nedanför. Topologin gör deras samband direkt synliga:",
"elements": [
"<strong>Nätverkskort</strong> (orange) — fysiska gränssnitt med aktiv länk; inaktiva visas nedtonade.",
"<strong>Värd</strong> (orange) — Proxmox-värden mellan nätverkskort och bryggor. En fast punkt som inte är klickbar.",
"<strong>Bryggor</strong> (cyan) — Linux- och OVS-bryggor med minst en aktiv gäst. Oanvända bryggor döljs så att diagrammet visar den faktiska trafiken.",
"<strong>LXC</strong> (cyan) — containrar som körs och är anslutna till en brygga.",
"<strong>VM</strong> (lila) — virtuella maskiner som körs och är anslutna till en brygga.",
"Stoppade VM och containrar döljs."
],
"pulsesTitle": "Vad animationen kodar",
"pulsesBody": "De animerade kometer som reser längs varje kant representerar levande trafik:",
"pulses": [
"<strong>Riktning</strong> — mot nätverkskortet betyder gästens <em>tx</em>, mot gästen betyder <em>rx</em>.",
"<strong>Linjebredden</strong> ökar med gästens rx+tx-hastighet. Utan trafik syns fortfarande en svag animerad linje; vid hög trafik blir den tjock.",
"<strong>Kometens huvudglöd</strong> — varm ton runt 1 MB/s, intensiv från 30 MB/s. Hjälper dig att se vilken gäst som belastar ett nätverkskort mest.",
"<strong>Klick</strong> — alla noder utom värden öppnar gränssnittets detaljdialog som beskrivs nedan. Ett klick på värden har ingen effekt; den har ingen dialog i denna vy."
],
"useTitle": "När det är användbart",
"useBody": "Korten visar <em>vad</em> som finns; diagrammet visar <em>hur det är anslutet</em> och var trafiken går. Du kan se gäster på samma brygga, två aktiva gäster som delar nätverkskort — en möjlig flaskhals — eller en VM som mättar en länk medan övriga är tysta."
},
"groups": {
"heading": "Tre gränssnittsgrupper",
"intro": "Tre kort grupperar gränssnitten efter funktion. Varje rubrik visar antalet aktiva gränssnitt. En färgad etikett anger varje gränssnitts <strong>typ</strong>:",
"badges": [
"Blå <strong>Physical</strong> - verklig NIC.",
"Grönt <strong>Bridge</strong> - Linux bridge eller OVS bridge (<code>vmbr*</code>).",
"Lila <strong>Bond</strong> — aggregerat gränssnitt med bond / LACP / active-backup.",
"Cyan <strong>VLAN</strong> — VLAN-undergränssnitt (<code>vmbr0.10</code>, <code>eno1.42</code>, …)."
],
"clickable": "<strong>Varje rad är klickbar</strong>: fysiska och virtuella gränssnitt, bryggor och bond-gränssnitt. Detaljvyn nedan visar grunduppgifter, IP, räknare och RX/TX-historik från Proxmox RRD-lagring.",
"physicalTitle": "Fysiska gränssnitt",
"physicalBody": "Fysiska gränssnitt som kärnan identifierar: <code>eno1</code>, <code>enp4s0</code>, <code>eth0</code>, <code>wlp3s0</code> med flera. Varje enhet har en rad med blå etikett <strong>Physical</strong> och länkstatus. Även <em>bond-medlemmar</em> visas med hänvisning till sitt bond-gränssnitt.",
"bridgeTitle": "Brygggränssnitt",
"bridgeBody": "Linux-bryggor (<code>vmbr0</code>, <code>vmbr1</code>, …) och OVS-bryggor som Proxmox hanterar. Varje rad visar grön etikett <strong>Bridge</strong>, det fysiska gränssnittet om bryggan har en enda port och status. Bond-gränssnitt har lila <strong>Bond</strong>, VLAN-undergränssnitt cyan <strong>VLAN</strong>.",
"vmTitle": "VM-/LXC-gränssnitt",
"vmBody": "Gränssnitt <code>tap*</code> och <code>veth*</code> som skapas när gäster startar, ett per virtuellt nätverkskort. Rubriken visar <em>X / Y Active</em> och raderna länkar till VM/CT i fliken VMs & LXCs. Efter ett stopp försvinner inaktiva poster vid nästa uppdatering."
},
"drillIn": {
"heading": "Detaljer per gränssnitt",
"intro": "Ett klick på en rad öppnar en dialog med fem block:",
"headerBlock": "Block",
"headerContents": "Innehåll",
"rows": [
{
"block": "Grundläggande information",
"contents": "Namn, typ (fysiskt / brygga / bond / VLAN / vm), MAC-adress, status (aktivt / inaktivt), MTU och underliggande fysiskt gränssnitt för virtuella typer."
},
{
"block": "Bond-medlemmar",
"contents": "Endast för bond-gränssnitt: varje ingående kort med aktiv-/felstatus, bond-läge (active-backup / 802.3ad / balance-alb / …) och primärt gränssnitt om det är konfigurerat."
},
{
"block": "IP-adresser",
"contents": "Varje IPv4/IPv6-adress med prefixlängd. Automatiskt konfigurerade länklokala adresser visas i grått."
},
{
"block": "Historiska diagram",
"contents": "RX/TX-bandbredd under valt intervall (1 timme / 24 timmar / 7 dagar / 30 dagar / 1 år), hämtad från <code>/api/network/&lt;interface&gt;/metrics</code> (Proxmox RRD)."
},
{
"block": "Trafik sedan senaste start",
"contents": "Totalt antal RX/TX-byte och paket sedan värdens senaste start samt räknare för fel och tappade paket."
}
],
"inactiveTitle": "Detaljer visas även för inaktiva gränssnitt",
"inactiveBody": "Om gränssnittet är <em>inaktivt</em> visar dialogen meddelandet ”Inaktivt gränssnitt” utan aktuella räknare. Konfiguration med adresser och bond-medlemmar samt historik visas fortfarande för att undersöka vad som gick fel och när."
},
"latency": {
"heading": "Dialog för nätverkslatens",
"intro": "Klicka på <em>Nätverkslatens</em> i den översta raden för att öppna dialogen med historik, test vid behov, tre mål och en nedladdningsbar PDF-rapport.",
"targetsTitle": "Mål",
"targetsIntro": "Listan längst upp väljer målet för pingtestet:",
"targets": [
"<strong>Gateway</strong> — din LAN-router. Testar bara den lokala sträckan för att undersöka switch- eller kabelfel utan att inkludera WAN.",
"<strong>Cloudflare (1.1.1.1)</strong> — offentlig DNS-resolver i ett anycast-nätverk. Testar WAN-sträckan.",
"<strong>Google (8.8.8.8)</strong> — alternativt offentligt mål för kontroll av resultaten eller vid regionala Cloudflare-problem."
],
"mode1Title": "Läge 1 — Historik",
"mode1Alt": "Latensdialog i historikläge med målet Gateway, ett tidsintervall på en timme och tidigare mätningar i diagrammet",
"mode1Caption": "Gatewayens historik för den senaste timmen. Insamlingstråden för temperatur och latens sparar mätningarna i historikdatabasen var 60:e sekund.",
"mode1Body1": "Dialogens standardläge. En andra lista väljer tidsintervallet (<em>1 timme / 6 timmar / 24 timmar / 3 dagar / 7 dagar</em>). Ovanför visas Aktuellt / Min / Medel / Max och status Utmärkt / Bra / Måttlig / Dålig enligt gränserna nedan.",
"mode1Body2": "Källa: mätningarna som Health Monitor använder för att upptäcka varaktiga nätverksfördröjningar. Bakgrundstråden <code>_temperature_collector_loop</code> mäter gatewayen var 60:e sekund och sparar historiken lokalt i SQLite.",
"mode2Title": "Läge 2 — Realtidstest",
"mode2Alt": "Latensdialog med pingtest mot Cloudflare i realtid, 50 % förlopp och nya mätningar i diagrammet",
"mode2Caption": "Tvåminuterstest mot Cloudflare med en mätning var femte sekund som genast läggs till i diagrammet. <em>Stoppa</em> avslutar i förtid; <em>Testa igen</em> lägger till mätningar i samma datamängd.",
"mode2Intro": "Växla målet till Cloudflare eller Google startar ett on-demand ping test. Beteende:",
"mode2Items": [
"<strong>Varaktighet</strong> — två minuter per körning med förloppsindikator och återstående sekunder.",
"<strong>Intervall</strong> — en mätning var femte sekund, 24 per körning.",
"<strong>Metod</strong> — ICMP Echo Request (<code>ping</code>), tre ping i följd per mätning med genomsnittlig latens.",
"<strong>Stoppa</strong> — avslutar testet direkt och bevarar hittills insamlade data.",
"<strong>Testa igen</strong> — lägger till mätningar i befintliga data för en längre historik över flera körningar.",
"<strong>Aktuell statusindikator</strong> — omvärderas efter varje mätning med samma gränser för Utmärkt / Bra / Måttlig / Dålig."
],
"thresholdsTitle": "Prestandagränser",
"headerStatus": "Status",
"headerRange": "Intervall",
"headerImpact": "Praktisk påverkan",
"thresholdRows": [
{
"status": "Utmärkt",
"range": "< 50 ms",
"impact": "Optimal för realtidsappar, spel och videosamtal."
},
{
"status": "Bra",
"range": "50 – 100 ms",
"impact": "Acceptabel för de flesta applikationer med minimal påverkan."
},
{
"status": "Måttlig",
"range": "100 – 200 ms",
"impact": "Noterbar fördröjning. Kan påverka VoIP och interaktiva appar."
},
{
"status": "Dålig",
"range": "> 200 ms",
"impact": "Betydande latens. Utredning rekommenderas."
}
],
"reportTitle": "Rapport om nätverkslatens (PDF)",
"reportIntro": "Båda lägena har knappen <strong>Rapport</strong> bredvid målväljaren. Den skapar en PDF med mätningarna som du kan bifoga ett supportärende hos internetleverantören.",
"reportPreviewAlt": "Första PDF-sidan i latensrapporten med sammanfattning, mätare, statistik, diagram och gränsvärdesguide",
"reportPreviewCaption": "Första sidan innehåller sammanfattning, mätare, huvudstatistik, latens över tid och gränsvärdesguide. Från sida 2 följer mättabellen och metoden.",
"downloadLabel": "Hämta exempelrapport om latens (PDF)",
"sectionsIntro": "Rapporten har sex avsnitt:",
"sections": [
"<strong>Sammanfattning</strong> — mätare från 0 till över 300 ms med gröna, gula och röda zoner; status Utmärkt / Bra / Måttlig / Dålig; mål, läge, antal mätningar och sammanfattad paketförlust.",
"<strong>Latensstatistik</strong> — fyra indikatorer för aktuellt värde, minimum, medel och maximum samt antal mätningar, genomsnittlig paketförlust och testperiod.",
"<strong>Latensdiagram</strong> — ytdiagram över testets mätningar med minimum, medel och maximum markerade på den lodräta axeln.",
"<strong>Prestandagränser</strong> — samma fyrgradiga skala som ovan med en färgad punkt per nivå.",
"<strong>Detaljerade resultat</strong> — numrerad tabell med tidsstämpel, latens, paketförlust och status för varje mätning. Visar korta toppar som kan döljas av medelvärden.",
"<strong>Metod</strong> — ICMP Echo Request, tre ping i följd per mätning, målets namn och IP samt en slutbedömning utifrån status."
],
"useCaseTitle": "Användningsfall: support hos internetleverantören",
"useCaseBody": "Kör Cloudflare-testet i två minuter när anslutningen känns långsam, förläng med <em>Testa igen</em> och välj <em>Rapport</em>. PDF-filen innehåller alla mätningar och metoden. Du kan bifoga den till ett supportärende med tiderna för problemet; leverantören avgör vilka underlag som behövs."
},
"excluding": {
"heading": "Utesluta gränssnitt från övervakning",
"body1": "Gränssnitt kan uteslutas från övervakning, som avsiktligt avstängda bryggor, testgränssnitt eller borttagna kort som finns kvar i konfigurationen. Inställningen sparas i <code>excluded_interfaces</code>: Health Monitor ger inga varningar eller aviseringar och räknar inte in dem i den övergripande statusen.",
"body2": "Välj <em>Uteslut från övervakning</em> i radens snabbmeny. Gränssnittet visas fortfarande med lila etikett <strong>uteslutet</strong>. Samma meny återaktiverar övervakningen."
},
"dataCollected": {
"heading": "Hur data samlas in",
"headerSection": "Avsnitt av fliken",
"headerEndpoint": "Ändpunkt",
"headerSource": "Källa",
"rows": [
{
"section": "Gränssnittsinventering",
"endpoint": "/api/network",
"source": "<code>ip -j addr</code> + <code>ip -j link</code> och analys av bond-gränssnitt och bryggor."
},
{
"section": "Sammanfattningskort",
"endpoint": "/api/network/summary",
"source": "Sammanställning av inventeringen och antal aktiva och inaktiva gränssnitt."
},
{
"section": "RX/TX-historik per gränssnitt",
"endpoint": "/api/network/<iface>/metrics",
"source": "Aktuella räknare använder <code>/proc/net/dev</code>; diagramhistoriken kommer från Proxmox RRD via pvesh. VM/LXC-gränssnitt använder gästdata, fysiska gränssnitt och bryggor använder noddata."
},
{
"section": "Latens: aktuell",
"endpoint": "/api/network/latency/current",
"source": "Kort serie <code>ping</code> mot konfigurerad gateway eller annat mål."
},
{
"section": "latens: historisk",
"endpoint": "/api/network/latency/history",
"source": "Mätningar sparas ungefär var 60:e sekund av bakgrundstråden för temperatur och latens."
}
],
"codeComment1": "# Kontrollera gränssnittsstatusen som visas i översikten",
"codeComment2": "# Kontrollera en aktuell latensmätning från början till slut"
},
"whereNext": {
"heading": "Läs vidare",
"items": [
{
"label": "Hälsoövervakare",
"href": "/docs/monitor/health-monitor",
"tail": " — kategorin Nätverk och gränsvärden för latenshistoriken."
},
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tail": " — ändpunkter för nätverk och latens."
},
{
"label": "Integrationer",
"href": "/docs/monitor/integrations",
"tail": " — Prometheus-insamlingen visar samma nätverksmått."
},
{
"label": "Översiktsindex",
"href": "/docs/monitor/dashboard",
"tail": " — de andra flikarna."
},
{
"label": "ProxMenux → Nätverk",
"href": "/docs/network",
"tail": " - Åtgärdssidan: broanalys, ihållande gränssnittsnamn, backup och omstart, iperf3."
}
]
}
}
@@ -0,0 +1,246 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt: fliken Säkerhet | ProxMenux-dokumentation",
"description": "Fliken Säkerhet samlar skyddsfunktionerna i två kolumner: ProxMenux Monitor (autentisering, SSL/HTTPS, API-token, Secure Gateway) och Proxmox VE (brandvägg, Fail2Ban, Lynis-granskning). Med stegvisa anvisningar för Secure Gateway, Lynis-granskning samt installation och regelinställningar för Fail2Ban."
},
"header": {
"title": "Översikt: fliken Säkerhet",
"description": "Säkerhetsfunktionerna är uppdelade i två block: inställningar för Monitor (autentisering, SSL, token, Secure Gateway) och för den övervakade Proxmox-värden (brandvägg, Fail2Ban, Lynis).",
"section": "ProxMenux Monitor · Översikt"
},
"intro": {
"title": "Två områden, en flik",
"body": "Fliken Säkerhet har två avsnitt: <strong>ProxMenux Monitor</strong> (översiktens inställningar) och <strong>Proxmox VE</strong> (värdens inställningar). Korten för Fail2Ban och Lynis erbjuder installation när verktygen saknas och visar sedan deras kontroller när de är installerade."
},
"monitor": {
"heading": "ProxMenux Monitor",
"intro": "Fyra kort styr åtkomsten till översikten och autentiseringen."
},
"auth": {
"heading": "Autentisering",
"imageAlt": "Autentiseringskort med status Aktiverad, knapparna Logga ut och Ändra lösenord, information om tvåfaktorsautentisering samt knappar för att aktivera 2FA och inaktivera autentisering",
"imageCaption": "Kort med autentisering aktiverad: statusindikator, Ändra lösenord, Aktivera 2FA och den destruktiva åtgärden Inaktivera autentisering.",
"intro": "Kortet hanterar inloggningen till översikten. Första starten, lösenordsregler, TOTP-konfiguration och återställning när autentiseraren gått förlorad beskrivs i <link>Åtkomst och autentisering</link>. Kortet används för den dagliga hanteringen av dessa inställningar:",
"items": [
"<strong>Autentiseringsstatus</strong> — indikator med <em>Aktiverad</em> / <em>Inaktiverad</em> / <em>Avböjd</em>.",
"<strong>Ändra lösenord</strong> — nuvarande lösenord + nytt lösenord + bekräftelse.",
"<strong>Aktivera / Inaktivera tvåfaktorsautentisering</strong> — öppnar konfigurationsdialogen med QR-kod vid aktivering och begär det nuvarande lösenordet vid inaktivering.",
"<strong>Inaktivera autentisering</strong> — destruktiv åtgärd som vid nästa besök åter visar startdialogen <em>Skydda din översikt?</em>."
]
},
"ssl": {
"heading": "SSL / HTTPS",
"imageAlt": "SSL/HTTPS-kort med status HTTP utan SSL, upptäckt Proxmox-certifikat med innehavare, utfärdare och utgångsdatum samt alternativ för Proxmox-certifikatet eller ett eget certifikat",
"imageCaption": "SSL/HTTPS-kort med HTTPS avstängt. Monitor upptäcker certifikatet på Proxmox-värden och låter dig använda det med ett klick. Välj <em>Använd eget certifikat</em> om du har egna filer på annan plats.",
"intro": "Gör översikten tillgänglig via HTTPS utan omvänd proxy. Kortet upptäcker certifikatet som Proxmox använder under <code>/etc/pve/local/</code> och visar innehavare, utfärdare och utgångsdatum för kontroll före aktivering. HTTPS kan aktiveras på två sätt:",
"items": [
"<strong>Använd Proxmox-certifikat</strong> — Monitor återanvänder värdens certifikat med ett klick. Lämpligt om PVE och översikten redan använder samma DNS-namn.",
"<strong>Använd eget certifikat</strong> — klistra in absoluta sökvägar till <code>.pem</code>-certifikatet och den privata <code>.key</code>-nyckeln. De valideras före omstarten. Om inläsningen misslyckas återgår översikten automatiskt till HTTP och förblir tillgänglig."
],
"enabledAlt": "SSL/HTTPS-kort med HTTPS aktiverat, aktivt certifikat med sökvägar till pve-ssl.pem och pve-ssl.key samt knappen Inaktivera HTTPS",
"enabledCaption": "HTTPS är aktivt — kortet visar certifikatet som används, filsökvägarna och åtgärden <em>Inaktivera HTTPS</em>, som återgår till HTTP på samma port.",
"acmeTitle": "ACME / Let's Encrypt via Proxmox",
"acmeBody": "Om Let’s Encrypt redan är konfigurerat på Proxmox-noden under <em>Datacenter → Certifikat → ACME</em> återanvänder översikten det certifikat som värden visar för webbläsare när du väljer <em>Använd Proxmox-certifikat</em>. Monitor behöver ingen separat ACME-konfiguration.",
"walkthroughLink": "Se <link>HTTPS för ProxMenux Monitor</link> för stegvisa anvisningar om upptäckt av ACME-certifikatet, vad som skrivs till disk och hur du använder ett eget <code>.pem</code> / <code>.key</code>-par."
},
"apiTokens": {
"heading": "API-åtkomsttoken",
"emptyAlt": "Tomt kort för API-åtkomsttoken med information om token och knappen Generera ny API-token",
"emptyCaption": "Tokenkort efter en nyinstallation. Rutan <em>Om API-token</em> beskriver giltighetstid, användning och hur token läggs in i <code>Authorization: Bearer</code>-huvuden.",
"intro": "Token med ett års giltighet för automatiserade integrationer: Homepage-widgetar, REST-sensorer i Home Assistant, Grafana-insamlare, n8n-flöden och egna skript. Kortet har tre steg: tomt → formulär → genererad token.",
"generateBody": "<strong>Generera en token.</strong> Klicka på <em>Generera ny API-token</em>. Ange ett beskrivande <em>tokennamn</em> för identifiering i listan och ditt <em>lösenord</em> som extra bekräftelse. Om 2FA är aktiverat krävs även den aktuella TOTP-koden.",
"generateAlt": "Formulär för att generera API-token med fälten Tokennamn och Lösenord samt knapparna Generera token och Avbryt",
"generateCaption": "Formuläret Generera API-token: ange ett namn och bekräfta med lösenordet samt TOTP-koden om 2FA är aktiverat.",
"saveBody": "<strong>Spara token direkt.</strong> Hela tokenvärdet visas <strong>bara en gång</strong> efter att det genererats. Kortet markerar detta med ett orange meddelande och en kopieringsknapp. Värdet kan inte hämtas senare; listan över aktiva token visar bara prefixet.",
"generatedAlt": "Genererad API-token med maskerat värde, kopieringsknapp, instruktioner för huvudet Authorization: Bearer och lista över aktiva token med prefix",
"generatedCaption": "Token har genererats: värdet visas en gång med en kopieringsknapp och det exakta utdraget <code>Authorization: Bearer</code>. Listan över aktiva token visar namn, prefix och skapelsedatum så att du kan återkalla enskilda token.",
"outro": "Varje aktiv token har knappen <em>Återkalla</em>. Återkallelsen ogiltigförklarar token direkt och stoppar integrationer som använder den. Exempel för Homepage, Home Assistant, n8n och Prometheus finns under <link>Integrationer</link>."
},
"gateway": {
"heading": "Secure Gateway",
"cardAlt": "Secure Gateway-kort före den första installationen med knappen Installera Secure Gateway",
"cardCaption": "Secure Gateway-kort efter en nyinstallation: en knapp startar guiden.",
"intro": "Nå översikten, Proxmox webbgränssnitt och gästerna varifrån som helst i ditt <a>Tailscale</a>-nätverk utan att öppna portar mot internet. Monitor installerar en Alpine LXC-container på värden med <code>tailscaled</code> som undernätsrouter. Efter godkännande i Tailscales administratörskonsol kan fjärrenheterna nå värdens LAN-IP överallt.",
"wizardTitle": "Steg-för-steg guide",
"wizardIntro": "Skapa en autentiseringsnyckel i Tailscales konsol innan du klickar på <em>Deploy Secure Gateway</em>. Guiden ber om den i steg 2.",
"step0Title": "0. Skapa Tailscales autentiseringsnyckel",
"step0Body": "Logga in på <a>login.tailscale.com/admin/settings/keys</a> och klicka på <em>Generate auth key…</em>. Välj en <em>förautentiserad</em> nyckel så att gatewayen inte behöver en interaktiv Tailscale-inloggning. Kopiera värdet; det visas bara en gång.",
"step0Alt": "Sidan Settings → Keys i Tailscales administratörskonsol med knappen Generate auth key markerad",
"step0Caption": "Tailscale admin konsol - <em>Settings → Keys → Generate auth key...</em>. Använd ett gratis Tailscale-konto om du inte har en ännu (länk inuti guiden).",
"step1Title": "1. Öppna guiden",
"step1Body": "Gå tillbaka till fliken Säkerhet och klicka på <em>Deploy Secure Gateway</em>. Det första steget beskriver funktioner och krav.",
"step1Alt": "Introduktion i Secure Gateway-guiden: VPN-åtkomst utan portvidarebefordran och med totalsträckskryptering",
"step1Caption": "Steg 1 - översikt över vad Secure Gateway ger och en påminnelse om att du behöver ett gratis Tailscale-konto.",
"step2Title": "2. Tailscale autentisering",
"step2Body": "Klistra in autentiseringsnyckeln från steg 0 och välj ett värdnamn. Gatewayen visas med detta namn i Tailscales konsol, vanligtvis <code>proxmox-gateway</code> eller nodens namn.",
"step2Alt": "Steg i Secure Gateway-guiden med fält för Tailscales autentiseringsnyckel och enhetens värdnamn samt en länk för att skapa nyckeln",
"step2Caption": "Steg 2: klistra in den förautentiserade nyckeln och välj värdnamn. Om du hoppade över steg 0 öppnar länken under fältet motsvarande Tailscale-sida.",
"step3Title": "3. Åtkomstområde",
"step3Intro": "Välj vad ditt tailnet kan nå genom gateway:",
"step3Items": [
"<strong>Proxmox Only</strong> - endast Proxmox UI och Monitor. Mindre attackyta.",
"<strong>Hela det lokala nätverket</strong> — hela LAN-undernätet, automatiskt upptäckt via värdens primära gränssnitt. Ger åtkomst till NAS, skrivare, virtuella maskiner och andra LAN-enheter.",
"<strong>Egna undernät</strong> — ange specifika CIDR-nät. För miljöer med flera VLAN där bara vissa segment ska vara åtkomliga."
],
"step3Alt": "Steget Åtkomstområde i Secure Gateway-guiden med alternativen Endast Proxmox, Hela det lokala nätverket och Egna undernät",
"step3Caption": "Steg 3: välj åtkomstområde. <em>Hela det lokala nätverket</em> fyller automatiskt i det upptäckta LAN-undernätet.",
"step4Title": "4. Avancerade alternativ (valfritt)",
"step4Intro": "Två valfria reglage, båda <strong>avstängda som standard</strong>:",
"step4Items": [
"<strong>Exit Node</strong> — när den aktiveras och väljs på en fjärrenhet går all enhetens internettrafik via Proxmox-värdens WAN-anslutning. Praktiskt på resor när du vill använda hemmets internetanslutning från telefonen.",
"<strong>Acceptera rutter</strong> — låter gatewayen nå nätverk som annonseras av <em>andra</em> undernätsroutrar i Tailscale-nätverket, för installationer på flera platser."
],
"step4Alt": "Steget Avancerade alternativ i Secure Gateway-guiden med kryssrutorna Exit Node och Accept Routes",
"step4Caption": "Steg 4: Exit Node och Accept Routes. Låt båda vara avstängda om du bara behöver nå översikten från telefonen eller datorn.",
"step5Title": "5. Granska och installera",
"step5Body": "Slutlig sammanfattning före installationen. Guiden påminner om ett manuellt steg som återstår i Tailscales konsol efteråt: <strong>godkänna undernätsrutten</strong>.",
"step5Alt": "Steget Granska och installera i Secure Gateway med sammanfattning av värdnamn, åtkomstläge, nätverk, Exit Node och Accept Routes samt knappen Installera gateway",
"step5Caption": "Steg 5 - granska konfigurationen och distribuera. Det blå meddelandet längst ner flaggar det väntande ruttgodkännandet.",
"approvalTitle": "Ett sista manuellt steg i Tailscale admin",
"approvalBody": "Öppna <a>login.tailscale.com/admin/machines</a> efter installationen och godkänn undernätsrutten som gatewayen annonserar. Innan dess kan fjärrenheter i Tailscale-nätverket inte nå LAN-IP-adresser via gatewayen. Tailscale markerar väntande rutter med en gul varning på enhetens rad. Klicka på <em>Edit route settings</em> och markera rutten."
},
"pve": {
"heading": "Proxmox VE",
"intro": "Värdens skydd: brandvägg, intrångsskydd och säkerhetsgranskning. Korten för Fail2Ban och Lynis erbjuder installation om verktygen saknas och visar sedan deras kontroller."
},
"firewall": {
"heading": "Proxmox Firewall",
"imageAlt": "Proxmox-brandväggskort med kluster- och värdstatus, snabbåtkomstregler för Monitor och Proxmox webbgränssnitt, räknare, regellista och knappen Lägg till regel",
"imageCaption": "Proxmox-brandväggskort: reglage för kluster och värd, vanliga portar under <em>Snabbåtkomstregler</em>, räknare under <em>Regelöversikt</em> och fullständig lista med <em>+ Lägg till regel</em>.",
"intro": "Kortet hanterar Proxmox VE:s brandväggskonfiguration. Den klassiska motorn använder <code>iptables</code> och alternativet använder <code>nftables</code>. Regler som skapats utanför Proxmox hanteras inte. Tre block:",
"items": [
"<strong>Klusterbrandvägg + värdbrandvägg</strong> — övergripande reglage. Klusterbrandväggen måste vara aktiv för att värdens regler ska få effekt. Kortet visar detta beroende vid inställningen.",
"<strong>Snabbåtkomstregler</strong> — fördefinierade rader för <code>8008/TCP</code> (Monitor) och <code>8006/TCP</code> (Proxmox webbgränssnitt) med läget tillåtet, blockerat eller oskyddat. Proxmox-gränssnittet tillåts via ett <em>inbyggt</em> brandväggsmakro som inte kan tas bort av misstag.",
"<strong>Regelöversikt</strong> — räknare för alla regler, accept-regler, drop/reject-regler och olika skyddade portar. Värdena läses från <code>/etc/pve/firewall/cluster.fw</code> och <code>/etc/pve/nodes/&lt;node&gt;/host.fw</code>.",
"<strong>Brandväggsregler</strong> — lista med åtgärd, protokoll, port, källa och nivå. <em>+ Lägg till regel</em> öppnar redigeraren i kortet; papperskorgen tar bort regeln. Ändringar sparas i Proxmox-filerna och visas även i dess gränssnitt (Datacenter / Node → Firewall)."
]
},
"fail2ban": {
"heading": "Fail2Ban",
"subHeading": "(beroende på status)",
"whatIs": "<strong>Vad är det?</strong> Fail2Ban är en tjänst med öppen källkod som upptäcker upprepade misslyckade inloggningar i loggar och blockerar IP-adressen i brandväggen. Den skyddar SSH och webbformulär mot ständiga brute force-attacker. ProxMenux konfigurerar tre jails: SSH, Proxmox webbinloggning (port 8006) och ProxMenux Monitors inloggning (port 8008).",
"notBundled": "Fail2Ban <strong>ingår inte</strong>. Kortet känner av om det är installerat och anpassas därefter: om det saknas erbjuds installation med ett klick. När det är installerat visas aktuell jail-status och blockerade IP-adresser, och antal försök samt blockeringstid kan ställas in för varje jail.",
"notInstalledAlt": "Fail2Ban-kort i läget Inte installerat med beskrivning av skydd för SSH, Proxmox webbgränssnitt och Monitor via nftables samt knappen Installera och konfigurera Fail2Ban",
"notInstalledCaption": "Fail2Ban-kortet innan du installerar - den blå rutan förhandsgranskar vad installationen skulle konfigurera.",
"clickBody": "Klicka på <em>Installera och konfigurera Fail2Ban</em> för att öppna en bekräftelsedialog med alla ändringar som skriptet gör på värden:",
"confirmAlt": "Fail2Ban-bekräftelse med aggressivt SSH-läge, skydd för Proxmox på port 8006 och Monitor på port 8008, identifiering av nftables, justerad journald-loggning och SSH-skydd via MaxAuthTries",
"confirmCaption": "Installationsbekräftelse: lista över jails, ändrad loggnivå i journald för att läsa SSH-händelser samt extra SSH-skydd (<code>MaxAuthTries=3</code>).",
"confirmIntro": "Efter bekräftelsen visar en panel installationen i realtid: apt, jail-konfiguration och tester. Samma mekanism används av ProxMenux CLI-installationsprogram.",
"progressAlt": "Panel med Fail2Bans installationslogg: paket, journald MaxLevelStore för autentisering, jails, nftables-identifiering, MaxAuthTries-skydd, kommunikationstest med fail2ban-client och slutmeddelande",
"progressCaption": "Installation pågår: varje steg loggas i panelen. Meddelandet Connection closed längst ner markerar att överföringen är avslutad.",
"afterInstall": "Efter installationen visar kortet aktuell status: konfigurerade jails, blockerade IP-adresser och senaste blockeringar. Flikarna skiljer <em>Jails och blockerade IP-adresser</em> från <em>Senaste aktivitet</em>, de senaste N posterna i Fail2Ban-loggen.",
"activeAlt": "Aktivt Fail2Ban-kort med tre jails (proxmenux, proxmox, sshd), räknare för blockerade IP-adresser, totala blockeringar och misslyckade försök samt rader med försök, blockeringstid, intervall och kugghjul",
"activeCaption": "Fail2Ban är aktivt: de tre förvalda jailsen (<code>proxmenux</code>, <code>proxmox</code>, <code>sshd</code>) med inställningar för försök, blockeringstid och identifieringsintervall.",
"tuneBody": "<strong>Justera jail-reglerna.</strong> Klicka på kugghjulet för att ändra <em>Max Retries</em>, <em>Ban Time</em> och <em>Find Time</em>, det rullande intervallet för att räkna försök. En permanent blockering gäller tills du tar bort den manuellt. Formuläret förklarar vanliga värden.",
"configAlt": "Formulär för jailen sshd med Max Retries, Ban Time i sekunder, alternativet Permanent Ban, Find Time, hjälp om vanliga värden och knappen Spara konfiguration",
"configCaption": "Redigera jailen sshd: sänk <em>Max Retries</em> om du bara använder SSH från ditt eget undernät, eller öka <em>Ban Time</em> för en översikt som är åtkomlig från internet.",
"outro": "Guiden <em>Installation, konfiguration och avinstallation</em> beskriver även manuell installation, ändringen av SSH MaxAuthTries och kopplingen till loggen <code>proxmenux-auth.log</code>. Se <link>ProxMenux → Säkerhet → Fail2Ban</link>.",
"calloutTitle": "Utan Fail2Ban blockerar den här mekanismen inga IP-adresser",
"calloutBody": "ProxMenux Monitor kontrollerar IP-adresser som blockerats av Fail2Ban på <em>applikationsnivå</em> innan Flask-begäranden behandlas. Den frågar fail2ban-client och sparar resultatet i cache i 30 sekunder; ingen SQL-tabell med blockeringar läses. Utan Fail2Ban loggas misslyckade inloggningar i <code>proxmenux-auth.log</code>, men mekanismen blockerar inga IP-adresser."
},
"lynis": {
"heading": "Säkerhetsgranskning med Lynis",
"subHeading": "(beroende på status)",
"whatIs": "<strong>Vad är det?</strong> Lynis är ett säkerhetsgranskningsverktyg med öppen källkod som kör omkring 280 tester på värden: filbehörigheter, kärnskydd, SSH, paketsårbarheter, kryptografiregler, schemalagda uppgifter, tjänsteidentifiering med mera. Det ger ett härdningsindex från 0 till 100, varningar och förslag. Det är en vanlig utgångspunkt för att bedöma Debian-servrar.",
"whyUseful": "<strong>Varför är det användbart?</strong> Att bedöma säkerheten genom att läsa varje konfigurationsfil är svårt. Lynis hittar vanliga förbiseenden: saknade kärnskydd, svaga SSH-chiffer, loggar som inte sparas permanent eller <code>NOPASSWD</code> i sudoers för standardkonton. En ny körning efter ProxMenux-ändringar gör förbättringen jämförbar genom en poäng.",
"notInstalledAlt": "Lynis-kort i läget Inte installerat med knappen Installera Lynis och funktionerna härdningsindex, sårbarhetsidentifiering, efterlevnadskontroll och GitHub-källkod",
"notInstalledCaption": "Lynis kort före installation - den blå rutan sammanfattar vad verktyget gör.",
"notBundled": "Lynis <strong>ingår inte</strong> heller. ProxMenux installerar det direkt från den officiella källkoden på GitHub i stället för Debian-paketet.",
"confirmAlt": "Bekräftelsedialog för Lynis med funktionerna härdningsindex, sårbarhetsidentifiering, konfigurationsanalys, efterlevnadskontroll och källkod från det officiella GitHub-arkivet",
"confirmCaption": "Installationsbekräftelse som uttryckligen anger GitHub som källa.",
"progressAlt": "Installationspanel för Lynis i realtid med installation av den senaste versionen, bekräftelse av version 3.1.6 och slutmeddelande",
"progressCaption": "Installation pågår: panelen visar loggen i realtid, precis som för Fail2Ban.",
"afterInstall": "Efter installationen visar kortet versionen och en tom granskningshistorik. Klicka på <em>Kör säkerhetsgranskning</em> för att starta den första kontrollen.",
"installedAlt": "Lynis-kort efter installation med version 3.1.6, tidpunkt för senaste kontroll, härdningsindex 0, varningar 0, förslag 0, tom rapport och knappen Kör säkerhetsgranskning",
"installedCaption": "Lynis är installerat, men ingen granskning har körts. Mätvärdena visar inledningsvis noll.",
"runningAlt": "Lynis-kort under granskning med meddelande om pågående kontroll, beräknad tid 2–5 minuter och inaktiverad knapp Granskning pågår",
"runningCaption": "Granskning pågår: knappen visar en laddningsindikator och kortet upplyser om att kontrollen kan ta 2–5 minuter.",
"finishedBody": "När kontrollen är klar visar kortet resultaten: härdningsindex, varningar, förslag och listan <em>Granskningsrapporter</em> med tidigare kontroller.",
"resultsAlt": "Lynis-kort med index 71, uppdelningen Lynis 66 och PVE 71, 3 varningar, 40 förslag, poäng anpassad för Proxmox på 71 av 100 i kategorin Bra, PDF-rapporter och knappen Kör säkerhetsgranskning",
"resultsCaption": "Exempelresultat: härdningsindex <strong>71/100 (Bra)</strong>. Kortet visar Lynis råpoäng (66) och poängen anpassad för Proxmox (71). Justeringen beror på råpoängen och andelen fynd som klassas som förväntat beteende i Proxmox VE; den lägger inte till 11 fasta poäng.",
"scoreTitle": "Lynis råpoäng och poäng anpassad för Proxmox",
"scoreIntro": "Lynis regler är avsedda för allmänna Debian-system. Proxmox avviker ibland av giltiga skäl, som klustertjänster som körs som root eller egna <code>journald</code>-inställningar. Kortet visar båda poängen så att du kan:",
"scoreItems": [
"Följa <em>Lynis råpoäng</em> på samma sätt som externa granskare.",
"Följa poängen <em>anpassad för Proxmox</em>, en lämpligare jämförelsegrund för noder i samma kluster."
],
"reportBody": "<strong>Fullständig rapport.</strong> Knappen <em>PDF</em> för varje granskning hämtar en flersidig rapport: sammanfattning, systeminformation, säkerhetsläge, förklarade varningar, förslag sorterade efter påverkan och paketförteckning. Den kan bifogas en säkerhetsgenomgång.",
"reportAlt": "Exempel på första sidan i Lynis PDF-rapport med sammanfattning, index 71 av 100, antal varningar och förslag, värdnamn, kärna, Lynis-version, datum och säkerhetsöversikt",
"reportCaption": "Rapportens första sida: sammanfattning, systeminformation och säkerhetsläge. Därefter följer detaljerade varningar, förslag och installerade paket. En <a>exempelrapport i PDF</a> bifogas som referens.",
"runPeriodically": "Kör granskningen regelbundet, efter större Proxmox-uppgraderingar och ändringar efter installationen samt innan fjärråtkomst öppnas. Spara rapporterna; utvecklingen över tid är viktigare än ett enskilt värde.",
"outro": "Guiden för <em>installation, konfiguration och avinstallation</em> samt genomgången av en exempelrapport finns under <link>ProxMenux → Säkerhet → Lynis</link>."
},
"dataCollected": {
"heading": "Hur data samlas in",
"headerCard": "Kort",
"headerEndpoint": "Ändpunkt",
"headerSource": "Källa",
"rows": [
{
"card": "Autentisering, 2FA, lösenordsändring",
"endpoint": "/api/auth/*",
"source": "Lokal autentiseringskonfiguration i ~/.config/proxmenux-monitor/auth.json; JWT utfärdas av Monitor."
},
{
"card": "SSL / HTTPS",
"endpoint": "/api/auth/ssl/*",
"source": "<code>openssl x509</code> på <code>/etc/pve/local/pve-ssl.pem</code> + <code>/etc/proxmenux/ssl_config.json</code>."
},
{
"card": "Lista, skapa och återkalla API-token",
"endpoint": "/api/auth/api-tokens",
"source": "Token rader hålls lokalt; ingenting lämnar värden."
},
{
"card": "Secure Gateway (distribuera + status)",
"endpoint": "/api/oci/*",
"source": "Skapar en Alpine LXC-container med <code>tailscaled</code> via <code>pct create</code> / <code>pct exec</code>."
},
{
"card": "Brandväggsstatus och regler",
"endpoint": "/api/security/firewall/*",
"source": "<code>pve-firewall</code> + <code>/etc/pve/firewall/&lt;cluster|host&gt;.fw</code>."
},
{
"card": "Fail2Ban (endast när den är installerad)",
"endpoint": "/api/security/fail2ban/*",
"source": "<code>fail2ban-client status</code>, <code>/var/log/fail2ban.log</code>, <code>/etc/fail2ban/jail.local</code>."
},
{
"card": "Lynis revision (endast när den är installerad)",
"endpoint": "/api/security/lynis/*",
"source": "Kör <code>lynis audit system</code> i bakgrunden och läser rapporten från <code>/var/log/lynis-report.dat</code>."
}
]
},
"whereNext": {
"heading": "Läs vidare",
"items": [
{
"label": "Åtkomst och autentisering",
"href": "/docs/monitor/access-auth",
"tail": " — fullständig första konfiguration, val av 2FA-app, återställning vid förlorad autentiserare och exempel för omvänd proxy."
},
{
"label": "Integrationer",
"href": "/docs/monitor/integrations",
"tail": " — exempel på API-token med Homepage, Home Assistant, Prometheus och n8n samt fullständig konfiguration av Secure Gateway."
},
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tailRich": " — alla ändpunkter under <code>/api/auth</code>, <code>/api/security</code> och <code>/api/oci</code> med metod, begärandekropp och curl-exempel."
},
{
"label": "ProxMenux → Säkerhet → Fail2Ban",
"href": "/docs/security/fail2ban",
"tail": " — installationsguide, konfigurerade jails och manuell installation."
},
{
"label": "ProxMenux → Säkerhet → Lynis",
"href": "/docs/security/lynis",
"tail": " — exempelrapport, poängtolkning och när granskningen bör köras igen."
}
]
}
}
@@ -0,0 +1,367 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt: fliken Inställningar | ProxMenux-dokumentation",
"description": "Fliken Inställningar hanterar språk, navigeringsordning, översiktens inställningar, övervakningsgränser och undantag, aviseringar, AI och förteckningen över optimeringar efter installation."
},
"header": {
"title": "Översikt: fliken Inställningar",
"description": "Monitors språk, navigeringsordning, översiktens inställningar, övervakningsundantag, aviseringar, AI-konfiguration och aktuell förteckning över ProxMenux-optimeringar.",
"section": "ProxMenux Monitor · Översikt"
},
"intro": {
"title": "Var varje inställning sparas",
"body": "Inställningar samlar översiktens utseende, Health Monitor-övervakning, utskick av larm och ändringar som ProxMenux redan gjort på värden. Korten länkar till sin detaljerade dokumentation; fliken är en ingång till den."
},
"interfaceLanguage": {
"heading": "Gränssnittsspråk",
"intro": "Välj språk för <strong>Monitors webbgränssnitt</strong>. Det ändras direkt utan att starta om tjänsten eller ändra språk i ProxMenux terminalmenyer.",
"items": [
"ProxMenux Monitor erbjuder för närvarande engelska, tyska, spanska, franska, italienska, portugisiska, slovakiska och svenska.",
"Vid första besöket används webbläsarens språk om det stöds, annars engelska.",
"Ett ändrat val uppdaterar sidans språk och synkroniserar andra öppna flikar i samma webbläsarprofil.",
"Om en översättning saknas visas bara den texten på engelska i stället för en felaktig nyckel eller platshållare."
],
"scopeTitle": "Lokal webbläsarinställning",
"scopeBody": "Valet sparas i <code>localStorage</code> under <code>proxmenux-ui-language</code>. Det gäller denna webbläsarprofil och enhet, inte hela noden. Varje administratör kan välja sitt språk."
},
"navigationOrder": {
"heading": "Navigeringsordning",
"intro": "Ordna de sju huvudposterna: <strong>Översikt, Appar, VM och LXC, Nod, Säkerhetskopiering, Terminal och Administration</strong>. Välj <strong>Redigera</strong>, dra raderna och spara.",
"items": [
"Med mus börjar dragningen vid tryck. På pekskärm krävs ett 250 ms långt tryck för att skilja det från rullning.",
"Grupperna <strong>Nod</strong> och <strong>Administration</strong> flyttas som helheter; deras undersidor behåller den fastställda ordningen.",
"Mobilmenyn följer samma sparade ordning.",
"<strong>Återställ standard</strong> återställer ordningen under redigering. Spara för att tillämpa ändringen.",
"Nya huvudflikar i framtida versioner läggs sist i den anpassade ordningen så att din ordning bevaras."
],
"landingTitle": "Den första posten blir startfliken",
"landingBody": "Monitor öppnar den första sparade posten. För <strong>Nod</strong> öppnas Lagring, för <strong>Administration</strong> Systemloggar. Ordningen sparas i webbläsaren under <code>proxmenux-nav-order</code>, så olika enheter kan ha olika arbetsordning."
},
"networkUnits": {
"heading": "Nätverksenheter",
"imageAlt": "Kortet Nätverksenheter med visningsvalet inställt på Byte",
"imageCaption": "Välj mellan bitar per sekund och byte per sekund för varje nätverkshastighet som visas i instrumentpanelen.",
"body": "Visar nätverkshastighet i <strong>bitar per sekund</strong> (Mbps/Gbps) eller <strong>byte per sekund</strong> (MB/s/GB/s). Bitar är standard som i specifikationer för nätverkskort och internet; filöverföringar använder ofta byte. Diagram, etiketter och tips ändras direkt utan omladdning."
},
"health": {
"heading": "Hälsoövervakare",
"intro": "Kortet ställer in <strong>undertryckningstid</strong>: hur länge kontrollen väntar innan en avfärdad varning får visas igen. Varje kategori — CPU, minne, lagring, diskar, nätverk, VM, PVE-tjänster, loggar, uppdateringar och säkerhet — har en egen lista:",
"items": [
"<strong>24 h</strong> - standard för de flesta övergående kategorier.",
"<strong>72 h</strong> — för händelser du vill tysta i några dagar.",
"<strong>168 h</strong> (1 vecka) och <strong>720 h</strong> (1 månad) - periodiska kontroller.",
"<strong>8760 h</strong> (1 år) — tystnad under lång tid.",
"<strong>-1</strong> — permanent tystnad tills du återaktiverar manuellt.",
"<strong>Eget antal timmar</strong> — ett heltal för ett mellanvärde."
],
"imageAlt": "Inställningar, Health Monitor-kort med tid per kategori och aktiva undertryckningar",
"imageCaption": "Listorna anger tiden för framtida undertryckningar. Avsnittet nedanför visar tystade varningar och låter dig återaktivera dem.",
"editTitle": "Redigeringsläge",
"editBody": "Kortet är först skrivskyddat. <strong>Redigera</strong> uppe till höger aktiverar listor och återaktiveringsknappar. <strong>Spara</strong> tillämpar väntande tider och återaktiveringar tillsammans; <strong>Avbryt</strong> kastar dem. Spara aktiveras först när ändringar finns.",
"activeTitle": "Aktiva undertryckningar",
"activeIntro": "Under tiderna listar <strong>Aktiva undertryckningar</strong> tillfälligt tystade varningar —24 timmar, 7 dagar eller eget intervall— och <em>permanenta</em>. Varje rad visar:",
"activeItems": [
"Ett färgat märke: <strong>Permanent</strong> i bärnsten eller en nedräkning som <strong>24 h kvar</strong> / <strong>7 dagar kvar</strong> i blått.",
"Varningsidentifieraren i läsbar form (t.ex. <code>pve_storage_full_PBS-Cloud</code> → <em>PVE-lagring full: PBS-Cloud</em>).",
"Kategori, allvarlighetsgrad och tidpunkten då varningen avfärdades.",
"Knappen <strong>Återaktivera</strong> i redigeringsläge köar borttagning av undertryckningen när du sparar."
],
"activeReenableTitle": "Så återaktiveras en varning",
"activeReenableBody": "<strong>Återaktivera</strong> under redigering markerar raden grönt och stryker identifieraren, utan att tillämpa ändringen. Klicka igen för att <strong>Ångra</strong>. <strong>Spara</strong> skickar parallella <code>POST /api/health/un-acknowledge</code> för varje återaktivering och tar bort raderna. Om problemet kvarstår och kategorin stöder nya varningar visas det åter som aktivt vid nästa kontroll.",
"activePermanentNote": "Permanenta undertryckningar —via <em>Permanent</em> eller standardtiden <code>-1</code>— <strong>återställs bara här</strong>. Den allmänna dialogen har ingen sådan knapp; avsnittet samlar översikt och återaktivering.",
"activeAutoRefreshTitle": "Automatisk uppdatering",
"activeAutoRefreshBody": "Listan uppdateras när en varning avfärdas eller återaktiveras i Health Monitor, när fliken får fokus igen och när synligheten ändras. Ingen omladdning behövs.",
"calloutTitle": "Detaljer på sidan Health Monitor",
"calloutBody": "Eskalering, automatisk lösning när en enhet försvinner och skillnaden mellan avfärda och lösa beskrivs i <link>Health Monitor → Avfärda varningar och undertryckningstid</link>. Kortet visar listorna och aktiva undertryckningar."
},
"thresholds": {
"heading": "Gränsvärden i Health Monitor",
"intro": "Förra kortet anger <em>tystnadens längd efter avfärdande</em>; detta anger <strong>värdet som utlöser en varning</strong>. De flesta gränskontroller har justerbara värden för <strong>Varning</strong> och <strong>Kritiskt</strong>. Tabellen förklarar undantag som kombinerad swapregel och aktuell RAM-detektor.",
"whatForTitle": "Vad det används till",
"whatForIntro": "Standardvärdena är en utgångspunkt, men varje miljö har egna förutsättningar:",
"whatForItems": [
"Ett homelab med en enda SSD kan varna tidigare, till exempel vid 75/90 %, för att lämna plats för ögonblicksbilder.",
"Minnesgränser bör spegla värdens mätningar och arbetslast. Ceph-redundans motiverar inte ensam mildare varningar, och hög ZFS ARC-användning är inte samma sak som arbetsminne som inte kan återvinnas.",
"Välj temperaturgränser efter diskens specifikationer och faktiska förhållanden. Passiv eller forcerad kylning avgör inte ensam en allmänt lägre eller högre säker gräns.",
"En tungt virtualiserad värd kan få CPU-toppar vid byggen utan att varna för varje topp på 80 %, men måste fortfarande varna vid långvarig överbelastning."
],
"whatForOutro": "Ändringar som stöds gäller <strong>vid nästa kontroll</strong>. Health Monitor läser <code>/usr/local/share/proxmenux/health_thresholds.json</code> varje cykel utan omstart. Vissa indikatorer, som disktemperatur, använder värdena; vissa kapacitetsstaplar har egna gränser. RAM-raden beskriver ett aktuellt undantag.",
"coloursTitle": "Statusfärger för Varning och Kritiskt",
"coloursIntro": "Widgetar med det konfigurerade paret Varning/Kritiskt följer de tre lägena nedan. Andra indikatorer, som PVE-kapacitetsstaplar, har egna gränser; färgen ensam visar inte att Health Monitor har larmat.",
"headerColour": "Färg",
"headerRange": "Intervall",
"headerMeaning": "Betydelse",
"colourRows": [
{
"colour": "Grön",
"range": "Värde < Varning",
"meaning": "Normalt intervall. Ingen varning skapas."
},
{
"colour": "Bärnstensgul",
"range": "Varning ≤ värde < Kritiskt",
"meaning": "Varningsläge. Health Monitor skapar en WARNING-händelse; aviseringar följer kanalfilter och tysta tider."
},
{
"colour": "Röd",
"range": "Värde ≥ Kritiskt",
"meaning": "Kritiskt läge. Health Monitor skapar en CRITICAL-händelse som kringgår tysta tider. Kanalens kategori- och händelseinställningar gäller fortfarande; leverans beror även på kanalens tillgänglighet."
}
],
"sectionsTitle": "Avsnitt och rekommenderade standardvärden",
"sectionsIntro": "Detta är ProxMenux startvärden tills du ändrar dem. Avsnitten följer <em>beräkningslast</em>, <em>temperatur</em> och <em>lagringskapacitet</em>, från aktuell last till använt utrymme.",
"headerSection": "Avsnitt",
"headerWarning": "Varning",
"headerCritical": "Kritiskt",
"headerGates": "Berörd kontroll",
"thresholdRows": [
{
"section": "CPU-användning",
"warning": "85 %",
"critical": "95 %",
"gates": "Varning för varaktig last när CPU-medelvärdet överstiger gränsen under kontrollperioden."
},
{
"section": "Minne",
"warning": "85 %",
"critical": "95 %",
"gates": "Värdens RAM-belastning. Den konfigurerbara standarden visar Kritiskt vid 95 %, men aktuell detektor använder en fast regel på 90 % över tid; inställningen ändrar för närvarande inte den körningsgrenen."
},
{
"section": "Swap (endast kritisk nivå)",
"warning": "—",
"critical": "80 %",
"gates": "Swap-CRITICAL kräver både över 80 % swap och under 15 % tillgängligt RAM över flera mätningar. Upptaget swaputrymme ensamt utlöser inte regeln."
},
{
"section": "CPU-temperatur",
"warning": "80 °C",
"critical": "90 °C",
"gates": "CPU-paketets eller kärnornas temperatur från <code>lm-sensors</code>."
},
{
"section": "Disktemperatur — HDD",
"warning": "60 °C",
"critical": "65 °C",
"gates": "HDD-temperatur. Standard: varning vid 60 °C och kritiskt vid 65 °C. Det är övervakningsvärden, inte en allmän tillverkargräns; kontrollera modellens specifikationer."
},
{
"section": "Disktemperatur — SSD",
"warning": "70 °C",
"critical": "75 °C",
"gates": "SATA-SSD i 2,5-tums- eller M.2-format. Klassen använder 70/75 °C som standard; faktiska gränser beror på modellen."
},
{
"section": "Disktemperatur — NVMe",
"warning": "80 °C",
"critical": "85 °C",
"gates": "NVMe-temperatur. Klassen använder 80/85 °C som standard. Styrenhetens strypningstemperatur varierar med modellen och är inte alltid 85 °C."
},
{
"section": "Disktemperatur — SAS",
"warning": "55 °C",
"critical": "65 °C",
"gates": "SAS-temperatur. Klassen använder varning vid 55 °C och kritiskt vid 65 °C. Det är <em>övervakningsvärden</em>, inte bevis på kylfel vid 55 °C eller en allmän tillverkargräns."
},
{
"section": "Diskutrymme — värd",
"warning": "85 %",
"critical": "95 %",
"gates": "Kapacitet för <code>/</code> och varje monteringspunkt på värden (<code>/var/lib/vz</code>, <code>/mnt/*</code>…)."
},
{
"section": "Diskutrymme - LXC rootfs",
"warning": "85 %",
"critical": "95 %",
"gates": "Rotdisk per container, bedömd mot rootfs-storleken från PVE."
},
{
"section": "LXC-monteringspunkter",
"warning": "85 %",
"critical": "95 %",
"gates": "Kapacitet för monteringar i körande CT: mp0, mp1, NFS och bind-monteringar. Exkluderar rootfs."
},
{
"section": "PVE-lagring",
"warning": "85 %",
"critical": "95 %",
"gates": "Lagring som hanteras av PVE: LVM, LVM-thin, ZFS-pool, RBD/Ceph och PBS. Alla är inte blocklagringssystem."
},
{
"section": "ZFS-pool",
"warning": "85 %",
"critical": "95 %",
"gates": "ZFS-pooler på värden, oberoende av registrering i PVE."
}
],
"defaultsTitle": "Standardvärden, ändringar och återställning",
"defaultsBody": "Varje avsnitt börjar med standardvärden; bara önskade ändringar sparas. Kortet visar det <em>gällande</em> värdet: din ändring eller standarden. <strong>Återställ</strong> tar bort alla ändringar i samtliga avsnitt.",
"validationTitle": "Validering",
"validationBody": "När du sparar kontrolleras tillåtna intervall och Kritiskt under Varning avvisas. Gränssnittet visar fel och servern validerar API-begäranden igen före lagring."
},
"lxcDetection": {
"heading": "Identifiering av LXC-uppdateringar",
"imageAlt": "Kort för LXC-uppdateringar med reglage för att söka väntande paket i körande Debian-, Ubuntu- och Alpine-containrar",
"imageCaption": "Reglage för regelbundna kontroller med <code>apt list --upgradable</code> / <code>apk list -u</code> i körande CT. Påslaget som standard. Motsvarande aviseringsreglage under Aviseringar → Tjänster visas när detektering är på.",
"intro": "Reglaget mellan Gränser och Aviseringar styr LXC-kontrollen. Påslaget frågar det pakethanterarna i körande CT; Hårdvara visar resultat och matar <code>lxc_updates_available</code>. Avstängt stoppar det sina <code>pct exec</code>-anrop och tar bort LXC-poster från <code>managed_installs.json</code>; <code>/api/managed-installs</code> slutar visa statusen utan att vänta 24 timmar.",
"whatRunsTitle": "Vad kontrollen kör",
"whatRunsIntro": "För varje CT i tillståndet <code>running</code> med en pakethanterare som stöds:",
"whatRunsItems": [
"<strong>Metadatans aktualitet.</strong> Är apt/apk-cachen äldre än <strong>24 timmar</strong> provas <code>apt-get update -qq</code> på Debian/Ubuntu eller <code>apk update</code> på Alpine med 60 s tidsgräns. Vid fel används befintlig cache och resultaten kan vara inaktuella.",
"<strong>Lista.</strong> Kör <code>apt list --upgradable</code> / <code>apk list -u</code> och hämtar paketantal och några paketnamn.",
"<strong>Undvik dubbletter per CT.</strong> Ett fingeravtryck av totalantal, säkerhetsuppdateringar och sorterade namn förhindrar identiska dagliga aviseringar. En betydande ändring meddelas igen."
],
"selfUpdateTitle": "CT som uppdateras utanför apt kan visa 0",
"selfUpdateBody": "Detekteringen täcker bara CT:ns pakethanterare. Program som uppdateras utanför apt, som ett konfigurerat <code>plexupdate</code>-jobb eller avbilder hämtade med <code>docker pull</code>, räknas inte. Noll apt-uppdateringar bevisar inte att alla appar är aktuella. Baspaket som väntar upptäcks fortfarande.",
"refreshTitle": "Varför metadata förnyas efter 24 timmar",
"refreshBody": "En CT som körts länge kan ha gamla apt-metadata om ingen kör <code>apt update</code>. <code>apt list --upgradable</code> kan då missa nya uppdateringar. ProxMenux försöker förnya efter 24 timmar och hoppar över steget om cachen är nyare.",
"toggleTitle": "Aviseringsreglage när detektering är på",
"toggleBody": "Reglaget <code>lxc_updates_available</code> per kanal under <strong>Aviseringar → Tjänster</strong> visas bara när detektering är på. När den stängs av döljs raden för alla kanaler. Valet sparas i databasen och samma värde återkommer när detektering slås på.",
"purgeTitle": "Vad som rensas när detektering stängs av",
"purgeBody": "Avstängning tar genast bort <code>type=lxc</code>-poster från <code>/usr/local/share/proxmenux/managed_installs.json</code>. Räknarna för LXC-uppdateringar i Hårdvara försvinner vid nästa omladdning. Påslagning fyller registret vid nästa kontroll, eller tidigare med manuell API-uppdatering."
},
"storageExclusions": {
"heading": "Exklusioner för fjärrlagring",
"imageAlt": "Kort för undantag av fjärrlagring med PBS-Cloud, PBS och PBS2 samt reglage för Hälsa och Varningar per rad",
"imageCaption": "Reglage för <em>Hälsa</em> och <em>Varningar</em> per lagring. Med båda avstängda räknas lagringen inte i Health Monitor och skickar inga aviseringar. Den syns fortfarande under Lagring, markerad som undantagen.",
"intro": "Lagring som hanteras av Proxmox (NFS / CIFS / PBS / Ceph / iSCSI osv.) kan undantas med två oberoende reglage:",
"items": [
"<strong>Hälsa</strong> — när reglaget stängs av slutar lagringen bidra till kategorin Lagring i Health Monitor. Användbart för arkivvolymer som oftast är offline eller fjärrmål för säkerhetskopiering som bara slås på enligt schema.",
"<strong>Varningar</strong> — avstängt hindrar reglaget aviseringar om lagringen via konfigurerade kanaler, även med hälsokontroller på. Användbart om du vill se status på panelen utan aviseringar."
],
"outro": "Undantagen lagring syns på <link>fliken Lagring</link> med ett lila märke <em>undantagen</em>, så att inventeringen förblir synlig. Status sparas i SQLite-tabellen <code>excluded_storages</code>."
},
"interfaceExclusions": {
"heading": "Exklusioner för nätverksgränssnitt",
"imageAlt": "Kort för gränssnittsundantag med vmbr0, vmbr1, vmbr2, bond0 och eno1 samt reglage för Hälsa och Varningar per gränssnitt",
"imageCaption": "Precis som för lagring finns <em>Hälsa</em> och <em>Varningar</em> per gränssnitt. Varje rad visar namn, typ (brygga / bond / fysiskt), IP och länkhastighet.",
"intro": "Samma princip gäller gränssnitt: undanta varje från hälsokontroller, aviseringar eller båda. Vanliga exempel:",
"items": [
"En reservbrygga som avsiktligt är avstängd.",
"Ett fysiskt borttaget nätverkskort som fortfarande finns i <code>/etc/network/interfaces</code>.",
"Ett VLAN-undergränssnitt som bara används vid underhåll.",
"En hanteringsbrygga med kända, upprepade ändringar av länkstatus vid underhåll."
],
"outro": "Status sparas i SQLite-tabellen <code>excluded_interfaces</code>. Det lila märket <em>undantaget</em> på <link>fliken Nätverk</link> gör att undantagna gränssnitt förblir synliga."
},
"notifications": {
"heading": "Aviseringar och AI",
"body1": "Här aktiveras ProxMenux Monitor-aviseringar och AI-omformulering. <em>Aktivera aviseringar</em> startar sändning i bakgrunden, registrerar ett Proxmox VE-webhookmål för dess händelser och öppnar kanalformuläret för Telegram, Discord, e-post, Gotify och fler. AI-omformulering finns i ett utfällbart avancerat avsnitt i samma panel.",
"body2": "Alternativen förklaras på egna sidor: kanaler, händelsereglage, formaterade meddelanden, visningsnamn, sändning med dubblettfilter, väntetid, gruppering och tysta timmar, PVE-webhook, AI-leverantörer och instruktionslägen:",
"items": [
"<notifLink>Aviseringar</notifLink>: kanaler (Telegram, Discord, Gotify, e-post och applösenord för Gmail / Microsoft, ntfy, Slack, Teams och allmän webhook), händelsekategorier, formaterade meddelanden, visningsnamn, sändning, PVE-webhook, historik och API.",
"<aiLink>AI-assistent</aiLink>: leverantörer (OpenAI, Anthropic, Gemini, Groq, OpenRouter, Ollama), modeller, standardinstruktioner eller egna instruktioner, utmatningsspråk, detaljnivå per kanal och AI-förslag."
]
},
"optimizations": {
"heading": "ProxMenux-optimeringar",
"intro": "Inventering av efterinstallationsoptimeringar som ProxMenux registrerat på värden. Val från <autoLink>Automatisk efterinstallation</autoLink> och <customLink>Anpassningsbar efterinstallation</customLink> registrerar tillämpningen i <code>/usr/local/share/proxmenux/installed_tools.json</code>. Monitor läser registret. En post kontrollerar inte på nytt att alla underliggande inställningar är oförändrade.",
"imageAlt": "ProxMenux-optimeringskort med 14 poster: färgad prick, namn och version. Här finns APT IPv4 Force, Bashrc Customization, Fastfetch, Log2ram SSD Protection, Memory Settings Optimization, Setting persistent network interfaces, System Limits Increase, APT Language Skip, Entropy Generation haveged med Legacy, Kernel Panic Configuration, Logrotate Optimization, Network Optimizations, Subscription Banner Removal och VFIO IOMMU Passthrough.",
"imageCaption": "Varje optimering visar namn, version och färgad prick. Uppe till höger finns den orange räknaren <em>14 aktiva</em>. Verktyg med tillgänglig källkod går att öppna.",
"dotsTitle": "Vad prickarna betyder",
"dotsItems": [
"<green/> <strong>Grön prick</strong>: registrerad optimering utan Legacy-markering eller visad uppdatering. Öppna raden när källkod är tillgänglig.",
"<amber/> <strong>Bärnstensprick och <em>legacy</em>-märke</strong>: registrerad optimering vars skript har bytt namn eller ersatts. Bevarad källkod öppnas i Legacy-läge med bärnstensfärg. Värdens aktuella konfiguration kontrolleras inte på nytt."
],
"clickTitle": "Öppna källkoden",
"clickBody": "Ett klick visar den kopplade bash-funktionen och skriptnamnet (<code>auto_post_install.sh</code> eller <code>customizable_post_install.sh</code>). Aktuella verktyg hämtas från värdens filer; äldre kan använda bevarad källkod. Syntaxmarkering och Kopiera hjälper vid granskning. Detta garanterar inte en kopia av exakt den kod som kördes vid installationen.",
"detailAlt": "Källkodsfönster för APT IPv4 Force med bash-funktionen force_apt_ipv4 från customizable_post_install.sh version 1.0. Markerad kod konfigurerar /etc/apt/apt.conf.d/99-force-ipv4 med Acquire ForceIPv4 true, registrerar verktyget och visar ett översatt meddelande om slutförd APT IPv4-konfiguration.",
"detailCaption": "Kod för <em>APT IPv4 Force</em>: funktionen <code>force_apt_ipv4()</code> från <code>customizable_post_install.sh v1.0</code>, med syntaxmarkering och kopiering med ett klick.",
"whyTitle": "Varför detta är viktigt",
"whyBody": "ProxMenux kan ändra kärnparametrar, paketkällor, nätverk, loggrotation och GPU-genomkoppling. Granska registrerade optimeringar före manuella ändringar, särskilt om en annan administratör satte upp värden. Kortet visar register och tillgänglig källkod; det granskar inte varje aktuell inställning och bevarar ingen exakt körningshistorik.",
"updatesTitle": "Banderoll för tillgängliga uppdateringar",
"updatesBody": "Om optimeringens version på disk är nyare än den som registrerats på värden visas en banderoll med antal och <strong>Tillämpa</strong>. <strong>Tillämpa</strong> öppnar väljaren, som <em>Tillämpa tillgängliga uppdateringar</em> i efterinstallationsmenyn. Välj vad som ska uppdateras; ProxMenux kör funktionerna igen och uppdaterar registret. När allt är aktuellt försvinner banderollen.",
"updatesAlt": "ProxMenux-optimeringskort med banderoll för tillgängliga uppdateringar, antal väntande och knappen Tillämpa som öppnar väljaren",
"updatesCaption": "Banderollen visas om minst en optimering har en nyare version på disk. Se <link>Tillämpa tillgängliga uppdateringar</link> för hela förloppet och motsvarigheten Path-A i skalmenyn.",
"revertTitle": "Ångra en optimering",
"revertBody": "Ångra en optimering med motsvarande val under <link>Avinstallera optimeringar</link> i ProxMenux Scripts-menyn. Avinstallationen tar bort posten från <code>installed_tools.json</code> och den försvinner från kortet vid nästa omladdning."
},
"dataCollected": {
"heading": "Hur data samlas in",
"headerCard": "Kort",
"headerEndpoint": "Slutpunkt",
"headerSource": "Källa",
"rows": [
{
"card": "Gränssnittsspråk",
"endpoint": "localStorage",
"source": "Webbläsarvalet <code>proxmenux-ui-language</code>; utan sparat val används först webbläsarens språk."
},
{
"card": "Navigeringsordning",
"endpoint": "localStorage",
"source": "Webbläsarvalet <code>proxmenux-nav-order</code>; det bestämmer också startfliken."
},
{
"card": "Nätverksenheter",
"endpoint": "/api/settings",
"source": "Sparas i panelens SQLite-tabell för inställningar."
},
{
"card": "Tider i Health Monitor",
"endpoint": "/api/health/settings",
"source": "Tid för undertryckning per kategori i Health Monitor-databasen."
},
{
"card": "Undantag för lagring och gränssnitt",
"endpoint": "/api/storage/exclusions, /api/network/exclusions",
"source": "SQLite-tabellerna <code>excluded_storages</code> och <code>excluded_interfaces</code>."
},
{
"card": "Panelen Aviseringar och AI",
"endpoint": "/api/notifications/*",
"source": "Se <notifLink>Aviseringar</notifLink> och <aiLink>AI-assistent</aiLink>."
},
{
"card": "ProxMenux-optimeringslista",
"endpoint": "/api/proxmenux/installed-tools",
"source": "Läser <code>/usr/local/share/proxmenux/installed_tools.json</code>, som skrivs av <code>register_tool</code>-anrop i efterinstallationsskripten."
},
{
"card": "Källkodsfönster för optimering",
"endpoint": "/api/proxmenux/tool-source",
"source": "Hämtar den kopplade bash-funktionen från <code>auto_post_install.sh</code> eller <code>customizable_post_install.sh</code> på värden; äldre verktyg kan använda bevarad källkod."
}
]
},
"whereNext": {
"heading": "Gå vidare",
"items": [
{
"label": "Fliken Appar",
"href": "/docs/monitor/dashboard/apps",
"tail": " — appstartaren vars placering ändras med navigeringsordningen."
},
{
"label": "Aviseringar",
"href": "/docs/monitor/notifications",
"tail": " — kanaler, händelsereglage, kanalspecifika inställningar, historik och testsändning."
},
{
"label": "AI-assistent",
"href": "/docs/monitor/ai-assistant",
"tail": " — leverantörer, modeller, instruktionslägen, språk och detaljnivå per kanal."
},
{
"label": "Health Monitor → Avfärda varningar och tid för undertryckning",
"href": "/docs/monitor/health-monitor#dismissing-alerts-and-the-suppression-duration",
"tail": " — hur listorna för tid per kategori fungerar."
},
{
"label": "ProxMenux Scripts → Automatisk efterinstallation",
"href": "/docs/post-install/automated",
"tailRich": " och <customLink>Anpassningsbar efterinstallation</customLink> — skripten som registrerar optimeringar i listan ovan."
},
{
"label": "Avinstallera optimeringar",
"href": "/docs/post-install/uninstall",
"tail": " — hur du ångrar en optimering registrerad ovan."
},
{
"label": "Översiktsindex",
"href": "/docs/monitor/dashboard",
"tail": " — tillbaka till fliköversikten."
}
]
}
}
@@ -0,0 +1,268 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt: fliken Lagring | ProxMenux-dokumentation",
"description": "Fliken Lagring samlar fyra vyer: Proxmox-lagring med status, ZFS-pooler, interna diskar med SMART och externa USB-enheter. Diskdetaljerna visar SMART-attribut, slitage, livslängd och beständig observationshistorik."
},
"header": {
"title": "Översikt: fliken Lagring",
"description": "Värdens lagring på en skärm: NFS / CIFS / LVM / ZFS / dir i Proxmox, ZFS-poolernas status, interna SATA/NVMe-diskar med SMART och externa USB-enheter. Klicka på en disk för att se SMART-attribut och observationshistorik.",
"section": "ProxMenux Monitor · Översikt"
},
"intro": {
"title": "Uppbackad av tre källor",
"body": "Proxmox-lagring hämtas från <code>pvesm status</code>, ZFS från <code>zpool status</code>, diskar från <code>lsblk</code> + <code>smartctl</code> och NVMe-fält från <code>nvme</code>. Fliken uppdateras ungefär var 60:e sekund; detaljvyn begär en SMART-avläsning."
},
"thresholds": {
"title": "Statusfärger och trösklar som tillämpas här",
"intro": "Health Monitor klassar status som <green/> <strong>grön</strong> under Varning, <amber/> <strong>orange</strong> mellan Varning och Kritiskt och <red/> <strong>röd</strong> från Kritiskt och uppåt. Standardvärdena följer. Enskilda staplar kan använda andra färggränser som beskrivs nedan.",
"items": [
"<strong>Kapacitet</strong> (värddiskar, PVE-lagring, ZFS-pooler, LXC-monteringar) — varning 85 %, kritiskt 95 %.",
"<strong>Disktemperatur</strong> HDD 60/65 °C · SSD 70/75 °C · NVMe 80/85 °C · SAS 55/65 °C (varning / kritisk)."
],
"outro": "Varje värde kan ställas in per värd. <link>Inställningar → Health Monitor-gränser</link> visar de gällande värdena och förklarar hur de ändras."
},
"topRow": {
"heading": "Översta raden: lagringsöversikt",
"intro": "När fliken öppnas sammanfattar fyra kort total kapacitet, lokal användning, fjärranvändning och fysiska diskar. De ger snabba svar; korten nedanför innehåller detaljerna.",
"imageAlt": "Fliken Lagring med fyra kort: total kapacitet, lokal användning, fjärranvändning och fysiska diskar",
"imageCaption": "Översta raden: total kapacitet och antal diskar, lokalt och på distans använda byte samt fysiska diskar per typ med statusöversikt.",
"headerCard": "Kort",
"headerWhat": "Vad det visar",
"totalLabel": "Total lagring",
"totalWhat": "Total råkapacitet för alla fysiska diskar. Sidfoten visar antalet upptäckta diskar.",
"localLabel": "Lokalt använt",
"localWhat": "Använda byte på lokal lagring: LVM / LVM-thin / ZFS / dir på värdens diskar. Huvudvärdet visar använda byte och sidfoten <em>X.XX % av Y TB</em> visar även fyllnadsgraden.",
"remoteLabel": "Fjärranvändning",
"remoteWhat": "Samma format som lokal användning för fjärrlagring NFS / CIFS / PBS / Ceph / iSCSI. De räknas separat eftersom lokala och fjärrbaserade avbrott har olika omfattning och resurserna planeras och övervakas på olika sätt.",
"disksLabel": "Fysiska diskar",
"disksIntro": "Inventeringen delas upp på två rader:",
"disksItems": [
"<strong>Efter typ</strong> — antal NVMe i lila, SSD och HDD i blått. Upptäckta typer visas; en värd med bara NVMe visar endast det antalet.",
"<strong>Efter status</strong> — antal <em>normala</em> diskar i grönt, med <em>varning</em> i gult och <em>kritiska</em> i rött. Utan problem visas bara ”X normala”; övriga lägen visas när problem upptäcks."
]
},
"pveStorage": {
"heading": "Proxmox Storage kort",
"intro": "En rad per lagring i <code>/etc/pve/storage.cfg</code> med typ (<code>nfs</code> / <code>cifs</code> / <code>zfspool</code> / <code>lvm</code> / <code>lvmthin</code> / <code>dir</code> / <code>pbs</code>), namn, status aktiv/fel/ej övervakad, användningsgrad och färgad stapel:",
"items": [
"<strong>Upp till 75 %</strong> — blå stapel och blått värde.",
"<strong>Över 75 % till 90 %</strong> — gul stapel och gult värde. Färggränserna är skilda från Health Monitors trösklar.",
"<strong>> 90 %</strong> — röd stapel och rött värde. Färggränsen är skild från eskalering i Health Monitor.",
"<strong>Fel</strong> — röd ram runt raden om lagringen är konfigurerad men inte nåbar, till exempel vid NFS-avbrott eller utgångna CIFS-inloggningsuppgifter.",
"<strong>Utesluten</strong> — lila ram och etikett ”ej övervakad”. Lagring som användaren uteslutit, till exempel arkivvolymer som avsiktligt hålls frånkopplade."
],
"calloutTitle": "Utesluta lagring från övervakning",
"calloutBody": "Varje lagringsmeny kan markera lagringen som <em>utesluten från övervakning</em>. Inställningen sparas i <code>excluded_storages</code> och följs av översikten och Health Monitor: inga aviseringar och ingen påverkan på övergripande status."
},
"zfs": {
"heading": "ZFS Pools kort",
"intro": "Visas bara om ZFS är installerat och minst en pool finns. Varje rad visar en pool med status, storlek, använt och ledigt utrymme samt statusikon:",
"items": [
"<strong>ONLINE</strong> - grön. Allt hälsosamt.",
"<strong>DEGRADED</strong> — gult. Poolen levererar data men minst en enhet är otillgänglig; utbyte behöver hanteras.",
"<strong>FAULTED</strong> / <strong>UNAVAIL</strong> / <strong>SUSPENDED</strong> — rött. Poolen levererar inga data och kräver omedelbar åtgärd."
],
"outro": "ZFS-status och varje disks SMART-status ingår i kategorin <em>Diskar och I/O</em> i <link>Health Monitor</link>."
},
"physical": {
"heading": "Fysiska diskar och SMART-status",
"intro": "Interna diskar (SATA / NVMe). Varje rad kondenserar de mest användbara fälten vid en blick:",
"items": [
"<strong>Enhetssökväg</strong> — <code>/dev/sda</code>, <code>/dev/nvme0n1</code>.",
"<strong>Typetikett</strong> — SATA / NVMe och tillhörande ikon.",
"<strong>Systemetikett</strong> — orange markering för diskar som identifierats som operativsystemets diskar. Identifieringen använder monteringarna <code>/</code> och <code>/boot</code> och ger etiketten <em>System</em>. En saknad etikett bevisar inte att disken kan raderas eller användas för annat utan risk.",
"<strong>Modell</strong> — tillverkare och modell från <code>smartctl -i</code>.",
"<strong>Kapacitet</strong> — i lättlästa enheter.",
"<strong>Temperatur</strong> — aktuellt värde i °C, färgat efter disktyp; NVMe använder högre gränser än SATA.",
"<strong>SMART-status</strong> — godkänd / underkänd / okänd.",
"<strong>Observationsetikett</strong> — om den beständiga historiken <code>disk_observations</code> har poster för disken visas en blå etikett med antalet, som <em>3 obs.</em>. Klicka på disken för att granska dem.",
"<strong>Statusetikett</strong> — Bra / Varning / Kritiskt utifrån SMART och senaste observationer."
],
"clickHint": "Ett klick på raden öppnar diskdetaljerna som beskrivs nedan.",
"warningTitle": "Var försiktig med diskar märkta System",
"warningBody": "Diskar med orange <strong>System</strong>-etikett innehåller det aktiva operativsystemet. Etiketten hjälper dig att identifiera dem; <link>ProxMenux → Diskhantering → Formatera / Radera</link> avvisar destruktiva åtgärder på dem. Använd en räddningsmiljö utanför det aktiva Proxmox-systemet för att återanvända startdisken."
},
"external": {
"heading": "Extern lagring (USB)",
"body": "USB-enheter har ett eget kort som visas när minst en finns ansluten. Det har samma fält som interna diskar och en orange <strong>USB</strong>-etikett. Eftersom enheterna ofta bara ansluts för säkerhetskopiering eller tillfälliga överföringar sparas observationerna, men I/O-fel på frånkopplade USB-enheter eskaleras inte."
},
"drillIn": {
"heading": "Dialog med diskdetaljer",
"intro": "Ett klick på en disk öppnar fyra flikar: <strong>Översikt</strong> · <strong>SMART</strong> · <strong>Historik</strong> · <strong>Schema</strong>. Rubriken visar sökväg, modell, kapacitet och vid behov orange <em>System</em>-etikett.",
"overviewTitle": "Flik 1 — Översikt",
"overviewImageAlt": "Diskdetaljer med fliken Översikt, status, ringindikator för slitage och livslängd samt viktiga SMART-attribut",
"overviewImageCaption": "Översikt: identitet, status, återstående livslängd med aktuellt slitage och skrivna data samt viktiga SMART-attribut.",
"overviewIntro": "Startflik för att granska diskens status utan att köra ett test. Tre block:",
"overviewItems": [
"<strong>Identitet</strong> — modell, serienummer, kapacitet och status Bra / Varning / Kritiskt.",
"<strong>Slitage och livslängd</strong> — ring för återstående livslängd (97 %, 50 %, …) med källattribut (<em>Media Wearout Indicator</em>, <em>Percentage Used</em>, …), stapel för förbrukad andel, prognosen <em>Beräknad livslängd</em> i år och totalt skrivna data. NVMe visar även <em>Available Spare</em>.",
"<strong>SMART-attribut</strong>: de viktigaste värdena visas i två kolumner: temperatur, drifttimmar med en läsbar varaktighet som <em>3 år och 116 dagar</em>, varvtal eller <em>SSD</em>, antal starter, SMART-status, omallokerade sektorer, väntande sektorer och CRC-fel. Den fullständiga attributtabellen finns på fliken SMART."
],
"smartTitle": "Flik 2 — SMART",
"smartImageAlt": "Diskdetaljer, SMART-fliken med kort och utökat test, senaste resultat och fullständig attributtabell",
"smartImageCaption": "SMART-fliken: kör korta eller utökade tester, granska senaste resultatet och alla attribut och öppna hela rapporten för utskrift eller PDF-sparande.",
"smartIntro": "Tillgängliga åtgärder i tre avsnitt:",
"smartItems": [
"<strong>Kör SMART-test</strong> — två knappar. <em>Kort test (~2 min)</em> väntar på resultatet och visar det i dialogen. <em>Utökat test (bakgrund)</em> kan ta timmar på stora diskar, fortsätter på servern och aviserar när det är klart.",
"<strong>Senaste test</strong> — typ, status (<em>godkänt</em> / <em>underkänt</em>) och tidsstämpel för senaste körningen.",
"<strong>SMART-attribut</strong> — fullständig tabell med ID, namn, värde, sämsta värde och status bra, varning eller kritiskt. SATA/SAS visar den numrerade listan. NVMe använder <code>nvme smart-log</code>: temperatur, tillgänglig reserv, förbrukad andel, lästa/skrivna enheter, värdläsningar/-skrivningar, styrenhetens upptagna tid, startcykler, osäkra avstängningar, mediefel, felloggposter och tid med sammansatt temperatur i varnings-/kritiskt område."
],
"pdfTitle": "Visa fullständig SMART-rapport (PDF)",
"pdfIntro": "Längst ner på SMART öppnar <strong>Visa fullständig SMART-rapport</strong> en utskrivbar rapport. Spara den som PDF via webbläsarens utskriftsdialog för arkivering eller för tillverkarsupport vid RMA.",
"pdfPreviewAlt": "Första sidan i SMART-rapporten med sammanfattning, PASSED-ring och diskinformation",
"pdfPreviewCaption": "Första sidan: sammanfattning, PASSED-ring och fullständig diskinformation. Exempel-PDF:en innehåller SSD-slitage, alla SMART-attribut och testhistorik.",
"pdfDownloadLabel": "Hämta exempelrapport för SMART (PDF)",
"pdfSectionsIntro": "Rapporten har sex huvudavsnitt:",
"pdfSections": [
"<strong>Sammanfattning</strong> — PASSED/FAILED, begriplig diskbedömning — bra, sliten eller felande — och fyra uppgifter: rapporttid, senaste testtyp, resultat och kontrollerade attribut.",
"<strong>Diskinformation</strong> — modell, serienummer, kapacitet, typ HDD/SSD/NVMe, familj, formfaktor, gränssnitt (SATA 3.3 · 6.0 Gb/s, …), TRIM, temperatur och optimal gräns, drifttimmar, starter, SMART, väntande/omallokerade sektorer och CRC-fel.",
"<strong>SSD-slitage och livslängd</strong> (endast SSD/NVMe) — återstående livslängd, källattribut, aktuellt slitage, skrivna data och drifttimmar.",
"<strong>Fullständiga SMART-attribut</strong> — ID, namn, värde, sämsta värde, gräns, råvärde och status för varje attribut. Viktiga fält som Reallocated Sector Ct, Power On Hours, Reported Uncorrect, UDMA CRC Error Count och Media Wearout Indicator förklaras kort under raden.",
"<strong>Senaste självtest och fullständig historik</strong> — senaste testet med typ, resultat, slutmeddelande och drifttimmar vid tillfället samt en numrerad tabell över alla sparade tester.",
"<strong>Rekommendationer</strong> — åtgärder utifrån resultatet. För friska diskar: <em>disken är bra / regelbundna tester / säkerhetskopieringsstrategi</em>. När attribut ligger utanför gränserna ges råd om utbyte."
],
"pdfOutro": "Webbläsaren skapar rapporten; Skriv ut och Spara som PDF öppnar båda utskriftsdialogen. Välj ett namn som <code>SMART-&lt;short-id&gt;.pdf</code>. Spara daterade kopior för jämförelser över tid eller delning med supporten.",
"historyTitle": "Flik 3 — Historik",
"historyImageAlt": "Diskdetaljer, fliken Historik med tidigare SMART-tester samt åtgärder för hämtning och borttagning",
"historyImageCaption": "Diskens SMART-historik. Varje rad visar typ, tid, ålder, markering av senaste test samt hämtning av <code>smartctl</code>-utdata och borttagning.",
"historyIntro": "Sparade slutförda korta och utökade tester för disken. Varje post innehåller ursprungliga <code>smartctl</code>-utdata och fälten som Monitor tolkar för översikten. Åtgärder per rad:",
"historyItems": [
"<strong>Hämta</strong> — sparar JSON-ögonblicksbilden med rapportens <code>smartctl -a</code>-data. Praktiskt när tillverkarsupporten behöver ursprungliga diagnostikfält.",
"<strong>Ta bort</strong> — raderar ett test manuellt ur historiken. Lagringsgränsen i Schema (<em>senaste 5 / 10 / 20</em>) tar automatiskt bort de äldsta."
],
"scheduleTitle": "Flik 4 — Schema",
"scheduleImageAlt": "Diskdetaljer, fliken Schema med reglage för automatiska SMART-tester, schemalista och knappen Lägg till schema",
"scheduleImageCaption": "Schema: välj typ, intervall och lagringstid; Monitor konfigurerar <code>cron</code> för automatiska tester.",
"scheduleIntro": "Automatiska SMART-tester via cron utan terminal. Tre områden:",
"scheduleItems": [
"<strong>Automatiska SMART-tester</strong> — gemensamt reglage för diskens alla scheman. Pausar dem vid underhåll utan att radera konfigurationen.",
"<strong>Konfigurerade scheman</strong> — en rad per schema med typ (<em>kort</em> / <em>långt</em>), läsbart cron-uttryck (<em>”Den 1:a varje månad kl. 03:00”</em>, <em>”Varje söndag kl. 02:00”</em>), berörda diskar och lagringsinställning.",
"<strong>Lägg till / Redigera schema</strong> — typ (<em>kort ~2 min</em> / <em>långt 1–4 h</em>), intervall (<em>dagligen / veckovis / månadsvis</em>), månads- eller veckodag, tid och sparade resultat (<em>senaste 5 / 10 / 20</em>)."
],
"scheduleOutro": "Schemat skapar en cron-post på värden som anropar Monitor. Resultaten sparas i SMART-historiken på flik 3 och lagringsinställningen tar automatiskt bort de äldsta när ett nytt test är klart.",
"tempTitle": "Dialog med temperaturhistorik",
"tempIntro": "Monitor läser regelbundet av diskar med temperatursensor och sparar en lokal historik. Det aktuella värdet visas i Översikt; ett klick öppnar temperaturhistoriken.",
"tempImageAlt": "Temperaturhistorik med sökväg och modell, intervall på 1 timme, 24 timmar, 7 eller 30 dagar, Aktuellt/Min/Medel/Max och linjediagram färgat efter disktypens gränser",
"tempImageCaption": "Temperaturdetaljer öppnas från Översikt om sensorn visar ett värde skilt från noll. Diagrammet använder gränserna för HDD / SSD / NVMe / SAS.",
"tempShowsTitle": "Dialogens innehåll",
"tempShowsItems": [
"<strong>Tidsintervall</strong>: <em>1 timme</em>, <em>24 timmar</em> som standard, <em>7 dagar</em> eller <em>30 dagar</em>. Varje fråga anpassar upplösningen för ett läsbart diagram.",
"<strong>Fyra indikatorer</strong>: <em>Aktuellt</em>, <em>Min</em>, <em>Medel</em> och <em>Max</em> under intervallet. <em>Aktuellt</em> använder lagringens och aviseringarnas gränser för normal, förhöjd eller hög temperatur.",
"<strong>Linjediagram</strong> över temperatur över tid med linje och yta färgade efter disktyp:"
],
"tempDiskTypes": [
"HDD - typiskt kallare trösklar.",
"SSD – måttliga trösklar.",
"NVMe högre trösklar (NVMe körs varmare av design).",
"SAS — varning vid 55 °C och kritiskt vid 65 °C; varningsgränsen skiljer sig från HDD."
],
"tempConfigurable": "Alla fyra typerna konfigureras under <em>Inställningar → Health Monitor-gränser</em>.",
"tempWhyTitle": "Varför historiken är viktig",
"tempWhyItems": [
"<strong>Upptäck trender.</strong> En enskild avläsning visar inte att en disk värms upp under flera veckor, till exempel på grund av fläktproblem, damm eller närliggande värme. Vyerna för 7 och 30 dagar visar utvecklingen.",
"<strong>Koppla temperaturtoppar.</strong> Om en säkerhetskopiering eller återuppbyggnad kortvarigt passerade gränsen visar vyerna för 1 och 24 timmar om det var enstaka eller återkommande.",
"<strong>Justera gränser.</strong> Kontrollera diskens faktiska arbetsintervall i 30-dagarsdiagrammet innan du ändrar <em>Inställningar → Health Monitor-gränser</em>."
],
"obsTitle": "Observationshistorik i flikarna",
"obsIntro": "Diskfel kan utvecklas gradvis. En disk kan visa SMART <strong>PASSED</strong> samtidigt som den loggar läsfel i dmesg, tappar SATA-länkar eller visar tillfälligt väntande sektorer. ProxMenux sparar dessa <em>signaler</em> och visar dem i dialogen bredvid aktuell SMART-status.",
"obsImageAlt": "Översikt av en disk med godkänt SMART och noll omallokerade/väntande sektorer och CRC-fel, men en I/O-observation med ursprungligt kärnmeddelande, ATA-förklaring, första och senaste tid samt antal",
"obsImageCaption": "En disk med <strong>godkänt SMART</strong> kan ha tidigare observationer. Kortet kompletterar aktuell status med signalhistoriken.",
"obsWhatTitle": "Vad är en observation?",
"obsWhatIntro": "ProxMenux sparar diskhändelser från kärnloggen, dmesg eller SMART som en <strong>observation</strong> när de var för sig är för detaljerade för en avisering. Varje rad visar:",
"obsWhatItems": [
"<strong>Typ</strong> — I/O-, SMART-, filsystems-, ZFS-pool- eller anslutningsfel.",
"<strong>Ursprungligt kärnmeddelande</strong> från dmesg att kopiera till en sökmotor eller ett supportärende.",
"<strong>Kort förklaring</strong> av kända ATA-koder: <code>IDNF</code>, sektoradress hittades inte, möjlig defekt sektor eller kabel; <code>UNC</code>, okorrigerbart läsfel, defekt sektor; och andra standardkoder.",
"<strong>Första och senaste tid</strong> samt <strong>antal förekomster</strong>, grupperade efter felsignatur."
],
"obsWhyTitle": "Varför ProxMenux sparar och visar dem",
"obsWhyItems": [
"<strong>Fel kan utvecklas över tid.</strong> ATA-bussfel, UNC-sektorer eller mediefel kan uppstå innan SMART visar <em>FAILED</em>. dmesg-bufferten behåller dem inte efter en omstart; observationshistoriken gör det.",
"<strong>SMART utesluter inte alla fel.</strong> En disk kan visa gröna attribut och ändå ha problem. Observationerna sparar ytterligare symtom som ICRC, IDNF, SATA-länkåterställningar eller sänkt hastighet.",
"<strong>Skiljer aktuellt från nyligen.</strong> Health Monitor löser tillfälliga fel automatiskt när de slutar återkomma. Historiken visar även flera dagar senare exempelvis tre I/O-fel från en natt.",
"<strong>Underlag för graderade aviseringar.</strong> disk_io använder observationsfrekvensen för tyst, WARNING eller CRITICAL i det rullande 24-timmarsfönstret som infördes i 1.2.1.2."
],
"obsDedupTitle": "Gruppering av dubbletter och nya aviseringar",
"obsDedupBody1": "Observationer grupperas efter <strong>signatur</strong>, ett stabilt fingeravtryck av feltyp, enhet och viktiga meddelandefält. Upprepningar ökar <code>occurrence_count</code> i befintlig rad. En <strong>annan signatur</strong> skapar en ny observation och räknas som ny aviseringshändelse.",
"obsDedupBody2": "För att undvika aviseringskaskader meddelar den första kombinationen av disk, signatur och allvarlighetsgrad operatören. Samma kombination väntar 24 timmar före nästa avisering även om antalet ökar. En ändring från WARNING till CRITICAL bryter väntetiden och meddelar försämringen.",
"obsDismissTitle": "Beständig historik och aktiva fel",
"obsDismissBody1": "Observationer kan inte avfärdas, döljas eller raderas. Varje signatur har ett kort; en upprepning ökar antalet och uppdaterar senaste tiden. Historiken följer serienumret: en annan disk börjar tom även på samma port, och ett namnbyte i kärnan bevarar historiken.",
"obsDismissBody2": "Att lösa eller avfärda ett aktivt fel i Health Monitor ändrar inte observationerna. De finns kvar efter automatisk lösning så att en tillfällig varning från förra veckan fortfarande syns. Se <link>Health Monitor</link> för hantering av aktiva fel."
},
"dataCollected": {
"heading": "Hur data samlas in",
"headerSection": "Avsnitt av fliken",
"headerEndpoint": "Ändpunkt",
"headerSource": "Källa",
"rows": [
{
"section": "Övre sammanfattningskort",
"endpoint": "/api/storage/summary",
"source": "Aggregerad från <code>lsblk</code>, <code>zpool list</code>, <code>vgs</code> / <code>lvs</code>."
},
{
"section": "Inventering per disk",
"endpoint": "/api/storage",
"source": "<code>lsblk -O</code> + <code>smartctl -i</code> per enhet med identitetscache som töms vid hotplug-händelser."
},
{
"section": "Proxmox-lagring",
"endpoint": "/api/proxmox-storage",
"source": "<code>pvesh get /nodes/&lt;node&gt;/storage</code> med aktiv / online-tillståndet för varje."
},
{
"section": "Aktuella SMART-värden",
"endpoint": "/api/storage/smart/<disk>",
"source": "<code>smartctl -A &lt;dev&gt;</code> är en möjlig fråga; detaljändpunkten använder även fullständiga SMART-JSON-data och NVMe-specifika värden."
},
{
"section": "Historik för SMART-självtester",
"endpoint": "/api/storage/smart/<disk>/history",
"source": "Sparas under <code>/usr/local/share/proxmenux/smart/&lt;disk&gt;/</code> som JSON-ögonblicksbilder."
},
{
"section": "Permanenta observationer",
"endpoint": "/api/storage/observations",
"source": "SQLite-tabell som Health Monitor uppdaterar varje cykel och behåller efter att aktiva fel lösts."
}
],
"outro": "Verifiera samlingskedjan på värden:",
"codeComment1": "# Hämta aktuell status från ett skript",
"codeComment2": "# Jämför översiktens data med operativsystemets egna uppgifter"
},
"whereNext": {
"heading": "Läs vidare",
"items": [
{
"label": "Hälsoövervakare",
"href": "/docs/monitor/health-monitor",
"tail": " — kategorin Diskar och I/O samt regler för undertryckning."
},
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tail": " — ändpunkter för lagring och SMART."
},
{
"label": "Aviseringar",
"href": "/docs/monitor/notifications",
"tailRich": " — följdåtgärder som utlöses av <code>disk_io_error</code>, <code>storage_unavailable</code> och <code>smart_test_failed</code>."
},
{
"label": "Översiktsindex",
"href": "/docs/monitor/dashboard",
"tail": " — de andra flikarna."
},
{
"label": "ProxMenux → Diskhanteraren",
"href": "/docs/disk-manager",
"tail": " — TUI-åtgärder: formatera, radera, SMART-tester och importera diskar till VM eller containrar."
},
{
"label": "ProxMenux → Diskstatus och SMART-tester",
"href": "/docs/disk-manager/smart-disk-test",
"tail": " — CLI-motsvarighet: schemalägg SMART-tester, exportera visade JSON-data och läs om testtyper och resultattolkning."
}
]
}
}
@@ -0,0 +1,120 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt: Systemloggar | ProxMenux-dokumentation",
"description": "fliken System Logs konsoliderar tre källor i en skärm: live journalctl med filter och nedladdning, Proxmox aktivitetshistorik (UPID) och meddelandelogg - allt sökbart, filtrerat genom svårighetsgrad / tidsintervall och nedladdningsbart som textpaket."
},
"header": {
"title": "Översikt: Systemloggar",
"description": "Tre underflikar i samma vy: systemjournalen (journalctl med filter), Proxmox uppgiftshistorik och aviseringsloggen. Alla tre kan sökas, filtreras och laddas ner som textpaket.",
"section": "ProxMenux Monitor Dashboard"
},
"readOnly": {
"title": "Read-only av design",
"body": "Den här fliken ändrar inga loggfiler. Filtren finns i URL:en eller gränssnittets tillstånd och nedladdningar skapas på servern. Översikten raderar aldrig loggposter. För loggunderhåll använder du <code>journalctl --vacuum-time=&lt;N&gt;</code> eller <code>logrotate</code> på värden."
},
"topRow": {
"heading": "Övre raden: fyra räknare",
"items": [
"<strong>Totalt antal poster</strong> — antal loggposter i det aktiva filtrets tidsintervall.",
"<strong>Fel</strong> — antal poster med allvarlighetsgrad ≤ 3 (<code>err</code> / <code>crit</code> / <code>alert</code> / <code>emerg</code>).",
"<strong>Varningar</strong> — antal poster med allvarlighetsgrad 4 (<code>warning</code>).",
"<strong>Säkerhetskopieringar</strong> — antal vzdump-/PBS-uppgifter i samma tidsintervall."
]
},
"subtabs": {
"heading": "Tre underflikar",
"logsTitle": "Loggar",
"logsIntro": "Systemjournalen hämtas på servern med <code>journalctl</code>. Följande filter finns i verktygsfältet:",
"logsFilters": [
"<strong>Allvarlighetsgrad</strong> — emerg / alert / crit / err / warning / notice / info / debug, eller valfri kombination.",
"<strong>Time range</strong> - sista 5 min / 15 min / 1 h / 6 h / 24 h / 7 d / custom.",
"<strong>Fritextsökning</strong> — delsträng eller reguljärt uttryck (<code>journalctl --grep</code>).",
"<strong>Enhetsfilter</strong> — begränsa till en viss systemd-enhet (<code>pveproxy.service</code>, <code>nginx.service</code>, …)."
],
"logsRowsAfter": "Varje rad visar tidsstämpel, svårighetsgrad, källenhet och meddelandet. Långa meddelanden kollapsar med en \"visa mer\" växel. Den är <strong>Ladda ner</strong> Åtgärder buntar det aktuella filtret i en enda <code>.txt</code> fil via <code>GET /api/logs/download</code> - användbar när du vill dela en bit av tidskrift med någon.",
"logDetailsModalTitle": "Dialogrutan Loggdetaljer",
"logDetailsBody": "Ett klick på en rad öppnar dialogrutan <strong>Loggdetaljer</strong> med alla strukturerade fält som journald fångade för posten, samma vy som <code>journalctl --output=verbose</code> på värden.",
"logDetailsImageAlt": "Dialogrutan Loggdetaljer — en utökad journalpost med nivå, tjänst, tidsstämpel, källa, systemd-enhet, process-ID, värdnamn och hela meddelandet",
"logDetailsImageCaption": "Loggdetaljer — alla strukturerade journald-fält för posten, med hela det oförkortade meddelandet längst ner. Användbart för cron- och tjänsteloggar där den körda kommandoraden är viktig.",
"fieldsIntro": "Fält som visas:",
"fields": [
"<strong>Level</strong> - färgad svårighetsgrad (INFO / WARNING / ERROR / CRITICAL).",
"<strong>Service</strong> - kort namn på enheten / processen som sände inträdet.",
"<strong>Timestamp</strong> - helt datum och tid för logglinjen.",
"<strong>Source</strong> - ursprunget till posten (journal, kärna, revision, ...).",
"<strong>Systemd Unit</strong> - den faktiska <code>.service</code> / <code>.timer</code> / <code>.socket</code> enhet om posten var associerad med en.",
"<strong>Process ID</strong> – PID för emitteringsprocessen.",
"<strong>Hostname</strong> - användbar när tidskrifter vidarebefordras över klusternoder.",
"<strong>Meddelande</strong> — hela det oförkortade meddelandet i ett block med fast teckenbredd, klart att kopiera."
],
"maxLevelStoreTitle": "Journald MaxLevelStore",
"maxLevelStoreBody": "På en ny Proxmox-installation använder journald som standard <code>MaxLevelStore=warning</code>, vilket kastar bort info-meddelanden. Monitor upptäcker detta vid start och lägger till en kompletterande konfiguration (<code>/etc/systemd/journald.conf.d/proxmenux-loglevel.conf</code>) med gränsen <code>info</code>, så att informationsmeddelanden och allvarligare meddelanden sparas. Detta omfattar inte debug.",
"backupsTitle": "Säkerhetskopieringar",
"backupsBody": "Proxmox uppgiftshistorik filtrerad till säkerhetskopieringar. En rad per uppgift (<code>vzdump</code>, PBS-överföringar, Garbage Collect, Verify) med status (OK / WARNINGS / ERROR), berörd gäst, källagring, varaktighet och UPID. Klicka på en rad för att läsa hela uppgiftsloggen via <code>GET /api/task-log/&lt;upid&gt;</code> — samma data som i <em>Datacenter → Tasks</em>, begränsade till säkerhetskopieringar.",
"notificationsTitle": "Aviseringar",
"notificationsBody1": "Alla aviseringar som Monitor skickar: Telegram, Discord, e-post, Gotify, ntfy, Slack, Teams och webhook. Varje rad visar tidsstämpel, kanal, händelsetyp, allvarlighetsgrad, genererad rubrik och text samt, om AI är aktiverat, ett reglage för att jämföra AI-versionen med originalet.",
"notificationsBody2": "Använd fliken för att kontrollera att en kanal levererar aviseringar och jämföra AI-versionen med grundmallen. Kanaler ställs in på den detaljerade sidan <link>Aviseringar</link>."
},
"dataCollected": {
"heading": "Hur data samlas in",
"headerSubtab": "Underflik",
"headerEndpoint": "Slutpunkt",
"headerSource": "Källa",
"rows": [
{
"subtab": "Loggar (livefilter)",
"endpoint": "/api/logs",
"source": "<code>journalctl --output json --since &lt;range&gt;</code> med filter för allvarlighetsgrad, enhet och sökning på servern."
},
{
"subtab": "Ladda ner",
"endpoint": "/api/logs/download",
"source": "Samma fråga, returnerad som oformaterad text för grep / less."
},
{
"subtab": "Säkerhetskopieringar",
"endpoint": "/api/backups",
"source": "PVE-uppgiftshistorik filtrerad efter <code>vzdump</code>, PBS-överföringar, Garbage Collect och Verify."
},
{
"subtab": "Detaljer för en säkerhetskopieringsuppgift",
"endpoint": "/api/task-log/&lt;upid&gt;",
"source": "Hela uppgiftsloggen läses som oformaterad text från <code>/var/log/pve/tasks/&lt;index&gt;/&lt;upid&gt;</code>."
},
{
"subtab": "Aviseringshistorik",
"endpoint": "/api/notifications/history",
"source": "SQLite-tabellen <code>notification_history</code> fylls av sändningsslingan."
}
],
"apiIntro": "Både livefiltret och nedladdningarna kan också nås via API:",
"codeComment1": "# Fel och allvarligare händelser från den senaste timmen med ett sökord",
"codeComment2": "# Ladda ner hela journalen från de senaste 6 timmarna som oformaterad text",
"codeComment3": "# Slå upp hela utdata för en viss uppgift med dess UPID"
},
"whereNext": {
"heading": "Nästa steg",
"items": [
{
"label": "Hälsoövervakare",
"href": "/docs/monitor/health-monitor",
"tail": " — kategorin Systemloggar, som bevakar ihållande mönster, toppar och kaskader."
},
{
"label": "Aviseringar",
"href": "/docs/monitor/notifications",
"tail": " — journalbevakningen läser samma källa och omvandlar träffar till aviseringar."
},
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tail": " — slutpunkterna logs och task-log med sina frågeparametrar."
},
{
"label": "Översiktsindex",
"href": "/docs/monitor/dashboard",
"tail": " — de andra flikarna."
}
]
}
}
@@ -0,0 +1,177 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt: Systemöversikt | ProxMenux-dokumentation",
"description": "Standardstartfliken i ProxMenux Monitor: fyra mätkort (CPU, minne, aktiva VM och LXC, temperatur) med liveuppdatering och minidiagram, historikdiagram samt lagrings- och nätverkssammanfattningar med länkar till respektive flik."
},
"header": {
"title": "Översikt: Systemöversikt",
"description": "Fliken som öppnas som standard: fyra livekort med mätvärden överst, historikdiagram i mitten och sammanfattningar av lagring och nätverk längst ner, från samma API:er som respektive detaljflik.",
"section": "ProxMenux Monitor · Översikt"
},
"readOnly": {
"title": "En skrivskyddad ögonblicksbild",
"body": "Alla paneler på fliken visar information. Åtgärder finns på länkade flikar: Lagring för diskhantering, VM och LXC för att starta eller stoppa gäster och Säkerhet för autentisering."
},
"captureAlt": "Systemöversikt — fyra mätkort (CPU, minne, aktiva VM, temperatur), nodens mätvärdesdiagram och sammanfattningskort för lagring och nätverk",
"captureCaption": "Systemöversikt, standardstartfliken. De fyra korten visar livevärden, diagrammet visar historik och de två nedersta korten sammanfattar lagring och nätverk.",
"topRow": {
"heading": "Övre raden: mätkort med livevärden",
"intro": "Fyra kort i ett 2×2-rutnät på mobilen och i en rad på datorn. Varje kort uppdateras från <code>/api/system</code> med några sekunders mellanrum.",
"headerCard": "Kort",
"headerWhat": "Vad det visar",
"headerSource": "Källa",
"rows": [
{
"card": "CPU-användning",
"what": "Aktuell procentandel med en stapel. Uppdateras ungefär varje sekund av vitaldata-samplaren.",
"source": "psutil.cpu_percent()"
},
{
"card": "Minnesanvändning",
"what": "Använda GB, procentandel och totalt antal GB. Stapeln visar procentandelen.",
"source": "psutil.virtual_memory()"
},
{
"card": "Aktiv VM & LXC",
"what": "Antal körande gäster med uppdelning Körs / Stoppade och totalt antal VM och LXC längst ner.",
"source": "/api/vms (konsoliderad)"
},
{
"card": "Temperatur",
"what": "CPU-temperatur i °C med status (sval / varm / het) och ett minidiagram för de senaste 5 minuterna i bakgrunden. Visar <em>N/A</em> utan sensor. Klicka för att öppna temperaturdetaljer.",
"source": "sensors / coretemp"
}
],
"thresholdsTitle": "Statusfärger och trösklar som tillämpas här",
"thresholdsIntro": "Ringar, staplar och minidiagram använder samma skala: <green/> <strong>grön</strong> under Varning, <amber/> <strong>bärnstensfärgad</strong> mellan Varning och Kritisk, <red/> <strong>röd</strong> från Kritisk och uppåt. Rekommenderade standardvärden i ProxMenux:",
"thresholdsItems": [
"<strong>CPU-användning</strong> — varning 85 %, kritisk 95 %.",
"<strong>Minne</strong> — varning 85 %, kritisk 95 %. Swap utlöser också Kritisk vid 5 % användning; en välfungerande Proxmox-värd bör sällan behöva använda swap.",
"<strong>CPU-temperatur</strong> — varning 80 °C, kritisk 90 °C."
],
"thresholdsOutro": "Alla värden kan ställas in per värd. <link>Inställningar → Tröskelvärden för hälsokontrollen</link> är den centrala referensen och förklarar hur de anpassas.",
"sparklineTitle": "Minidiagrammet visar trenden",
"sparklineBody": "Temperaturkortet drar ett 5-minuters spår under värdet, med linjen och gradientfärgen efter samma varning / kritiskt par dokumenterat ovan. Det är det snabbaste sättet att se om värden är i en termisk klättring utan att öppna detaljerna."
},
"processes": {
"heading": "Processer med högst CPU- och minnesanvändning",
"intro": "Korten CPU-användning och Minne öppnar en sorterbar lista över de 25 största processerna: efter CPU-användning från CPU-kortet eller resident minne från minneskortet.",
"listTitle": "Listdialogrutan",
"listItems": [
"<strong>Automatisk uppdatering</strong> — listan uppdateras var 5:e sekund medan dialogrutan är öppen och slutar hämta data när den stängs.",
"<strong>Filter</strong> — sökfältet begränsar listan efter kommando, användare eller PID.",
"<strong>Staplar i raderna</strong> — huvudkolumnens stapel skalas mot det högsta värdet i den filtrerade listan. Rangordningen förblir tydlig även när ingen process är nära 100 %.",
"<strong>Mobil layout</strong> — under 640 px döljs PID och Användare, så att Kommando, CPU % och Minne får plats utan horisontell rullning."
],
"captureListAlt": "Dialogruta med processer efter minne — tabell sorterad efter RSS med PID, användare, kommando, CPU % och minne",
"captureListCaption": "Minneskortet öppnar listan sorterad av RSS (indigo accent). CPU-kortet öppnar samma lista sorterad av CPU-användning (blå accent).",
"detailTitle": "Detaljer per process",
"detailIntro": "Klicka på en rad för att öppna en andra dialogruta med processens aktuella data i fyra avsnitt:",
"detailItems": [
"<strong>Översikt</strong> — tillstånd, överordnad process, antal trådar, öppna filbeskrivare, användare och grupp.",
"<strong>Resurser</strong> — CPU %, minne %, resident minne (RSS), virtuell storlek, swap och totalt läst och skrivet I/O.",
"<strong>Kommando</strong> — kort namn, fullständig kommandorad, sökväg till den körbara filen och arbetskatalog.",
"<strong>Körtid</strong> — starttid och förfluten körtid."
],
"detailRefresh": "Detaljerna uppdateras var 3:e sekund. När processen avslutas stoppas hämtningen och en bärnstensfärgad banderoll <em>Processen har avslutats</em> visas. Den senaste ögonblicksbilden ligger kvar nedtonad så att du kan se vad som hände strax före slutet.",
"captureDetailAlt": "Processdetaljer — Översikt, Resurser, Kommando och Körtid för ett PID",
"captureDetailCaption": "Perprocessdetaljdialog öppnad från en lista rad. Accentfärgen matchar kortet som öppnade det (blå för CPU, indigo för minne)."
},
"middle": {
"heading": "Mitten: diagram med nodens mätvärden",
"body1": "Under korten visar <code>NodeMetricsCharts</code> historik för CPU, minne och disk-I/O från Proxmox RRD-lager via <code>/api/node/metrics</code>. Välj <em>1 timme / 24 timmar / 7 dagar / 30 dagar / 1 år</em>. Upplösningen sänks för längre perioder så att diagrammet förblir följsamt.",
"body2": "Samma diagram som Proxmox webbgränssnitt visar för en nod, infogade i Monitors mörka tema och placerade i linje med övriga paneler."
},
"bottom": {
"heading": "Nedre raden: sammanfattningar av lagring och nätverk",
"storageTitle": "Kortet Lagringsöversikt",
"storageIntro": "En kompakt vy av värdens lagringstillstånd, uppdelad i tre block:",
"storageItems": [
"<strong>Nodens totala kapacitet</strong> — summan av VM-/LXC-lagring och lokal systemlagring, med en tonad stapel för använt och ledigt utrymme.",
"<strong>Total kapacitet / Fysiska diskar</strong> — råkapacitet och antal upptäckta fysiska diskar.",
"<strong>VM-/LXC-lagring</strong> — använt och ledigt utrymme samt procentandel för gästlagringen, med en räknare när flera lagringar finns.",
"<strong>Lokal lagring (system)</strong> — värdens rot- eller systemmontering, separat från gästpoolen."
],
"storageDrillIn": "Detaljer finns på <link>fliken Lagring</link>: SMART per disk, ZFS-pooler, observationshistorik med mera.",
"networkTitle": "Kortet Nätverksöversikt",
"networkBody1": "Top line visar antalet aktiva gränssnitt (fysiska + broar i kombination). Nedan följer två rader färgade märken för de gränssnitt som är <code>up</code> - fysiska NIC i blå, broar i en sekundär färg. En tidsram väljare höger (1 timme / 24 timmar / 7 dagar / 30 dagar / 1 år) kontrollerar en liten RX / TX trafik diagram.",
"networkBody2": "Detaljer per gränssnitt (IP/MAC, RRD-diagram, bromedlemmar, bond-läge med mera) finns på <link>fliken Nätverk</link>."
},
"refresh": {
"heading": "Uppdateringsmodell",
"intro": "Varje panel hanterar sitt laddningstillstånd (<code>loadingStates.cpu</code>, <code>loadingStates.storage</code>, …) så att en långsam källa inte blockerar resten. Under hämtning visas en pulserande platshållare. Fel hanteras utan att blockera vyn: utan temperatursensor visas <em>N/A</em> i stället för ett fel.",
"items": [
"<strong>Övre mätkort</strong> — uppdateras ungefär var 5:e sekund. CPU och temperatur får även data varje sekund från vitaldata-samplaren.",
"<strong>Nodens mätvärdesdiagram</strong> — laddas när det öppnas och när period eller språk ändras. Vid behov görs ett nytt försök efter 60 s.",
"<strong>Lagringskort</strong> — uppdateras ungefär var 60:e sekund. SMART-data cachas längre; fliken Lagring begär en ny avläsning vid behov.",
"<strong>Nätverkskort</strong> — sammanfattning var 59:e sekund och trafikdiagram var 60:e sekund för vald period.",
"<strong>Manuell uppdatering</strong> — knappen Uppdatera i rubriken laddar genast om alla paneler."
]
},
"dataCollected": {
"heading": "Hur data samlas in",
"headerCard": "Kort",
"headerEndpoint": "Slutpunkt",
"headerSource": "Källa",
"rows": [
{
"card": "Statusindikator i rubriken",
"endpoint": "/api/health",
"source": "Den cachade övergripande status som produceras av hälsokontrollen varje cykel."
},
{
"card": "CPU / RAM / Swap / Drifttid",
"endpoint": "/api/system",
"source": "<code>/proc/stat</code>, <code>/proc/meminfo</code>, <code>/proc/uptime</code> med kortfönster CPU provtagning."
},
{
"card": "Värd info (kernel, BIOS, distro)",
"endpoint": "/api/info",
"source": "<code>uname -a</code>, <code>dmidecode</code>, PVE version. Cachad per process."
},
{
"card": "Lagring / nätverk / VM-kort",
"endpoint": "/api/storage/summary, /api/network/summary, /api/vms",
"source": "Se dedikerade flikarna för varje. Rubriken visar en kompakt vy från samma slutpunkter."
},
{
"card": "Uppdateringsintervall",
"endpoint": "—",
"source": "Systemdata var 5:e sekund; lagring, VM och nätverkssammanfattning var 59:e sekund. Uppdatera i rubriken laddar genast om alla paneler."
}
],
"codeComment1": "# Anropet som ger statusindikatorn i rubriken dess data",
"codeComment2": "# offentligt, ingen token",
"codeComment3": "# Autentiserad ögonblicksbild som används av korten"
},
"whereNext": {
"heading": "Var till nästa",
"items": [
{
"label": "Hälsoövervakare",
"href": "/docs/monitor/health-monitor",
"tail": " — dialogrutan bakom statusindikatorn i rubriken: tio kategorier samt avfärdande och undertryckning av aviseringar."
},
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tail": " — slutpunkterna system, info och health."
},
{
"label": "Aviseringar",
"href": "/docs/monitor/notifications",
"tail": " — Hur samma status förvandlas till Telegram / Discord / E-postmeddelanden."
},
{
"label": "Översiktsindex",
"href": "/docs/monitor/dashboard",
"tail": " — de övriga översiktsflikarna i korthet."
},
{
"label": "Arkitektur",
"href": "/docs/monitor/architecture",
"tail": " — bakgrundstrådarna och API:erna som ger data till den här vyn."
}
]
}
}
@@ -0,0 +1,174 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt: Terminal | ProxMenux-dokumentation",
"description": "Skal på Proxmox-värden i webbläsaren: upp till 4 terminaler i rutnätsvy, tangentbordsknappar för mobila enheter (ESC, TAB, pilar, Ctrl-kombinationer), inbyggd kommandoguide med cheat.sh och JWT-skydd."
},
"header": {
"title": "Översikt: Terminal",
"description": "En riktig skalsession på Proxmox-värden i webbläsaren. Upp till fyra terminaler samtidigt, tangentbordsknappar för mobila enheter och en inbyggd kommandoguide, med samma tema som resten av översikten.",
"section": "ProxMenux Monitor · Översikt"
},
"intro": {
"title": "En riktig PTY i webbläsaren",
"body": "Terminalen skapar en PTY på servern via <code>flask_terminal_routes</code>, kopplar den med WebSocket till <code>xterm.js</code> i webbläsaren och körs som <code>root</code>, systemd-enhetens användare. Som med <code>ssh root@&lt;host&gt;</code> kan du använda <code>vim</code>, <code>tmux</code>, ncurses-verktyg och Proxmox CLI:er (<code>qm</code>, <code>pct</code>, <code>pvesh</code>, <code>pvecm</code>). Varje PTY exporterar <code>PROXMENUX_TERMINAL=monitor</code>. Alla underordnade <code>bash</code>-processer, även en senare start av <code>menu</code>, ärver variabeln så att de känner igen Monitors webbläsarterminal."
},
"singleAlt": "Terminalfliken i ProxMenux Monitor — en terminalsession som visar Fastfetchs systemöversikt vid inloggning",
"singleCaption": "En värd terminal öppen - verktygsfältet ovan visar räkningen (<em>1 / 4 terminaler</em>), <em> + New</em>, <em>Search</em>, <em>Clear</em> och <em>Close</em>. De mobila tangentbordshjälparna visas under terminalen på touch-enheter.",
"target": {
"heading": "Anslutningsmål",
"body1": "Terminalfliken öppnar ett skal på <strong>själva Proxmox-värden</strong>, som vid SSH-inloggning. Varje flik öppnar en ny terminal på värden.",
"body2": "För att nå en <strong>LXC-container</strong> från webbläsaren använder du knappen <em>Konsol</em> på varje körande CT-kort på <link>fliken VM och LXC</link>. Den öppnar en dialogruta som kör <code>pct enter &lt;vmid&gt;</code> och använder samma mobilanpassade verktygsfält som beskrivs nedan."
},
"menuGuard": {
"heading": "Skydd vid självuppdatering av menu i terminalen",
"body1": "När du bekräftar självuppdateringen ersätter <code>menu</code> sitt skriptträd och laddas om. Det fungerar via SSH eller Proxmox-konsolen, men i webbläsaren skulle skalets PTY stängas och WebSocket avbrytas. Därför läser <code>check_updates_stable</code>, <code>check_updates_beta</code> och <code>apply_release_channel</code> variabeln <code>PROXMENUX_TERMINAL</code> för att känna igen Monitor-kontexten.",
"body2": "Då ersätts ja/nej-dialogrutan med ett meddelande med det officiella installationskommandot: <code>bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"</code> för stable och motsvarande URL för <code>install_proxmenux_beta.sh</code> för beta. Uppdateringen utförs via SSH eller Proxmox-värdens konsol; webbläsarterminalen används bara för att läsa och bekräfta meddelandet."
},
"fourTerminals": {
"heading": "Upp till fyra terminaler samtidigt",
"intro": "Fliken låter dig öppna upp till fyra värdterminaler samtidigt. Var och en får sin egen PTY och sin egen WebSocket De är helt oberoende sessioner. Två layouter växlar med ikonerna bredvid knappen \"New\":",
"items": [
"<strong>Flikvy</strong> — en terminal synlig åt gången, de andra som namngivna flikar överst (<em>Terminal 1</em>, <em>Terminal 2</em>…). Passar när du arbetar med en uppgift och har resten i bakgrunden.",
"<strong>Rutnätsvy</strong> — alla öppna terminaler i ett 2×2-rutnät. Du kan bevaka <code>htop</code> i en, <code>iftop</code> i en annan och redigera i en tredje utan att växla flik."
],
"outro": "Verktygsfältet visar antalet (<em>1/4 terminaler</em>, <em>4/4 terminaler</em>). <strong>+ Ny</strong> öppnar en flik; det lilla <code>×</code> i flikrubriken stänger den. Den stora röda knappen <strong>Stäng</strong> överst avslutar alla terminaler."
},
"gridAlt": "ProxMenux Monitor Terminal-fliken - rutnätsvy med fyra värdterminaler som kör ls, nätverkskonfig, iftop och ProxMenux huvudmenyn sida vid sida",
"gridCaption": "Rutnätsvy (4 / 4 terminaler) — fyra oberoende PTY:er samtidigt: kataloglista, <code>/etc/network/interfaces</code>, <code>iftop</code> och ProxMenux huvudmeny. Växla mellan rutnät och flikar med layoutreglaget i verktygsfältet.",
"keyboard": {
"heading": "Tangentbordsknappar för mobila enheter",
"intro": "Tangentbord på telefoner och surfplattor saknar ofta ESC, TAB, piltangenter och kombinationer med modifierartangenter. De behövs i <code>vim</code>, <code>nano</code>, <code>htop</code> och TUI-menyer. Terminalfliken visar därför en rad pekknappar under terminalen på små skärmar eller enheter med pekstöd:",
"headerButton": "Knapp",
"headerSends": "Skickar",
"headerUse": "Typisk användning",
"rows": [
{
"button": "ESC",
"sends": "\\x1b",
"use": "Lämna infogningsläge i <code>vim</code>, avbryt en TUI-dialogruta eller avsluta en sökning."
},
{
"button": "TAB",
"sends": "\\t",
"use": "Automatisk komplettering av sökvägar och navigering mellan fält i dialog/whiptail."
},
{
"button": "↑ ↓ ← →",
"sends": "\\x1bO[ABCD]",
"use": "Skalhistorik, markörförflyttning och menynavigering."
},
{
"button": "↵ Retur",
"sends": "\\r",
"use": "Bekräfta. Vissa skärmtangentbord ersätter Enter med Gå/Klar; den här knappen är entydig."
},
{
"button": "Ctrl ▾",
"sends": "Listruta",
"useRich": true
}
],
"ctrlIntro": "Tre kontrollsekvenser:",
"ctrlItems": [
"<code>Ctrl+C</code> — avbryt kommandot som körs (<code>\\x03</code>).",
"<code>Ctrl+X</code> — avsluta <code>nano</code> (<code>\\x18</code>).",
"<code>Ctrl+R</code> — sök bakåt i bash-historiken (<code>\\x12</code>)."
],
"modalTitle": "Samma verktygsfält i dialogrutan för LXC-konsolen",
"modalBody": "Konsolen som öppnas från <link>VM och LXC → Konsol</link> visar samma tangentbordsknappar under dialogrutan. Vid anslutning skriver den automatiskt <code>pct enter &lt;vmid&gt;</code>, så att du kommer direkt in i containern."
},
"lxcAlt": "LXC-konsolens dialogruta i ProxMenux Monitor — Terminal: ubuntu (ID: 103), med samma mobilanpassade verktygsfält (ESC, TAB, pilar, Enter, Ctrl) under terminalen",
"lxcCaption": "LXC-konsolen öppnad från <em>VM och LXC → Konsol</em>. Rubriken visar målcontainern (<em>Terminal: ubuntu (ID: 103)</em>) och samma pekanpassade verktygsfält finns under terminalen.",
"search": {
"heading": "Sök kommandon — inbyggd snabbguide",
"intro": "Den blå knappen <strong>Sök</strong> öppnar ungefärlig kommandosökning. Skriv några bokstäver i ett Linux- eller Proxmox-kommando (<code>ls</code>, <code>tar</code>, <code>qm</code>, <code>pct</code>, <code>zpool</code>, <code>systemctl</code>…) för att se exempel med <em>Skicka till aktiv terminal</em> med ett tryck. Då kan du hitta en flagga utan att byta webbläsarflik.",
"modalAlt": "ProxMenux Monitor — dialogrutan Sök kommandon med ungefärlig sökning efter Linux- och Proxmox-kommandon via cheat.sh och flera ls-exempel",
"modalCaption": "Sökning efter <code>ls</code> — varje resultat visar kommandot, dess beskrivning och en liten pil för att skicka det till aktiv terminal. Datakällan visas längst ner till höger (<em>Data från cheat.sh</em>).",
"aboutLabel": "Om cheat.sh:",
"aboutBody": "är en snabbguide med öppen källkod som underhålls av gemenskapen och samlar korta praktiska exempel för hundratals Linux-kommandon, administrationsverktyg och programmeringsspråk. Den skapades för <code>curl cheat.sh/&lt;command&gt;</code> i terminalen men kan även nås i webbläsaren. ProxMenux Monitor vidarebefordrar frågorna genom en proxy på servern så att dialogrutan har samma ursprung som översikten.",
"headerSource": "Källa",
"headerWhen": "När den används",
"headerWhat": "Vad du ser",
"onlineLabel": "(online)",
"onlineWhen": "När värden har internetåtkomst och cheat.sh proxy svarar.",
"onlineWhat": "Flera praktiska exempel per kommando med beskrivningen ovanför. Statuspunkten i dialogrutans rubrik är <green>grön</green>.",
"fallbackLabel": "Lokal reservlista",
"fallbackWhen": "När cheat.sh är oåtkomlig (offline värd, restriktiv brandvägg, cheat.sh avbrott).",
"fallbackWhat": "En medföljande lista med vanliga Linux- och Proxmox-kommandon. Mindre katalog, men alltid tillgänglig. Statuspunkten är <red>röd</red>.",
"sendingNote": "<strong>Så fungerar sändning</strong>: pilen bredvid resultatet skickar texten till aktiv terminal (vald flik eller den terminal du senast klickade på i rutnätet). Dialogrutan stängs automatiskt så att du kan trycka på Enter."
},
"auth": {
"heading": "Autentisering",
"items": [
"Webbläsaren begär först en engångsbiljett via <code>POST /api/terminal/ticket</code> med JWT i <code>Authorization</code>-huvudet. Biljetten skickas sedan när WebSocket öppnas och löper ut efter 5 sekunder. Om autentisering är aktiverad och biljetten saknas eller är ogiltig stängs anslutningen innan en PTY skapas.",
"Om Monitor ligger bakom en omvänd proxy måste den vidarebefordra WebSocket-uppgraderingar. Exempel för Nginx / Caddy / Traefik finns på <link>Åtkomst och autentisering</link>."
]
},
"clipboard": {
"heading": "Urklipp, rullningshistorik och storleksändring",
"items": [
"<strong>Kopiera och klistra in</strong> — använder webbläsarens urklipp. Markera text med mus eller styrplatta och använd systemets kortkommando (<code>Cmd+C</code> på macOS, <code>Ctrl+Shift+C</code> på Linux/Windows). Linux-skrivbord stöder även inklistring med mittenknappen.",
"<strong>Rullningshistorik</strong> — rulla med hjul eller två fingrar. xterm.js behåller de senaste flera tusen raderna i minnet.",
"<strong>Ändra storlek</strong> — terminalen anpassar PTY-fönstrets storlek när översiktens panel ändras, så att <code>htop</code> och <code>vim</code> visas korrekt.",
"<strong>Återanslutning när fliken får fokus</strong> — appbyte på telefon eller surfplatta, särskilt iPad, kan bryta WebSocket. Terminalfliken upptäcker synlighetsändringen och återansluter när du kommer tillbaka, med 15 sekunders tidsgräns för långsamma VPN-anslutningar."
]
},
"disconnect": {
"heading": "Orsaker till frånkoppling",
"intro": "De vanligaste orsakerna till att en session slutar och vad man ska göra åt varje:",
"headerCause": "Orsak",
"headerFix": "Lösning",
"rows": [
{
"cause": "Sessionens JWT har löpt ut när en terminal öppnas eller återansluts (24 timmar).",
"fix": "Uppdatera sidan och logga in igen. Terminalen är inte utformad för obevakade sessioner, så JWT-livslängden matchar den vanliga instrumentpanelen inloggning."
},
{
"cause": "Tidsgräns för inaktivitet i den omvända proxyn.",
"fix": "Öka <code>proxy_read_timeout</code> i Nginx eller motsvarande i Caddy / Traefik (exempel under Åtkomst och autentisering)."
},
{
"cause": "Telefon eller surfplatta i viloläge.",
"fix": "När enheten vaknar återansluts fliken automatiskt (15 sekunders tidsgräns för VPN-anslutningar). Ladda annars om fliken."
},
{
"cause": "Tjänsten startas om på värden.",
"fix": "Varje omstart av <code>proxmenux-monitor.service</code> stänger alla PTY:er. Öppna nya terminaler när översikten har laddats om."
}
]
},
"warning": {
"title": "Terminalen är ett root-skal på värden",
"body": "Terminalen ärver systemd-enhetens användare (<code>root</code>) och har fulla rättigheter på Proxmox-värden. Ställ in användarnamn, lösenord och 2FA under <authLink>Åtkomst och autentisering</authLink> innan du tillåter åtkomst utanför det lokala nätverket. Om autentisering är avstängd kan alla som når port 8008 öppna ett root-skal utan fler frågor eller SSH-inloggningsuppgifter. Använd <gatewayLink>Secure Gateway</gatewayLink> (Tailscale) eller en HTTPS-proxy för extern åtkomst i stället för att öppna porten mot internet."
},
"whereNext": {
"heading": "Nästa steg",
"items": [
{
"label": "Åtkomst och autentisering",
"href": "/docs/monitor/access-auth",
"tail": " — exempel för omvänd proxy med de WebSocket-uppgraderingsrader som terminalen kräver."
},
{
"label": "Arkitektur",
"href": "/docs/monitor/architecture",
"tail": " — WebSocket-transport (HTTP via flask-sock och HTTPS / WSS via gevent)."
},
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tail": " — WebSocket-slutpunkterna /ws/terminal och /ws/script/<sid> tillsammans med resten av API:et."
},
{
"label": "Integrationer → Secure Gateway",
"href": "/docs/monitor/integrations",
"tail": " — när du vill ha terminal åtkomst utanför LAN utan att exponera port 8008."
},
{
"label": "Översiktsindex",
"href": "/docs/monitor/dashboard",
"tail": " — de andra flikarna."
}
]
}
}
@@ -0,0 +1,245 @@
{
"meta": {
"title": "LXC App-flik: upptäckt, länkar och versionsspårning | ProxMenux",
"description": "Upptäck och registrera LXC-program, skapa webblänkar och eventuellt spåra installerade och tillgängliga versioner."
},
"header": {
"title": "LXC App-flik: upptäckt, länkar och versionsspårning",
"description": "Ge varje LXC-applikation en ihållande identitet, webbåtkomst och valfria versionsbevis utan att koppla registrering till uppdateringar."
},
"intro": {
"p1": "Fliken <strong>App</strong> registrerar vilka appar som hör till en LXC. En post kan innehålla bara namn och webblänk eller även en detektor för installerad version och en uppströmskälla.",
"p2": "Förfarandet som ändrar programvara ställs in separat på <link>fliken Uppdateringar</link>. Att spara en app kör aldrig ett installations- eller uppdateringsprogram.",
"callout": "Registrering, versionsspårning och uppdatering är tre oberoende funktioner. Alla kan användas utan att kräva de andra två.",
"dashboardTitle": "Från registrering till Apps-startvyn",
"dashboard": "Varje sparad webblänk visas också som kort på den övergripande <appsLink>Apps-fliken</appsLink>. Den här LXC-sidan är fortfarande den centrala källan för namn, logotyp, länkar och versionsspårning."
},
"overview": {
"heading": "Vad en appost kan innehålla",
"lead": "En sparad post kan innehålla:",
"items": [
"Ett visningsnamn och en logotyp som anpassas till temat.",
"En eller flera klickbara webblänkar byggda från LXC-adressen, schemat och sparad port.",
"En valfri detektor för den version som för närvarande är installerad i LXC.",
"En valfri GitHub, HTTP JSON eller Docker Hub-källa för den senaste tillgängliga versionen.",
"Aviseringar om nya versioner och val för inkludering i uppdateringsräknaren per app.",
"En motsvarande sektion på fliken Uppdateringar, även när versionsspårning är inaktiverad."
]
},
"discovery": {
"heading": "Cachad upptäckt och Hitta appar",
"lead": "Appförslag ingår i cachen för varje LXC-dialogruta. Startsökningen förbereder dem i bakgrunden så att App-fliken genast kan visa sparade resultat.",
"items": [
"Om du öppnar fliken App startar <strong>inte</strong> en ny katalogsökning och frågar inte LXC upprepade gånger.",
"<strong>Hitta appar</strong> kör uttryckligen en ny sökning för den LXC:n. Använd den efter att ny programvara installerats medan ProxMenux redan körs.",
"Den tidigare listan förblir synlig medan sökningen körs. Nya träffar läggs till när den är klar.",
"Om ingen ny träff hittas visas resultatet vid åtgärderna och <strong>Registrera app</strong> är fortfarande tillgängligt för manuell inmatning.",
"Spara, ta bort eller återställa en app uppdaterar samma cache omedelbart. Starta eller återställa en LXC uppdateringar bara den gästen genom sin befintliga livscykel händelse."
],
"callout": "Ett förslag är ingen registrering. Det förblir skrivskyddat tills <strong>Registrera</strong> väljs och formuläret sparas."
},
"registration": {
"heading": "Registrera en app",
"lead": "Ett upptäckt förslag och en manuell post använder samma redigerare:",
"steps": [
"Välj <strong>Registrera</strong> på ett förslag eller <strong>Registrera app</strong> för att välja från katalogen eller ange ett eget namn.",
"Granska namnet och logotypen som föreslås av katalogen.",
"Lägg till nödvändiga webblänkar. Upptäckta lyssningsportar erbjuds som genvägar, men ingen sparas automatiskt.",
"Låt <strong>Spåra uppströmsversion</strong> vara avstängt för poster med enbart länkar, eller aktivera det och kontrollera detektorn för installerad version samt uppströmskällan.",
"Använd <strong>Testa detektor</strong> när spårning är aktiverad och spara sedan posten.",
"Välj <strong>Klar</strong> efter redigering. App- och Uppdateringar-flikarna återanvänder den uppdaterade cachade posten."
]
},
"catalog": {
"heading": "Katalogstödd registrering",
"lead": "Katalogen ger standardvärden men den sparade posten kan fortfarande redigeras.",
"items": [
"Sökresultat kan fylla det kanoniska namnet, logotypen och vanliga webbportar.",
"Kända versionsdetektorer är baserade på riktiga paketnamn, binärer, filer, Python-distributioner, OCI-etiketter eller kommandon snarare än ett universellt <code>/root/.app</code>-antagande.",
"Verifierade korrigeringar för verkliga installationer har företräde när en sökväg skiljer sig från installationsprogrammets metadata.",
"Proxmox VE Helper-Scripts markörer som <code>/root/.slug</code> förblir en kompatibilitetssignal för nyare hjälparinstallationer, inte den enda detektorn.",
"Varje föreslaget värde kan redigeras innan du sparar för att täcka officiella installatörer och manuella installationer."
]
},
"docker": {
"heading": "Hur Docker LXC representeras",
"lead": "För en LXC vars primära plattform är Docker, är <strong>Docker</strong> programmet registrerat på LXC nivå.",
"items": [
"En containeriserad arbetsbelastning som Portainer, Frigate eller Vaultwarden föreslås inte som en oberoende LXC-applikation.",
"Körande Docker-tjänster med publicerade TCP-portar erbjuds som valfria webblänkar i Docker-redigeraren.",
"Varje föreslagen länk visar tjänsten, värdporten och containerporten. Endast länkar som tillhandahåller ett webbgränssnitt bör sparas.",
"Dockers allmänna logotyp används om länken saknar en egen. En logotyp som ställs in per länk ersätter den.",
"Efter registrering visas uppdateringar av Docker Engine och avbildningar tillsammans i Docker-avsnittet på fliken Uppdateringar."
],
"callout": "Denna struktur förhindrar en Docker arbetsbelastning från att se ut som programvara installerad direkt i LXC samtidigt bevara snabba länkar till dess gränssnitt."
},
"webLinks": {
"heading": "Webblänkar och logotyper",
"lead": "Webblänkar fungerar med eller utan versionsspårning.",
"items": [
"Varje länk sparar protokollschema, port, valfri beskrivning och valfri logotyp-URL.",
"Den visade webbadressen använder den aktuella adressen som redan upptäckts för LXC; adressen är inte duplicerad i varje apppost.",
"En länk utan sin egen logotyp faller tillbaka till app-nivå logotypen.",
"Flera länkar kan representera ett admingränssnitt, API, sekundär UI eller annan slutpunkt i samma app.",
"En sparad länk-bara app visas också på uppdateringar, där en anpassad uppdaterare kan konfigureras senare."
]
},
"tracking": {
"heading": "Valfri versionsspårning",
"lead": "Spårning kombinerar en installerad-version detektor med en valfri uppströmskälla. De två sidorna kontrolleras oberoende.",
"colMethod": "Metod för att upptäcka installerad version",
"colUse": "Användning",
"detectorRows": [
{
"method": "dpkg / apk",
"use": "Läser den installerade paketversionen från Debian, Ubuntu eller Alpine paketmetadata."
},
{
"method": "binary",
"use": "Kör en binärfil via absolut sökväg eller ett kommandonamn med versionsargument."
},
{
"method": "file + regex",
"use": "Läser en riktig fil och extraherar versionen med en fångstgrupp."
},
{
"method": "docker label / docker exec",
"use": "Läser en OCI-versionsetikett eller kör ett versionskommando i en Docker-container."
},
{
"method": "python distribution",
"use": "Använder importlib.metadata via den valda Python-tolken."
},
{
"method": "command",
"use": "Kör ett avancerat kommando i argv-format utan skal och extraherar versionen från dess utdata."
},
{
"method": "manual",
"use": "Lagrar en version som anges manuellt; den måste ändras efter uppgradering av appen."
},
{
"method": "OCI image",
"use": "För containrar installerade via OCI manager Apps. Läser app- och avbildningsversioner från installationsposten och jämför installerat digest med det som registret publicerar. Ingen konfigurering behövs."
}
],
"sourcesHeading": "Källor för tillgänglig version",
"sources": [
"<strong>GitHub-arkiv</strong>: senaste utgåva eller tagg från ett offentligt <code>owner/name</code>-arkiv.",
"<strong>HTTP JSON</strong>: en offentlig slutpunkt plus en prickad väg som <code>data.version</code> eller <code>releases[0].tag_name</code>.",
"<strong>Docker Hub</strong>: versionstaggar filtrerade med ett reguljärt uttryck. En förhandsvisning visar verkliga matchande taggar innan posten sparas.",
"Rörliga taggar som <code>latest</code>, <code>stable</code> eller <code>lts</code> innehåller ingen version. Spåra dessa avbildningar via digest i Docker-avbildningsuppdateringarna."
],
"regexHeading": "Skriv fångstuttrycket",
"regexLead": "Det reguljära uttrycket måste returnera versionen i sin <strong>första fångstgrupp</strong>.",
"regexRules": [
"Matcha texten som avges av den valda binära, fil, kommando eller tag källa; gissa inte en generisk väg.",
"Skriv bokstavliga punkter som <code>\\.</code> så att de inte matchar godtyckliga tecken.",
"Tillåt en ledande <code>v</code> endast när källan kan inkludera den.",
"Inkludera suffix som prerelease eller distro revideringar endast när de är meningsfulla för jämförelsen.",
"Använd <strong>Testa detektor</strong> innan du sparar och kontrollera att installerad version stämmer med LXC:n."
],
"regexExampleLead": "Vanligt uttryck för att fånga en semantisk version:",
"regexExample": "v?(\\d+\\.\\d+\\.\\d+)",
"regexCallout": "En framgångsrik regex match är inte ett bevis på att detektorvägen är korrekt. Vägen eller paketet måste också finnas i den verkliga installationen som registreras."
},
"updater": {
"heading": "Versionsspårning och uppdatering är oberoende",
"lead": "<link>Fliken Uppdateringar</link> skapar ett appavsnitt så snart en appost sparas.",
"items": [
"En post med enbart länkar visar att versionsspårning inte är inställd men kan ändå få ett eget uppdateringskommando.",
"En app med spårning men utan en körbar metod visar ett neutralt meddelande som ber om ett anpassat kommando.",
"En app med ett verifierat Proxmox VE Helper-Scripts-omslagsskript kan använda det inbyggda uppdateringsprogrammet även om registreringen började med en webblänk.",
"Lägga till eller redigera en uppdaterare ändrar inte detektorn eller uppströmskällan lagrad på fliken App."
]
},
"states": {
"heading": "Versionsstatus på App-kortet",
"colState": "Tillstånd",
"colDisplay": "Visning",
"colMeaning": "Betydelse",
"rows": [
{
"state": "Uppdatering tillgänglig",
"display": "Tillgänglig version i lila med en uppåtpil ikon",
"meaning": "De installerade och uppströms versionerna skiljer sig."
},
{
"state": "Aktuell",
"display": "Installerade och senaste versioner utan lila varning",
"meaning": "Den sista kontrollen hittade ingen nyare uppströms version."
},
{
"state": "Versionsspårning väntar",
"display": "Kontroll pågår eller väntar",
"meaning": "Posten är konfigurerad men båda kontrollerna har ännu inte slutförts."
},
{
"state": "Versionsspårning avstängd",
"display": "Webblänkar endast; inget versionsjämförelseblock",
"meaning": "Posten förblir giltig och kan fortfarande ha ett uppdateringsprogram."
},
{
"state": "Kontrollfel",
"display": "Förklaring i bärnstensfärg inuti kortet",
"meaning": "Det tidigare sparade tillståndet förblir synligt medan fel från detektorn eller uppströmskällan visas."
}
]
},
"management": {
"heading": "Hantera sparade och föreslagna appar",
"lead": "Åtgärderna längst ner på fliken har olika roller:",
"items": [
"<strong>Hitta appar</strong> uppdaterar upptäckten enbart för denna LXC.",
"<strong>Registrera en annan app</strong> öppnar katalogen och den manuella redigeraren utan att söka igenom LXC:n på nytt.",
"<strong>Redigera</strong> visar Ta bort, Kontrollera, aviseringar och Redigera fält för varje kort.",
"<strong>Dölj</strong> tar bort ett oönskat förslag. Dolda upptäckter kan återställas från registreringsvyn.",
"<strong>Kontrollera</strong> uppdaterar den sparade appens versionsdata utan att söka efter nya appar."
]
},
"troubleshooting": {
"heading": "Vanliga situationer",
"colProblem": "Situation",
"colResolution": "Lösning",
"rows": [
{
"problem": "Programvara installerades efter ProxMenux startade",
"resolution": "Välj Hitta appar. Den uttryckliga sökningen uppdaterar de cachade förslagen för LXC:n."
},
{
"problem": "Ingen app upptäcktes",
"resolution": "Registrera det manuellt. Ett namn och en webblänk räcker; spårning kan läggas till senare."
},
{
"problem": "Den föreslagna detektorn returnerar fel version",
"resolution": "Öppna redigeringsfält, välj det verkliga paketet, binär eller filvägen och testa detektorn innan du sparar."
},
{
"problem": "En Docker arbetsbelastning erbjuds inte som en LXC app",
"resolution": "Registrera Docker och lägg till tjänstens publicerade gränssnitt som Docker-webblänk. Avbildningsuppdateringar finns kvar i Docker-avsnittet."
},
{
"problem": "En sparad app har ingen uppdateringsknapp",
"resolution": "Öppna fliken Uppdateringar och konfigurera dess uppdateringsmetod. Enbart versionsspårning definierar inte hur en uppdatering installeras."
}
]
},
"figures": {
"catalog": {
"alt": "Appregistreringskatalog med sökresultat, logotyper, portar och detektorfält",
"caption": "Katalogmetadata accelererar registrering medan varje föreslaget värde förblir redigerbart."
},
"webLinks": {
"alt": "Sparat LXC-appkort med en klickbar webblänk",
"caption": "En post med bara länkar är giltig: versionsspårning kan förbli avstängd och ett uppdateringsprogram kan läggas till separat."
},
"tracking": {
"alt": "Valfri installerad-version detektor och uppströms källfält",
"caption": "Installerad versionsdetektering och uppströmskällan är konfigurerade och testade separat."
},
"card": {
"alt": "Sparat applikationskort med installerade och tillgängliga versioner plus en webblänk",
"caption": "Kortet kombinerar identitet, versionsbevis och webbåtkomst utan att köra uppdateringsåtgärder från den här fliken."
}
}
}
@@ -0,0 +1,203 @@
{
"meta": {
"title": "LXC-uppdateringar: OS, appar och Docker | ProxMenux",
"description": "Konfigurera och köra uppdateringar av operativsystem, appar, Docker Engine och Docker-avbildningar i en LXC-container."
},
"header": {
"title": "LXC-uppdateringar: OS, appar och Docker",
"description": "Granska varje uppdateringsmål på ett ställe, kör det självständigt eller kombinera utvalda mål i en kontrollerad bulk åtgärd."
},
"intro": {
"p1": "Fliken <strong>Uppdateringar</strong> skiljer versionskontroll från installationen. Registrering och valfri versionsspårning finns på <link>App-fliken</link>; körbara uppdateringsmetoder hanteras här.",
"p2": "En sparad applikation visas i uppdateringar även när den endast innehåller en webblänk. Versionsspårning är frivillig, och en uppdaterare kan konfigureras oberoende.",
"callout": "Registrering väljer inget uppdateringsprogram. Om ett matchande Helper-Scripts-program upptäcks, välj och spara <strong>Helper-Scripts</strong> eller <strong>Eget kommando</strong>. Upptäckt garanterar inte kompatibilitet. Valet görs per app även om flera delar en LXC."
},
"overview": {
"heading": "Vad fliken innehåller",
"lead": "Varje tillgängligt mål har sin egen sektion och handling:",
"items": [
"<strong>OS-paket</strong> för Debian-, Ubuntu- och Alpine-containrar.",
"Ett avsnitt per <strong>registrerad app</strong>, även poster med enbart en länk.",
"En <strong>Docker</strong> sektion när Docker är registrerad, med Docker Engine och taggade avbildningar grupperade tillsammans.",
"Ett konfigurerbart avsnitt <strong>Gruppuppdatering</strong> följt av alternativ för säkerhetskopiering, omstart och schemaläggning."
]
},
"mechanisms": {
"heading": "Hur en uppdateringsmetod väljs",
"lead": "Den inbyggda vägen för Proxmox VE Helper-Scripts följer den officiella <helper>update-apps-mekanismen</helper>. Andra installationer använder rätt paket-, Docker- eller egen metod.",
"officialReference": "Officiell referens: <helper>Proxmox VE Helper-Scripts dokumentation för update-apps</helper> beskriver interaktiva och obevakade lägen, säkerhetskopior, provkörningar, tillfälliga byggresurser, loggar och slutkoder.",
"colSource": "Källa",
"colAction": "Visad åtgärd",
"colNotes": "Vad som körs",
"rows": [
{
"source": "APT- eller APK-paket",
"action": "Applicera OS-uppdateringar",
"notes": "Uppdaterar containerpaketen. Registrerade appar installerade som dpkg eller apk-paket täcks av samma pass."
},
{
"source": "Proxmox VE Helper-Scripts",
"action": "Tillämpa uppdatering",
"notes": "Efter ett uttryckligt val av Helper-Scripts körs det officiella appskript som identifieras via det validerade /usr/bin/update-omslagsskriptet. En markör eller katalogträff räcker aldrig för att tillåta körning."
},
{
"source": "Eget kommando",
"action": "Kör uppdateringsprogrammet",
"notes": "Kör det sparade kommandot i LXC:n och ersätter postens eventuella inbyggda uppdateringsprogram."
},
{
"source": "Docker Engine",
"action": "Uppdatera Docker Engine",
"notes": "Uppdaterar bara installerade Docker-paket och nödvändiga beroenden. Andra OS-paket och containrar ändras inte."
},
{
"source": "Docker-avbildning",
"action": "Uppdatera avbild",
"notes": "Hämtar vald avbildning och återskapar dess Compose-tjänstegrupp eller skyddade fristående container."
}
],
"callout": "Ett eget kommando <strong>ersätter</strong> Helper-Scripts för appen. Manuella, gruppvisa och schemalagda körningar följer det sparade valet. Befintliga kommandon och uttryckligen sparade äldre grupp- eller aktiva schemaval behålls; en nyregistrerad app väljs aldrig in av ett gammalt schema."
},
"docker": {
"heading": "Docker Engine och Docker avbildningar",
"lead": "Efter registrering av Docker på App-fliken visas Docker Engine och avbildningsinventeringen i samma <strong>Docker</strong>-avsnitt.",
"items": [
"Docker Engine-versionsspårning är separat från OS-paketräknaren och har en egen uppdateringsknapp.",
"Lokala avbildningar med taggar jämförs med registret via oföränderliga digest. <strong>Kontrollera nu</strong> uppdaterar inventeringen utan att hämta avbildningar eller starta om containrar.",
"Compose-tjänster uppdateras från sitt deklarerade projekt. Avbildningar i samma grupp hanteras tillsammans så att projektet inte återskapas upprepade gånger.",
"En fristående container återskapas från sin nuvarande konfiguration. Det skyddade flödet behåller återställningsdata och återställer den tidigare containern om återskapandet misslyckas.",
"Varje avbildning kan väljas separat vid manuella, gruppvisa och schemalagda uppdateringar, utom deklarerade Compose-beroenden som måste följa huvudtjänsten."
],
"callout": "Docker-containrar visas inte som fristående LXC-appar. Publicerade webbportar kan sparas som länkar under Docker-registreringen, medan uppdateringar av avbildningar finns i Docker-avsnittet."
},
"actions": {
"heading": "Individuella åtgärder och statusfärger",
"lead": "Varje avsnitt förblir oberoende genomförbart, oavsett om en bulkuppdatering är konfigurerad.",
"items": [
"<strong>Konfigurera</strong> öppnar metodväljaren när ingen metod är vald; <strong>Redigera</strong> ändrar ett sparat val. Informationsknapparna förklarar alternativen, länkar till officiell dokumentation och visar ett exempel på eget skript. Att välja kör inte alternativet.",
"Utan versionsspårning men med ett uppdateringsprogram visas den neutrala åtgärden <strong>Kör uppdateringsprogram</strong>. ProxMenux hävdar inte att en uppdatering väntar.",
"Utan ett tillgängligt Helper-Scripts-program kan ett eget kommando anges. Att inaktivera en metod väljer inte tyst en annan; befintliga plan- och schemaval sparas och otillgängliga mål rapporteras.",
"<strong>Uppdatera avbildning</strong> gäller bara vald Docker-enhet; Docker Engine och orelaterade avbildningar uppdateras inte."
],
"statusColState": "Känt tillstånd",
"statusColAppearance": "Utseende",
"statusColMeaning": "Betydelse",
"statusRows": [
{
"state": "Verifierad uppdatering tillgänglig",
"appearance": "Lila text, uppåtpil ikon och lila handling",
"meaning": "Installerad och tillgänglig version, eller avbildningarnas digest, skiljer sig åt."
},
{
"state": "Verifierat aktuellt",
"appearance": "Grön bock och grön åtgärd Uppdaterad",
"meaning": "Den senaste genomförda kontrollen bekräftar att målet är aktuellt."
},
{
"state": "Version okänd",
"appearance": "Neutral text och neutral handling",
"meaning": "Uppdateringsprogrammet kan köras, men versionsdata saknas för att ange om målet är aktuellt eller har en väntande uppdatering."
}
]
},
"custom": {
"heading": "Anpassade uppdateringskommandon",
"lead": "Använd ett eget kommando när installationen saknar verifierat inbyggt uppdateringsprogram eller när det normala förfarandet måste ersättas.",
"items": [
"Öppna <strong>Konfigurera</strong> när fältet är tomt eller <strong>Redigera</strong> när en metod redan finns.",
"För en inbyggd app eller Docker Engine visar redigeraren det aktuella kommandot. Annat sparat innehåll blir en uttrycklig ersättning för posten.",
"Testa hela proceduren i LXC-terminalen först. Det måste vara icke-interaktivt, använd rätt arbetskatalog och returnera en icke-noll exit status på misslyckande.",
"Ta inte med <code>pct exec</code>; ProxMenux går redan in i containern och kör kommandot som root."
],
"exampleLead": "Exempel på ett komplett in-container-förfarande:",
"example": "cd /opt/my-app && ./update.sh",
"callout": "Ett kommando som <code>myapp --version</code> läser bara en version och är inget uppdateringsprogram. Kommandon körs med administratörsrättigheter; granska innehållet lika noga som ett root-skalkommando."
},
"bulk": {
"heading": "Gruppuppdatering",
"lead": "Gruppuppdatering skapar en återanvändbar åtgärd för exakt valda mål i LXC:n. Den ligger efter app- och Docker-avsnitten och före <strong>Alternativ</strong>.",
"items": [
"OS-paket är obligatoriska. Minst en ytterligare app, Docker Engine eller Docker-avbildningsenhet måste väljas.",
"Appar och Docker-enheter väljs individuellt. Huvudtjänsten i Compose visar vilka beroenden som följer med.",
"Otillgängliga eller borttagna mål markeras som inaktuella och måste tas bort innan inställningen kan sparas.",
"<strong>Tillämpa uppdateringar</strong> är lila om något mål har en verifierad uppdatering, grönt om alla är verifierat aktuella och neutralt om resultatet är okänt.",
"Ta bort bulkkonfigurationen tar inte bort enskilda uppdateringsmetoder eller schemalagda inställningar."
],
"callout": "Bulk-uppdateringen ersätter inte de enskilda knapparna. Det är en valfri genväg för ett val som ska köras tillsammans."
},
"options": {
"heading": "Alternativ för säkerhetskopiering och omstart",
"lead": "Samma alternativ gäller för manuella, bulk och schemalagda körningar:",
"items": [
"<strong>Snapshot innan applicering</strong> skapar en vzdump backup på den valda lagringen. Om den nödvändiga säkerhetskopian misslyckas startar uppdateringen inte.",
"<strong>Starta om efter tillämpning</strong> startar bara om LXC:n efter en lyckad körning.",
"Urvalen lagras per LXC och förblir oberoende från mållistan."
]
},
"scheduled": {
"heading": "Schemalagda uppdateringar",
"lead": "Planerade uppdateringar använder samma körbara mål och säkerhetsalternativ som manuella åtgärder.",
"items": [
"Välj en förinställd frekvens eller ett cron-uttryck och sedan exakta mål: OS-paket, appar, Docker Engine, fristående Docker-enheter eller Compose-tjänstegrupper.",
"Väntetid efter en release gäller bara valda appar med versionsspårning. Appar utan spårning kör sitt uppdateringsprogram varje gång schemat är förfallet.",
"Den senaste körningens status skiljer mellan lyckad, delvis slutförd, misslyckad, säkerhetspaus och inga väntande uppdateringar. Efter den första schemalagda körningen öppnar <strong>Uppdateringar → Schemalagda uppdateringar → Visa logg</strong> hela utdata från uppdateringsprogrammet och dess underskript.",
"Efter varje körning kontrollerar ProxMenux standarden Debian reboot-krävd markör. När en omstart behövs, säger fliken Uppdateringar och slutförandet meddelandet så; varningen rensas när LXC startar eller startar om.",
"På Proxmox värd lagras schemalagda loggar i <code>/usr/local/share/proxmenux/logs/lxc-updates/</code> med namnet <code>&lt;VMID&gt;-scheduled-&lt;run-id&gt;.log</code>. De senaste tio loggar sparas per LXC och äldre filer tas bort automatiskt.",
"Den sparade historiken gäller schemalagda uppdateringar. En manuell uppdatering visar utdata direkt i Monitors körningsfönster och skapar ingen schemalagd logg i katalogen.",
"Externa värdscheman som upptäckts från Proxmox VE Helper-Scripts visas separat så överlappande automatisering är synlig."
],
"callout": "Kör varje vald metod manuellt innan ett schema aktiveras. Schemalagda kommandon kan inte svara på interaktiva frågor."
},
"completion": {
"heading": "Vad händer efter en uppdatering",
"lead": "Uppdateringen räknas inte som färdig enbart för att terminalkommandot avslutas.",
"items": [
"Samma körning registrerar sitt slutresultat och uppdaterar OS-paketstatus, registrerade appversioner och Docker-inventering som tillämpligt.",
"Planerade körningar behåller sin terminalutgång och rapporterar om en omstart fortfarande krävs för att slutföra paketändringar.",
"LXC-cache ersätts med det verifierade post-update-tillståndet, så märken och knappar behåller inte det tidigare resultatet.",
"Om en stoppad eller restaurerad LXC startar, uppdaterar den befintliga livscykelhändelsen att LXC igen. Docker-inventeringen väntar på att daemonen ska bli redo istället för att cacha ett tomt startresultat som slutgiltigt.",
"Aktiverade aviseringar skickas från den slutförda körningen, inklusive partiella fel och grupperade resultat för Docker-avbildningar."
]
},
"troubleshooting": {
"heading": "Vanliga situationer",
"colProblem": "Situation",
"colResolution": "Lösning",
"rows": [
{
"problem": "Ingen uppdateringsmetod har identifierats",
"resolution": "Öppen konfiguration, lägg till den officiella icke-interaktiva proceduren och testa den manuellt innan du schemalägger den."
},
{
"problem": "En Proxmox VE Helper-Scripts-identitet visas men ingen handling existerar",
"resolution": "LXC:n har äldre identifieringsdata men inget verifierat /usr/bin/update-omslagsskript. Lägg till en egen metod först när rätt förfarande har bekräftats."
},
{
"problem": "Docker avbildningar är tillfälligt tomma efter start eller återställning",
"resolution": "Vänta tills Docker är redo eller välj Kontrollera nu. Inventeringen försöker igen vid start och behandlar inte ett tillfälligt tomt resultat som slutgiltigt."
},
{
"problem": "Ett sparat bulkmål är inte längre tillgängligt",
"resolution": "Redigera gruppinställningen, ta bort det inaktuella målet och välj dess nuvarande ersättare om den finns."
},
{
"problem": "Ett anpassat kommando misslyckas",
"resolution": "Kör den i LXC-terminalen och granska dess väg, beroenden, icke-interaktiva flaggor och exitkod."
},
{
"problem": "En schemalagd uppdatering säger att en omstart krävs",
"resolution": "Öppna Visa logg för att granska den slutförda körningen och starta sedan om den LXC:n. ProxMenux rensar varningen när livscykelhändelsen registrerar den nya starten."
}
]
},
"figures": {
"osPending": {
"alt": "OS-paket med antal väntande uppdateringar och säkerhetsuppdateringar",
"caption": "OS-avsnittet håller paketuppdateringar åtskilda från app- och Docker-åtgärder."
},
"options": {
"alt": "LXC uppdateringsalternativ med pre-update backup och post-update omstart",
"caption": "Val för säkerhetskopiering och omstart gäller manuella, gruppvisa och schemalagda körningar."
}
}
}
@@ -0,0 +1,244 @@
{
"meta": {
"title": "ProxMenux Monitor — Översikt: VM och LXC | ProxMenux-dokumentation",
"description": "Inventering av gäster med CPU, minne och disk i realtid. Detaljerna visar konfiguration, resurser, säkerhetskopior, senaste Proxmox-loggresultat, anteckningar och Starta / Stäng av / Starta om / Tvinga stopp."
},
"header": {
"title": "Översikt: VM och LXC",
"description": "Hela nodens gästinventering: fyra mätvärden överst, en sorterbar lista över VM och LXC samt gästdetaljer med konfiguration, resurser, säkerhetskopior, loggar och Starta / Stäng av / Starta om / Tvinga stopp.",
"section": "ProxMenux Monitor · Översikt"
},
"intro": {
"title": "Kontroller för gäster",
"body": "Här styr du gästernas livscykel. Åtgärder går via <code>POST /api/vms/&lt;vmid&gt;/control</code> efter uttrycklig bekräftelse och uppdaterar gästens rad. Tvingad avstängning kräver den särskilda knappen Tvinga stopp."
},
"topRow": {
"heading": "Övre raden: fyra statistikkort",
"intro": "Fyra kort sammanfattar gästernas tillstånd: antal, CPU-användning, tilldelat minne jämfört med värdens kapacitet och disktilldelning.",
"imageAlt": "VMs & LXCs-fliken - topprad på fyra statskort: Total VMs & LXCs, Total CPU, Total Memory, Total Disk",
"imageCaption": "Övre raden: totaler och Körs / Stoppade, aktuell CPU-användning, använt minne / tilldelat körande gäster / totalt tilldelat med Inom gränserna samt tilldelat diskutrymme.",
"headerCard": "Kort",
"headerWhat": "Vad det visar",
"totalLabel": "Totalt VM och LXC",
"totalWhat": "Totalräkning med två märken - <em>X Running</em> (grön) och <em>Y Stopped</em> (röd, endast när > 0). Numret du tittar på när något inte kom tillbaka efter en omstart.",
"cpuLabel": "Total CPU",
"cpuWhat": "Gästernas sammanlagda aktuella CPU-användning som andel av värdens fysiska CPU, med texten <em>”Tilldelad CPU-användning”</em>.",
"memoryLabel": "Totalt minne",
"memoryIntro": "Tre avläsningar staplade vertikalt:",
"memoryItems": [
"<strong>Används nu</strong> — huvudvärde, exempelvis <em>15.4 GB</em>, och <em>X.X % av Y GB</em> av värdens RAM. Den blå stapeln visar procentandelen.",
"<strong>Tilldelat körande</strong> + <strong>Totalt tilldelat</strong> — summan av <code>maxmem</code> för <em>körande</em> gäster bredvid summan för <em>alla</em>, även stoppade. Den första gäller nu, den andra när allt startas samtidigt.",
"<strong>Inom gränserna</strong> är grönt och blir <em>Överallokerat</em> om total tilldelning överstiger värdens RAM. Kontrollerad överallokering kan fungera med KSM; märket varnar när marginalen minskar."
],
"diskLabel": "Total disk",
"diskWhat": "Summan av tilldelat diskutrymme för alla gäster i GB eller TB med texten <em>”Tilldelat diskutrymme”</em>."
},
"inventory": {
"heading": "Lista över virtuella maskiner och containrar",
"intro": "En rad per gäst. Listan kommer från <code>/api/vms</code>, som sammanför <code>qm list</code> + <code>pct list</code> + <code>pvesh /cluster/resources</code> på värden.",
"imageAlt": "Virtual Machines & Containers lista - en rad per gäst med status, typmärke, namn, ID och inline CPU / minne / diskprocent",
"imageCaption": "Inventeringens mobilvy — samma data som datorvyn, omplacerade till en kolumn med kompakta procenttal och statusindikatorer.",
"rowsIntro": "Varje rad visar:",
"rows": [
"<strong>Statusikon</strong> — grön uppspelningstriangel för körande eller röd fyrkant för stoppad. Resten av raden tonas ner för stoppade gäster.",
"<strong>Typ</strong> — <em>LXC</em> i cyan för containrar, <em>VM</em> i lila för virtuella maskiner.",
"<strong>Namn</strong> — gästens värdnamn eller visningsnamn.",
"<strong>VMID</strong> - Proxmox numeriska ID under namnet.",
"<strong>Inline metrics</strong> - tre procenttal med sin ikon (CPU%, Memory%, Disk%). Varje ikon vänder orange när metriska korsar en uppmärksamhet tröskel (t.ex. minne över 90%), så en snabb genomsökning berättar vilken gäst som är under tryck utan att öppna den."
],
"clickHint": "Klicka på en rad för att öppna detaljerna, oavsett om gästen körs eller är stoppad.",
"mobileTitle": "Listan är utformad för mobila enheter",
"mobileBody": "På telefoner och i smala fönster staplas typ, namn, ID och tre procenttal i en kolumn som på bilden. Breda vyer fördelar samma data horisontellt. Hela raden kan tryckas för att öppna detaljerna."
},
"drillIn": {
"heading": "Dialogruta med gästdetaljer",
"intro": "Dialogrutan visar namn, VMID, typ, tillstånd och drifttid. Flikarna anpassas till gästen: <strong>Status</strong>, <strong>App</strong> och <strong>Uppdateringar</strong> för LXC-appar, <strong>Monteringar</strong> när de finns, <strong>Loggar</strong> för OCI manager Apps-containrar, <strong>Säkerhetskopior</strong> och <strong>Brandvägg</strong>. Det fasta åtgärdsfältet ger livscykelkontroller och LXC-terminal från varje flik.",
"statusTitle": "Tab 1 - Status",
"statusImageAlt": "Gästdetaljer — Status med CPU, minne och disk i realtid, disk- och nätverks-I/O, OS-logotyp och Resurser / IP-adresser",
"statusImageCaption": "Status: CPU, minne och disk med staplar överst; total I/O (disk läst/skrivet, nätverk mottaget/skickat); sedan Resurser med Anteckningar, + Info och IP-adresslista.",
"statusIntro": "Standardfliken för att kontrollera gästens tillstånd. Tre block:",
"liveTitle": "1. Rad med aktuella mätvärden",
"liveItems": [
"<strong>CPU-användning (X kärnor)</strong> — procentandel med stapel. Antalet inställda kärnor i rubriken förklarar vad 100 % motsvarar.",
"<strong>Minne</strong> — <em>använt / maximalt</em> i GB med stapel.",
"<strong>Disk</strong> — <em>använt / maximalt</em> för gästens primära diskavbildning i samma format."
],
"ioTitle": "2. I/O totalt + OS logo",
"ioItems": [
"<strong>Disk-I/O</strong> — total läsning (↓) och skrivning (↑) sedan start. Hjälper dig se en plötslig ökning av I/O jämfört med gästens normala nivå.",
"<strong>Nätverks-I/O</strong> — total nedladdning (↓) och uppladdning (↑), enligt samma princip.",
"<strong>OS-logotyp</strong> — Debian / Ubuntu / Alpine / Windows / etc. efter upptäckt system. Hjälper dig skilja öppna dialogrutor åt."
],
"resourcesTitle": "3. Resursblock",
"resourcesIntro": "Konfiguration enligt Proxmox: CPU-kärnor, minne (inställt <code>maxmem</code>) och swap. Två utfällbara avsnitt i rubriken:",
"resourcesItems": [
"<strong>Anteckningar</strong> — gästens redigerbara beskrivning. Spara anropar <code>PUT /api/vms/&lt;vmid&gt;/config</code> och skriver till <code>/etc/pve/qemu-server/&lt;vmid&gt;.conf</code> eller <code>/etc/pve/lxc/&lt;vmid&gt;.conf</code>.",
"<strong> + Info</strong> - extra fält som är för verbose för standardvyn: bios-läge, maskintyp, agenttillstånd, hostpci passthrough-poster, monteringspunkter (CT), startorder."
],
"ipsTitle": "4. IP-adresser",
"ipsBody": "Varje IPv4- eller IPv6-adress visas i en grön etikett. Listan är tom för stoppade gäster eller VM utan QEMU-agent; LXC rapporterar adresser direkt.",
"appTitle": "Tab 2 - App (endast LXC)",
"appIntro": "Registrerar LXC-appar, sparar webblänkar och jämför valfritt versioner. Förslagen kommer från startcachen; <strong>Hitta appar</strong> gör om sökningen för denna LXC efter ny installation.",
"appLinkLead": "Se den",
"appLinkLabel": "den separata App-sidan",
"appLinkTail": "för cachad upptäckt, katalogstödd registrering, Docker webblänkar och versionsdetektorer.",
"updatesTitle": "Tab 3 - Uppdateringar (endast LXC)",
"updatesIntro": "<strong>OS-paket</strong>, appar, <strong>Docker Engine</strong> och Docker-avbildningar är separata mål. Varje mål kan köras enskilt eller väljas exakt för gruppvis eller schemalagd körning.",
"updatesLinkLead": "Se den",
"updatesLinkLabel": "Dedikerad uppdateringssida",
"updatesLinkTail": "för inbyggda och egna uppdateringsprogram, återskapande av Docker-containrar, gruppval, säkerhetsalternativ och schemaläggning.",
"mountsTitle": "Flik 4 — Monteringar (bara LXC, när de finns)",
"mountsImageAlt": "LXC-detaljer, Monteringar: PVE-volymer, bind-monteringar från värden eller PVE-lagring och NFS/CIFS monterade inne i CT:n. Varje kort visar typ, kapacitet, använda/totala byte, alternativ och status: grön fungerande, bärnsten skrivskyddad/avvikande, röd otillgänglig.",
"mountsImageCaption": "Monteringar visas bara för LXC med minst en monteringspunkt eller tillagd fjärrmontering. Utan monteringar visas ingen flik.",
"mountsIntro": "Proxmox visar monteringar inställda som <code>mpX</code>, men inte dem som läggs till inne i CT:n via <code>mount.cifs</code>, NFS med <code>autofs</code> med mera. Fliken förenar <strong>båda vyerna</strong>: inställda monteringar <strong>och</strong> dem som upptäcks i containern, med status och kapacitet när servern kan hämta den.",
"mountTypesTitle": "Typer av montering upptäckt",
"mountTypesItems": [
"<strong>PVE-volym</strong> — Proxmox-hanterad lagring som ZFS-subvolym, katalog eller Ceph RBD. Kapaciteten kommer från PVE-statistik och motsvarar Proxmox visning.",
"<strong>Bind från PVE-lagring</strong> — <code>mpX</code>-post med sökväg på lagring som PVE känner till.",
"<strong>Bind från värden</strong> — <code>mpX</code>-post med valfri värdsökväg (<code>/mnt/something</code>). Kapaciteten hämtas med <code>df</code> för den sökvägen.",
"<strong>Montering tillagd i CT</strong> — finns <em>bara</em> i containerns monteringsnamnrymd, exempelvis NFS som CT:n själv monterar. Kapaciteten läses med <code>pct exec &lt;vmid&gt; df</code>; <code>/proc/&lt;pid&gt;/root</code> från värden ger inte fjärrmonteringens riktiga statistik."
],
"mountStateTitle": "Statuspunkt och varningar per kort",
"mountStateItems": [
"<green/> <strong>Grön</strong> — monteringen fungerar och är nåbar.",
"<amber/> <strong>Bärnsten</strong> — inställd men inte monterad, skrivskyddad eller <em>zombie-bindning</em>. Källan har försvunnit på värden men CT:n ser den fortfarande som monterad, exempelvis efter urkopplad USB-disk eller <code>umount</code> på värden.",
"<red/> <strong>Röd</strong> — otillgänglig: kontrollen kan inte nå monteringen, exempelvis en NFS-export vars server är nere."
],
"mountsCalloutTitle": "Ytterligare information jämfört med Proxmox",
"mountsCalloutBody": "Visar containerns läs- och skrivplatser med kapacitet. NFS-/CIFS-delningar monterade inne i CT:n, som Proxmox inte visar, får samma utseende och hälsokontroll. Otillgängliga fjärrmonteringar och zombie-bindningar flaggas innan de orsakar problem vid säkerhetskopiering.",
"logsTitle": "Flik 5 — Loggar (bara OCI-containrar)",
"logsBody": "Bara för containrar från OCI manager Apps. Visar huvudprocessens konsol från <code>/var/log/proxmenux/oci/VMID.console.log</code>: senaste 100, 500 eller 1000 raderna, liveföljning när containern körs, filter och nedladdning. Filen läses om vid öppning även när containern är stoppad. Mer: <ociLink>OCI-containrar i ProxMenux Monitor</ociLink>.",
"backupsTitle": "Flik 6 — Säkerhetskopior",
"backupsImageAlt": "Gästdetaljer — Säkerhetskopior med tillgängliga kopior, destinationer, storlekar och knappen Skapa säkerhetskopia",
"backupsImageCaption": "Alla kopior av gästen på konfigurerade Proxmox-lagringar, nyaste först. Rubriken visar antalet.",
"backupsIntro": "Listar gästens kopior på Proxmox-lagringar, nyaste först. Räknaren i rubriken visar om kopior finns. Varje rad visar:",
"backupsItems": [
"<strong>Tidsstämpel</strong> — datum och tid för körningen.",
"<strong>Destination</strong> — lagring (PBS-Cloud, PBS-Local, NFS-Backup, …), färgad efter status.",
"<strong>Storlek</strong> — kopians slutliga storlek på disk."
],
"backupsOutro": "<strong>+ Skapa säkerhetskopia</strong> startar en kopiering på lagringen markerad ”Backup target” i Proxmox. Återställning görs i Proxmox webbgränssnitt; Monitor visar gästens senaste kopior och kan skapa nya.",
"firewallTitle": "Tab 7 - Brandvägg",
"firewallIntro": "Läser gästens Proxmox-brandväggslogg direkt från värden utan extra tjänst eller periodiska hämtningar. Fliken finns alltid; innehållet beror på om brandväggen är aktiv och någon regel loggar paket.",
"firewallItems": [
"<strong>Brandvägg avstängd</strong> — ett bärnstensfärgat meddelande visar var den aktiveras i Proxmox (<em>&lt;Container|VM&gt; → Firewall → Options</em>) och att en regel behöver <code>log: info</code> eller högre för att paket ska synas.",
"<strong>Brandvägg aktiv, inga händelser</strong> — den tomma vyn påminner om samma loggningskrav, användbart direkt efter aktivering.",
"<strong>Händelser finns</strong> — rullningsbar ruta med fast teckenbredd och råposter efter åtgärd: <green>ACCEPT</green> grön, <orange>REJECT</orange> orange, <red>DROP</red> röd. Räknaren i rubriken visar laddade poster."
],
"firewallRefresh": "<em>Uppdatera</em> hämtar de senaste posterna på begäran. Ingen automatisk uppdatering sker; listan visar läget vid öppning eller senaste tryck. Källan är <code>/var/log/pve-firewall.log</code>, filtrerad efter VMID via <code>GET /api/vms/&lt;vmid&gt;/firewall/log</code>.",
"firewallCalloutTitle": "Varför har det här när Proxmox UI redan visar det?",
"firewallCalloutBody": "Slipper byte till Proxmox och håller vyn avgränsad till samma VMID: starta gästen, kontrollera monteringar och brandväggshändelser och stoppa den igen i panelen. Regler redigeras i Proxmox; Monitor ändrar dem inte.",
"actionBarTitle": "Åtgärdsfält längst ned",
"actionBarIntro": "Alltid synlig vid foten av modalen oavsett vilken flik är aktiv:",
"consoleItem": "<strong>Konsol</strong>, bara för körande LXC, öppnar <code>pct enter &lt;vmid&gt;</code> i containern. Den använder xterm.js och WebSocket som <link>Terminalfliken</link>, med ett <strong>mobilanpassat verktygsfält</strong>: ESC, TAB, pilar, Enter och Ctrl+C / Ctrl+X / Ctrl+R. Den fungerar på telefon och surfplatta. För VM använder du Proxmox noVNC-konsol.",
"lifecycleIntro": "Fyra knappar i ett 2×2-rutnät skickar <code>POST /api/vms/&lt;vmid&gt;/control</code> med motsvarande <code>action</code>. Tillgängligheten beror på gästens tillstånd.",
"headerButton": "Knapp",
"headerEnabled": "Aktiverad när",
"headerAction": "Åtgärder som skickas till värd",
"lifecycleRows": [
{
"button": "Starta",
"color": "green",
"enabled": "Gästen är stoppad.",
"action": "qm start / pct start"
},
{
"button": "Stäng av",
"color": "blue",
"enabled": "Gästen körs.",
"action": "qm shutdown / pct shutdown — ordnad avstängning, ACPI"
},
{
"button": "Starta om",
"color": "blue",
"enabled": "Gästen körs.",
"action": "qm reboot / pct reboot — ordnad omstart"
},
{
"button": "Tvinga stopp",
"color": "red",
"enabled": "Gästen körs.",
"action": "qm stop / pct stop — tvingad avstängning"
}
],
"forceStopTitle": "Tvinga stopp avslutar körningen omedelbart",
"forceStopBody": "<strong>Tvinga stopp</strong> hoppar över avstängningen som att dra ur strömmen. Använd <strong>Stäng av</strong> när gästen svarar. Tvinga bara stopp om avstängningen har hängt sig och du accepterar risken för dataförlust. Röd färg och tydlig text motverkar feltryck."
},
"dataCollected": {
"heading": "Hur data samlas in",
"headerSection": "Avsnitt av fliken",
"headerEndpoint": "Slutpunkt",
"headerSource": "Källa",
"rows": [
{
"section": "Inventeringslista",
"endpoint": "/api/vms",
"source": "<code>pvesh get /cluster/resources --type vm</code> för VM och CT."
},
{
"section": "Detaljpanel (konfig, nätverk, diskar)",
"endpoint": "/api/vms/<vmid>",
"source": "<code>qm config &lt;id&gt;</code> för VM/<code>pct config &lt;id&gt;</code> för CT."
},
{
"section": "Diagram med gästens mätvärden",
"endpoint": "/api/vms/<vmid>/metrics",
"source": "PVE RRD-data (<code>pvesh get /nodes/&lt;node&gt;/qemu/&lt;id&gt;/rrddata</code>) kondenserade till en diagramvänlig form."
},
{
"section": "Senaste Proxmox-loggresultat",
"endpoint": "/api/vms/<vmid>/logs",
"source": "<code>pvesh get /nodes/&lt;node&gt;/&lt;qemu|lxc&gt;/&lt;vmid&gt;/log --start 0 --limit 1000</code>. Om kommandot misslyckas returneras en tom lista; detta ger inte fullständiga systemloggar inifrån gästen."
},
{
"section": "Backups tillgängliga för gäst",
"endpoint": "/api/vms/<vmid>/backups",
"source": "<code>pvesm list &lt;storage&gt;</code> filtreras av VMID."
},
{
"section": "Gästens brandväggslogg (Brandvägg-fliken)",
"endpoint": "/api/vms/<vmid>/firewall/log",
"source": "<code>/var/log/pve-firewall.log</code> filtreras av VMID."
},
{
"section": "Strömknappar (Starta / Tvinga stopp / Starta om / Stäng av)",
"endpoint": "/api/vms/<vmid>/control",
"source": "<code>qm start|stop|reboot|shutdown</code> eller <code>pct</code> motsvarande."
}
],
"codeComment1": "# Jämför översiktens data med PVE",
"codeComment2": "# Granska gästens konfiguration precis som i dialogrutan",
"codeComment3": "# VM",
"codeComment4": "# CT"
},
"whereNext": {
"heading": "Nästa steg",
"items": [
{
"label": "Hälsoövervakare",
"href": "/docs/monitor/health-monitor",
"tailRich": " — VMs & Containers kategori (misslyckad start, QMP timeouts, CT avstängningsfel)."
},
{
"label": "Aviseringar",
"href": "/docs/monitor/notifications",
"tailRich": " - vad <code>vm_*</code>, <code>ct_*</code>, <code>migration_*</code> och <code>backup_*</code> händelser utlöser nedströms."
},
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tailRich": " — slutpunkterna för VM och säkerhetskopior."
},
{
"label": "Översiktsindex",
"href": "/docs/monitor/dashboard",
"tailRich": " — de andra flikarna."
},
{
"label": "ProxMenux → Skapa VM",
"href": "/docs/create-vm",
"tailRich": " — skapa system: NAS-mallar (Synology med flera), Linux-/Windows-VM och standardvärden anpassade för Proxmox."
}
]
}
}
@@ -0,0 +1,372 @@
{
"meta": {
"title": "Proxmox hälsoövervakning — CPU, minne, lagring, SMART, ZFS, loggar | ProxMenux",
"description": "Proaktiv hälsoövervakning av Proxmox VE: tio kategorier var femte minut (CPU och temperatur, minne och swap, lagring, diskar/SMART, nätverk, virtuella maskiner, tjänster, loggar, uppdateringar och säkerhet), fyra allvarlighetsgrader, undertryckning per kategori, automatisk rensning av lösta fel, permanent diskhistorik och aviseringar via Telegram, Discord, Gotify eller e-post.",
"ogTitle": "Proxmox hälsoövervakning — CPU, minne, lagring, SMART, ZFS, loggar",
"ogDescription": "Proaktiv hälsoövervakning av Proxmox VE i tio kategorier med allvarlighetsgrader, undertryckningstider och händelsestyrda aviseringar.",
"twitterTitle": "Proxmox Health Monitor ProxMenux",
"twitterDescription": "Proaktiv hälsoövervakning av Proxmox VE i tio kategorier med allvarlighetsgrader och aviseringar."
},
"header": {
"title": "Hälsoövervakare",
"description": "Den löpande självkontrollen granskar tio kategorier av värdens tillstånd i femminuterscykler, samlar mätvärden mellan cyklerna, slår samman dubbla fynd och förser översikten, aviseringarna och valfri AI-omskrivning med samma underlag.",
"section": "ProxMenux-övervakning"
},
"intro": {
"title": "En skanner, tre konsumenter",
"body": "En bakgrundstråd kör hela hälsocykeln var femte minut och sparar varje fynd i SQLite under en stabil <code>error_key</code>. Då kan <strong>(1)</strong> översikten visa aktuellt tillstånd, <strong>(2)</strong> aviseringssystemet skicka nya händelser till valda kanaler och <strong>(3)</strong> den valfria AI-assistenten skriva om larm på begripligt språk. En inställning för kontrollen ger alla delar samma underlag."
},
"howItWorks": {
"heading": "Hur det fungerar",
"intro": "Hälsoövervakningen använder två parallella trådar. En lätt <strong>mätvärdessamlare</strong> fyller historikbuffertar för CPU, minne och temperatur. Den <strong>fullständiga hälsocykeln</strong> läser buffertarna, bedömer ihållande tillstånd och kör övriga kontroller ungefär var femte minut. Sedan sparas fynden i SQLite för översikten och aviseringarna.",
"scannerTitle": "Från prov till lagrad upptäckt",
"scannerCaption": "Samlaren fyller buffertar mellan cyklerna: CPU var 5:e s, minne var 30:e s och temperatur var 15:e s. Den bedömer inte larm själv. Hela cykeln utvärderar buffertarna och kör tyngre kontroller av SMART, ZFS, loggar och tjänster innan fynden sparas i SQLite.",
"scannerArrowLabel": "steg",
"scannerNodes": {
"samplerLabel": "Mätvärdessamlare",
"samplerDetail": "CPU-belastning 5 s\nMinne 30 s\nTemperatur 15 s\n→ historikbuffertar",
"cycleLabel": "Full hälsocykel",
"cycleDetail": "Var 5:e min\nLäser buffertar\n+ aktuella kontroller\n(SMART, ZFS,\ntjänster, journal…)",
"checksLabel": "Per-kategori kontroller",
"checksDetail": "Tio kategorier\n(CPU, minne,\nlagring, diskar,\nnätverk, VMs,\ntjänster, loggar,\nuppdateringar, säkerhet)",
"sqliteLabel": "SQLite",
"sqliteDetail": "tabellen errors\n(aktiva +\nundertryckta)\n+ disk_observations\n(permanent historik\nper disk)"
},
"notifTitle": "Från lagrad upptäckt till användare",
"notifCaption": "Aviseringsflödet. Samma feltabell används också av översikten med aktiva och avfärdade larm och av rensningen i slutet av varje cykel. Rensningen löser inaktuella poster automatiskt. Båda läser samma data utan att gå genom sändningsmodulen.",
"notifArrowLabel": "händelse",
"notifNodes": {
"errorsLabel": "fel tabell",
"errorsDetail": "Aktiva +\navfärdade rader\nmed nyckeln\nerror_key",
"dispatcherLabel": "Modul för aviseringssändning",
"dispatcherDetail": "Nya + förvärrade\nhändelser köas\nEnligt reglage\n+ spärrtid",
"templatesLabel": "Mallar + AI-omskrivning",
"templatesDetail": "Mall\nper händelse\n→ valfri AI-\nomskrivning till\nbegripligt språk",
"channelsLabel": "Kanaler",
"channelsDetail": "Telegram\nDiscord\nGotify\nE-post (SMTP)"
}
},
"categories": {
"heading": "De tio kategorierna",
"imageAlt": "Hälsokontrollvy som visar de tio kategorierna med sina nuvarande statuser (CPU, minne, lagring, diskar, nätverk, VM, tjänster, loggar, uppdateringar, säkerhet)",
"imageCaption": "Hälsoövervakning - de tio kategorierna med sin nuvarande status. Kategorier på en hälsosam värd visar alla OK; varningar och kritiska händelser visas i linje med raderna som producerade dem.",
"intro": "Varje cykel kör tio oberoende kontroller. Varje kontroll ger ett av fyra tillstånd (<strong>OK</strong>, <strong>INFO</strong>, <strong>WARNING</strong>, <strong>CRITICAL</strong>) och strukturerade data, som enhetsnamn, loggutdrag och exakta trösklar. Uppgifterna visas i översikten och i aviseringen.",
"headerCategory": "Kategori",
"headerChecks": "Delkontroller",
"headerEvents": "Typiska händelser",
"rows": [
{
"category": "CPU & Temperatur",
"checks": "CPU användning med hysteres, sensortemperatur",
"events": "Ihållande hög CPU-belastning; temperaturvarningar utifrån samlade sensorvärden."
},
{
"category": "Minne och swap",
"checks": "RAM-användning, swap-användning",
"events": "Ihållande minnesbrist; aktivitet från OOM-killer; fullt swap-utrymme."
},
{
"category": "Lagring",
"checks": "Proxmox-lagring, rotfilsystem",
"events": "Rotfilsystemet eller andra övervakade filsystem passerar inställda utrymmeströsklar (85% varning / 95% kritiskt som standard); NFS-export offline; misslyckad CIFS-autentisering; full LVM-thin-pool."
},
{
"category": "Disker och SMART",
"checks": "SMART, dmesg I/O fel, ZFS pooler, LVM, filsystemfel",
"events": "Misslyckad SMART-kontroll; omallokerade eller väntande sektorer; ATA-I/O-fel; ZFS-pool DEGRADED / FAULTED; ext4 återmonterat skrivskyddat."
},
{
"category": "Nätverk",
"checks": "Anslutning, länkstatus, gateway latens",
"events": "Brygga eller nätverksbond nere; gateway kan inte nås; återkommande latenstoppar."
},
{
"category": "virtuella datorer och containrar",
"checks": "QMP-kommunikation, VM start, containerstart",
"events": "Misslyckad VM-start eller CT-avstängning; timeout för QMP-socket; konfiguration eller disk saknas efter kloning."
},
{
"category": "PVE-tjänster",
"checks": "<code>pveproxy</code>, <code>pvedaemon</code>, <code>pvestatd</code>, <code>pve-cluster</code>, klusterläge",
"events": "Kraschad tjänst; förlorat klusterkvorum; <code>pmxcfs</code> har hängt sig."
},
{
"category": "Systemloggar",
"checks": "Ihållande fel, felspikar, felkaskader, kritiska kärnmeddelanden",
"events": "Upprepade identiska fel; plötslig ökning av varningar (kaskadmönster); <code>BUG:</code> / <code>OOPS:</code> / <code>oom-killer</code> i dmesg."
},
{
"category": "Systemuppdateringar",
"checks": "I väntan på uppdateringar, säkerhetsuppdateringar, kärna / PVE-version, systemålder",
"events": "Väntande säkerhetsuppdateringar eller uppdateringar av den kärna som används; system som inte uppdaterats på länge. Knappen <em>Uppdatera nu</em> visas i översiktens sidhuvud när uppdateringar finns. Den kör hela ProxMenux-flödet och uppdaterar hälsan med <code>?refresh=1</code> vid stängning utan att invänta nästa cykel."
},
{
"category": "Säkerhet och certifikat",
"checks": "Inloggningsförsök, certifikat löper ut, valfri Fail2Ban jail status",
"events": "Upprepade misslyckade SSH- eller webbinloggningar; PVE-certifikat löper ut inom 30 dagar; aktiva Fail2Ban-blockeringar."
}
]
},
"severity": {
"heading": "Allvarlighetsgrader",
"headerStatus": "Status",
"headerColour": "Färg",
"headerMeaning": "Betydelse",
"headerNotification": "Avisering",
"rows": [
{
"status": "OK",
"colour": "Grön",
"meaning": "Frisk. Inga resultat i denna kategori.",
"notification": "Tyst."
},
{
"status": "INFO",
"colour": "Blå",
"meaning": "Övergående eller redan löst tillstånd värt att notera en gång. Används även för kategorier som <em>endast</em> har avvisade objekt kvar.",
"notification": "Valfritt. Varje händelsetyp kan slås på eller av per kanal."
},
{
"status": "WARNING",
"colour": "Gul",
"meaning": "Uppmärksamhet behövs men värden är fortfarande funktionell. Orsaken är icke-trivial - läs detaljerna.",
"notification": "Skickas när händelsetypen är påslagen för kanalen."
},
{
"status": "CRITICAL",
"colour": "Röd",
"meaning": "Funktionalitet bruten eller dataförlust möjlig. Åtgärder som krävs.",
"notification": "Skickas när händelsetypen är påslagen för kanalen. Ett CPU-temperaturlarm med CRITICAL utlöses av säkerhetsskäl igen även om det tidigare avfärdats."
}
],
"infoNote": "En kategori med <strong>OK</strong> som har avfärdade händelser inom undertryckningstiden visas som <strong>INFO</strong>. Det påminner om att vissa larm är tystade.",
"unknownTitle": "UNKNOWN när en kontroll inte kan slutföras",
"unknownBody": "En otillgänglig kontroll ger <code>UNKNOWN</code>; efter tre sådana cykler i följd sparas ett bestående fynd. Översikten visar kontrollen i gult. Det övergripande tillståndet begränsar <code>UNKNOWN</code> till <strong>WARNING</strong>, så en otillgänglig kontroll ensam gör inte värden kritisk."
},
"dashboardView": {
"heading": "Översiktsvyn",
"intro": "Hälsoövervakningen finns på fliken <strong>Översikt</strong>. Statusindikatorn i sidhuvudet (Frisk / Varning / Kritiskt) öppnar ett fönster med två listor:",
"items": [
"<strong>Aktiva</strong> — kategorier med olösta fynd. Varje rad kan öppnas för att visa berörda delkontroller, originaltexten i <code>reason</code>, enhetens eller VM:ens ID och vid behov länkar till Lagring, Nätverk, VM, Loggar eller Hårdvara.",
"<strong>Avfärdade</strong> — poster som användaren kvitterat och vars undertryckningstid fortfarande löper. Varje rad visar återstående tid och vald längd. När tiden löper ut lämnar posten listan; om orsaken finns kvar och kategorin stöder det återkommer den under <em>Aktiva</em>."
],
"pillTitle": "Indikatorn följer den allvarligaste kategorin",
"pillBody": "Sidhuvudets färg följer högsta allvarlighetsgrad: CRITICAL → rött, annars WARNING → gult, annars INFO → blått, annars grönt. Samma logik styr punkten i faviconen och PWA-märket.",
"updateNowTitle": "Uppdatera nu knappen i Översiktsrubriken",
"updateNowBody1": "När <em>Systemuppdateringar</em> visar väntande uppdateringar visas <strong>Uppdatera nu</strong> bredvid statusindikatorn. Fönstret kör samma värdflöde som <em>ProxMenux → Settings post-install Proxmox → Proxmox System Update</em>: rensning av paketkällor, <code>apt full-upgrade</code> via <code>update-pve-safe.sh</code>, DKMS-ombyggnad av hanterade drivrutiner vid ny kärna, autoremove/autoclean och fråga om omstart när kärnan ändrats. Förloppet visas löpande.",
"updateNowBody2": "När körningen är klar anropar stängningen <code>GET /api/health/details?refresh=1</code> och ogiltigförklarar endpointens cache. Väntande uppdateringar och allvarlighetsgrad räknas om från det nya paketläget, så märket försvinner utan att invänta nästa cykel. På en uppdaterad värd är knappen dold."
},
"dismiss": {
"heading": "Avfärda larm och ange undertryckningstid",
"intro": "Vissa händelser kvarstår, som <em>Systemuppdateringar: uppdateringar tillgängliga</em> tills värden uppdaterats. En avisering var femte minut behövs inte. Knappen <em>Uppdatera nu</em> i översikten löser just det fallet direkt. För andra fall eller uppskjutna uppdateringar finns två sammankopplade sätt att tysta larm:",
"step1": "<strong>Avfärda en enskild händelse</strong> i fönstret. Menyn erbjuder <strong>24 timmar</strong>, <strong>7 dagar</strong> eller <strong>Permanent</strong>, oberoende av kategorins standard. Valet skickar <code>POST /api/health/acknowledge</code> med <code>error_key</code> och valda <code>suppression_hours</code> (<code>-1</code> för permanent). Händelsen flyttas till Avfärdade med tidsstämpeln <code>acknowledged_at</code>.",
"dropdownImageAlt": "Meny för att avfärda ett larm: 24 timmar, 7 dagar eller permanent",
"dropdownImageCaption": "Vald tid gäller bara detta larm; utan enskilt val används kategorins standard. Permanent avfärdade larm har ett bärnstensfärgat märke <em>Permanent</em> och utlöses normalt inte igen. Undantaget för kritisk CPU-temperatur beskrivs nedan.",
"step2": "<strong>Undertryckningstid per kategori</strong>. Under Inställningar → Hälsoövervakning eller via <code>POST /api/health/settings</code> har var och en av de tio kategorierna en standardtid som används utan enskilt val:",
"imageAlt": "Undertryckningstid per kategori under Inställningar → Hälsoövervakning",
"imageCaption": "En meny per kategori. Välj längre tid för återkommande händelser som väntande uppdateringar och kortare för sådant som bör bedömas igen snart. Aktiva undertryckningar visas nedanför.",
"outro": "Under undertryckningen fortsätter kontrollen och uppdaterar <code>last_seen</code> utan ny avisering. Efteråt bedömer nästa cykel orsaken igen: larmet kan utlösas på nytt eller tas bort om problemet har lösts.",
"activeSuppressionsTitle": "Granska och återkalla avfärdanden — Aktiva undertryckningar",
"activeSuppressionsBody": "Alla tillfälligt eller permanent tystade larm finns under <strong>Inställningar → Hälsoövervakning → Aktiva undertryckningar</strong>. Varje rad visar ID, kategori, allvarlighetsgrad, kvitteringstid och återstående tid. <strong>Återaktivera</strong> tar bort kvitteringen inför nästa kontroll. Permanenta avfärdanden återkallas här; tillfälliga kan också avslutas tidigt. Slå på <em>Redigera</em>, välj rader (grön kant och överstruken text) och spara. Avbryt tömmer urvalet.",
"autoTitle": "Automatisk undertryckning när tiden ändras",
"autoBody": "En annan tid än standardens 24 timmar får en andra effekt: <strong>nya fynd i kategorin sparas redan kvitterade</strong>. En vecka vald för diskhändelser gäller då även nya fynd utan att varje larm behöver avfärdas. De visas direkt bland avfärdade med vald tid kvar. Kategorier med 24 timmar fungerar som vanligt: nya fynd är aktiva tills du agerar.",
"tempTitle": "Undantag för CPU-temperatur CRITICAL",
"tempBody": "Lagringslagret har en särskild regel för <strong>CPU-temperatur CRITICAL</strong>: en sådan post går förbi tidigare kvittering och automatisk undertryckning. Det betyder inte att varje temperaturkontroll skapar en kritisk post när en inställd kritisk gräns passeras.",
"nonDismissableTitle": "Vilka fynd kan avfärdas?",
"nonDismissableBody": "Fönstret visar Avfärda bara när kontrollen uttryckligen ger dismissable = true. Falskt eller saknat värde döljer knappen. Allvarlighetsgraden ensam avgör inte detta: flera kritiska kontroller tillåter kvittering. Exemplen beskriver aktuella data; att tysta ett larm löser inte orsaken.",
"headerFinding": "Fynd",
"headerWhy": "Beteende vid avfärdande",
"rows": [
{
"finding": "CPU-temperatur: varning / kritiskt",
"why": "Temperaturvarningen från samlade mätvärden tillåter uttryckligen avfärdande. En separat regel kringgår kvittering om en CPU-temperaturpost med CRITICAL tas emot."
},
{
"finding": "Kritiskt utrymmesläge på rotfilsystemet",
"why": "Kontroller av filsystemsutrymme tillåter uttryckligen avfärdande även vid kritisk användning. Kvittering frigör inte utrymme och tar inte bort risken för misslyckade skrivningar."
},
{
"finding": "ZFS pool DEGRADED / FAULTED",
"why": "ZFS-poolernas kapacitetskontroller tillåter uttryckligen avfärdande. Andra poolfynd följer sin egen flagga. Kvittering reparerar inte en degraderad eller felaktig pool."
},
{
"finding": "Disk-I/O-fel med SMART FAILED",
"why": "Sparade diskfynd från journalen kan tillåta avfärdande. SMART FAILED behöver fortfarande undersökas; knappen beror på kontrollens flagga och inte bara larmtexten."
},
{
"finding": "Nätverksgränssnitt DOWN",
"why": "Sparade kontroller av gränssnitt med DOWN tillåter uttryckligen avfärdande. Det återställer varken brygga, nätverksbond, fysisk länk eller fjärråtkomst."
},
{
"finding": "I/O-händelser på sunda diskar (INFO)",
"why": "Tillfälliga ATA- eller dmesg-händelser med frisk SMART kan vara informativa och lösas automatiskt. Informationsrader behöver inte ha en avfärdandeknapp; kontrollen avgör när tillståndet är löst."
}
],
"principle": "Använd knappen som visas för det aktuella fyndet utan att dra slutsatser från kategori eller allvarlighetsgrad. Kvittering styr visning och aviseringar. Återhämtningskontroller och diskhistorik är separata."
},
"autoresolve": {
"heading": "Automatisk lösning och rensning",
"intro": "Många larm ska försvinna när orsaken upphör: en VM startar igen, en disk har tagits bort eller temperaturen är normal. Rensningen i slutet av varje femminuterscykel använder dessa regler:",
"headerTrigger": "Utlösare",
"headerAction": "Handling",
"rows": [
{
"trigger": "CPU-belastning eller temperatur tillbaka på normal nivå.",
"action": "Markeras som löst och tas bort från listan Aktiva."
},
{
"trigger": "Minnestryck tillbaka under varningströskeln efter en OOM / minnesvarning.",
"action": "Markeras som löst."
},
{
"trigger": "VM / CT som refereras av felet inte längre finns (<code>qm status</code> / <code>pct status</code> icke-noll).",
"action": "Markeras som löst eftersom resursen tagits bort."
},
{
"trigger": "Disk som refereras av felet inte längre finns i <code>/dev/</code>.",
"action": "Markeras som löst eftersom enheten tagits bort. Diskens observationshistorik bevaras."
},
{
"trigger": "Fynd från systemjournalen (kategorin <code>logs</code>, SMART-poster, ATA- eller I/O-fel) när undertryckningstiden löper ut.",
"action": "Tas bort. Varje kontroll granskar nya journalposter från den punkten; samma gamla rad skickas inte ut igen."
},
{
"trigger": "Lösta fel äldre än sju dagar.",
"action": "Tas bort från databasen för att hålla tabellen liten. Aviseringshistoriken är separat och sparas längre."
}
],
"permanentTitle": "Permanent undertryckning betyder inte löst",
"permanentBody": "Kategoritiden <code>-1</code> (<em>permanent</em>) tystar kommande larm för avfärdade poster men hoppar inte över kontrollen för automatisk lösning. Om orsaken försvinner, till exempel när resursen tas bort eller tröskeln inte längre överskrids, rensas posten ändå automatiskt."
},
"observations": {
"heading": "Diskobservationer – den permanenta historien",
"intro": "Diskhändelser bör bevaras. En SMART-varning på <code>/dev/sdh</code> klockan 02:14 är fortfarande relevant när I/O-störningen lagt sig och felet lösts automatiskt: disken har nu en historik. Därför har övervakningen en separat <strong>permanent</strong> tabell: <code>disk_observations</code>.",
"headerProperty": "Egenskap",
"headerErrors": "Tabellen <code>errors</code> (Aktiva)",
"headerObs": "Tabellen <code>disk_observations</code>",
"rows": [
{
"property": "Syfte",
"errors": "Ger underlag till <em>aktuell</em> hälsovy och aviseringssändning.",
"obs": "Permanent granskningshistorik per disk."
},
{
"property": "Automatisk lösning",
"errors": "Ja - rader rensas när tillståndet försvinner.",
"obs": "Nej - poster kvarstår för alltid om inte användaren uttryckligen avfärdar dem."
},
{
"property": "Nyckel för deduplicering",
"errors": "<code>error_key</code> (till exempel <code>smart_sdh</code>).",
"obs": "<code>(disk_registry_id, error_type, error_signature)</code> med stabila signaturer där föränderliga data har tagits bort."
},
{
"property": "Var det visas",
"errors": "Hälsoövervakningens fönster (listorna Aktiva / Avfärdade).",
"obs": "Diskens detaljkort på fliken <strong>Lagring</strong>, med märket ”X obs.” per disk."
},
{
"property": "Vad den registrerar",
"errors": "Vad som för närvarande misslyckas.",
"obs": "SMART-varningar (sektorer, temperatur, CRC, misslyckade självtester), I/O-fel (ATA / NVMe / dm), filsystemfel och ZFS-poolhändelser."
}
],
"outro": "Ett larm kan försvinna från översikten medan incidenten finns kvar i diskhistoriken. Öppna disken under Lagring: kortet visar antalet kvarstående observationer med tidsstämplar, allvarlighetsgrad och ursprungligt råmeddelande. Det hjälper när du bedömer om disken behöver bytas.",
"renameTitle": "Ändrade enhetsnamn slås samman automatiskt",
"renameBody": "Diskar kan först visas med tillfälliga namn som <code>ata8</code> eller <code>nvme0n1p3</code>. Observationer samlas efter känt serienummer: om en händelse först registreras som <code>ata8</code> och samma disk senare identifieras som <code>sdh</code>, kopplas de gamla observationerna till <code>sdh</code> nästa cykel. Historiken hålls samlad."
},
"notification": {
"heading": "Från ett fynd till ett meddelande",
"intro": "Varje aktivt fel kan också ge en avisering. Flödet:",
"items": [
"Kontrollen sparar fyndet med kategori, allvarlighetsgrad och strukturerade uppgifter.",
"Om händelsetypen är <strong>påslagen</strong> i de globala aviseringarna och kanalen inte tystat kategorin läggs händelsen i kö.",
"Mallmotorn skapar titel och meddelandetext från strukturerade data. Om AI-omskrivning är påslagen skickas paret också till vald leverantör för en version på begripligt språk.",
"Kanalen skickar ett Telegram-meddelande, ett Discord-embed, en Gotify-push eller e-post. Resultatet sparas i <code>notification_history</code>.",
"Att avfärda larmet startar undertryckningstiden. Nya upptäckter av samma <code>error_key</code> ger normalt ingen avisering under tiden och köas inte automatiskt för leverans när den tar slut. Undantaget för kritisk CPU-temperatur kvarstår."
],
"outro": "Kanalinställningar — Telegram-bottoken, webhook-URL:er, AI-nycklar, händelsereglage och kanalanpassningar — beskrivs i <notifLink>Aviseringar</notifLink> och <aiLink>AI-assistent</aiLink>."
},
"rest": {
"heading": "REST-slutpunkter",
"intro": "Fönstrets åtgärder kan anropas via API för skript, översikter och botar. Med Monitors autentisering påslagen behövs en giltig Bearer-token från inloggning eller API-tokenskärmen. Ändringar som kvittering, sparande eller rensning av övergivna fel kräver full_admin; read_only får 403. Med autentisering avstängd eller avböjd tillåter dessa kontroller åtkomst utan token.",
"headerEndpoint": "Slutpunkt",
"headerMethod": "Metod",
"headerUse": "Användning",
"rows": [
{
"endpoint": "/api/health",
"method": "GET",
"use": "Lätt kontroll som ger JSON med <code>status</code>, <code>timestamp</code> och <code>version</code>. Passar Uptime Kumas nyckelordskontroller; när Monitors autentisering är påslagen måste klienten skicka en Bearer-header."
},
{
"endpoint": "/api/health/status",
"method": "GET",
"use": "Övergripande tillstånd med en allvarlighetsgrad och en sammanfattning. Kräver autentisering."
},
{
"endpoint": "/api/health/details",
"method": "GET",
"use": "Alla tio kategorier med respektive tillstånd och de strukturerade data som låg till grund för dem."
},
{
"endpoint": "/api/health/full",
"method": "GET",
"use": "Fullständig bild: kategorier, aktiva och avfärdade fel samt egna undertryckningsinställningar. Fyller fönstret med ett anrop och använder en sexminuters bakgrundscache för snabba svar."
},
{
"endpoint": "/api/health/active-errors",
"method": "GET",
"use": "Bara den aktiva listan. Filterbar av <code>?category=&lt;name&gt;</code>."
},
{
"endpoint": "/api/health/dismissed",
"method": "GET",
"use": "Bara listan Avfärdade, med återstående timmar."
},
{
"endpoint": "/api/health/acknowledge",
"method": "POST",
"use": "Meddelandekropp: <code>'{'\"error_key\":\"smart_sdh\"'}'</code>. Avfärda ett larm under kategorins inställda tid."
},
{
"endpoint": "/api/health/settings",
"method": "GET / POST",
"use": "Läs eller spara undertryckningstid per kategori."
},
{
"endpoint": "/api/health/cleanup-orphans",
"method": "POST",
"use": "Manuell rensning av fel vars underliggande enhet / VM är borta. Idempotent."
}
],
"codeComment1": "# Hämta aktuellt hälsotillstånd för ett skript",
"codeComment2": "# Avfärda ett specifikt fel",
"codeComment3": "# Ställ in diskkategoriundertryckning till en vecka"
},
"whereNext": {
"heading": "Gå vidare",
"items": [
{
"label": "Översikt",
"href": "/docs/monitor/dashboard",
"tail": " — här öppnas hälsoövervakningens fönster i gränssnittet."
},
{
"label": "Aviseringar",
"href": "/docs/monitor/notifications",
"tail": " — kanaler, händelsereglage, AI-omskrivning och historik."
},
{
"label": "AI-assistent",
"href": "/docs/monitor/ai-assistant",
"tail": " — leverantör (OpenAI / Anthropic / Gemini / Groq / Ollama / OpenRouter), promptläge, detaljnivå per kanal och språk."
},
{
"label": "Arkitektur",
"href": "/docs/monitor/architecture",
"tailRich": " — SQLite-schema (<code>errors</code>, <code>disk_observations</code>, <code>events</code>) och bakgrundstrådarnas intervall."
}
]
}
}
+151
View File
@@ -0,0 +1,151 @@
{
"meta": {
"title": "ProxMenux Monitor — Egenhostad webbinstrumentpanel för Proxmox VE | ProxMenux",
"description": "ProxMenux Monitor är en egenhostad webbinstrumentpanel för Proxmox VE: värdmätvärden i realtid, lagring och SMART-data, nätverk, VM:ar och containrar, hårdvara, loggar, webbterminal, proaktiv Health Monitor, aviseringar till Telegram / Discord / e-post, valfri AI-assistent, REST API och integrationer med Homepage och Home Assistant.",
"ogTitle": "ProxMenux Monitor — Egenhostad webbinstrumentpanel för Proxmox VE",
"ogDescription": "Instrumentpanel i realtid Proxmox VE: värdmätningar, lagring SMART, nätverk, virtuella datorer och containrar, hårdvara, loggar, webbterminal, Health Monitor, aviseringar, AI-assistent, REST API.",
"twitterTitle": "ProxMenux Monitor | ProxMenux",
"twitterDescription": "Självvärd Proxmox VE instrumentpanel med Health Monitor, aviseringar, AI-assistent och REST API."
},
"header": {
"title": "ProxMenux Monitor",
"description": "En egenhostad webbinstrumentpanel för Proxmox VE som levereras som AppImage. Körs som en enda systemd-tjänst på värden, lyssnar på TCP-port 8008 och serverar API och gränssnitt från samma process.",
"section": "ProxMenux Monitor"
},
"atGlance": {
"title": "En överblick",
"body": "Enda AppImage på Proxmox-värden → Flask backend (port 8008) samlar livedata via <code>psutil</code>, <code>pvesh</code>, <code>smartctl</code>, <code>journalctl</code> → Next.js instrumentpanelen serveras från samma process. Valfri autentisering (lösenord + 2FA), valfri AI-assistent, valfria aviseringar, REST API för integrationer."
},
"hero": {
"alt": "ProxMenux Monitor instrumentpanel — systemöversiktsskärm med CPU, minne, temperatur och drifttid widgets",
"caption": "Standard landningsskärm – mätvärden på värdnivå och hälsotillstånd i en överblick."
},
"coverage": {
"heading": "Vad instrumentpanelen täcker",
"intro": "Åtta förstklassiga sektioner, var och en med sina egna API slutpunkter:",
"tableSection": "Avsnitt",
"tableWhat": "Vad den visar",
"sections": [
{
"name": "Hälsoövervakare",
"description": "Aktiva och avvisade varningar över CPU, minne, lagring, diskar, nätverk, tjänster, loggar, virtuella datorer, uppdateringar och säkerhet. Driver meddelandemotorn."
},
{
"name": "Lagring",
"description": "Proxmox lagringspooler, fysiska diskar (SATA / NVMe / USB), SMART-attribut, ZFS-poolstatus, slitage och livslängd samt I/O-aktivitet."
},
{
"name": "Nätverk",
"description": "Alla gränssnitt (fysiska, bond-gränssnitt, bryggor, OVS), IP/MAC/status, RX/TX-grafer i realtid och historiska RRD-data per gränssnitt."
},
{
"name": "VM och containrar",
"description": "VM-/LXC-inventering med status, resurser och drifttid. Detaljer visar konfiguration, historiska mätvärden, Proxmox-logghämtning och start/stopp/omstart/avstängning. Loggar beror på Proxmox-endpointen; det är inget komplett gäst-OS-loggarkiv."
},
{
"name": "Hårdvara",
"description": "CPU modell och topologi, minneslayout, PCIe-enheter, GPU lista med drivrutiner och realtidsövervakning per slot (NVIDIA / Intel iGPU)."
},
{
"name": "Loggar och händelser",
"description": "Live <code>journalctl</code> med filter för allvarlighetsgrad / tidsintervall / sökord, Proxmox-uppgiftshistorik, aviseringslogg, nedladdningsbara loggpaket."
},
{
"name": "Terminal",
"description": "Värdskal och konsolåtkomst till VM/CT som stöds i webbläsaren via <code>xterm.js</code> och WebSockets. Följer valt autentiseringsläge: om autentisering är avstängd eller avböjd kan klienter med nätåtkomst öppna en session utan inloggning. Det innebär ingen granskning av varje kommando."
},
{
"name": "Säkerhet",
"description": "Misslyckade autentiseringar, status för Fail2Ban-jails, nyligen blockerade IP-adresser och integration med värdens jail <code>[proxmenux]</code>."
}
],
"footer": "Varje avsnitt har en egen dokumentationssida under <link>Instrumentpanel</link> i sidofältet."
},
"howItRuns": {
"heading": "Hur det fungerar",
"intro": "ProxMenux Monitor distribueras som en fristående AppImage. En enda systemd-enhet (<code>proxmenux-monitor.service</code>) startar en Flask-process som:",
"bullets": [
"Lyssnar på <strong>TCP 8008</strong> på värden (HTTP).",
"Betjänar instrumentpanelen Next.js som statiska tillgångar under <code>/</code> och API under <code>/api/*</code> från samma process.",
"Hämtar livedata med standardvärdverktyg: <code>psutil</code>, <code>pvesh</code>, <code>smartctl</code>, <code>journalctl</code>, <code>zpool</code>, <code>ip</code>, <code>nvidia-smi</code>, etc.",
"Sparar tillstånd i en lokal SQLite-databas (<code>/usr/local/share/proxmenux/health_monitor.db</code>): avvisade varningar, diskobservationer, aviserings- och AI-konfiguration. Autentiseringstillstånd lagras separat i <code>/root/.config/proxmenux-monitor/auth.json</code>."
],
"footer": "Det fullständiga förfrågningsflödet, fillayouten och systemd-integrationen beskrivs i <link>Arkitektur</link>."
},
"noAgent": {
"title": "Ingen agent på gästerna",
"body": "Monitor läser alla data från värden. Ingen agent behöver installeras i VM:ar eller CT:er: uppgifterna kommer från Proxmox API och från värdens kärna, som har insyn i de gästsystem som körs."
},
"access": {
"heading": "Åtkomst till instrumentpanelen",
"intro": "Två åtkomstmönster stöds och applikationen upptäcker vilket som används:",
"codeComment1": "# 1) Direktåtkomst på värden",
"codeComment2": "# 2) Via omvänd proxy (Nginx / Caddy / Traefik)",
"afterCode": "En omvänd proxy bör sätta <code>X-Forwarded-For</code>, <code>X-Forwarded-Proto</code> och <code>X-Forwarded-Host</code> korrekt och vidarebefordra WebSocket-uppgraderingar. På standardportar använder webbläsaren aktuellt ursprung. Backend litar på vidarebefordrade IP-adresser bara med uttryckligt PROXMENUX_TRUST_PROXY=1; begränsa då direktåtkomst till backend.",
"footer": "Första-lanseringsinställningar, lösenord + TOTP 2FA och omvänd proxy-kodavsnitt täcks av <link>Åtkomst och autentisering</link>."
},
"mobile": {
"heading": "Mobilanvändning och startskärmsinstallation",
"intro": "Instrumentpanelen anpassas till skärmen och levereras som progressiv webbapp. <code>public/manifest.json</code> anger <code>display: standalone</code>, appnamn, ikon och temafärg. En genväg på startskärmen öppnar därför appen fristående utan adressfält, med anpassad startbild och mörkt tema som matchar panelen.",
"phoneAlt": "ProxMenux Monitor körs på en telefon – huvudvyn på instrumentpanelen",
"phoneCaption": "Huvudinstrumentpanel på en telefon – layouten ändras för små visningsportar.",
"addHeading": "Lägg till på startskärmen",
"iosLabel": "iOS Safari:",
"iosBody": "delningsknapp → <em>Lägg till på startskärmen</em>. Ikonen kommer från <code>/apple-touch-icon.png</code> som levereras i AppImage.",
"androidLabel": "Android Chrome / Edge:",
"androidBody": "meny med tre punkter → <em>Installera appen</em> (eller <em>Lägg till på startskärmen</em> på äldre versioner).",
"afterInstall": "När den har installerats, öppnar ikonen instrumentpanelen i fristående läge med sin egen uppgiftsväxlarpost.",
"onlineOnlyTitle": "Kräver nätverksanslutning",
"onlineOnlyBody": "PWA:n kan installeras men fungerar <strong>inte</strong> offline, eftersom den saknar en service worker. Genvägen beter sig som en vanlig app, men enheten måste fortfarande kunna nå värden på TCP 8008 via LAN, VPN eller HTTPS genom en omvänd proxy för att läsa in instrumentpanelen."
},
"health": {
"heading": "Hälsoövervakaren och meddelanden",
"alt": "Hälsoövervakningsskärm som visar spårade 10 kategorier (CPU, minne, lagring, diskar, nätverk, tjänster, loggar, virtuella datorer, uppdateringar, säkerhet) med aktuell status",
"caption": "Vyn Hälsoövervakare — kategorierna 10 spåras, med deras nuvarande status. Aktiva och avvisade varningar visas här när systemet aktiverar några.",
"body1": "<strong>Hälsoövervakaren</strong> körs i bakgrunden och skapar strukturerade händelser: hög CPU-temperatur, SMART-varningar, försämrade ZFS-pooler, processer avslutade vid minnesbrist, VM-/CT-fel och säkerhetsincidenter. Varje händelse har kategori, allvarlighetsgrad (INFO / WARNING / CRITICAL) och stabil <code>error_key</code> för att slå ihop dubbletter utan att fylla skärmen.",
"feedsIntro": "Händelser matar tre saker samtidigt:",
"feedsHealth": "Vyn <strong>Hälsoövervakaren</strong> i instrumentpanelen (aktiva + avvisade listor).",
"feedsChannels": "<strong>Aviseringsmotorn</strong> — Telegram, Discord, e-post, Gotify, Pushover och Apprise (flera kanaler). Varje kanal konfigureras separat och händelsekategorier kan tystas.",
"feedsAI": "Den valfria <strong>AI-assistenten</strong> förklarar händelser på vanligt språk via vald leverantör (OpenAI, Anthropic, Gemini, Groq, Ollama eller OpenRouter) och föreslår nästa steg om det är aktiverat i AI-inställningarna.",
"suppressionTitle": "Undertryck enskilda varningar i stället för att tysta allt",
"suppressionBody": "Varje kategori har en egen <em>Undertryckningstid</em>. När en varning avvisas tystas samma varning under perioden (24 timmar som standard, inställbart per kategori upp till permanent). En verklig försämring, till exempel kritisk CPU-temperatur, utlöser alltid en ny varning oavsett undertryckning."
},
"api": {
"heading": "REST API och integrationer",
"intro": "REST-endpointar ger övervakningsdata som JSON över HTTP/HTTPS för Homepage, Home Assistant, Uptime Kuma och skript. Grafana kan använda den separata Prometheus-textexportören på <code>/api/prometheus</code>. Anrop kan göras med <code>curl</code>.",
"tokens": "Långlivade API-token (365 dagar) skapas under <strong>Inställningar → API-åtkomsttoken</strong> eller via <code>POST /api/auth/generate-api-token</code>.",
"bearer": "Skicka token som <code>Authorization: Bearer …</code>. Den offentliga <code>/api/health</code> passar tillgänglighetskontroller utan inloggning. Under <code>/api/auth/*</code> finns offentliga inställnings-/inloggnings-/statusrutter och skyddad konto-/tokenhantering; alla är inte anonyma.",
"catalog": "Den fullständiga slutpunktskatalogen, vägledning för tokenrotation och bästa säkerhetspraxis finns i <linkApi>API Referens</linkApi>; Färdiga exempel för Homepage, Home Assistant, Grafana, Uptime Kuma och ett generiskt cURL-mönster finns i <linkIntegrations>Integrationer</linkIntegrations>."
},
"serviceControl": {
"heading": "Tjänstekontroll",
"intro": "Monitor hanteras som andra systemd-tjänster. Det finns även två poster i ProxMenux textgränssnitt under <em>Inställningar</em>:",
"codeComment": "# Manuell kontroll",
"footer": "Se <link>Inställningar → ProxMenux Monitor</link> för växling i menyn och statusverifieringsflöde."
},
"nextSteps": {
"heading": "Var härnäst",
"items": [
{
"label": "Arkitektur",
"description": "— Flask backend, systemd enhet, SQLite schema, AI-leverantörer, aviseringskanaler."
},
{
"label": "Åtkomst och autentisering",
"description": "— första lansering, lösenordsinställningar, TOTP 2FA, omvänd proxykonfiguration, Fail2Ban integration."
},
{
"label": "Instrumentpanel",
"description": "— varje avsnitt av UI, en sida vardera."
},
{
"label": "API-referens",
"description": "— varje slutpunkt, begäran/svarsform och tokenhantering."
},
{
"label": "Integrationer",
"description": "— Homepage, Home Assistant, Grafana / Prometheus, Uptime Kuma och generiskt cURL-mönster."
}
]
}
}
@@ -0,0 +1,255 @@
{
"meta": {
"title": "Proxmox-integrationer — Homepage, Home Assistant, Grafana, Prometheus | ProxMenux Monitor",
"description": "Exempel att kopiera för att ansluta ProxMenux Monitor till Homepage, Home Assistant, Grafana via Prometheus och Uptime Kuma, med rätt konfiguration, API-endpoints och autentiseringsheader.",
"ogTitle": "Proxmox-integrationer — Homepage, Home Assistant, Grafana, Prometheus",
"ogDescription": "Guide för att ansluta ProxMenux Monitor till Homepage, Home Assistant, Grafana, Prometheus och Uptime Kuma.",
"twitterTitle": "Proxmox-integrationer | ProxMenux Monitor",
"twitterDescription": "Anvisningar för Homepage, Home Assistant, Grafana, Prometheus och Uptime Kuma."
},
"header": {
"title": "Integrationer",
"description": "Exempel att kopiera för verktygen i ditt hemlabb: Homepage, Home Assistant, Grafana via Prometheus och Uptime Kuma. Varje exempel visar förväntad konfiguration, vilken Monitor-endpoint som används och rätt autentiseringsheader.",
"section": "ProxMenux-övervakning"
},
"intro": {
"title": "Vad du kan bygga från denna sida",
"body": "Kopiera respektive exempel till valt verktyg. Endpoints beskrivs i <link>API-referensen</link>; denna sida visar hur de används i Homepage, Home Assistant och Grafana. Skärmbilderna visar resultatet av konfigurationerna."
},
"auth": {
"heading": "Autentisering: det enda varje recept behöver",
"intro": "De flesta endpoints som används av dessa integrationer är autentiserade. Du har två sätt att tillfredsställa detta krav.",
"optAtitle": "Alternativ A – API token (rekommenderas för integrationer)",
"optAbody1": "Öppna <strong>Inställningar → Säkerhet → API-token</strong>. Välj <em>Skapa token</em>, ge den ett namn som <em>homepage</em>, <em>home-assistant</em> eller <em>prometheus</em> och kopiera den: den visas <em>bara en gång</em>. Den gäller ett år som standard och kan återkallas separat. Använd den för klienter utanför webbläsaren.",
"optAbody2": "Från den punkten är varje begäran bara:",
"optBtitle": "Alternativ B – inloggningsflöde (användarnamn + lösenord)",
"optBbody": "Användbart för skript som autentiserar som en mänsklig användare. Den returnerade token är kortlivad; de flesta integrationer bör föredra Alternativ A.",
"outro": "TOTP-fältet behövs bara med tvåfaktorsautentisering påslagen. Rotation och återkallande av token, lösenordsregler och granskningslogg beskrivs i <link>Åtkomst och autentisering</link>.",
"httpsTitle": "Använda HTTPS istället för HTTP",
"httpsIntro": "Exemplen använder <code>http://</code> för korthet. Om TLS är påslaget i Monitor (<strong>Inställningar → Säkerhet → SSL/HTTPS</strong>), byt <code>http://</code> mot <code>https://</code> i varje URL. Två verktygsspecifika anmärkningar:",
"httpsItems": [
"<strong>Självsignerade certifikat.</strong> Home Assistants <code>rest:</code>-integration verifierar TLS som standard. Med Monitors självsignerade certifikat kan du lägga till <code>verify_ssl: false</code> i varje REST-block bredvid <code>scan_interval:</code> eller importera dess CA i betrodda certifikat. Detsamma gäller andra verktyg som verifierar certifikat.",
"<strong>Prometheus</strong> har redan <code>scheme: https</code> i exemplet nedan. Aktivera eller behåll <code>https</code> när TLS är påslaget i Monitor."
]
},
"homepage": {
"heading": "Homepage",
"headingHref": "https://gethomepage.dev",
"intro": "Homepage är en statisk och anpassningsbar appöversikt. ProxMenux Monitor ansluts via den inbyggda widgeten <code>customapi</code>: lägg till en tjänst i <code>services.yaml</code>, starta om Homepage och kortet visar aktuella värden.",
"iconCalloutTitle": "Den officiella ProxMenux logotypen är på dashboardicons.com",
"iconCalloutBody": "Exemplen använder <code>icon: proxmenux.png</code>. Homepage slår upp enkla filnamn på <a1>dashboardicons.com</a1>, ett ikonbibliotek för självhostade översikter. ProxMenux finns på <a2>dashboardicons.com/icons/external/proxmenux</a2> och hämtas vid första visningen. Samma sak fungerar för tusentals verktyg som Telegram, Discord, Grafana och Tailscale: ange <code>icon: &lt;name&gt;.png</code> i tjänsten.",
"imageAlt": "Homepage-översikt med tre ProxMenux Monitor-kort (EDGE, VOID, DREAM) som visar upptid, CPU, RAM och temperatur per värd",
"imageCaption": "Tre ProxMenux Monitor-instanser som Homepage-kort: upptid, CPU, RAM och CPU-temperatur läses från <code>/api/system</code> på varje värd var 10:e s.",
"basicTitle": "Grundläggande widget - ingen autentisering",
"basicIntro": "Använd detta när ProxMenux Monitor är på ett pålitligt nätverk och du har inte aktiverat autentisering på Monitor sidan ännu. Den enklaste möjliga <code>services.yaml</code>-posten:",
"authedTitle": "Autentiserad widget",
"authedIntro": "Skapa en API-token under <strong>Inställningar → Säkerhet → API-token</strong> i Monitor. Kopiera den till headern <code>Authorization</code> nedan och ersätt exempeltoken efter <code>Bearer</code>.",
"authedOutro": "Starta om Homepage så visar kortet aktuella värden. Återanvänd token i widgetar som läser samma Monitor-instans.",
"multiTitle": "Multi-widget setup – system, lagring, nätverk",
"multiIntro": "För fler detaljer skapar du tre kort med olika endpoints: system, lagring och nätverk. Använd samma token för denna Monitor-instans.",
"multiCalloutTitle": "Flera Proxmox-värdar",
"multiCalloutBody": "Upprepa blocket per värd för att få korten på bilden. Varje post använder <code>http://&lt;host&gt;:8008</code> för sin instans. Skapa och spara en token per värd: separata installationer har egna signeringsnycklar, så en token fungerar inte automatiskt på andra värdar."
},
"homeAssistant": {
"heading": "Home Assistant",
"headingHref": "https://www.home-assistant.io",
"intro": "Exemplen använder Home Assistants inbyggda <code>rest</code>-integration utan särskild HACS-komponent. Den läser endpoints i <link>API-referensen</link> och skapar sensorer och attribut för automationer. Konfigurationen ger ungefär 25 sensorer för resurser, hälsa, VM/CT, lagring, nätverk och uppdateringar. Lägg till den i <code>configuration.yaml</code> och ladda om eller starta om HA.",
"imageAlt": "Home Assistant-översikt med hälsostatus, CPU-/RAM-/temperaturmätare, VM-antal, lagringsanvändning och räknare för aktiva fel",
"imageCaption": "ProxMenux Monitor som en förstklassig Home Assistant-integration - sensorer byggda från YAML-receptet nedan.",
"step1Title": "1 · Spara API-token",
"step1Body": "Spara token i <code>secrets.yaml</code> separat från huvudkonfigurationen. Lägg Bearer-prefix och token i ett värde som kan användas som header. Filen är inte krypterad och måste också hållas privat. Platsen beror på installationen, oftast <code>/config/secrets.yaml</code> i HA OS eller Container.",
"step2Title": "2 · Lägg till REST-konfigurationen",
"step2Body": "Sex REST-block täcker huvudområdena. Deras <code>scan_interval</code> följer ändringstakten: resurser var 30:e s, hälsa var 60:e s och inventeringar var 5–10:e minut. Klistra in i <code>configuration.yaml</code>:",
"step3Title": "3 · Lägg till binära sensorer och mallhjälpare",
"step3Body": "Två binära sensorer och två mallsensorer kompletterar integrationen. De förenklar automationer och villkorade Lovelace-kort utan att upprepa Jinja-uttryck överallt.",
"step4Title": "4 · Ladda om och kontrollera",
"step4Body": "Kontrollera först syntaxen under <em>Utvecklarverktyg → YAML → Kontrollera konfiguration</em>. Ladda sedan om <em>All YAML-konfiguration</em> eller starta om HA. Filtrera <em>Inställningar → Enheter och tjänster → Entiteter</em> efter <em>proxmenux</em>. De ungefär 25 entiteterna bör få värden inom ett avläsningsintervall.",
"replaceTitle": "Ersätter en tidigare version av detta recept?",
"replaceBody": "Efter en äldre version kan registret behålla gamla ID:n och kort visa <em>Entiteten hittades inte</em>. Ta bort tidigare <code>rest:</code>- och <code>template:</code>-block från <code>configuration.yaml</code> och ladda om. Filtrera <em>Inställningar → Enheter och tjänster → Entiteter</em> efter <em>proxmenux</em> och ta bort gamla återställda eller otillgängliga poster. Lägg in aktuellt YAML och ladda om för att registrera nya entiteter.",
"step5Title": "5 · Lovelace-översikt",
"step5Body": "YAML skapar ett <strong>vertical-stack</strong>-kort med logotyp, nyckeltal, system, VM, lagring, nätverk och ett villkorat problemkort. Öppna översikten, välj pennan, <em>Lägg till kort</em> och sedan <em>Manuellt</em> längst ned och klistra in:",
"viewTipTitle": "Vill du ha det som en fullständig instrumentpanelvy istället för ett enda kort?",
"viewTipBody": "Öppna trepunktsmenyn → <em>Redigerare för råkonfiguration</em> och lägg till en vy med denna rubrik ovanför listan <code>cards:</code>:",
"viewTipOutro": "Det ger dig en dedikerad flik / bild i din instrumentpanel med sin egen ikon och titel, istället för ett långt kort på en befintlig vy.",
"altViewTitle": "Alternativ - en dedikerad instrumentpanelvy",
"altViewIntro": "Lägg till en vy med YAML nedan för en egen flik i en befintlig översikt. En vy är en flik i översikten och skapar ingen ny post i sidofältet. Steg:",
"altViewSteps": [
"Öppna instrumentbrädan där du vill ha den nya fliken.",
"Klicka på pennan för att redigera översikten uppe till höger.",
"Klicka på fliken <em>+</em> i slutet av de befintliga flikarna för att skapa en ny vy.",
"Välj <em>Kodredigerare</em> uppe till höger i dialogen för att växla mellan visuell redigering och YAML.",
"Klistra YAML nedanför.",
"Spara. Vyn <em>ProxMenux Monitor</em> visas som flik i översikten med sina kort."
],
"twoEditorsTitle": "Två YAML-redigerare i HA - välj rätt",
"twoEditorsIntro": "Home Assistant har två YAML-redigerare som ser lika ut men förväntar sig olika format:",
"twoEditorsItems": [
"<strong>Redigerare för en vy</strong> — via <em>+</em> eller <em>Redigera vy → Kodredigerare</em>. Tar en vy med <code>title:</code>, <code>path:</code> och <code>cards:</code> på högsta nivån utan inledande bindestreck.",
"<strong>Råredigerare för hela översikten</strong> — via trepunktsmenyn. Tar hela listan <code>views:</code>, med varje vy som listpost med inledande <code>-</code>."
],
"twoEditorsOutro": "Fel format kan ge en <em>Namnlös vy</em> och <code>cards: []</code>. YAML nedan är för redigeraren av en enskild vy; kopiera det som det visas.",
"viewImageAlt": "Egen Home Assistant-vy för ProxMenux Monitor: picture-entity-huvud, glance-nyckeltal och entitetskort för system, VM, lagring och nätverk i flera kolumner",
"viewImageCaption": "Vyn <em>ProxMenux Monitor</em> på bred skärm. Masonry placerar kort i kolumner automatiskt; layouten beror på inställd vytyp.",
"twoColTipTitle": "Vill du ha en fast tvåkolumnlayout istället för auto layout?",
"twoColTipBody": "Lägg två kort, som <em>System</em> + <em>VM</em> eller <em>Lagring</em> + <em>Nätverk</em>, i en gemensam <code>horizontal-stack</code> så att de visas bredvid varandra vid alla skärmbredder:",
"twoColTipOutro": "På mobilen förblir raden hoptryckt. HA:s automatiska layout utan horizontal-stack anpassar sig bättre till smala skärmar.",
"step6Title": "6 · Automationer",
"step6Body": "Tre automationer för vanliga reaktioner: ersätt <code>notify.mobile_app_&lt;your_phone&gt;</code> med den aviseringstjänst du använder.",
"logoTitle": "Om ProxMenux logotyp",
"logoBody": "picture-entity-kortet hämtar den officiella logotypen från <a1>dashboardicons.com</a1>, ett gratis ikonbibliotek för självhostade översikter. Posten finns på <a2>dashboardicons.com/icons/external/proxmenux</a2>. Home Assistant hämtar SVG:n via HTTPS vid första visningen och cachar den.",
"logoBrokenTitle": "Om logokortet visar en bruten bild",
"logoBrokenIntro": "Vissa HA-installationer (brandväggade nätverk, innehållsblockerare, värdar utan offentligt internet) kan inte nå jsdelivr.net vid rendertid. Fixen är en lokal kopia:",
"logoBrokenSteps": [
"Ladda ner SVG från <a>cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/proxmenux.svg</a>.",
"Spara det till <code>/config/www/icons/proxmenux.svg</code> på din HA-värd.",
"I Lovelace YAML, ersätt <code>image:</code> URL med <code>/local/icons/proxmenux.svg</code>. Spara och ladda - bilden görs från den lokala filen, inget internet behövs."
],
"scanTipTitle": "scan_interval tumregel",
"scanTipBody": "Börja med att läsa <code>/api/system</code> var 30:e s. <code>/api/health/full</code> läser normalt ett bakgrundsresultat giltigt i upp till sex minuter; avläsning var 60:e s kringgår inte cachen. Prova fem minuter för <code>/api/storage/summary</code> och en timme för <code>/api/proxmenux/update-status</code>. Anpassa efter hårdvara och antal värdar."
},
"grafana": {
"heading": "Prometheus + Grafana",
"promHref": "https://prometheus.io",
"grafanaHref": "https://grafana.com",
"intro": "ProxMenux Monitor erbjuder <code>GET /api/prometheus</code> i Prometheus textformat 0.0.4. Med autentisering påslagen krävs en Bearer-token. Låt Prometheus samla mätvärden och Grafana visualisera tidsseriedatabasen.",
"imageAlt": "Grafana-översikt med ProxMenux-mätvärden: CPU-mätare, minneshistorik, antal startade VM och nätverkstrafik",
"imageCaption": "En enkel Grafana-översikt av ProxMenux-data samlade av Prometheus: CPU, minne, startade VM och nätverkstrafik. Hela katalogen finns i <link>API-referens → Prometheus-mätvärden</link>.",
"step1Title": "1 · Lägg till insamlingsjobbet i Prometheus",
"step1Body": "Skicka API-token via Prometheus inbyggda <code>authorization</code>-block, som också stöder inläsning från fil.",
"step1After": "Ladda om Prometheus med <code>kill -HUP &lt;PID&gt;</code> (ersätt PID med dess process-ID), <code>systemctl reload prometheus</code> om tjänsten stöder det eller <code>docker compose restart prometheus</code> för containern. Under <em>Status → Targets</em> bör proxmenux bli UP inom ett intervall. Etiketten <code>node=\"&lt;hostname&gt;\"</code> skiljer värdar åt.",
"tokenTipTitle": "Spara token i en separat fil",
"tokenTipBody": "Håll token separat från konfigurationen i produktion. Med <code>credentials_file: /etc/prometheus/secrets/proxmenux.token</code> läser Prometheus den ur en fil med rättigheterna 0600.",
"step2Title": "2 · Kontrollera insamlingen med några frågor",
"step2Body": "Kontrollera före Grafana att Prometheus har data. Öppna <code>http://&lt;prometheus-host&gt;:9090</code>, välj <em>Query</em> och kör någon av frågorna nedan. Du bör få aktuella värden från Proxmox-värden:",
"headerQuery": "Fråga",
"headerConfirms": "Vad den bekräftar",
"verifyRows": [
{
"query": "up{job=\"proxmenux\"}",
"confirms": "Ger <code>1</code> om Prometheus lyckas samla data från Monitor, annars <code>0</code>. Den snabbaste första kontrollen."
},
{
"query": "proxmox_cpu_usage",
"confirms": "Aktuell CPU-belastning på Proxmox-värden i procent. Värdet bör ändras när frågan uppdateras med några sekunders mellanrum."
},
{
"query": "proxmox_vms_running",
"confirms": "Antal startade gästmaskiner. Jämför med Proxmox-gränssnittet."
},
{
"query": "proxmox_uptime_seconds / 86400",
"confirms": "Värdens upptid i dagar. Bör motsvara <code>uptime</code> i Proxmox-terminalen."
}
],
"calloutTitle": "401 när endpointens URL öppnas direkt kan vara normalt",
"calloutBody": "Med autentisering påslagen öppnar länken under <em>Status → Targets</em> <code>/api/prometheus</code> i webbläsaren utan Prometheus Bearer-header. Svaret kan innehålla <code>'{'\"error\":\"Authentication required\"'}'</code>. Kontrollera målets verkliga <em>State: UP</em> för att bekräfta insamlingen via Prometheus.",
"step3Title": "3 · Lägg till Prometheus som en Grafana datakälla",
"step3Body": "Öppna <em>Connections → Data sources → Add new → Prometheus</em> i Grafana. Ange URL, till exempel <code>http://prometheus.lan:9090</code>, spara och testa. Om Prometheus kräver autentisering ställs den in separat här. Monitors token hör till Prometheus insamlingsjobb.",
"step4Title": "4 · Bygg paneler med dessa PromQL-frågor",
"step4Body": "Ett starturval av mätvärden som brukar övervakas på en Proxmox-värd:",
"headerPanel": "Panelidé",
"headerPromql": "PromQL-fråga",
"panelRows": [
{
"panel": "CPU-mätare per värd",
"promql": "proxmox_cpu_usage"
},
{
"panel": "Minnesanvändningsmätare per värd",
"promql": "proxmox_memory_usage_percent"
},
{
"panel": "Använt och totalt minne (tidsserie)",
"promql": "proxmox_memory_used_bytes / 1024 / 1024 / 1024"
},
{
"panel": "Startade VM/CT per värd",
"promql": "proxmox_vms_running"
},
{
"panel": "CPU-temperatur",
"promql": "proxmox_cpu_temperature_celsius"
},
{
"panel": "Nätverksgenomströmning RX (byte/s)",
"promql": "rate(proxmox_interface_bytes_received_total[5m])"
},
{
"panel": "Nätverksgenomströmning TX (byte/s)",
"promql": "rate(proxmox_interface_bytes_sent_total[5m])"
},
{
"panel": "Genomsnittlig belastning (1m)",
"promql": "proxmox_load_average{period=\"1m\"}"
},
{
"panel": "Använt diskutrymme i procent per monteringspunkt",
"promql": "proxmox_disk_usage_percent"
},
{
"panel": "UPS-batteriets laddningsnivå",
"promql": "proxmox_ups_battery_charge_percent"
},
{
"panel": "GPU-temperatur per kortplats",
"promql": "proxmox_gpu_temperature_celsius"
}
],
"outro": "Lägg till varje fråga som Grafana-panel med <em>Stat</em> för värden och <em>Time series</em> för trender och gruppera efter kategori. Använd <code>node</code> som översiktsvariabel (<em>Settings → Variables → New → Query → label_values(proxmox_cpu_usage, node)</em>) för att filtrera per värd."
},
"uptimeKuma": {
"heading": "Uptime Kuma och andra statuskontroller",
"href": "https://github.com/louislam/uptime-kuma",
"intro": "Använd <code>GET /api/system-info</code> för en nyckelordskontroll. Denna route kräver ingen token och ger värdnamn, upptid och hälsa som <code>healthy</code>, <code>warning</code> eller <code>critical</code>. Den är offentlig, till skillnad från de skyddade detaljerade hälsoendpoints.",
"kumaTitle": "Uptime Kuma - HTTP nyckelordsövervakning",
"kumaSteps": [
"I Uptime Kuma klickar du på <em>+ Lägg till ny Monitor</em>.",
"Monitor Typ: <em>HTTP(s) - Keyword</em>.",
"Visningsnamn: <em>ProxMenux Monitor — pve01</em>.",
"URL: <code>http://pve01.lan:8008/api/system-info</code>.",
"Nyckelord: <code>healthy</code> (värdet av <code>health.status</code> när värden är OK).",
"Heartbeat Interval: 60 sekunder är tillräckligt.",
"Spara. Routen system-info kräver ingen Bearer-header."
],
"healthchecksTitle": "healthchecks.io / pingar från cronjobb",
"healthchecksBody": "Ett cronjobb kan läsa <code>/api/system-info</code> och testa <code>.health.status == \"healthy\"</code>. Först efter lyckat test skickar det en framgångsping till sin unika Healthchecks.io-URL. Tjänsten tar emot jobbpingar och frågar inte Monitor själv. Enbart HTTP 2xx bevisar inte god värdhälsa.",
"richTitle": "Vill du ha mer detaljerade hälsodata?",
"richBody": "Använd <code>GET /api/health/full</code> för hela tillståndet med tio kategorier, aktiva och avfärdade fel. Svaret innehåller översiktsfönstrets data och kräver Bearer-token när autentisering är påslagen."
},
"workflows": {
"heading": "n8n, Zapier och anpassade skript",
"intro": "Arbetsflöden och skript kan <em>skicka</em> aviseringar med POST till <code>/api/notifications/send</code>, exempelvis vid CI-fel eller långa cronjobb. Direktsändning kringgår händelsekö och spärrtid per händelseavtryck. Kanalformatering, valfri AI och leverans finns kvar. Hantera eventuella dubbletter i anroparen.",
"n8nBody": "Använd en <em>HTTP Request</em>-nod i n8n med POST, URL ovan och samma JSON som curl. Välj generiska Header Auth-uppgifter: namn <em>Authorization</em> och värde <code>Bearer YOUR_API_TOKEN</code>, och ersätt platshållaren. Anslut ett schema, en webhook eller en föregående nod som utlösare.",
"severityBody": "Allvarlighetsgrad anges som <code>INFO</code>, <code>WARNING</code> eller <code>CRITICAL</code> med versaler. Objektet <code>data</code> ger sammanhang. AI använder renderad titel och text samt stödd berikning; godtyckliga fält ingår inte säkert i prompt eller resultat. Se <link>Aviseringar → Händelsekatalog</link>."
},
"pveWebhook": {
"heading": "Inbyggd Proxmox VE-webhook (inkommande)",
"intro1": "PVE fick aviseringssystemet i 8.1; inbyggda webhookmål kräver Proxmox VE 8.3 eller senare. <em>Aktivera aviseringar</em> i Inställningar försöker registrera Monitor som mål. PVE-meddelanden som skickas dit, som backup- eller replikeringsrapporter, går in i dess sändningsflöde. Konfigurationen måste vara tillgänglig och skrivbar.",
"intro2": "Förlopp, PVE:s meddelandemall, poster i <code>/etc/pve/notifications.cfg</code> och klusterbeteende beskrivs i <link>Aviseringar → PVE-webhookintegration</link>."
},
"whereNext": {
"heading": "Gå vidare",
"items": [
{
"label": "API-referens",
"href": "/docs/monitor/api",
"tail": " — endpoints med metod, sökväg och fullständig Prometheus-mätvärdeskatalog."
},
{
"label": "Aviseringar",
"href": "/docs/monitor/notifications",
"tail": " — händelsekällor, kanaler, sändningsflöde och PVE-webhookintegration i detalj."
},
{
"label": "AI-assistent",
"href": "/docs/monitor/ai-assistant",
"tail": " — valfri omskrivning av malltexter till begripligt språk före sändning till Telegram, Discord, e-post eller Gotify."
},
{
"label": "Åtkomst och autentisering",
"href": "/docs/monitor/access-auth",
"tail": " — skapa och återkalla API-token för exemplen, granskningslogg och TLS-inställningar."
}
]
}
}
@@ -0,0 +1,535 @@
{
"meta": {
"title": "Proxmox-aviseringar — Telegram, Discord, e-post, Gotify, Pushover, Apprise | ProxMenux Monitor",
"description": "Skicka aviseringar från Proxmox VE till Telegram, Discord, e-post, Gotify, Pushover och cirka 80 andra tjänster via Apprise. Händelser från Health Monitor, systemjournalen och PVE:s webhook blir formaterade meddelanden med dubblettkontroll, väntetid mellan upprepningar, gruppering av händelsetoppar, valfri AI-omskrivning och historik.",
"ogTitle": "Proxmox-aviseringar — Telegram, Discord, e-post, Gotify, Pushover, Apprise",
"ogDescription": "Skicka larm från Proxmox VE till Telegram, Discord, e-post, Gotify, Pushover och cirka 80 andra tjänster via Apprise, med dubblettkontroll, väntetid mellan upprepningar, gruppering av händelsetoppar och valfri AI-omskrivning.",
"twitterTitle": "Proxmox-aviseringar | ProxMenux Monitor",
"twitterDescription": "Skicka larm från Proxmox VE till Telegram, Discord, e-post, Gotify, Pushover och cirka 80 andra tjänster via Apprise."
},
"header": {
"title": "Aviseringar",
"description": "Distribuerar händelser från Monitors insamlare till Telegram, Discord, e-post, Gotify, Pushover och cirka 80 andra tjänster via Apprise. Med dubblettkontroll, väntetid mellan upprepningar, gruppering av händelsetoppar, filter per händelse och kanal, valfri AI-omskrivning och sökbar historik.",
"section": "ProxMenux Monitor"
},
"intro": {
"title": "Var meddelandena kommer från",
"body": "Aviseringarna förmedlar händelser från Monitors befintliga källor: <link>Health Monitor</link>, övervakningen av systemjournalen och Proxmox-uppgifter, PVE:s webhook, periodiska kontroller och direkta anrop från ProxMenux-skript. Händelserna följer samma hanteringskedja innan de når telefonen eller inkorgen."
},
"howItWorks": {
"heading": "Hur det fungerar",
"intro": "Insamlarna skapar strukturerade händelser. Hanteringskedjan avgör om och hur de ska skickas. En språkmodell kan skriva om texten innan meddelandet skickas till de kanaler du har konfigurerat.",
"arrowLabel": "händelse",
"caption": "Översikt över flödet. Varje faktiskt sändningsförsök, lyckat, grupperat eller misslyckat, registreras i SQLite-historiken. Händelser som undertrycks av väntetiden mellan upprepningar registreras inte.",
"nodes": {
"sourcesLabel": "Källor",
"sourcesDetail": "Health Monitor\nÖvervakning av systemjournalen\nUppgiftsövervakning\nPVE:s webhook\nPeriodiska kontroller\nInterna händelsekällor",
"dispatchLabel": "Hanteringskedja",
"dispatchDetail": "Gruppering av händelsetoppar\nKontroll av fingeravtryck / väntetid\nFrekvensgränser per grupp\nKontroller per kanal",
"aiLabel": "AI-omskrivning (valfritt)",
"aiDetail": "OpenAI / Anthropic\nGemini / Groq\nOpenRouter / Ollama\n(inaktiverat som standard)",
"channelsLabel": "Kanaler",
"channelsDetail": "Telegram\nDiscord\nE-post (SMTP)\nGotify\nPushover\nApprise (cirka 80 tjänster)"
}
},
"enabling": {
"heading": "Aktivera aviseringar",
"intro": "Efter en ny installation visar aviseringskortet under Inställningar statusen <em>Inaktiverad</em> och knappen <em>Aktivera aviseringar</em>. Inget skickas och PVE-konfigurationen ändras först när du klickar.",
"disabledAlt": "Aviseringskort efter nyinstallation med statusen Inaktiverad och knappen Aktivera aviseringar",
"disabledCaption": "Det första tillståndet - ett klick för att aktivera.",
"stepsIntro": "Knappen utför tre åtgärder i följd:",
"steps": [
"Ändrar statusen till <em>Aktiv</em> och visar kanalformuläret nedanför.",
"Registrerar ett webhookmål i <code>/etc/pve/notifications.cfg</code>. Utan HTTPS används <code>POST http://127.0.0.1:8008/api/notifications/webhook</code>; med HTTPS används den lokala HTTP-mottagaren på port 8009. PVE:s aviseringar går då genom Monitor. Se <pvelink>PVE-webhookintegration</pvelink> nedan.",
"Startar en sändningstråd i bakgrunden. Den kontrollerar händelsekön och behandlar varje händelse enligt flödet ovan."
],
"activeAlt": "Aktiverat aviseringskort med statusen Aktiv, kanalflikar, fältet Visningsnamn och den utfällbara delen Avancerat: AI-förbättring",
"activeCaption": "Aktivt läge med kanalflikar överst (Telegram / Gotify / Discord / e-post / Pushover / Apprise), visningsnamn, kategorier per kanal och delen <em>Avancerat: AI-förbättring</em>."
},
"sources": {
"heading": "Händelsekällor",
"intro": "Sex typer av källor matar aviseringsmotorn: bakgrundsinsamlare, webhookmottagaren och direkta händelsekällor i processen. De skapar strukturerade <code>NotificationEvent</code>-objekt.",
"headerCollector": "Insamlare",
"headerWatches": "Övervakar",
"headerEvents": "Typiska händelser",
"rows": [
{
"collector": "Health Monitor",
"watches": "Tio kategorier, ungefär var femte minut",
"events": "<code>new_error</code>, <code>error_resolved</code>, <code>error_escalated</code>, <code>health_degraded</code>, <code>health_persistent</code>."
},
{
"collector": "Övervakning av systemjournalen",
"watches": "<code>journalctl --follow</code> med mönster för misslyckade SSH- och webbinloggningar, Fail2Ban-blockeringar om den valfria jail-konfigurationen är installerad, kärnans I/O-fel, OOM och smartd-händelser.",
"events": "<code>auth_fail</code>, <code>ip_block</code>, <code>oom_kill</code>, <code>disk_io_error</code>, <code>service_fail</code>."
},
{
"collector": "Uppgiftsövervakning",
"watches": "Kontrollerar <code>/var/log/pve/tasks/index</code> efter nya uppgifts-UPID:n och följer uppgifternas loggfiler.",
"events": "<code>backup_start</code>, <code>backup_complete</code>, <code>backup_warning</code>, <code>backup_fail</code>, <code>migration_*</code>, <code>snapshot_complete</code>."
},
{
"collector": "Proxmox-webhookmottagare",
"watches": "Tar emot <code>POST /api/notifications/webhook</code>. PVE-versioner som stöder webhookmål för aviseringar kan vidarebefordra dem hit efter konfiguration. Se <pvelink>nedan</pvelink>.",
"events": "Allt PVE avger - inklusive händelser som Monitor annars skulle missa (HA, replikering, vzdump från GUI)."
},
{
"collector": "Periodisk insamlare",
"watches": "Jämför regelbundet klusternodernas anslutning, certifikatens giltighet, GPU-genomkoppling och tillgängliga uppdateringar för PVE och ProxMenux.",
"events": "<code>node_disconnect</code>, <code>node_reconnect</code>, <code>pve_update</code>, <code>proxmenux_update</code>, <code>gpu_mode_switch</code>, <code>pci_passthrough_conflict</code>."
},
{
"collector": "Händelsekällor i processen",
"watches": "Direkta anrop från ProxMenux-skript och Monitor (<code>notification_manager.emit_event(...)</code>).",
"events": "<code>system_startup</code>, <code>system_shutdown</code>, <code>system_reboot</code>, <code>ai_model_migrated</code> och egna testhändelser."
}
],
"after1": "Varje händelse har en stabil <code>event_type</code> (se katalogen nedan), en <code>severity</code> (<code>INFO</code>, <code>WARNING</code>, <code>CRITICAL</code>), en <code>category</code> för emoji och gruppfilter samt <code>data</code> med mallens uppgifter, såsom <code>vmid</code>, <code>device</code>, <code>source_ip</code> och <code>reason</code>.",
"after2": "Varje <code>event_type</code> har en mall i <code>notification_templates.py</code> som skapar meddelandetexten. Texten går genom hanteringskedjan och kan skrivas om av AI om det är aktiverat. Sidan <ailink>AI-assistent</ailink> beskriver samspelet med malltexten."
},
"channels": {
"heading": "Genomgångar av kanaler",
"intro": "Sex kanaler stöds: Telegram, Discord, Gotify, e-post (SMTP), Pushover och Apprise. De fem första har egna inställningsfält. Apprise lägger till cirka 80 tjänster via ett URL-fält, bland annat ntfy, Matrix, Slack, Teams, Pushbullet, AWS SNS och Mattermost. Anvisningar finns nedan.",
"credsTitle": "Lagring av inloggningsuppgifter",
"credsBody": "Token, nycklar, webhookadresser och SMTP-lösenord lagras lokalt i Monitors SQLite-databas under <code>/usr/local/share/proxmenux/</code>. Känsliga värden skyddas och maskeras i gränssnittet. De lämnar värden endast för att nå respektive tjänst. En säkerhetskopia av katalogen räcker för att återställa kanalerna."
},
"telegram": {
"heading": "Telegram",
"intro": "Du behöver en <strong>bottoken</strong>, som kan återanvändas mellan chattar, och ett <strong>chatt-ID</strong> för destinationen: din privata chatt, en grupp eller ett ämne i en supergrupp. Den inbyggda guiden visar alla steg. Här beskrivs även de två formerna av chatt-ID.",
"guideAlt": "Telegram-guide med fyra delar: skapa bot med BotFather, hämta token, hämta chatt-ID samt grupper och kanaler",
"guideCaption": "Länken <em>+ konfigurationsguide</em> på Telegram-fliken öppnar fyra steg från att skapa en bot till en fungerande kanal på cirka två minuter.",
"step1Title": "1 · Skapa en bot med BotFather",
"step1Items": [
"Öppna Telegram och kontakta <a>@BotFather</a> med den blå verifieringssymbolen. Se upp för kopior.",
"Skicka <code>/newbot</code>.",
"Välj ett visningsnamn, till exempel <em>ProxMenux Lab</em>. Det kan ändras senare.",
"Välj ett användarnamn som slutar på <code>bot</code>, till exempel <em>proxmenux_lab_bot</em>. Det måste vara unikt på Telegram.",
"BotFather svarar med en token på formen <code>123456789:ABCdef…</code>. Detta är bottoken: skydda den som ett lösenord."
],
"step2Title": "2 · Hämta chatt-ID",
"step2Intro": "Chatt-ID anger <em>vart</em> boten skickar meddelanden. Formen beror på destinationen.",
"privateLabel": "Privat chatt (du får varningarna på ditt eget konto):",
"privateItems": [
"Starta en chatt med din nya bot och skicka något meddelande (t.ex. <code>/start</code>).",
"Öppna en chatt med <a1>@userinfobot</a1> (eller <a2>@myidbot</a2>) och skicka <code>/start</code>. Det svarar med ditt numeriska användar-ID - det är chatt-ID. Det är ett positivt tal."
],
"privateAlt": "Telegram-formulär med maskerad bottoken, positivt chatt-ID för en privat chatt och tomt valfritt ämnes-ID",
"privateCaption": "Privat chatt med boten: chatt-ID är ett positivt tal, ditt personliga användar-ID.",
"groupLabel": "Grupp eller supergrupp med ämnen:",
"groupItems": [
"Lägg till boten som medlem i gruppen och ge den administratörsrättigheter om det krävs för att skicka meddelanden.",
"Skicka ett meddelande i gruppen.",
"Öppna <code>https://api.telegram.org/bot&lt;YOUR_TOKEN&gt;/getUpdates</code> i en webbläsare. Leta efter <code>chat.id</code> i JSON-svaret - för grupper är det ett negativt nummer, för supergrupper börjar det med <code>-100</code>.",
"För supergrupper med <em>Ämnen</em> aktiverat: hämta även önskat <code>message_thread_id</code> och fyll i det valfria fältet <em>Ämnes-ID</em>."
],
"groupAlt": "Telegram-formulär med maskerad bottoken, negativt chatt-ID som börjar med -100 för en supergrupp och ämnes-ID 3 för en särskild tråd",
"groupCaption": "Supergrupp: chatt-ID börjar med <code>-100…</code>. Det valfria fältet <em>Ämnes-ID</em> väljer en särskild tråd.",
"step3Title": "3 · Spara och testa",
"step3Body": "Klistra in token och chatt-ID, spara och välj <em>Skicka test</em> längst ned. Testet bör komma inom en sekund. Annars visar Historik orsaken, till exempel ogiltig token, boten saknas i gruppen eller användaren har blockerat den."
},
"discord": {
"heading": "Discord",
"intro": "Discord tar emot meddelanden via en <em>webhookadress</em> knuten till en kanal. Monitor behöver den adressen.",
"items": [
"Öppna önskad Discord-server och gå till <em>Serverinställningar → Integrationer → Webhooks</em>.",
"Välj <em>Ny webhook</em>, ge den ett namn som <em>ProxMenux</em> och välj kanal. En avatar är valfri.",
"Välj <em>Kopiera webhookadress</em>. Formatet är <code>https://discord.com/api/webhooks/&lt;id&gt;/&lt;token&gt;</code>.",
"Klistra in adressen i webhookfältet på Discord-fliken under Aviseringar och spara."
],
"imageAlt": "Discord-formulär med webhookadress som börjar med https://discord.com/api/webhooks/",
"imageCaption": "Discord: klistra in webhookadressen från <em>Serverinställningar → Integrationer → Webhooks</em>."
},
"gotify": {
"heading": "Gotify",
"intro": "Gotify är en aviseringsserver som du kan drifta själv. Du behöver dess basadress och en <em>programtoken</em> skapad i Gotifys administrationsgränssnitt.",
"items": [
"Om du inte redan har en Gotify-instans, installera en - se <a>officiell installationsguide</a>.",
"Logga in som administratör i Gotify och välj <em>Appar</em> → <em>Skapa program</em>. Ge det ett namn som <em>ProxMenux</em> och kopiera token.",
"Ange <em>Serveradress</em> på Gotify-fliken, exempelvis <code>https://gotify.example.com</code>, och klistra in programtoken.",
"Spara och välj <em>Skicka test</em>."
],
"imageAlt": "Gotify-formulär med serveradressen https://gotify.example.com och tokenfält med platshållaren A_valid_gotify_token",
"imageCaption": "Gotify: serveradressen till din egen instans och programtoken från administrationsgränssnittet."
},
"email": {
"heading": "E-post (SMTP)",
"intro": "E-post är den mest flexibla kanalen – och den som har flest fält. Du behöver en SMTP-server, en port, ett TLS-läge, valfritt ett användarnamn och lösenord, en avsändaradress och minst en mottagare.",
"imageAlt": "SMTP-formulär med server, port, TLS-läge, användarnamn, lösenord, avsändare, kommaseparerade mottagare och ämnesprefix",
"imageCaption": "E-post: SMTP-server, port, TLS-läge, valfria inloggningsuppgifter, avsändare, mottagare och ämnesprefix för filtrering i inkorgen.",
"appNote": "Monitor använder SMTP med lösenord. Gmail kan kräva ett <strong>applösenord</strong>. Hos Microsoft beror stödet på tjänsten och organisationens regler; ett applösenord kringgår inte ett förbud mot grundläggande autentisering. Kontrollera att SMTP-tjänsten tillåter metoden.",
"gmailTitle": "Applösenord för Gmail",
"gmailIntro": "Gmail kräver <strong>tvåstegsverifiering</strong> för att skapa applösenord. Annars är sidan <em>Applösenord</em> inte tillgänglig.",
"gmailItems": [
"Öppna <a>myaccount.google.com/security</a> och aktivera <em>tvåstegsverifiering</em> om den inte redan är på.",
"Gå till <a>myaccount.google.com/apppasswords</a>.",
"Ange ett namn som <em>ProxMenux</em> och välj <em>Skapa</em>. Kopiera lösenordet på 16 tecken.",
"Fyll i fliken E-post med <em>Värd</em> <code>smtp.gmail.com</code>, <em>Port</em> <code>587</code>, <em>TLS-läge</em> <code>STARTTLS</code>, <em>Användarnamn</em> din Gmail-adress och <em>Lösenord</em> applösenordet på 16 tecken."
],
"outlookTitle": "Applösenord för Microsoft / Outlook",
"outlookIntro": "Microsofts applösenord kräver <strong>tvåstegsverifiering</strong>, men garanterar inte stöd för SMTP. Om tjänsten eller organisationen kräver OAuth2 kan Monitors lösenordsbaserade SMTP-klient inte autentisera sig. Använd ett SMTP-relä som stöder den autentisering som krävs.",
"outlookItems": [
"Öppna <a>account.microsoft.com/security</a> och aktivera tvåstegsverifiering.",
"Om kontot erbjuder <em>Avancerade säkerhetsalternativ</em> → <em>Applösenord</em>, välj <em>Skapa ett nytt applösenord</em>. Det garanterar inte att e-posttjänsten godtar SMTP med lösenord.",
"Om Microsoft skapar ett applösenord, kopiera det och kontrollera att SMTP-tjänsten godtar det.",
"Använd bara dessa godkända inställningar om tjänsten tillåter SMTP med lösenord: <em>Server</em> <code>smtp.office365.com</code> för Exchange Online, <em>Port</em> <code>587</code>, <em>TLS-läge</em> <code>STARTTLS</code>, <em>Användarnamn</em> din e-postadress och <em>Lösenord</em> den tillåtna SMTP-inloggningsuppgiften. Personliga Outlook.com-konton har andra inställningar och krav."
],
"relayTitle": "Eget SMTP-relä",
"relayBody": "Anslut Monitor till ett SMTP-relä du kontrollerar, till exempel Postfix. Reläet hanterar tjänstens autentisering. Anpassa Monitors autentisering och TLS-läge till reläet; att det körs lokalt stänger inte av kryptering."
},
"pushover": {
"heading": "Pushover",
"intro": "Pushover är en mobil push-tjänst med officiella appar för iOS, Android och stationära webbläsare. Den dedikerade ProxMenux-kanalen talar direkt till <a>Pushover API</a>, så ingen Apprise-URL krävs.",
"stepsTitle": "Konfiguration",
"steps": [
"Skapa ett <a>Pushover-konto</a>, installera den officiella appen på enheterna som ska ta emot larm och logga in.",
"Kopiera <em>användarnyckeln</em> på Pushover-panelen. Använd en gruppnyckel om flera personer eller enheter ska få samma larm.",
"Öppna <a>Skapa program/API-token</a>, skapa programmet <em>ProxMenux</em> och kopiera dess API-token på 30 tecken.",
"Under <em>Inställningar → Aviseringar → Pushover</em>, klistra in användar- eller gruppnyckeln och programmets API-token. Enhet och ljud är valfria.",
"Spara och välj <em>Skicka test</em>. Meddelandet bör nå Pushover-appen direkt."
],
"priorityTitle": "Prioritetsmappning",
"priorityBody": "Vanliga meddelanden använder Pushover-prioritet 0. Med <strong>Hög prioritet för kritiska larm</strong> får CRITICAL-händelser prioritet 1 och kringgår Pushover-användarens tysta timmar. Nödprioritet 2 med upprepade aviseringar och kvittens används inte.",
"secretTitle": "Skydda båda värdena",
"secretBody": "Användar- eller gruppnyckeln och programmets API-token tillåter sändning. Monitor lagrar dem som skyddade hemligheter och maskerar dem i gränssnittet. Publicera inget av värdena i skärmbilder eller supportloggar."
},
"apprise": {
"heading": "Apprise (nav för cirka 80 tjänster)",
"intro": "Apprise är ett aviseringsbibliotek med öppen källkod som stöder cirka 80 tjänster genom URL:er. Som kanal i Monitor ger det tillgång till ntfy, Matrix, Slack, Microsoft Teams, Mattermost, Pushbullet, AWS SNS, Pushsafer, Rocket.Chat, Signal API och fler tjänster utan egna flikar. Pushover stöds också, men dess egen flik är enklare för en enda destination.",
"listIntro": "Den fullständiga listan över stödda tjänster och det exakta URL-formatet för var och en finns tillgänglig i den officiella Apprise-dokumentationen:",
"listItems": [
"<a>Apprises tjänstedokumentation</a> — fullständigt register över tjänster.",
"<a>URL-grunder</a> — hur Apprise-adresser är uppbyggda."
],
"stepsTitle": "Steg",
"steps": [
"Välj tjänst i <a>Apprises wiki</a> och kopiera URL-mallen. Tjänstens sida visar rätt schema (<code>ntfy://</code>, <code>matrix://</code>, <code>pover://</code>, <code>slack://</code>…) och nödvändiga token, kanaler och värdnamn.",
"Ersätt platshållarna med dina uppgifter. Ett ntfy.sh-ämne kan vara <code>ntfy://ntfy.sh/my-topic</code>, Pushover <code>pover://user@token</code> och Matrix <code>matrix://user:pass@host:port/#room</code>.",
"Klistra in den slutliga webbadressen i <em>Apprise URL</em>-fältet i Apprise-fliken i meddelandepanelen och spara.",
"Välj <em>Skicka test</em> för att kontrollera anslutningen och att inloggningsuppgifterna godtas."
],
"deliveredTitle": "Vad som levereras",
"deliveredBody": "Apprise får titel, meddelandetext och allvarlighetsgrad (info / success / warning / failure). Graden anpassas till tjänstens stöd för ikon, prioritet och färg. Formatering och AI-omskrivning sker före anropet, som för Telegram och e-post.",
"fanoutTitle": "En URL per Apprise-kanal",
"fanoutBody": "Monitor har ett URL-fält per Apprise-kanal. För flera tjänster samtidigt, som ntfy.sh och Matrix, kan du drifta en <a>Apprise API-server</a> med taggad konfiguration. Monitor anropar servern, som distribuerar meddelandet till alla adresser under taggen."
},
"rich": {
"heading": "Formaterade meddelanden, kategorier och filter per kanal",
"intro": "Varje kanal har tre kontroller under formuläret: <em>Formaterade meddelanden</em> överst, elva utfällbara <em>Aviseringskategorier</em> med val per händelse och <em>Skicka test</em> längst ned.",
"imageAlt": "Aviseringskategorier med markerad formateringsinställning överst, utfällbara delar för VM/CT, säkerhetskopiering, resurser, lagring, nätverk, säkerhet, kluster, tjänster, Health Monitor och uppdateringar samt antal händelser och testknapp",
"imageCaption": "Pilen visar <em>Formaterade meddelanden</em> för kanalen. Nedanför finns elva kategorier med val per händelse. <em>Skicka test</em> finns längst ned.",
"richTitle": "Formaterade meddelanden",
"richIntro": "Med <em>Formaterade meddelanden</em> får rubriken en kategoriemoji och texten kanalens formatering, såsom Telegram-HTML eller Discord-kort med färg efter allvarlighetsgrad. Avstängt skickas samma information som enkel text:",
"plainHeader": "Enkel text — formatering av",
"richHeader": "Formaterad text — formatering på",
"richOutro": "Inställningen gäller per kanal. Du kan använda enkel text i e-post för inkorgsregler och formatering i Telegram och Discord. Kanaler utan stöd för formatering, som Gotify och vanlig e-post, får text.",
"togglesTitle": "Kategorier och enskilda händelser",
"togglesIntro": "Varje kanal styr sina kategorier och händelsetyper. En avstängd kategori stoppar dess händelser för kanalen. Enskilda händelseval gäller inom aktiverade kategorier; sändningshanteraren har inget globalt huvudfilter för händelser.",
"togglesItems": [
"<strong>Kategorival per kanal.</strong> Avstängd VM/CT-kategori stoppar <code>vm_start</code> och liknande händelser för kanalen. Valet lagras som <code>&lt;channel&gt;.events.&lt;group&gt;</code>.",
"<strong>Händelseval per kanal.</strong> I en aktiverad kategori kan du välja att <em>skicka <code>backup_complete</code> till Discord men inte Telegram</em>. Valet lagras som <code>&lt;channel&gt;.event.&lt;event_type&gt;</code>."
],
"togglesOutro": "Kategorirubriken visar <em>aktiverade</em> / <em>totalt</em> och en kontroll för hela gruppen. Du kan därmed stänga av exempelvis alla säkerhetskopieringar med nivån <code>info</code> eller alla uppdateringar utan att öppna kategorin."
},
"quiet": {
"heading": "Tysta timmar",
"intro": "Under kanalens tysta timmar skickas endast <strong>CRITICAL</strong> direkt. INFO, WARNING och åtgärdshändelser sparas på disk och skickas som en gemensam sammanfattning när tidsfönstret slutar.",
"imageAlt": "Kanalinställningar med tysta timmar 22:00–07:00 och aktuell förhandsvisning samt daglig sammanfattning kl. 09:00, med en notering om att den dagliga sammanfattningen inte fördröjer CRITICAL och WARNING",
"imageCaption": "Två oberoende inställningar per kanal: tysta timmar överst och daglig sammanfattning nedanför.",
"purposeTitle": "Användningsområde",
"purposeItems": [
"<strong>Väck mig inte kl. 03:00 för en uppdatering.</strong> Säkerhetskopieringar, programuppdateringar, optimeringar och andra INFO-händelser behöver inte få telefonen att låta på natten.",
"<strong>Kritiska händelser kommer fortfarande fram.</strong> Händelser klassade som CRITICAL kringgår tysta timmar. Namnet avgör inte allvarlighetsgraden: journalövervakningen skapar Fail2Ban-blockeringar och värdens avstängnings-/omstartsmeddelanden som INFO, så de kan buffras.",
"<strong>Behåll de uppskjutna aviseringarna.</strong> De sparas i en SQLite-buffert tills tidsfönstret slutar."
],
"howTitle": "Hur det fungerar",
"howItems": [
"<strong>Inställning per kanal.</strong> Telegram kan vara tyst 22:00–07:00 medan e-post tar emot allt dygnet runt.",
"<strong>Start- och sluttid</strong> i lokal tidszon. Starten ingår, sluttiden ingår inte. Fönstret kan gå över midnatt, till exempel 22:00–07:00.",
"<strong>Aktuell förhandsvisning.</strong> Under tidsfälten visas om fönstret är aktivt och när nästa övergång sker.",
"<strong>Under tidsfönstret:</strong> CRITICAL skickas normalt. INFO och WARNING sparas i en beständig buffert, SQLite-tabellen <code>quiet_pending</code>.",
"<strong>När tidsfönstret slutar:</strong> en gemensam sammanfattning skickas, med en rad per händelse i tidsordning. Bufferten töms först efter bekräftad leverans, så ett tillfälligt Telegram- eller SMTP-avbrott inte raderar nattens händelser.",
"<strong>Vid omstart.</strong> Bufferten finns kvar på disk om Monitor startar om under fönstret. Sker omstarten strax efter sluttiden skickar nästa sändningscykel de väntande händelserna i en återhämtningssammanfattning."
],
"criticalTitle": "Vad räknas som CRITICAL?",
"criticalBody": "Händelsekällan sätter allvarlighetsgraden när händelsen skapas. Disk-, avstängnings- och säkerhetshändelser är inte automatiskt CRITICAL. Journalövervakningen skapar exempelvis ip_block, system_shutdown och system_reboot som INFO. <link>Händelsekatalogen</link> listar typerna; kontrollera källan och den mottagna händelsen för den faktiska graden."
},
"digest": {
"heading": "Daglig sammanfattning av INFO-händelser",
"intro1": "Daglig sammanfattning är ett <strong>aktivt val</strong> som samlar lämpliga INFO-aviseringar, som tillgängliga uppdateringar, till kl. 09:00 eller vald tid. Säkerhetskopierings- och replikeringsresultat samt direkta åtgärdshändelser undantas. Tysta timmar fördröjer i stället icke-kritiska meddelanden under ett dagligt tidsfönster.",
"intro2": "Inställningen finns i kanalens kort, direkt under tysta timmar. Se bilden under <link>Tysta timmar</link>. De aktiveras oberoende av varandra.",
"purposeTitle": "Användningsområde",
"purposeItems": [
"<strong>En morgonsammanfattning av händelserna.</strong> Om du kontrollerar värden en gång om dagen kan en sammanfattning kl. 09:00 ersätta 20 enskilda aviseringar från föregående dag.",
"<strong>Skilj information från larm.</strong> INFO beskriver vad som hände; CRITICAL och WARNING visar vad som kräver uppmärksamhet. Sammanfattningen hanterar INFO, medan övriga nivåer fortsätter att skickas direkt enligt kanalens inställningar."
],
"howTitle": "Hur det fungerar",
"howItems": [
"<strong>Aktiveras per kanal.</strong> Avstängt som standard. Aktivera sammanfattning på önskade kanaler och behåll direktleverans på andra.",
"<strong>Leveranstid</strong> i lokal tidszon, som standard 09:00. Du kan välja en annan tid; sammanfattningen skickas inom ungefär 60 sekunder från den minuten.",
"<strong>Ingår i sammanfattningen:</strong> lämpliga allmänna händelser med nivån <strong>INFO</strong>. Exempel: <em>programuppdatering tillgänglig</em>, <em>Tailscale-uppdatering tillgänglig</em>, <em>ProxMenux-optimeringsuppdatering tillgänglig</em>, <em>APT-säkerhetsuppdateringar väntar</em> och <em>frekvensgräns nådd</em>. Säkerhetskopieringsresultat och andra undantagna åtgärdshändelser skickas direkt.",
"<strong>Fördröjs aldrig av den dagliga sammanfattningen:</strong>",
"<strong>Beständig lagring.</strong> Väntande händelser sparas i SQLite-tabellen <code>digest_pending</code> till vald tid. En omstart av Monitor förlorar inte innehållet.",
"<strong>Tyst när inget har hänt.</strong> Om inga INFO-händelser väntar skickas ingen sammanfattning."
],
"neverDelayedSub": [
"<strong>CRITICAL</strong> fördröjs inte av den dagliga sammanfattningen.",
"<strong>WARNING</strong> fördröjs inte av den dagliga sammanfattningen.",
"Direkta åtgärdshändelser — VM/CT-start, stopp, avstängning, omstart och fel; säkerhetskopieringens start och resultat; replikeringsresultat; värdens avstängning och omstart — kringgår sammanfattningen även som INFO. Tysta timmar kan fortfarande fördröja icke-kritiska händelser."
],
"comboTitle": "Kombinera tysta timmar och daglig sammanfattning",
"comboBody": "En kanal kan använda <em>båda</em>: tysta timmar 22:00–07:00 och daglig sammanfattning kl. 09:00. Icke-kritiska händelser under tysta timmar buffras till sammanfattningen kl. 07:00. Lämpliga INFO-händelser utanför fönstret går till den dagliga sammanfattningen. CRITICAL kringgår båda; WARNING kringgår den dagliga sammanfattningen men väntar under tysta timmar. Välj ett <em>tyst tidsfönster</em>, en <em>sammanfattning vid fast tid</em> eller båda."
},
"displayName": {
"heading": "Visningsnamn",
"intro": "Varje avisering har ett <em>visningsnamn</em> som identifierar värden. Det visas längst ned i exemplet med formaterade meddelanden (<code>🏠 home-lab</code>) och i e-postens ämnesprefix.",
"imageAlt": "Fältet Visningsnamn med amd som exempelvärde och etiketten Namn som visas i aviseringar. Ändra värdet för ett eget namn eller lämna det tomt för att använda systemets värdnamn.",
"imageCaption": "Lämna Visningsnamn tomt för systemets värdnamn eller ange ett eget namn.",
"outro": "Om fältet är tomt används systemets värdnamn. Ett eget namn är användbart när flera värdar skickar till samma Telegram-chatt eller inkorg. Etiketter som <em>home-lab</em> och <em>office-pve</em> är lättare att läsa än <code>pve01.lan</code> eller <code>pmx-prod-01</code>."
},
"dispatch": {
"heading": "Hanteringskedja",
"intro": "Tabellen beskriver tre relaterade mekanismer. Flödet börjar med gruppering av händelsetoppar, följt av leveransanspråk/väntetid och frekvensgränser per grupp, därefter formatering och leveranskontroller per kanal:",
"headerStage": "Steg",
"headerWhat": "Vad det gör",
"headerTunable": "Konfigurerbar?",
"rows": [
{
"stage": "Dubblettkontroll med fingeravtryck",
"what": "Varje händelse hashas till ett fingeravtryck (<code>event_type + key fields from data</code>). Identiska fingeravtryck inom ett kort tidsfönster räknas som dubbletter av den första händelsen.",
"tunable": "Nej — intern sändningslogik."
},
{
"stage": "Väntetid mellan upprepningar",
"what": "Efter lyckad leverans undertrycks samma fingeravtryck och tillståndet sparas i <code>notification_last_sent</code>. Grundvärden för <code>CRITICAL</code>, <code>WARNING</code> och <code>INFO</code> är 86 400 s, liksom för <code>resources</code> och <code>updates</code>. Undantag: 5 s för VM/CT-åtgärder och värdens avstängning/omstart, 10 s för säkerhetskopierings-/replikeringsresultat och 1 800–3 600 s för flera hälsokategorier. Egna händelse- eller gruppinställningar kan ersätta värdena.",
"tunable": "Ja — uttryckliga väntetider för händelsetyp eller grupp ersätter standardvärdena i sändningskonfigurationen."
},
{
"stage": "Gruppering av händelsetoppar",
"what": "När flera händelser av samma slag kommer inom ett kort tidsfönster, som vid en SSH-attack, slås de ihop till ett <code>burst_*</code>-meddelande med antal och exempel.",
"tunable": "Nej - fönster och tröskel är hårdkodade per händelsetyp."
}
],
"calloutTitle": "Sändningen sker i en bakgrundstråd",
"calloutBody": "Sändningsloopen körs i en egen tråd. HTTP-anropet som skapar händelsen återvänder när den ligger i kön, utan att vänta på Telegram, SMTP eller webhookens svarstid. Sändningsresultaten sparas i historiktabellen."
},
"aiRewrite": {
"heading": "Valfri AI-omskrivning",
"body1": "Lämpliga händelser kan skrivas om av en språkmodell före leverans. Säkerhetskopieringsresultaten backup_complete och backup_fail undantas. AI är avstängt som standard och körs i sändningstråden när det aktiveras. Vid fel eller tidsgräns används malltexten.",
"body2": "Sex leverantörer stöds: OpenAI, Anthropic, Google Gemini, Groq, OpenRouter och lokal Ollama. Per kanal väljs detaljnivå (<code>brief</code>, <code>standard</code>, <code>detailed</code>), språk, instruktionsläge (<code>default</code> eller <code>custom</code>) och egna instruktioner. Sidan <link>AI-assistent</link> visar konfiguration, bilder och exempel.",
"privacyTitle": "Integritetsinformation",
"privacyBody": "AI-anrop kan innehålla titel, allvarlighetsgrad, meddelandetext, systeminstruktioner, egna instruktioner och insamlad kontext med värdnamn, IP-adresser, användarnamn, fel och journalrader. De skickas till vald server. Ollama är lokalt endast med både lokal server och lokal modell; en fjärrserver eller molnmodell skickar data utanför värden. Stäng av omskrivning eller använd en kontrollerad lokal server och modell om innehållet måste stanna i nätverket."
},
"pveWebhook": {
"heading": "PVE-webhookintegration",
"intro1": "Proxmox aviseringssystem använder <em>mål</em> som sendmail, Gotify, SMTP och, i versioner med stöd för det, webhook. Aktivering i Monitor registrerar ett <code>webhook</code>-mål. PVE-aviseringar som HA, replikering och säkerhetskopiering från gränssnittet kan då gå genom samma hanteringskedja.",
"intro2": "Målet visas i Proxmox under <em>Datacenter → Aviseringar → Aviseringsmål</em>:",
"imageAlt": "Proxmox VE:s webhookdialog med målet proxmenux-webhook, metoden POST, URL http://127.0.0.1:8008/api/notifications/webhook och en JSON-mall med escape title, escape message, escape severity, escape timestamp och json",
"imageCaption": "Webhookmålet i PVE. Gränssnittet använder värdens språk, spanska i exemplet. Samma fält gäller oavsett språk.",
"registeredIntro": "Det här registreras:",
"registeredItems": [
"<strong>Metod och URL.</strong> <code>POST http://127.0.0.1:8008/api/notifications/webhook</code> när HTTPS är avstängt i Monitor. Med HTTPS används en separat lokal HTTP-mottagare på port 8009. Båda finns på samma värd.",
"<strong>Meddelandemall.</strong> JSON med PVE:s Handlebars-funktioner. PVE sparar mallen base64-kodad i konfigurationen. Avkodad blir den:",
"<strong>Matchare.</strong> Ett tillhörande <code>matcher: proxmenux-matcher</code>-block med <code>mode all</code> skickar alla PVE-aviseringar till målet.",
"<strong>Privat konfiguration.</strong> Installationen skriver blocket <code>webhook: proxmenux-webhook</code> i <code>/etc/pve/priv/notifications.cfg</code>, med den delade hemligheten base64-kodad. Det offentliga målet hänvisar till hemligheten för att skicka X-Webhook-Secret. Blocket är alltså inte tomt."
],
"securityTitle": "Så skyddas mottagaren",
"securityIntro": "Webhookmottagaren på <code>POST /api/notifications/webhook</code> tillämpar olika säkerhetskontroller beroende på anropets källa:",
"securityItems": [
"<strong>Lokala källor (<code>127.0.0.1</code> / <code>::1</code>).</strong> Frekvensgränser gäller, men kontroller av fjärrhemlighet, tidsstämpel och återuppspelning hoppas över. Även adresser på värdens egna gränssnitt räknas som lokala. PVE-målet använder loopback.",
"<strong>Fjärranrop.</strong> Utöver frekvensgränser kontrolleras hemligheten i <code>X-Webhook-Secret</code>, en tidsstämpel i <code>X-ProxMenux-Timestamp</code> eller JSON-kroppen, återuppspelning och eventuell lista med tillåtna IP-adresser. Hemligheten lagras i SQLite och som base64-kopia i <code>/etc/pve/priv/notifications.cfg</code> så PVE kan skicka rubriken."
],
"practiceTitle": "I praktiken",
"practiceBody": "PVE-målet använder <code>http://127.0.0.1:8008</code> utan HTTPS eller HTTP-port 8009 med HTTPS i Monitor. Externa integrationer på <code>https://&lt;monitor-host&gt;:&lt;port&gt;/api/notifications/webhook</code> måste skicka <code>X-Webhook-Secret</code> och aktuell tidsstämpel samt klara återuppspelnings- och IP-kontroller. Enbart hemligheten räcker inte.",
"actionsIntro": "Monitor hanterar målet genom tre åtgärder under Inställningar:",
"actionsItems": [
"<strong>Konfigurera</strong> körs när aviseringar aktiveras och skapar posten i <code>/etc/pve/notifications.cfg</code>. Filen skrivs endast vid ändrat innehåll; de tre senaste kopiorna sparas i <code>/usr/local/share/proxmenux/backups/pve-notifications/</code>. Inget skrivs om <code>/etc/pve</code> inte är monterat. Efter omstart av <code>pve-cluster</code> registreras posten när det är tillgängligt igen.",
"<strong>Ta bort</strong> tar bort posten och behåller den tidigare säkerhetskopian av filen.",
"<strong>Läs konfiguration</strong> visar aktuella mål och matchare som PVE ser dem. Kontrollera här vilken väg som skickar till Monitor när flera aviseringsvägar finns."
],
"clusterTitle": "Klusternoder",
"clusterBody": "<code>/etc/pve/</code> delas mellan klusternoderna, inklusive målets URL och hemlighet. Varje nod anropar sin <em>egen</em> lokala mottagare: <code>127.0.0.1:8008</code> utan HTTPS eller HTTP-port 8009 med HTTPS. Kör Monitor på berörda noder och håll det delade målet förenligt med alla noders mottagarkonfiguration."
},
"catalogue": {
"heading": "Händelsekatalog",
"intro": "Cirka sjuttio händelsetyper är indelade i elva kategorier. Aviseringspanelen visar en utfällbar del per kategori med val för varje händelse. Alla är aktiverade som standard om inget annat anges.",
"headerGroup": "Grupp",
"headerEvents": "Händelser",
"rows": [
{
"group": "VM / CT",
"events": "<code>vm_start</code>, <code>vm_start_warning</code>, <code>vm_stop</code>, <code>vm_shutdown</code>, <code>vm_fail</code>, <code>vm_restart</code>, plus <code>ct_*</code>-ekvivalenter, <code>migration_start</code>, <code>migration_complete</code>, <code>migration_warning</code>, <code>migration_fail</code>, <code>replication_complete</code>, <code>replication_fail</code>."
},
{
"group": "Säkerhetskopieringar",
"events": "<code>backup_start</code>, <code>backup_complete</code>, <code>backup_warning</code>, <code>backup_fail</code>, <code>snapshot_complete</code>, <code>snapshot_fail</code>."
},
{
"group": "Resurser",
"events": "<code>cpu_high</code>, <code>ram_high</code>, <code>temp_high</code>, <code>load_high</code>."
},
{
"group": "Lagring",
"events": "<code>disk_space_low</code>, <code>disk_io_error</code>, <code>storage_unavailable</code>, <code>smart_test_complete</code>, <code>smart_test_failed</code>."
},
{
"group": "Nätverk",
"events": "<code>network_down</code>, <code>network_latency</code>."
},
{
"group": "Säkerhet",
"events": "<code>auth_fail</code>, <code>ip_block</code>, <code>firewall_issue</code>, <code>user_permission_change</code>."
},
{
"group": "Kluster",
"events": "<code>split_brain</code>, <code>node_disconnect</code>, <code>node_reconnect</code>."
},
{
"group": "Tjänster",
"events": "<code>system_startup</code>, <code>system_shutdown</code>, <code>system_reboot</code>, <code>system_problem</code>, <code>service_fail</code>, <code>oom_kill</code>, <code>system_mail</code>."
},
{
"group": "Health Monitor",
"events": "<code>new_error</code>, <code>error_resolved</code>, <code>error_escalated</code>, <code>health_degraded</code>, <code>health_persistent</code>, <code>health_issue_new</code>, <code>health_issue_resolved</code>."
},
{
"group": "Uppdateringar",
"events": "<code>update_summary</code>, <code>update_available</code>, <code>pve_update</code>, <code>update_complete</code>, <code>proxmenux_update</code>."
},
{
"group": "Maskinvara / GPU",
"events": "<code>gpu_mode_switch</code>, <code>gpu_passthrough_blocked</code>, <code>pci_passthrough_conflict</code>, <code>ai_model_migrated</code>."
}
],
"burstNote": "Några <code>burst_*</code>-typer (<code>burst_auth_fail</code>, <code>burst_ip_block</code>, <code>burst_disk_io</code> med flera) finns bara i sändningshanteraren. De ersätter många enskilda händelser med en sammanfattning och har inga egna val i gränssnittet. De ärver inställningen från sin ursprungliga händelsetyp.",
"backupResults": {
"heading": "Säkerhetskopieringsresultat",
"intro": "En avisering om ett Proxmox-säkerhetskopieringsjobb anger hur jobbet slutade. Resultatet hämtas från Proxmox-rapporten och styr titeln, ikonen med <em>Formaterade meddelanden</em> och e-postens statusrad.",
"headerIcon": "Icon",
"headerResult": "Resultat",
"headerWhen": "När",
"rows": [
{
"icon": "💾✅",
"result": "Säkerhetskopieringen är klar",
"when": "Säkerhetskopieringen av alla gäster i jobbet slutfördes utan varningar i rapporten."
},
{
"icon": "💾⚠️",
"result": "Säkerhetskopiering avslutad med varningar",
"when": "Säkerhetskopieringen av alla gäster slutfördes och rapporten innehåller minst en varningsrad."
},
{
"icon": "💾❌",
"result": "Säkerhetskopieringsfel rapporterat",
"when": "Säkerhetskopieringen av en gäst misslyckades eller jobbet stoppades av ett fel."
},
{
"icon": "💾❔",
"result": "Säkerhetskopieringsresultat obekräftat",
"when": "Rapporten är ofullständig eller anger inte ett resultat för varje gäst."
}
],
"items": [
"<strong>Titeln identifierar jobbet.</strong> Den anger lagringen och, vid en enda gäst, dess typ, namn och ID. Ett misslyckat jobb namnger gästen som misslyckades.",
"<strong>Meddelandet listar varje gäst</strong> med resultat, storlek, varaktighet och arkiv, följt av jobbets totalsiffror.",
"<strong>Varningar och fel listas en gång.</strong> Upprepade rader visas bara en gång, med huvudorsaken först. Efter åtta rader anges resten som ett antal på slutraden; detaljerna finns kvar i Proxmox uppgiftslogg.",
"<strong>Ett jobb som misslyckas före den första gästen</strong> visar Proxmox angivna orsak, exempelvis en lagring som saknas.",
"<strong>Sammanfattningar behåller resultatet.</strong> Säkerhetskopieringen behåller sin resultatikon i sammanfattningen efter tysta timmar. Resultathändelser för säkerhetskopiering kringgår den dagliga sammanfattningen."
]
}
},
"history": {
"heading": "Historik",
"body1": "Varje faktiskt sändnings<em>försök</em> registreras i SQLite-tabellen <code>notification_history</code>. Raden innehåller tidsstämpel (<code>sent_at</code>), kanal, händelsetyp, allvarlighetsgrad, titel, meddelandetext, flaggan <code>success</code> och tjänstens felmeddelande i <code>error_message</code> vid fel. Grupperade händelser visas som en rad med typen <code>burst_*</code>. Händelser som undertrycks av väntetiden mellan upprepningar registreras inte eftersom inget sändningsförsök sker.",
"body2": "Inställningar → Aviseringar har delen <em>Aviseringshistorik</em>, stängd som standard, med de senaste 20 posterna: resultat, kanal, datum och eventuellt fel. För varje daglig sammanfattning visas om något fanns att skicka. Sidan har ingen raderingsknapp; Audit & Report använder samma historik för att kontrollera kanalernas leverans.",
"body3": "Samma data finns via <code>GET /api/notifications/history</code> med valfria frågeparametrar <code>limit</code>, <code>offset</code>, <code>severity</code> och <code>channel</code>. Historiken kan raderas med <code>DELETE /api/notifications/history</code>."
},
"api": {
"heading": "API-ändpunkter",
"headerEndpoint": "Ändpunkt",
"headerMethod": "Metod",
"headerUse": "Användning",
"rows": [
{
"endpoint": "/api/notifications/settings",
"method": "GET / POST",
"use": "Läs eller skriv hela konfigurationen: kanaler, händelseval, AI-omskrivning och visningsnamn."
},
{
"endpoint": "/api/notifications/test",
"method": "POST",
"use": "Skicka ett testmeddelande till en kanal: <code>'{'\"channel\":\"telegram\"'}'</code>."
},
{
"endpoint": "/api/notifications/test-ai",
"method": "POST",
"use": "Formatera och skriv om en exempelhändelse utan att skicka den."
},
{
"endpoint": "/api/notifications/provider-models",
"method": "POST",
"use": "Lista tillgängliga modeller för den valda AI-leverantören."
},
{
"endpoint": "/api/notifications/send",
"method": "POST",
"use": "Skapa en händelse från en extern integration."
},
{
"endpoint": "/api/notifications/history",
"method": "GET / DELETE",
"use": "Läs historiken med filter eller radera den."
},
{
"endpoint": "/api/notifications/webhook",
"method": "POST",
"use": "Tar emot Proxmox-aviseringar. Lokala källadresser hoppar över fjärrautentisering men omfattas av frekvensgränser. Fjärranrop kontrolleras mot <code>X-Webhook-Secret</code>, tidsstämpel i <code>X-ProxMenux-Timestamp</code> eller JSON-kroppen, återuppspelning och eventuell lista över tillåtna IP-adresser."
},
{
"endpoint": "/api/notifications/proxmox/setup-webhook",
"method": "POST",
"use": "Registrera Monitor som mål i <code>/etc/pve/notifications.cfg</code>."
},
{
"endpoint": "/api/notifications/proxmox/cleanup-webhook",
"method": "POST",
"use": "Ta bort Monitor-målet från PVE:s aviseringskonfiguration."
},
{
"endpoint": "/api/notifications/proxmox/read-cfg",
"method": "GET",
"use": "Visa aktuell aviseringskonfiguration som PVE ser den."
}
]
},
"whereNext": {
"heading": "Nästa steg",
"items": [
{
"label": "AI-assistent",
"href": "/docs/monitor/ai-assistant",
"tail": " — leverantörer, modeller, instruktionslägen, språk och detaljnivå per kanal."
},
{
"label": "Health Monitor",
"href": "/docs/monitor/health-monitor",
"tail": " — den största enskilda händelsekällan, med egna undertryckningsintervall per kategori."
},
{
"label": "Arkitektur",
"href": "/docs/monitor/architecture",
"tailRich": " — hur SQLite-tabellerna (<code>notification_last_sent</code>, <code>notification_history</code>) och sändningstråden ingår i Monitor-processen."
},
{
"label": "Åtkomst och autentisering",
"href": "/docs/monitor/access-auth",
"tailRich": " — hur API-token skapas för skript som anropar <code>/api/notifications/send</code>."
},
{
"label": "Instrumentpanel → Systemloggar",
"href": "/docs/monitor/dashboard/system-logs",
"tail": " — direktvisningen av samma systemjournal som journalövervakningen läser."
}
]
}
}