EL7でsystemdによって制御されるサービスのstdout / errorを取得して/var/log/messages以外の場所に送信するにはどうすればよいですか?

EL7でsystemdによって制御されるサービスのstdout / errorを取得して/var/log/messages以外の場所に送信するにはどうすればよいですか?

私のユースケースはFabrice A. Marieのものです。systemdを使用した冗長ロギング記事(Kibin Labsで公開)は「醜い」カテゴリに属し、ELKスタック全体(「唯一のリゾート」と呼ばれる)に追加するための簡単な推奨事項が含まれています。 。

Fabrice A. Marieの分類によると、「良い」アプリケーションは、/dev/null情報を失うことなくstdoutにリダイレクトでき、stderrにほとんど書き込まないため、/var/log/messages(systemdログを介して)大量のログを送信できるということです。プライベートアプリケーションのメンテナンスログファイルのアプリケーションロギングメカニズム(systemdまたはrsyslogで管理されていない)キャンセル私の基準では「悪い」ことを望んでいません。

私はいくつかのアプリを持っています(たとえば、phantomjsバックエンドプレレンダリングのために1つを選択しましたが、これは単に一つ私のユースケース)はsystemdでサービスとして起動します。 私のものアプリケーションはログを標準出力と標準エラーに送信します(これは一般的なデフォルト動作です)。console.log()Node.jsから)。そうだ間違ったこれが「良い」資格を得るには、systemdを使用する代わりに(今のように)独自のプライベートロギングを実行するように再構築する必要があります。とにかく、このアプリを直接録音することはできません。

Fabrice A. Marieと私が読んだ他の人によると、すべてのstdout / stderr情報/dev/null/var/log/messages。完全なELKスタックなしでは、私のアプリケーションログがstdout / errorに書き込まれ、systemdで一般的な方法で処理されるようにsystemd(およびその他のエントリ)を設定できませんが、最終的にこのようなことは起こりますか?代わりに他の場所で/var/log/messages

CentOS 7とRHEL 7を実行しており、現在のサンプルサービスのサービスユニットは次のとおりです。

[Unit]
Description=prerender
After=network.target
[Service]
ExecStart=/usr/local/bin/node /var/www/prerender/node/server.js
Restart=always
User=prerender
Group=adm
Environment=PATH=/usr/bin:/usr/local/bin PORT=8900
WorkingDirectory=/var/www/prerender/node
[Install]
WantedBy=multi-user.target

ベストアンサー1

この記事は、systemdの悪意のあるロギング機能の引数によって引き起こされる問題について他のソフトウェアを非難することを言うべきではないようです。ソリューション(syslog)も言及していますが、これは大量の過剰攻撃を提案する手段としてのみ使用されますlogstash

単一のホストに少数のデーモンを記録するために Logstash を使用する必要はありません。

記事から:

デフォルトでは、これを行うと標準出力がログにリダイレクトされます。デフォルトでは、ログはsyslogに順番に送信され、RedHat 7準拠のディストリビューションは/var/log/messagesに保存されます。

次に、明白で合理的な構成オプションを完全に無視しrsyslogd、ログが実行できない操作を実行したい場合は、これが唯一のlogstashオプションであることを示唆しています。elasticsearch

rsyslogなどの最新のsyslogデーモンは、syslog-ngデーモン名や正規表現パターンの一致など、さまざまな基準に従ってsyslogメッセージをフィルタリングするように設定できます。デフォルト値はですが、/var/log/messagesデフォルト値を変更するのは非常に簡単です。

したがって、rsyslogサービスで syslog メッセージをフィルタリングするには、いくつかのルールが必要です。


体系的な支持者がロギングについてどのように考えても、彼らはロギングが原始的で柔軟性がなかったので、必要なふりをするのが大好きで、何度も解決はどこまでもjournald誰も考慮しなかった問題を解決しています。

また、プログラムがログを記録する正しい方法は、stdoutやstderrではなく、ほとんどの言語で利用可能なsyslog機能を使用することです。

おすすめ記事