rsyslogd(8)および書き込みバッファ増加による非同期ロギング


10

仮想コンテナー(VMware)で実行され、ローカルストレージが不足している非常にトラフィックの多いWebサイトでは、直接ログファイル(リモートネットワークストレージにある)にログを記録することから、rsyslogd

基本的に、同期ロギングから非同期ロギングに切り替えました。Webサーバーワーカーは、syslog(3)を使用して一部のメモリバッファーに書き込みrsyslogd(8)はデータを実際のファイルに並行して独自のペースで送信するので、ロギング時にプロセスがIOでブロックされません。

ここまでは順調ですね。問題は、時々rsyslogdが書き込みを行え(例えば、一時的または長期的なネットワーク障害)、着信バッファーがすぐにいっぱいになることです。

私の質問は:

  • syslog(3)を使用してrsyslogdに書き込むときに、クライアントがブロックすることはありますか?
  • rsyslogdの統計を確認する方法はありますか(たとえば、バッファーの大きさ/フルサイズ)。
  • rsyslogd着信バッファーのサイズを増やす方法はありますか?

2
これを解決したことがありますか?もしそうなら、私はあなたの答えを読むことに興味があります。
djeikyb 2013

1
@djeikyb:申し訳ありません。興味はありますが(質問に対する投票)、まだ誰も回答していません。これにはソースコードのダイビングが必要なようです。
arielf 2014年

1
どのWebサーバーを使用しているかは言いません。たぶん、syslogをまったく使用すべきではありません。たとえば、Apacheはログにsyslogを使用しますか、それとも単にログファイルに書き込みますか?データベースにログインすることも可能です。
ブルジェイ2014年

回答:


1

私が覚えている限り、rsyslogのメインメッセージキューのデフォルトモードは固定サイズの配列です。10k要素程度の制限があります。これをリンクリストキューに変更してみてください。時々のメッセージバーストをより適切に処理できるはずです。

はい、キューがFixedArrayありLinkedListます。


「変えてみよう」...もっと明確にできますか?見て/etc/rsyslog.conf:あなたが言及しているキューのタイプに関連するものは何も見当たりません。これにはコードの変更が必要ですか?これらはどこでどのように構成できますか?ありがとう!
arielf 2016年

1

最初の質問に対する答えは次のとおりです。

はい、syslog()への呼び出しはすべてブロックされます。非常に短い時間かもしれませんが、それでもファイル記述子を含む同期呼び出しです。詳細についてはman 3 syslog、を参照してください。

サーバーが非同期アーキテクチャとプリミティブを使用していない限り、常にいくつかのロックが存在します。たとえば、ログに別のスレッドを使用することで、この問題を軽減することはできますが、排除することはできません。他の2つの質問については本当にわかりませんが、rsyslogdソースコード(およびsyslog()ファミリーの関数の1つ)を調べることが唯一の方法です。

より一般的には、ログをUDP:514 "ネットワークSyslogプロトコル"を介して外部サーバーに移動すると、ロックを作成する可能性がほぼゼロになります。高負荷時に一部のログが失われる可能性があるという欠点があります。

まず、「元の」サーバーでは、すべてのロギングがsyslog経由で行われるようにする必要があります。たとえば、Apache2では次を指定する必要があります。

ErrorLog "syslog:daemon"

他のサーバーについては、適切なマニュアルページを参照してください。これを確認できない場合は、ファイルシステムにログオンすると、

次に、元のrsyslogd構成で、選択したファシリティ(この例では「デーモン」)のすべてのsyslogトラフィックを1つ以上の外部syslogサーバーに送信するように要求します。rsyslog構成ファイルでは、以下を指定できます。

daemon.* @192.168.128.1
daemon.* @192.168.254.1

ログの2つのコピーを2つの異なるサーバーに同時に送信する。

3番目に、宛先サーバーで、UDP:514を介したsyslogメッセージの受信を有効にします。これは(宛先)rsyslogd構成ファイルにあり、通常はデフォルトで無効になっています(先頭の#sを削除するだけで十分です:

$ModLoad imudp
$UDPServerRun 514

4つ目はオプションですが強く推奨されていますが、高解像度のタイムスタンプも有効にします。

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

また、このオプションは通常デフォルトで無効になっています(なぜ地球にいるのですか?)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.