gibt es die Möglichkeit Symcon-Logs zu einem zentralen Log-Server (z.B. Syslog) umzuleiten? Mittlerweile gibt es ja ein Modul (GitHub - demel42/IPSymconSyslog: Syslog-Client für IP-Symcon) mit dem Nachrichten manuell an Syslog versendet werden - was auch wunderbar funktioniert.
Nun würde ich aber gerne z.B. Script-Fehler / Symcon-Meldungen ebenfalls an einen Syslog-Server (Graylog) senden um diese dort automatisiert auszuwerten und ggf. Nachrichten zu versenden.
Ich sehe da spontan zwei Umsetzungsmöglichkeiten:
ein Logging-Modul welches immer die letzte Meldung in einer Symcon-Variable zur Verfügung stellt (vermutlich hohe Last). Somit können wir User mit entsprechenden Events und Scripte selber machen was wir möchten
alternativ: Weiterleiten der Nachrichten an einen Syslog-Server (mittlerweile Standard…)
Könnte sich nicht das bestehende IPSymconSyslog Modul optional für die IPS_LOGMESSAGEs 10201 - 10207 registrieren und an den SyslogServer weiterleiten?
Wäre dafür - einfach alles (oder auch gefiltert), was unter „Meldungen“ auf der Konsole erscheint an einen Syslog-Server weiterzuleiten wäre sehr hilfreich, um sporadisch auftretende Fehler zu finden…
ich hatte noch nie mit dem registrieren von Nachrichten zu tun … müsste ich in dem Modul einfach nur ein RegisterMessage() auf die genannten Nachrichten-IDs durchführen und bekomme dann in der MessageSink() - Funktion alle diese Nachrichten mit und könnte die dann an den syslogd weiterleiten?
Oder ist da noch was zu beachten?
klappt leider nicht. Habe folgendes gemacht:
im dem Modul habe ich das programmiert.
public function ApplyChanges()
{
parent::ApplyChanges();
...
$this->RegisterMessage(0, KL_MESSAGE);
$this->RegisterMessage(0, KL_SUCCESS);
$this->RegisterMessage(0, KL_NOTIFY);
$this->RegisterMessage(0, KL_WARNING);
$this->RegisterMessage(0, KL_ERROR);
$this->RegisterMessage(0, KL_DEBUG);
$this->RegisterMessage(0, KL_CUSTOM);
}
...
public function MessageSink($TimeStamp, $SenderID, $Message, $Data)
{
$this->SendDebug(__FUNCTION__, 'Message from SenderID ' . $SenderID.' with Message ' . $Message, 0);
}
Ich hätte nun erwartet, das ich allen Meldungen bekommen; leider ist im Modul-Debug gar nichts zu sehen…
Als Instanz habe ich 0 gewählt, weil ich davon ausgehe, das die Log-Messages an das System an sich gehen. Und da ist glaube ich der gedankliche Fehler: man muss ja die SenderID angeben und eine Log-Messages geht ja nicht von Kernel aus sondern eher zum Kernel hin …
Ich bin mir auch nicht sicher, ob eine Log-Message überhaupt eine Message in diesem Sinne ist.
Mir fehlt im Augenblick die Idee, ob/wie man den Wunsch umsetzen kann, alle Log-Messages „abzufangen“ und an den Syslog weiterzuleiten
im Snapshot sind Nachrichten enthalten? Ich habe extra nochmal nachgeschaut. Ich finde darin nur Sen Inhalt von settings,json (objects, profiles, options) sowie ein paar andere Daten (timestamp, timezone, compatibility).
Ich habe mal spasseshalber auf ein paar Variablen ein RegisterMessages() gemacht und aus ein paar Instanzen … und bisher keine Log-Messages entlocken können …
Schau doch Mal wie die WebConsole das macht
Ohne Nachrichten kann die auch kein Meldungsfenster anzeigen.
Kann es aktuell nicht testen, wollte damit aber auch noch spielen (wenn Zeit).
Michael
Macht es bitte nicht über den MessageSink. Ich hatte auf dem Event jemandem erklärt warum das nicht geht Ein Modul erzeugt pro Aufruf des MessageSink Meldungen… somit hat man sofort eine saubere Endlosschleife. Aber Michaels Idee mit dem GetSnapshotChanges sollte gut laufen. Das läuft komplett Nebenläufig und sollte nichts blockieren. Und ihr habe alle Nachrichten. Da könnt ihr dann auch ein Modul draus machen
So weit, so gut. Es kommen allerdings ein paar Fragen …
das array-Element ‚TimeStamp‘ ist kein Unix-Timestamp, korrekt? Ein Bezug zum Start vom IPS sehe ich auch nicht, vielleicht einfach ein Zähler ab Start des IPS?
… ist aber wahrscheinlich (ausser für den Abruf der nächsten Daten) irrelevant.
steht irgendwo, wie die Nachrichten aufgebaut sind? Wenn nicht, werde ich das mal selbst aufdrösel
Ich würde zwar nicht alle Nachrichtentypen auswerten, aber ausser den normalen LogMessages fände ich schon einige andere Nachrichten interessant.
Das Modul überträgt nun alle Messages entsprechend der ausgewählten Nachrichten-Typen zum syslog. Alle Variablenänderungen sind auch Meldungen, sind also enthalten.
Sind natürlich schon eine Menge Nachrichten, ggfs könnten man da auch etwas filtern.
Hallo
Gleich mal getestet und bei der Konfiguration kommt gleich eine Warnung:
25.02.2019, 18:14:29 | PHP | Error: Warning: Use of undefined constant LOG_LOCAL0 - assumed ‚LOG_LOCAL0‘ (this will throw an Error in a future version of PHP)
Error in Script C:\Program Files (x86)\IP-SYMCON\modules\IPSymconSyslog\IPSymconSyslog\module.php on Line 151
134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
37 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
151 in modules\IPSymconSyslog\IPSymconSyslog\module.php (call IPSLogger_PhpErrorHandler)
35 in modules\IPSymconSyslog\IPSymconSyslog\module.php (call decode_facility)
3 in C:\Windows\System32- (call ApplyChanges)