Carsten_Schmitz

PSA: Your choice of UNIX init system may hide many Automic errors from you

Discussion created by Carsten_Schmitz on Apr 27, 2018

(party machine-generated German translation at the end)

 

If you operate an AE on Linux, then you should really read this one ...

 

Some days ago we had a flurry of Java exceptions due to a bug with a JWP. These Java exceptions were, strangely, ending up not in the Automic log, but in /var/log/messages.

 

It took me several hours to get to the bottom of this, and it's glorious.

 

The Automic Service Manager writes output to it's dedicated log files, we all know that. But it also writes many other messages, including important error messages, to stdout, the console. And it also does that when it runs as a background process, aka as a daemon, or daemonized.

 

This is wrong. Daemonized processes should not write to stdout, but they should definetly not write any vital error messages exclusively to stdout.

 

How does the Init system play into this, you ask?

 

Until recently, we started the Automic Service Manager via a script from /etc/init.d, also known as the System V Init System. Probably many of you do the same thing still. The System V Init system, however, doesn't expect it's daemonized processes to spew stuff to stdout, and consequently, it just discards that output.

 

That's right: A good amount of status messages, but also errors, Java exceptions etc. of Service Manager has been discarded for many years.

 

But we recently switched to systemd, which is the new standard on RedHat and others, a full replacement for System V Init. And systemd has changed how it handles stdout. systemd takes anything daemons write to stdout, and routes it to the syslog daemon. So, that's why it ended up in /var/log/messages, and I am now getting to see these messages for the first time in years.

 

I have asked CA/Automic to treat this as something to be addressed as an issue/bug/product flaw, but definetly not as an enhancement request or "idea".

 

Until then, if you're using systemd to start smgr, you should go to this thread where I provide a syslog.d example and a logrotate config, so you can direct your new-found messages into a dedicated file (and let's hope Automic fixes the bug that causes the flurry of Java Exceptions soon). If you're using System V Init, I don't have an immediate tip how to make these messages visible, though it's probably possible somehow.

 

---

 

Wenn Sie eine AE unter Linux betreiben, dann sollten Sie das vielleicht wirklich lesen....

 


Vor einigen Tagen hatten wir eine Flut von Java-Exceptions wegen eines Fehlers mit einem JWP. Diese Java-Exceptions landeten seltsamerweise nicht im Automic-Log, sondern in /var/log/messages.

 


Ich habe mehrere Stunden gebraucht, um der Sache auf den Grund zu gehen, und es ist herrlich.


Der Automic Service Manager schreibt die Ausgabe in seine speziellen Log-Dateien, das wissen wir alle. Aber er schreibt auch viele andere Meldungen, einschließlich wichtiger Fehlermeldungen, nach stdout, die Konsole. Und das tut er auch, wenn es als Hintergrundprozess läuft, auch bekannt als Daemon, oder daemonisiert.


Das ist falsch. Daemonisierte Prozesse sollten nicht nach stdout schreiben, aber sie sollten definitiv keine wichtigen Fehlermeldungen ausschließlich nach stdout schreiben.

 

Wie spielt das Init-System da rein, fragen Sie sich?

 

Bis vor kurzem haben wir den Automic Service Manager über ein Skript aus /etc/init.d, auch bekannt als System V Init System, gestartet. Wahrscheinlich machen viele von Euch dasselbe. Das System V Init-System erwartet jedoch nicht, dass seine dämonisierten Prozesse Dinge nach stdout schreiben, und deshalb verwirft es diese Ausgabe einfach.

 

Jepp - viele Statusmeldungen, aber auch Fehler, Java-Ausnahmen etc. des Service Managers werden somit seit vielen Jahren einfach verworfen.


Wir haben vor kurzem auf systemd umgestellt, den neuen Standard für RedHat und andere, einen vollständigen Ersatz für System V Init. Und systemd geht anders mit stdout um: systemd nimmt alles, was Daemons auf stdout schreiben, und leitet es an den Syslog-Daemon weiter. Das ist der Grund, warum es in /var/log/messages gelandet ist, und ich bekomme jetzt zum ersten Mal seit Jahren diese Nachrichten zu sehen.


Ich habe CA/Automic gebeten, dies als etwas anzusehen, das als Problem/Fehler/Produktfehler behandelt werden soll, aber definitiv nicht als Erweiterungsantrag oder als "Idee".

 

Bis dahin, wenn Sie systemd benutzen, um smgr zu starten, dann können Sie in diesem Thread ein Beispiel für eine syslog.d Config, und eine logrotate Config finden, um die Nachrichten in eine eigene Datei zu leiten (und hoffentlich behebt Automic den Bug bald, der für die Flut an Java Exceptions sorgt). Für die, die smgr per SysV Init starten, habe ich aktuell kein Beispiel, wie man die Nachrichten sichtbar macht, wobei ich denke, dass es prinzipiell irgendwie gehen müsste.

 

(Übersetzung: teilweise https://www.deepl.com)

Outcomes