# NetMonitor

**by DUG-iT** · [www.dug-it.de](https://www.dug-it.de)

Vollständiges Handbuch (alle Kapitel, immer aktuell):
[dl.dug-it.de/netmonitor/DUGiT_NetMonitor_Handbuch.html](https://dl.dug-it.de/netmonitor/DUGiT_NetMonitor_Handbuch.html)
· [PDF](https://dl.dug-it.de/netmonitor/DUGiT_NetMonitor_Handbuch.pdf)

## Neu in Version 2

- **PC-Name in allen Dateinamen** (`tcp-latenz_<PC>.csv`, `hang-snapshots_<PC>.log`,
  `netmon-perflog_<PC>*.csv`, `sysinfo_<PC>.json`) – Dateien mehrerer Systeme
  können gefahrlos in einen Ordner gelegt und verglichen werden.
- **Systeminfo-Erfassung** bei jedem Worker-Start: OS, Hardware, CPU, RAM,
  Energieplan und alle NIC-Details (Treiber, Link-Speed, IP-Konfig, Puffer, EEE)
  → landet automatisch im HTML-Report.
- **Ping-Messung** (ICMP RTT zum Server) als zusätzliche Spalte in tcp-latenz.
- **Link-Änderungs-Erkennung**: Speed-Wechsel oder Disconnects der NIC werden
  sofort im Log vermerkt (direkter Hinweis auf Kabel-/Port-Probleme).
- **Watchdog-Task** (alle 5 Min., als angemeldeter Benutzer): startet den Worker
  automatisch neu, wenn das Fenster per X geschlossen wurde. Kein Eingriff in
  Systemdienste, kein WSH nötig.
- **PerfMon-Heal-Task** (ab V2.6, alle 5 Min., läuft als SYSTEM): hält den
  PerfMon-Collector zuverlässig am Laufen, auch nach einem Reboot (`logman`
  übersteht sonst keinen Neustart) — unabhängig davon, ob und wer gerade
  angemeldet ist. Versucht ab V2.9 erst einen leichten Start und legt die
  Collector-Definition bei Bedarf komplett neu an (`PerfMonHeal.ps1`), falls
  ein blosser Start nicht reicht; jeder Versuch wird protokolliert. Der
  angemeldete Benutzer wird zusätzlich automatisch der Gruppe "Performance
  Log Users" hinzugefügt, damit auch der (weiterhin unprivilegierte) Worker
  den Collector-Status lesen kann.
- **Desktop-Buttons** `NetMonitor-Start.cmd` / `NetMonitor-Stop.cmd` /
  `NetMonitor-FreezeMelden.cmd` auf dem Desktop des angemeldeten Benutzers
  (nicht des Admins). Freeze melden legt sofort einen Snapshot an (mit
  Kennzeichnung "MANUELL GEMELDET"), unabhaengig von Schwellwerten und Cooldown.
- **Sauberes Stop/Uninstall**: PerfMon wird immer mit gestoppt (gibt CSV-Sperren
  frei), Löschung mit Wiederholversuchen, Watchdog wird bei Stop deaktiviert.
- **Analyzer**: Referenzwerte-Tabelle (ab wann rot), Systeminfo im HTML,
  Korrelations-Analyse (Discard-Bursts nahe App-Neustarts), Link-Änderungen,
  erweiterte Gegenüberstellung mit Erläuterungen und automatischem Fazit.
- **Mehr Metriken**: Ausgabewarteschlange, gesendete Bytes, TCP-Verbindungsfehler.

Generisches Monitoring-Paket für hängende Netzwerk-Anwendungen.
Erkennt bei der Installation automatisch, welche Anwendungen auf dem System
Netzwerkverbindungen nutzen, und lässt per Assistent auswählen was überwacht
werden soll. Bei erkannten Hängern (hohe SMB-Latenz, langsame/abgelehnte
TCP-Verbindungen) wird automatisch ein Diagnose-Snapshot erstellt.

## Dateien

| Datei | Beschreibung |
|---|---|
| `NetMonitor.ps1` | Hauptskript – Menü, Installation, Start/Stop, Status |
| `Monitor-Worker.ps1` | Hintergrundprozess – misst und erstellt Snapshots |
| `config.json` | Wird bei Installation erzeugt (pro System individuell) |

## Installation

1. Ordner erstellen (z.B. `C:\NetMonitor`), beide `.ps1`-Dateien reinkopieren
2. **Wichtig:** Die zu überwachende Anwendung muss laufen (für die Erkennung)
3. PowerShell als Administrator:

```powershell
cd C:\NetMonitor
Unblock-File .\*
.\NetMonitor.ps1 install
```

Der Assistent führt durch 4 Schritte:

1. **Anwendung wählen** – zeigt alle Prozesse mit aktiven TCP-Verbindungen.
   Verwandte Prozesse (z.B. `Solutio` + `SolutioHelper`) werden automatisch
   vorgeschlagen.
2. **TCP-Ziele wählen** – zeigt alle Verbindungsziele der Anwendung,
   markiert als [LAN] oder [WAN]. ENTER = alle LAN-Ziele. Bekannte Ports
   (5432/5433 = PostgreSQL, 1433 = MSSQL, ...) werden automatisch benannt.
3. **SMB optional** – falls SMB-Verbindungen bestehen, kann die
   Share-Latenz mit überwacht werden.
4. **Schwellwerte** – ENTER übernimmt die Defaults (TCP 300ms, SMB 500ms).

Danach läuft alles: Autostart bei Anmeldung (minimiertes Fenster mit rotem
"NICHT SCHLIESSEN"-Hinweis), PerfMon-Collector, Worker.

## Verwendung

```powershell
.\NetMonitor.ps1              # Menü mit Status
.\NetMonitor.ps1 start        # Startet Monitoring
.\NetMonitor.ps1 stop         # Stoppt Monitoring
.\NetMonitor.ps1 status       # Status
.\NetMonitor.ps1 log          # Hang-Snapshots anzeigen
.\NetMonitor.ps1 config       # Aktuelle Konfiguration anzeigen
.\NetMonitor.ps1 install      # (Neu-)Konfiguration per Assistent
.\NetMonitor.ps1 uninstall    # Autostart+PerfMon entfernen (Logs bleiben)
```

## Funktionsweise

- **Standby-Logik:** Gemessen wird nur solange die überwachte Anwendung
  läuft. App zu = Standby (Log-Eintrag bei Start/Stopp der App).
- **TCP-Checks:** Alle 3 Sek. echter TCP-Connect zu jedem Ziel mit
  Zeitmessung. Trigger bei Überschreitung der Schwelle, Timeout oder
  abgelehnter Verbindung (Dienst down).
- **SMB-Checks:** Wildcard über alle verbundenen Shares, DE/EN-kompatibel.
- **Retransmit-Tracking:** TCPv4-Retransmits werden mitgeloggt – Indikator
  für Paketverlust (Kabel, Switch-Port, Duplex-Probleme).
- **Snapshot bei Trigger:** Ping, SMB-Status, Prozess-Status (Responding!),
  TCP-Verbindungen der App, Top-CPU-Prozesse → `hang-snapshots.log`
- **Langzeit-Verlauf:** `tcp-latenz.csv` (alle 30 Sek.) und
  `netmon-perflog*.csv` (PerfMon, alle 5 Sek.)

## Ausgabe-Dateien

Alle gesammelten Messdaten liegen in einem eigenen Unterordner `Messdaten\`,
getrennt von Skripten und Setup-Dateien. Bei `.\NetMonitor.ps1 uninstall`
bleibt dieser Ordner unangetastet erhalten (siehe unten).

| Datei | Inhalt |
|---|---|
| `Messdaten\hang-snapshots.log` | Diagnose-Snapshots + App Start/Stopp-Zeiten + Neustart-Korrelation |
| `Messdaten\tcp-latenz.csv` | TCP-Latenz-Verlauf zu allen Zielen + Retransmits |
| `Messdaten\netmon-perflog*.csv` | PerfMon-Rohdaten (SMB, NIC, TCP, CPU, RAM) |
| `heartbeat.txt` | Lebenszeichen des Workers |
| `config.json` | Monitoring-Konfiguration |

## Grenzen / Hinweise

- PerfMon-CSV: max 500 MB, tägliche Rotation, stoppt nach 7 Tagen
- Snapshot-Cooldown: 60 Sek. (kein Log-Flooding)
- Nach Kopieren neuer Dateien: `Unblock-File .\*` nicht vergessen
- Schwellwerte nachträglich ändern: `config.json` editieren, dann
  `stop` + `start`
