Systemprotokoll auf Syslog Server
Moderator: Co-Administratoren
Systemprotokoll auf Syslog Server
Hallo Liebes Forum,
kann ich das Systemprotokoll (Auf der Weboberfläche unter "Status und Bedienung" -> "Systemprotokoll" irgendwie an einen Syslog oder mySQL Senden oder mit per FTP runter laden?
danke und lg
Jogi
kann ich das Systemprotokoll (Auf der Weboberfläche unter "Status und Bedienung" -> "Systemprotokoll" irgendwie an einen Syslog oder mySQL Senden oder mit per FTP runter laden?
danke und lg
Jogi
-
- Beiträge: 12116
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 849 Mal
- Danksagung erhalten: 2150 Mal
- Kontaktdaten:
Re: Systemprotokoll auf Syslog Server
Ja das geht.
Ich mache das mit einem Script, das ich alle 10min. laufen lassen. Häufiger brauche ich es zumindest nicht.
Es muss noch eine Systemvariable (Zahl) namens "LastHistoryTimestamp" angelegt werden.
Darin wird die Zeit der letzten Übertragung abgelegt, als Startpunkt für die nächste, damit bereits übertragene Einträge nicht noch mal gesendet werden.
Code: Alles auswählen
integer cnt = dom.GetHistoryDataCount();
string s;
integer rCount;
object objLastHistoryTimestamp=dom.GetObject(ID_SYSTEM_VARIABLES).Get("LastHistoryTimestamp");
integer iLastHistoryTimestamp=objLastHistoryTimestamp.Value();
string sHistoryTs;
!WriteLine("iLastHistoryTimestamp="#iLastHistoryTimestamp.ToString(0));
WriteLine("Logeinträge: "#cnt);
foreach( s, dom.GetHistoryData(0,cnt, &rCount ) ){
string sDatapointId = s.StrValueByIndex(";",1);
string sRecordedValue = s.StrValueByIndex(";",2);
string sDateTime = s.StrValueByIndex(";",3);
string stmpDate = sDateTime.StrValueByIndex(" ",0);
string stmpTime = sDateTime.StrValueByIndex(" ",1);
system.Exec("date +%s -d \""#stmpDate#" "#stmpTime#"\"",&sHistoryTs);
integer iHistoryTs=sHistoryTs.ToInteger();
if (iLastHistoryTimestamp < iHistoryTs) {
string sDatapointName = "";
object oHistDP = dom.GetObject( sDatapointId );
if( oHistDP ) {
object oDP = dom.GetObject( oHistDP.ArchiveDP() );
if( oDP ) {
sDatapointName = oDP.Name();
boolean bSysVar = (oDP.IsTypeOf(OT_VARDP) || oDP.IsTypeOf(OT_ALARMDP));
if( !bSysVar ) {
object oCH = dom.GetObject( oDP.Channel() );
if( oCH ) {
sDatapointName = oCH.Name();
}
}
}
}
string logLine=iHistoryTs.ToString(0)#","#sDatapointName#","#sDatapointId#","#sRecordedValue;
WriteLine(logLine);
system.Exec("logger -p info -t 'RegaSysProto' '"#logLine#"'");
}
objLastHistoryTimestamp.State(iHistoryTs);
}
-
- Beiträge: 3733
- Registriert: 23.09.2017, 12:04
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 120 Mal
Re: Systemprotokoll auf Syslog Server
Hallo
Frage zu dem Script ..
An welcher Stelle werden die Daten jetzt WOHIN? übertragen?
Ich habe versucht das Script nachzuvollziehen, verstehe aber nicht, was da passiert
Frage zu dem Script ..
An welcher Stelle werden die Daten jetzt WOHIN? übertragen?
Ich habe versucht das Script nachzuvollziehen, verstehe aber nicht, was da passiert
-
- Beiträge: 12116
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 849 Mal
- Danksagung erhalten: 2150 Mal
- Kontaktdaten:
Re: Systemprotokoll auf Syslog Server
Die Daten werden an den "logger" übergeben.
Der schreibt nach /var/log/messages und - sofern konfiguriert (Einstellungen->Systemsteuerung->Zentralenwartung) - an den Syslogserver
Der schreibt nach /var/log/messages und - sofern konfiguriert (Einstellungen->Systemsteuerung->Zentralenwartung) - an den Syslogserver
-
- Beiträge: 69
- Registriert: 30.09.2014, 23:02
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 10 Mal
Re: Systemprotokoll auf Syslog Server
Hallo Jérôme.
Dein Script würde ich auch gerne in ähnlicher Applikation wie mein Vorgänger einsetzen.
Meine Script-Kenntnisse sind jedoch nur sehr rudimentär, und ich passe vorgegebene Scripts meist nur marginal an meine Umgebung an.
Kannst du mir bei deinem Script noch zeigen, mit welchem Befehl du unter welchem Dateinamen in welches Filesystem die gesammelten Daten des Systemprotokolls wegschreibst.
Ich vermu mal, du schreibst in eine Datei auf tmp weg?
Oder geht das an einen konfigurierten Syslog-Server im Netzwerk?
Meine Anwendung dafür wäre in eine Zieldatei auf einem gemounteteten Laufwerk meines NAS.
Idealerweise immer angehangen, und zum Abschlussdes Tages mit Datum im Namen weggesichert.
Vielleicht hast du da noch einen Tipp für mich.
Das Mounnten des Laufwerks zum NAS bekomme ich im Script selbst noch hin.
Danke vorab.
Dein Script würde ich auch gerne in ähnlicher Applikation wie mein Vorgänger einsetzen.
Meine Script-Kenntnisse sind jedoch nur sehr rudimentär, und ich passe vorgegebene Scripts meist nur marginal an meine Umgebung an.
Kannst du mir bei deinem Script noch zeigen, mit welchem Befehl du unter welchem Dateinamen in welches Filesystem die gesammelten Daten des Systemprotokolls wegschreibst.
Ich vermu mal, du schreibst in eine Datei auf tmp weg?
Oder geht das an einen konfigurierten Syslog-Server im Netzwerk?
Meine Anwendung dafür wäre in eine Zieldatei auf einem gemounteteten Laufwerk meines NAS.
Idealerweise immer angehangen, und zum Abschlussdes Tages mit Datum im Namen weggesichert.
Vielleicht hast du da noch einen Tipp für mich.
Das Mounnten des Laufwerks zum NAS bekomme ich im Script selbst noch hin.
Danke vorab.
Zuletzt geändert von schneider.obw am 19.09.2022, 15:19, insgesamt 1-mal geändert.
-
- Beiträge: 69
- Registriert: 30.09.2014, 23:02
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 10 Mal
Re: Systemprotokoll auf Syslog Server
Meine AW hat sich wohl um wenige Sekunden überkreuzt. Sorry dafür.
Ist somit beantwortet.
Das bedeutet aber auch, dass sich die Einträge aus dem Sysprotokoll hier mit den geloggten Einträgen des Fehlerprotokolls vermischen(?).
Ist somit beantwortet.
Das bedeutet aber auch, dass sich die Einträge aus dem Sysprotokoll hier mit den geloggten Einträgen des Fehlerprotokolls vermischen(?).
-
- Beiträge: 12116
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 849 Mal
- Danksagung erhalten: 2150 Mal
- Kontaktdaten:
Re: Systemprotokoll auf Syslog Server
Code: Alles auswählen
system.Exec("logger -p info -t 'RegaSysProto' '"#logLine#"'");
Ja, das ist aber kein Problem, weil man sie gezielt filtern kann (Tag "RegaSysProto")schneider.obw hat geschrieben: ↑19.09.2022, 08:54Das bedeutet aber auch, dass sich die Einträge aus dem Sysprotokoll hier mit den geloggten Einträgen des Fehlerprotokolls vermischen(?).
-
- Beiträge: 69
- Registriert: 30.09.2014, 23:02
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 10 Mal
Re: Systemprotokoll auf Syslog Server
Ja. Ok und Danke.
Die Filterfunktion ist natürlich auch eine gute Möglichkeit.
Dann braucht es keinen zusätzlichen Syslogserver und das Gefummel mit Datum und Dateinamen (und auch kein gemountetes Volume).
Der Syslog-Server rennt ja zuverlässig und ist komfortabel für die Auswertungen.
Warum kompliziert, wenn es auch einfach geht. Ich setz das dann mal mit deinem Script so um.
Hättest Du ggfs. auch noch ein Kommando für das Script, um nach getaner Kopieraktion das Systemprotokoll in der CCU(3) zu löschen.
Danke und noch einen schönen Tag.
schneider.obw
Die Filterfunktion ist natürlich auch eine gute Möglichkeit.
Dann braucht es keinen zusätzlichen Syslogserver und das Gefummel mit Datum und Dateinamen (und auch kein gemountetes Volume).
Der Syslog-Server rennt ja zuverlässig und ist komfortabel für die Auswertungen.
Warum kompliziert, wenn es auch einfach geht. Ich setz das dann mal mit deinem Script so um.
Hättest Du ggfs. auch noch ein Kommando für das Script, um nach getaner Kopieraktion das Systemprotokoll in der CCU(3) zu löschen.
Danke und noch einen schönen Tag.
schneider.obw
Zuletzt geändert von schneider.obw am 19.09.2022, 15:19, insgesamt 1-mal geändert.
-
- Beiträge: 12116
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 849 Mal
- Danksagung erhalten: 2150 Mal
- Kontaktdaten:
Re: Systemprotokoll auf Syslog Server
schneider.obw hat geschrieben: ↑19.09.2022, 09:24um nach getaner Kopieraktion das Systemprotokoll in der CCU(3) zu löschen.
Code: Alles auswählen
dom.ClearHistoryData();
Ungetestet:
Code: Alles auswählen
integer cnt = dom.GetHistoryDataCount();
string s;
integer rCount;
string sHistoryTs;
foreach( s, dom.GetHistoryData(0,cnt, &rCount ) ){
string sDatapointId = s.StrValueByIndex(";",1);
string sRecordedValue = s.StrValueByIndex(";",2);
string sDateTime = s.StrValueByIndex(";",3);
string stmpDate = sDateTime.StrValueByIndex(" ",0);
string stmpTime = sDateTime.StrValueByIndex(" ",1);
system.Exec("date +%s -d \""#stmpDate#" "#stmpTime#"\"",&sHistoryTs);
integer iHistoryTs=sHistoryTs.ToInteger();
string sDatapointName = "";
object oHistDP = dom.GetObject( sDatapointId );
if( oHistDP ) {
object oDP = dom.GetObject( oHistDP.ArchiveDP() );
if( oDP ) {
sDatapointName = oDP.Name();
boolean bSysVar = (oDP.IsTypeOf(OT_VARDP) || oDP.IsTypeOf(OT_ALARMDP));
if( !bSysVar ) {
object oCH = dom.GetObject( oDP.Channel() );
if( oCH ) {
sDatapointName = oCH.Name();
}
}
}
}
string logLine=iHistoryTs.ToString(0)#","#sDatapointName#","#sDatapointId#","#sRecordedValue;
WriteLine(logLine);
system.Exec("logger -p info -t 'RegaSysProto' '"#logLine#"'");
}
dom.ClearHistoryData();
-
- Beiträge: 69
- Registriert: 30.09.2014, 23:02
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 10 Mal
Re: Systemprotokoll auf Syslog Server
Perfekt.
Herzlichen Dank für deine Hilfestellungen hier.
MfG
schneider.obw
Herzlichen Dank für deine Hilfestellungen hier.
MfG
schneider.obw