Mittwoch, Juli 22, 2026

Netbox - Einbinden weiterer Geräte in Alloy/Loki/Grafana - Technitium

Das Einrichten geht viel einfacher, die Beschreibung ist im Housekeepingartikel

Das ist streng genommen kein NetBox Thema, ich lasse es aber in der Kategorie NetBox, weil es zum vorherigen Beitrag gehört. Das Senden von Logfiles sollte bei Anwendungen, die nicht in Python geschrieben sind bzw. nicht den Python SysLogHandler verwenden, wesentlich einfacher einzurichten sein.

Nochmal der Hinweis vorab, ich präsentiere hier keine ausführlich getesteten fertigen Lösungen. Das Blog ist eher ein “live Mitschnitt” meiner Aktivitäten, damit ich weiß, was ich wann und warum getan habe (um es ggf. später wieder Schritt für Schritt rückgängig machen zu können). Ich werde im Verlauf sicherlich noch diverse Dinge umbauen, daher sollte man das, was ich hier so tue, keinesfalls auf einem Produktivsystem 1:1 übernehmen! Ich lasse mir zur Zeitersparnis exzessiv von KIs helfen, sei es bei Zusammenfassungen von Anleitungen oder beim Debuggen von Code. Ich versuche so gut es geht nachzuvollziehen, was die KI vorschlägt, und übernehme nur Code, den ich auch selbst, zumindest meine, verstanden zu haben. Jeder muss/sollte das Gleiche tun und sich keinesfalls blind auf meine Lösungen verlassen.

Zuerst werde ich Technitium einbinden. Da ich die Einbindung der einzelnen Dienste, wie oben erwähnt, im Verlauf sicher noch anpassen werde, bekommt jeder Dienst einen eigenen Beitrag. Aktualisierungen werde ich zukünftig immer in der ersten Zeile des jeweiligen Artikels mit Datum kennzeichnen. Ich hoffe, dass die Übersicht so erhalten bleibt.

Zunächst rsyslog in Technitium installieren. Ich brauche rsyslog auch bei Technitium, um die Logs für Loki zu “normalisieren”:

apt update
apt install -y rsyslog

In der Shell von Technitium legen wir ein neues Template für die Normalisierung der Logs an:

cat > /etc/rsyslog.d/00-templates.conf << 'EOF'
template(name="RFC5424_UTC" type="string"
string="<%PRI%>1 %TIMESTAMP:::date-rfc3339,date-utc% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%n"
)
EOF

Das Template ignoriert bewusst den in der Logzeile enthaltenen Text-Timestamp und setzt stattdessen die tatsächliche UTC-Empfangszeit von rsyslog ein, unabhängig davon, ob die Quelle selbst schon in UTC loggt oder nicht. Das Template muss auf jedem Host, der an Loki sendet, separat existieren (Templates werden pro rsyslog-Instanz definiert, nicht global geteilt).

Nun noch die eigentliche Config-Datei für das Logging:

cat > /etc/rsyslog.d/97-technitium-corelog.conf << 'EOF'
module(load="imfile" mode="inotify")
input(type="imfile"
File="/etc/dns/logs/*.log"
Tag="technitium-core:"
Severity="info"
Facility="local0"
ruleset="forwardCoreLog"
freshStartTail="on"
startmsg.regex="^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}")
ruleset(name="forwardCoreLog") {
if tolower(msg) contains "xception" or tolower( msg) contains "rror" or tolower(msg) contains "ailed" or tolower( msg) contains "imeout" then {
action(type="omfwd" target="<LOKI-LXC-IP>" port="1514" protocol="tcp"
template="RFC5424_UTC")
}
}
EOF

Hier muss man die passende IP-Adresse von Alloy/Loki entsprechend eintragen/anpassen. Anschließend die Syntax der Config-Datei prüfen und, wenn es ohne Fehler durchläuft, gleich starten:

rsyslogd -N1 -f /etc/rsyslog.conf
systemctl enable --now rsyslog

Zum Testen erzeugen wir auf dem Technitium-Server einen Log-Eintrag mit:

echo "[$(date -u '+%Y-%m-%d %H:%M:%S') UTC] TEST error verification line" >> /etc/dns/logs/$(date +%Y-%m-%d).log

und schauen, ob es im Loki-LXC ankommt, mit:

curl -s "http://localhost:3100/loki/api/v1/query_range" 
--data-urlencode 'query={job="syslog"} |= "verification line"' 
--data-urlencode 'start='$(date -d '5 minutes ago' +%s)'000000000' 
--data-urlencode 'end='$(date +%s)'000000000' | jq -r '.data.result[].values[][1]'
Bildschirmfoto_20260722_151155.png

Hier sieht man die erzeugten Error-Logs in Grafana.

RSS | ATOM


Kommentar hinzufügen

Die Felder Name und Kommentar sind Pflichtfelder.


BBCode Hilfe