# Funktionsweise

Argus ist eine Batch-Pipeline, kein Dienst. Ein Cron-Job führt einen Sammler für jede Quelle aus, die Sammler hängen Anzahlen an reine Textdateien an, und ein zweiter Job zeichnet die Diagramme mit gnuplot. Kein Prozess von Argus bleibt zwischen zwei Nächten laufen.

## Sammlung

Die Sammler sind getrennte Skripte, eines pro Quelle, sodass der Ausfall eines Sammlers die anderen nicht stoppt:

- `collect-ssh.sh` liest `auth.log` oder journald und zählt SSH-Angriffe;
- `collect-fail2ban.sh` liest die Sperren jedes Fail2Ban-Jails, wenn Fail2Ban installiert ist;
- `collect-crowdsec.sh` liest die Warnungen jedes CrowdSec-Szenarios, wenn CrowdSec installiert ist.

`/etc/cron.d/argus` startet die Sammlung um 00:05. Eine Quelladresse wird zu einem Angriff, wenn sie an einem Tag `ARGUS_SSH_THRESHOLD` fehlgeschlagene Versuche erreicht, standardmäßig 5. Die Anzahl wird behalten; die Adresse nicht.

## Reine Textdateien

Die Sammler schreiben `$ARGUS_DATA_DIR/<year>/<series>_<year>.txt`, standardmäßig unter `/srv/argus/`. Jede Zeile enthält eine Anzahl und eine Stundenscheibe, `<count> <YYYY-MM-DDTHH>`. Es gibt keine Datenbank und keinen Index zum Neuaufbau: Eine Datei kann mit einem Textwerkzeug gelesen, kopiert oder verglichen werden.

Eine Serie ist der Dateiname ohne das Jahr, also ist `ssh_direct_2026.txt` die Serie `ssh_direct`. Eine Datei pro Quelle und pro Jahr hält den Verlauf lesbar, nachdem sich ein Sammler ändert.

## Rendern

Der Diagramm-Job startet um 00:15 und ruft `chart-daily.sh` auf, das die Tagessummen aus den reinen Textdateien neu aufbaut und das Bild des Jahres zeichnet. Die Ansichten `period` und `hourly` werden auf Anfrage mit `argus-chart` aus denselben Dateien gezeichnet. Das Zeichnen erledigt gnuplot, und jedes Bild landet in `<data directory>/<year>/images/`.

Um 00:20 prüft `argus-doctor.sh`, ob jeder Sammler am Vortag lief. Jeder Sammler schreibt jeden Tag eine Lebenszeichenzeile, auch wenn er null Ereignisse gezählt hat, damit ein ruhiger Tag und ein angehaltener Sammler unterschieden werden können.

## Kein Daemon

Argus bietet keinen Dienst und keine Weboberfläche an und hält keinen Prozess am Leben. Ein Server mit 1 GB RAM genügt, und eine Nacht ohne Sammlung lässt die vorherigen Dateien unberührt. Die Diagramme werden dort gelesen, wohin sie kopiert werden, auf dem Arbeitsplatzrechner, mit einem beliebigen Bildbetrachter.

Die Skripte, die Einstellungen und der Dateiaufbau sind im Repository beschrieben: [README](https://github.com/RonanDavalan/Argus/blob/main/README.md), [Installationsleitfaden](https://github.com/RonanDavalan/Argus/blob/main/docs/install.md).

