25.5.3. キューの管理
キューはすべてのタイプで、使用中の要件に合致するようにさらなる設定が可能です。複数のディレクティブを使用してアクションキューとメインメッセージキューの両方を修正できます。現時点では、20 以上のキューパラメーターが利用可能です。「オンラインドキュメント」 を参照してください。これらの設定の一部は一般的に使用されます。ワーカースレッド管理などでは、キューの動作をより詳細に制御でき、上級ユーザー用に予約されています。高度な設定では、rsyslog の「パフォーマンス、スケジュールキュー」を最適化したり、システムシャットダウン時のキューの動作を変更したりすることができます。
キューのサイズ制限
キューが保有できるメッセージ数は、以下の設定で制限できます。
$objectQueueHighWatermark number
object を
MainMsg
または Action
に置き換えて、このオプションをメインメッセージキューまたはアクションキューにそれぞれ使用します。number をキューに格納されたメッセージ数に置き換えます。キューサイズを実際のメモリーサイズではなくメッセージの数として設定します。デフォルトのキューサイズは、メインメッセージキューとルールセットキューの場合は 10,000 メッセージ、アクションキューの場合は 1,000 となります。
ディスク補助キューはデフォルトで無制限で、このディレクティブでは制限できませんが、以下の設定で物理ディスク領域をバイト単位で確保することができます。
$objectQueueMaxDiscSpace number
object を
MainMsg
または Action
に置き換えます。数 で指定したサイズ制限がヒットすると、キューデキューのメッセージで十分な領域が解放されるまでメッセージは破棄されます。
メッセージの破棄
キューのメッセージがある数に達すると、重要でないメッセージを破棄して、より優先度が高いエントリーのためにキューのスペースを節約できます。破棄プロセスを開始するしきい値は、discard mark と呼ばれるもので設定できます。
$objectQueueDiscardMark number
object を
MainMsg
または Action
に置き換えて、このオプションをメインメッセージキューまたはアクションキューにそれぞれ使用します。ここでは、number は、破棄プロセスを開始するためにキューにある必要がある多数のメッセージを表します。破棄するメッセージを定義するには、以下を使用します。
$objectQueueDiscardSeverity priority
priority を、以下のキーワード(または数字)のいずれかに置き換えます。debug (7)、info (6)、notice (5)、warning (4)、err (3)、crit (2)、alert (1)、および emerg (0)。この設定により、定義されたプライオリティーを下回る、新しく受信したメッセージおよびすでにキューに格納されたメッセージは、破棄マークに到達すると直ちにキューから消去されます。
タイムフレームの使用
特定の期間中にキューを処理するように rsyslog を設定できます。このオプションを使用すると、たとえば処理をオフピーク時に移すことができます。時間帯を定義するには、以下の構文を使用します。
$objectQueueDequeueTimeBegin hour
$objectQueueDequeueTimeEnd hour
hour では、時間枠を区切る時間を指定できます。分は指定せず、24 時間形式を用います。
ワーカースレッドの設定
ワーカースレッド はキューに格納されたメッセージに対して指定されたアクションを実行します。たとえば、メインメッセージキューでは、ワーカーのタスクは、入ってくるメッセージにフィルター論理を適用し、関連のアクションキューに入れることです。メッセージが届くと、ワーカースレッドは自動的に開始します。メッセージ数がある数に達すると、別のワーカースレッドがオンになります。この数字を指定するには、以下を使用します。
$objectQueueWorkerThreadMinimumMessages number
number を、補助ワーカースレッドをトリガーするメッセージ数に置き換えます。たとえば、number を 100 に設定すると、100 を超えるメッセージが到達すると、新しいワーカースレッドが起動します。200を超えるメッセージが到着すると、3番目のワーカースレッドが開始されます。ただし、並行して実行している作業スレッド数が多すぎるため、以下を使用してそれらの最大スレッド数を制限できます。
$objectQueueWorkerThreads number
ここでの number は、並行して実行できる作業スレッドの最大数を表します。メインメッセージキューのデフォルトは、1 スレッドです。ワーカースレッドが一旦起動すると、非アクティブタイムアウトが現れるまで、実行し続けます。タイムアウトを設定するには、以下を入力します。
$objectQueueWorkerTimeoutThreadShutdown time
time をミリ秒単位の期間設定に置き換えます。この設定がないと、ゼロタイムアウトが適用され、ワーカースレッドはメッセージが不足するとすぐに終了します。time を
-1
として指定すると、スレッドは閉じられません。
バッチのデキュー
パフォーマンスを向上させるために、rsyslog を設定して、複数のメッセージを一度にデキューします。このデキューの最大値を設定するには、以下を使用します。
$objectQueueDequeueBatchSize number
number を、同時にデキューできるメッセージの最大数に置き換えます。この数字を高く設定して、許可されるワーカースレッドの結果を大きくすると、メモリー消費量が大きくなることに注意してください。
キューの終了
メッセージを含んでいるキューを終了する際には、ワーカースレッドがキューの処理を完了する間隔を指定することで、データ損失を最小限に抑えることができます。
$objectQueueTimeoutShutdown time
time をミリ秒単位で指定します。この期間の後にまだキューに入っているメッセージがある場合、ワーカーは現在のデータ要素を完了してから終了します。このため、未処理のメッセージは失われます。ワーカーが最終要素を完了する間隔も設定できます。
$objectQueueTimeoutActionCompletion time
このタイムアウトが切れると、残りのワーカーはシャットダウンします。シャットダウン時にデータを保存するには、以下を使用します。
$objectQueueTimeoutSaveOnShutdown time
これが設定されている場合、rsyslog の終了前にすべてのキュー要素がディスクに保存されます。