Skip to content

Instantly share code, notes, and snippets.

@froop
Last active January 24, 2023 07:06
Show Gist options
  • Select an option

  • Save froop/f229308cb12aa71dd09bf08f686cffa1 to your computer and use it in GitHub Desktop.

Select an option

Save froop/f229308cb12aa71dd09bf08f686cffa1 to your computer and use it in GitHub Desktop.
[rsyslog] メッセージ出力のタイミングが遅延する

[rsyslog] メッセージ出力が大きく(最大数分)遅延する

事象

rsyslog パッケージの omfwd モジュールによる TCP 通信 1 が発生した際に、ソケットから制御が戻るまでの間、他のアクションでも出力が遅延する。 例えば、デフォルトの /etc/rsyslog.conf の場合、下記ファイルへの出力が遅延する。

  • /var/log/messages
  • /var/log/secure
  • /var/log/maillog
  • /var/log/cron
  • /var/log/spooler
  • /var/log/boot.log

発生条件

omfwd モジュールを使用して TCP 通信を行うアクションが、キューなし(デフォルトの $ActionQueueType Direct)の場合。 例えば、/etc/rsyslog.conf(または /etc/rsyslog.d 配下のファイル)に転送設定 1 のみを追加し、アクションキュー設定を追加しない場合。

特に影響が大きいのが、TCP 接続の確立要求(3ウェイハンドシェイクの SYN パケット)に応答がなく、タイムアウトまで待機する場合。 RHEL7 のデフォルトでは、リトライは6回(net.ipv4.tcp_syn_retries=6)のため、合計で2分強も遅延する。 なお、相手ホストが存在しない場合でも、ルータから ICMP(destination unreachable)が返るならば発生しない。

原因

TCP転送アクション 1 にキューがないために、非同期に処理できず?(メインメッセージキューが次へ進めず?)、他アクションも巻き込まれる。

対処方法

/etc/rsyslog.conf(または /etc/rsyslog.d 配下のファイル)への転送設定 1 の追加に合わせて、アクションキュー(例: $ActionQueueType LinkedList)も追加する。

Footnotes

  1. 例: *.* @@remote-host:514 2 3 4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment