imfileを利用したローカルログファイル取り込みを試してみた

はじめに

rsyslogの設定ファイル内には多くのモジュールが存在します。
今回はその中のimfileに着目し、利用した際の動作やログ出力にどのような影響を与えるのかを検証しました。簡潔に説明してしまうと、imfile は指定したファイルの監視を行い、読み込んだ内容をrsyslogに取り込むためのモジュールです。
しかし、実際にどのような設定で動作するのか、また Facility や Severity などのパラメータがログ出力にどのような影響を与えるのかは
理解できていませんでした。

そこで本検証では、様々な設定変更を行いながらimfileの動作を確認しました。


imfileについて

imfileとはrsyslogが提供しているモジュールの1つであり、役割ごとに分類されています。
その中でもimfileは入力モジュールに分類されています。
以下にrsyslogで使用されているモジュールの分類を表にしました。


構成

前提条件

  • 本環境のディストリビューションはRHELで作成したものとする
  • SELinuxが無効化(Disabled)された環境で実施する
  • rsyslogのバージョンは8.2310.0を使用
  • 監視対象、出力先のファイルは本検証限定で作成したものとする

追加ディレクトリ、およびファイル

パス種別権限所有者用途
/testディレクトリ755root/root監視対象のローカルログファイル配置用
/test/test.logファイル644root/root監視対象のローカルログファイル
/var/log/imfile_test.logファイル644root/root出力先ファイル

構成図


rsyslogの検証用基本設定

rsyslogの設定ファイルである「/etc/rsyslog.conf」をテキストエディタで開き、設定を追加します。

設定値説明
module(load=”imfile”)

input(
type=”imfile”
File=”/test/test.log”
Tag=”TEST”
Severity=”info”
Facility=”local0″
)


*.info;mail.none;authpriv.none;cron.none;local0.none     /var/log/messages

local0.info /var/log/imfile_test.log
imfile モジュールを読み込む



File: 監視対象ファイルを指定
Tag: 取り込んだログへ付与するタグを指定
Severity: 取り込んだログのSeverityを info として設定
Facility: 取り込んだログのFacilityを local0 として設定


デフォルトのログ出力設定を維持しつつ、Facilityがlocal0の
ログは/var/log/messagesへの出力対象から除外する。

Facility が local0、Severity が info以上 のログを/var/log/imfile_test.log へ出力する
追加項目を赤字で記載

モジュール動作検証

ここまでで構成および設定が完了したため、監視対象ファイルへ書き込んだメッセージが、構成図の通りに出力先ファイルへ出力されるか確認します。

  1. 監視対象ファイルにメッセージを送信するために、日時情報を付与した以下のコマンドを実行します。
    echo “$(date ‘+%Y-%m-%d %H:%M:%S’) TEST” | sudo tee -a /test/test.log
    →コンソール画面に 2026-09-24 14:48:32 TEST と表示されます。

  2. 監視対象ファイルの中身を確認するために以下のコマンドを実行します。
    sudo cat /test/test.log
    →手順1で出力されたメッセージが監視対象のファイルの中に追記されていることを確認します。

  3. imfileによって取り込まれたログを確認するため、以下のコマンドを実行します。
    sudo cat /var/log/imfile_test.log
    →出力先ファイルの中に Sep 24 14:18:32 imfile-test-svr TEST 2026-09-24 14:48:32 TEST と表示されていることを確認します。

監視対象ファイルに書き込まれたメッセージが、imfileによって取り込まれて、出力先ファイルへログとして出力されることを確認しました。
以上により、imfileによる監視対象ファイルの監視およびログの取り込みが正常に動作したことも確認しました。


 Facility,Severity,Tagを指定しなかった場合どのようになるのか(検証用基本設定を基準とする)


  • Tag設定削除
    →rsyslogの構文チェックによりTagのパラメーターは必須項目というエラーが出力されました。
  • Facility設定を削除
    →rsyslogの構文チェックもエラーは出ず、検証用基本設定と同様の形のログが出力されました。
  • Severity設定を削除
    →rsyslogの構文チェックもエラーは出ず、検証用基本設定と同様の形のログが出力されました。

Tagは必須パラメータであり、未設定の場合はエラーとなることを確認できました。
一方、FacilityおよびSeverityは未設定でも動作することがわかりました。

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

必要なパラメータは確認することができました。
しかし、FacilityおよびSeverity
を未設定時の設定値はどうなっているのかを確認できていません。
そこで、template機能を利用して実際に適用される設定値を確認してみます。


追加設定

検証用基本設定の出力設定をコメントアウトし、ログ出力のフォーマットのテンプレートおよび新たな出力設定を追加します。

#ログ出力フォーマットを定義する。 

template(name=”FacilitySeverityTemplate” type=”string”
                 string=”%timegenerated% [%syslogfacility-text%] [%syslogseverity-text%] %msg%\n”)

#指定したテンプレートのフォーマットでログを出力する。

*.* /var/log/imfile_test.log;FacilitySeverityTemplate


設定値説明
name=”FacilitySeverityTemplate”FacilitySeverityTemplateというテンプレート名をつける
type=”string”文字列形式のテンプレートとして定義する
string=”%timegenerated% [%syslogfacility-text%] [%syslogseverity-text%] %msg%\n”)「日時 [Facility] [Severity] メッセージ」という形の文字列で出力する
  • Facility設定を削除
    →[local0] [info]の形で出力されました。
  • Severity設定を削除
    →[local0] [notice]の形で出力されました。
  • Facility,Severity設定を削除
    →[local0] [notice]の形で出力されました。

FacilityおよびSeverityを未指定とした場合、デフォルト値として[local0] [notice]が適用されることを確認しました。
また本検証の結果はrsyslogのドキュメントに記載されているデフォルト値と一致していました。

 Facility:https://docs.rsyslog.com/doc/reference/parameters/imfile-facility.html
 Severity:https://docs.rsyslog.com/doc/reference/parameters/imfile-severity.html

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

次に、local0.info以外のFacility・Severityに設定した場合の動作を検証してみます。
また、検証用基本設定の中のTag「TEST」付きログのみを出力対象とし、出力内容の違いを検証してみます。


  • Facilityを変更する
    どのFacilityを指定した場合でも検証用基本設定の場合と同様の形のログが出力されていました。
    また、rsyslogの設定ファイルにデフォルトで設定されている出力条件に一致する場合は、
    指定した出力先ファイル以外のファイルにも出力されることを確認しました。

    例)/etc/rsyslog.conf (検証用基本設定のままFacilityのみを変更した場合)
出力条件出力先
*.info/var/log/messages
authpriv.*/var/log/secure
mail.*-/var/log/maillog
cron.*/var/log/cron
local7.*  /var/log/boot.log
  • Severityを変更する
    どのSeverityを指定した場合でも検証用基本設定の場合と同様の形のログが出力されていました。
    ただし、「emerg」は最も重要度の高い Severity であり、rsyslog のデフォルト設定 「*.emerg :omusrmsg:*」に一致するため、
    出力先ファイルへのログ出力に加えてログイン中のユーザーへ通知メッセージが表示されました。
    Facilityの場合と同様にrsyslogの設定ファイルにデフォルトで設定されている出力条件に一致する場合は、
    指定した出力先ファイル以外のファイルにも出力される場合があります。

    例)/etc/rsyslog.conf (検証用基本設定のままSeverityのみを変更した場合)
出力条件出力先
*.info/var/log/messages
*.emerg使用ユーザのコンソール画面に出力

FacilityおよびSeverityを変更した場合でも正常にログ出力されることを確認しました。
ただし、rsyslog.confにデフォルトで設定されている出力条件に一致する場合、検証用の出力先以外にもログが出力されることがあります。
また、Severityをemergに設定した場合は、rsyslogのデフォルトによりログイン中のユーザーへ通知メッセージが表示されることを確認しました。


監視対象ファイルおよび出力先ファイルを複数設定した場合の動作確認 (検証用基本設定を基準とする)

追加ファイルおよび追加設定

  • 監視対象
    監視対象ファイルを複数設定した場合の動作を確認するため、検証用基本設定の input() の中に
    以下の設定を追加します。(赤字は追加したファイルおよび設定)

input(
    type=”imfile”
    File=
“/test/test2.log”
 Tag=“TEST2”  
    Severity=”info”
    Facility=”local0″
)


  • 出力先
    検証用基本設定の出力設定に以下の設定を追加します。(赤文字は追加ファイル)

*.info;mail.none;authpriv.none;cron.none;local0.none     /var/log/messages

local0.info /var/log/imfile_test.log

local0.info /var/log/imfile_test2.log 

構成図

  • 監視対象ファイルを2つ


  • 出力先ファイルを2つ


  • 監視対象ファイル2つ、出力先ファイルも2つ


  • 監視対象ファイルを2つにした場合
    どちらの監視対象ファイルにも検証用基本設定の場合と同様にの形でメッセージが出力されました。
    また、出力先ファイルにも監視対象ファイルのログが出力されていました。

  • 出力先ファイルを2つにした場合
    どちらの出力先にも監視対象ファイルからのログが出力されていました。

  • 監視対象ファイルと出力先ファイルを2つにした場合
    どちらの監視対象ファイルにも検証用基本設定の場合と同様にの形でメッセージが出力されました。
    また、どちらの出力先にも監視対象ファイルからのログが出力されました。

監視対象ファイルおよび出力先ファイルを複数設定した場合でも、正常にログの取得および出力が行えることを確認しました。
本検証で行った複数の監視対象ファイルのrsyslogの設定については以下のURLに記載があります。
https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-using_rsyslog_modules#s2-importing_text_files


監視対象ファイルを常時監視するのではなく、指定した間隔で監視することは可能なのか (検証用基本設定を基準とする)

連続して多くのメッセージが送られてくる環境では、監視間隔を指定することがあると考えられます。
監視頻度の多い環境では負荷がかかってしまうこともあると思います。

そのため、PollingIntervalによる監視間隔の制御が可能なのかを確認してみます。


構成図



初めにPollingIntervalを設定していない検証用基本設定の場合は、監視対象ファイルから出力ファイルまで、どういう動きをするのかを確認します。

検証方法

1秒間隔で時刻付きのメッセージを監視対象ファイルへ出力します。
その間、監視対象ファイルと出力先ファイルを別コンソール画面でリアルタイムで監視し、取り込まれるログの時間を確認します。

→それぞれのファイルを監視して、ほぼ同時間帯に出力していることを確認できました。
 次に「PollingInterval」を設定した場合は監視間隔を制御することができるのかを確認してみます。


追加設定


検証用基本設定に赤文字の部分の設定を追加します。
また、PollingIntervalによるログ取り込みタイミングを確認するため、日時とメッセージを出力するテンプレートを追加します。

#Pollingモードを指定し10秒間隔で監視を行う

module(
load=”imfile”
Mode=”polling”
PollingInterval=”10″

)

#モジュール設定と出力設定の間に追加する

template(
name=”PollingTemplate”
type=”string”
string=”%timestamp%| %msg%\n”
)



設定値説明
string=”%timestamp%| %msg%\n「日時 | メッセージ」の形式で出力する





→出力先ファイルに取り込まれたログにはそれぞれ設定値の10秒の間隔が空いて取り込まれていました。 

PollingInterval=”10″を設定した場合、監視対象ファイルへの書き込みは即時に取り込まれず、10秒間隔でまとめて取りこまれることを確認できました。そのため、PollingIntervalにより任意の監視間隔で制御できます。本検証のPollingIntervalについては以下のURLにも記載があります。
RHEL:https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-using_rsyslog_modules#s2-importing_text_files
rsyslog:https://docs.rsyslog.com/doc/reference/parameters/imfile-pollinginterval.html


検証まとめ

  • imfileモジュールによる監視対象ローカルファイルの監視、出力先ファイルにログを確認
  • パラメータのTagは必須
  • FacilityおよびSeverityは未設定でも動作し、デフォルト値としてlocal0.noticeが適用される
  • 他のFacilityおよびSeverityを変更してもモジュールは動作する
  • 監視対象ファイル、出力先ファイルは複数でも動作する
  • PollingIntervalを設定し監視間隔の制御ができる

おわりに

今回はimfileモジュールを利用したローカルファイルの取り込みについて検証を行いました。
今後は複数サーバがある状態での設定や紹介した他のモジュールの仕組みについても確認してみたいと思います。
また、本検証の内容は2026年8月時点での情報をもとに作成しております。
利用するOSやrsyslogのバージョンによって動作や設定方法が異なる可能性があるため、実施する際は最新の情報も併せて確認してみてください。

(この記事が参考になった人の数:1)
(↑参考になった場合はハートマークを押して評価お願いします)

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルクロステクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください