No description
Find a file
2026-06-08 23:35:31 +02:00
index.html renamed: kp41-dashboard.html -> index.html 2026-06-08 23:35:31 +02:00
README.md first commit 2026-06-08 23:08:00 +02:00

KP-41 Monitor

Statisk HTML-dashboard för att analysera och följa upp Kernel-Power Event ID 41 (oväntade avstängningar) i en Windows-klientflotta via SCCM/CMPivot-exporterat data.

All data lagras i webbläsarens localStorage — inget skickas till servern.

Bakgrund

Verktyget togs fram för att utreda återkommande frysningar på laptops hos en kund, misstänkt kopplade till Offline-filer och mappomdirigering. CMPivot används för att samla in KP-41-händelser och kontexthändelser från operationella händelseloggar, som sedan importeras i dashboarden för analys och trenduppföljning.

Funktioner

  • KP-41-import — TSV-export från CMPivot parsas och kategoriseras automatiskt:
    • sleep_hang — SleepInProgress = 6 (frysning vid uppvaknande från modern standby)
    • power_button — PowerButtonTimestamp ≠ 0 (användaren höll inne strömknappen)
    • crash — BugcheckCode ≠ 0 (riktig BSOD med dumpfil)
    • other — okänd/ej klassificerad dirty shutdown
  • Kontexthändelser — import från OfflineFiles/Operational, SMBClient/Operational eller Folder Redirection/Operational via WinEvent()-entiteten i CMPivot
  • Tidsserie-diagram med GPO-driftsättningsmarkering för att visualisera effekten av åtgärder
  • Användare och maskinöversikt via TopConsoleUser från SystemConsoleUsage
  • Persistent lagring i localStorage — data överlever sidladdning och sessioner
  • Export/import av session som JSON för backup eller överföring mellan webbläsare

CMPivot-frågor

KP-41 händelser

EventLog('System')
| where EventID == 41 and Source == 'Microsoft-Windows-Kernel-Power'
| project Device, DateTime, Message
| join (SystemConsoleUsage | project Device, TopConsoleUser)

Kontexthändelser (anpassa logg och tidsfönster)

WinEvent('Microsoft-Windows-OfflineFiles/Operational', 2h)
| where ID == 1004 or ID == 1005
| join (SystemConsoleUsage | project Device, TopConsoleUser)

Driftsättning

Krav

  • En webbserver som kan servera statiska filer (Caddy, Nginx, Apache, IIS)
  • HTTPS rekommenderas (Caddy hanterar detta automatiskt)

Med Caddy

Kopiera index.html till servern och lägg till följande i din Caddyfile:

labb.selmosson.cloud {
    handle /kp41 {
        root * /srv/kp41
        rewrite * /index.html
        file_server
    }
    handle /kp41/* {
        root * /srv/kp41
        rewrite * /index.html
        file_server
    }
}
sudo mkdir -p /srv/kp41
sudo cp index.html /srv/kp41/index.html
sudo systemctl reload caddy

Filstruktur

KP41/
├── README.md
└── index.html        # Hela dashboarden — självständig HTML/CSS/JS

Begränsningar

  • localStorage är per webbläsare och origin — data delas inte mellan användare
  • CMPivot-export måste göras manuellt och klistras in — ingen automatisk insamling
  • IP-adresser från IPConfig-joinen reflekterar klientens nuvarande tillstånd, inte tillståndet vid händelsetillfället, och används därför inte