1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

syslogサーバ構築-rsyslog(RockyLinux)

1
Last updated at Posted at 2026-03-24

0.はじめに

次回の案件でRockyLinuxを使用することから備忘録として残します。
コマンド等に誤りがありましたらコメント等でご指摘いただけると幸いです…

今回は初級者の方にも共有したい内容のため実行結果までを含め、できるだけ丁寧に実践していきます。

1.環境

https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_3125253_66e5ca3d-2ccb-4b46-b9cb-ef1346242bb2.avif

・Proxmox VE 9.1 上で構築
・RockyLinux v8.10(syslogサーバ側 192.168.0.93/24 )
・RockyLinux v8.10(クライアント側 192.168.0.90/24 )

別の記事でNTP、NFSサーバについても記述していますので今回使用しない VM も記載されています。

また、この記事では何も構築されていない真っ白な状態であることが前提です。

2.syslog(rsyslog)とは?

外部サイトにはなってしまいますが、個人的にはこのサイトでの開設が一番わかりやすいと思いました。

・要点
syslogは、ネットワーク機器やサーバのログをUDP/TCPポート514でサーバへ送信し、集中管理するための標準プロトコル。
ログは発生元を示すFacilityと重要度を示すSeverity(emerg〜debug)で分類され、ログの管理や振り分けに利用される。

今回は上記のようなsyslogを複数機器から送信したものを「rsyslog」を利用してまとめて管理するサーバ、通称syslogサーバを構築いたします。

3.サーバ側の構築(rsyslog)

★全体の流れ

①rsyslogは起動している?
②rsyslog.conf の設定変更&反映
③ファイアウォールの穴あけ
④rsyslogへ設定の反映、再起動

3-1.syslogはインストール・起動している?

下記コマンドで確認してみましょう。

コマンド(インストール確認)
# rpm -qa | grep rsyslog
結果(インストール確認)
rsyslog-gssapi-8.2102.0-15.el8_10.1.x86_64
rsyslog-relp-8.2102.0-15.el8_10.1.x86_64
rsyslog-8.2102.0-15.el8_10.1.x86_64
rsyslog-gnutls-8.2102.0-15.el8_10.1.x86_64
コマンド(起動確認1)
# ps aux | grep syslog
結果(起動確認1)
avahi        772  0.0  0.2  61964  4976 ?        Ss   01:38   0:00 avahi-daemon: running [syslog.local]
dbus         774  0.1  0.3  61420  7060 ?        Ss   01:38   0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root        1147  0.0  0.4 218696  7768 ?        Ssl  01:38   0:00 /usr/sbin/rsyslogd -n
gdm         1363  0.0  0.2  59792  4644 ?        Ss   01:38   0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
kame        2124  0.0  0.2  59792  4544 ?        Ss   01:38   0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root        2205  0.0  0.0 222012  1036 pts/0    R+   01:41   0:00 grep --color=auto syslog
コマンド(起動確認2)
# systemctl status rsyslog.service
結果(起動確認2)
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2026-03-09 01:38:21 EDT; 5min ago
     Docs: man:rsyslogd(8)
           https://www.rsyslog.com/doc/
 Main PID: 1147 (rsyslogd)
    Tasks: 3 (limit: 11017)
   Memory: 5.1M
   CGroup: /system.slice/rsyslog.service
           mq1147 /usr/sbin/rsyslogd -n

Mar 09 01:38:21 syslog systemd[1]: Starting System Logging Service...
Mar 09 01:38:21 syslog rsyslogd[1147]: [origin software="rsyslogd" swVersion="8.2102.0-15.el8>
Mar 09 01:38:21 syslog systemd[1]: Started System Logging Service.
Mar 09 01:38:21 syslog rsyslogd[1147]: imjournal: journal files changed, reloading...  [v8.21>

通常rsyslogはデフォルトでインストール・起動しています。
私の環境ではインストールされており、起動していました。

起動している場合は新規でインストール不要となります。
※ディストリビューションやバージョンの違いによってインストールが必要な場合や、rsyslogの挙動について知りたい方は下記のQiitaの記事を見ていただいた方がわかりやすいと思います。
AlmaLinuxにrsyslogをインストールする

3-2.rsyslog.conf の設定変更&反映

/etc/rsyslog.conf のデフォルト設定を退避します。

コマンド
# cp /etc/rsyslog.conf /etc/rsyslog.conf.org

/etc/rsyslog.conf の設定変更を行っていきます。
各パラメータについては変更内容の後に記述しています。

コマンド
# vi /etc/rsyslog.conf

Syslogを受信する設定のパラメータです。
利用環境に合わせてTCP、UDPの有効化を行います。
また、受信するホストごとにディレクトリを自動作成するように追記。

変更内容(変更した箇所)
ーーーー有効化した項目(通信方法TCP、UDPの選択)ーーーー
module(load="imudp") # needs to be done just once
input(type="imudp" port="514") 

module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")





ーーーー#### GLOBAL DIRECTIVES #### 内に追記ーーーー
# ---ここから追記---
# リモートログ用ディレクトリの自動作成
$CreateDirs on

# ホストごとにログ保存するテンプレート
template(name="RemoteLogs" type="string" string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")


# /etc/rsyslog.d 読み込み
include(file="/etc/rsyslog.d/*.conf" mode="optional")




ーーーー#### RULES #### 内に追記ーーーー
# リモートログ保存(ホストごと)
*.* ?RemoteLogs

また、設定パラメータの全体は ↓ こちらになります。

設定全体像(開いてみる)
/etc/rsyslog.conf 設定パラメータ全体

# rsyslog configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

module(load="imuxsock"    # provides support for local system logging (e.g. via logger command)
       SysSock.Use="off") # Turn off message reception via local log socket;
                          # local messages are retrieved through imjournal now.
module(load="imjournal"             # provides access to the systemd journal
       UsePid="system" # PID nummber is retrieved as the ID of the process the journal entry originates from
       StateFile="imjournal.state") # File to store the position in the journal
#module(load="imklog") # reads kernel messages (the same are read from journald)
#module(load="immark") # provides --MARK-- message capability

# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")

#### GLOBAL DIRECTIVES ####

# Where to place auxiliary files
# rsyslogの作業ディレクトリ
global(workDirectory="/var/lib/rsyslog")

# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")

# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")

# ---ここから追記---
# リモートログ用ディレクトリの自動作成
$CreateDirs on

# ホストごとにログ保存するテンプレート
template(name="RemoteLogs" type="string" string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")


# /etc/rsyslog.d 読み込み
include(file="/etc/rsyslog.d/*.conf" mode="optional")








#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# リモートログ保存(ホストごと)
*.* ?RemoteLogs

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log


# ### sample forwarding rule ###
#action(type="omfwd"
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#queue.filename="fwdRule1"       # unique name prefix for spool files
#queue.maxdiskspace="1g"         # 1gb space limit (use as much as possible)
#queue.saveonshutdown="on"       # save messages to disk on shutdown
#queue.type="LinkedList"         # run asynchronously
#action.resumeRetryCount="-1"    # infinite retries if host is down
# Remote Logging (we use TCP for reliable delivery)
# remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
#Target="remote_host" Port="XXX" Protocol="tcp")


3-3.ファイアウォールの穴あけ

ファイアウォールの穴あけ作業になります。
/etc/rsyslog.conf で有効化した通信方法を許可します。
TCP、UDPどちらも書きますので使用される方を解放してください。
今回は実験的にどちらも開けております。

コマンド
firewall-cmd  --add-port=514/udp  --permanent
firewall-cmd  --add-port=514/tcp  --permanent
firewall-cmd --reload

開けれたか確認します。

コマンド
# firewall-cmd --list-all
結果
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens18
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 514/udp 514/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

ssコマンドでも確認してみます。

ssコマンドでの確認
ss -tuln | grep 514
結果
udp   UNCONN 0      0             0.0.0.0:514        0.0.0.0:*
udp   UNCONN 0      0                [::]:514           [::]:*
tcp   LISTEN 0      25            0.0.0.0:514        0.0.0.0:*
tcp   LISTEN 0      25               [::]:514           [::]:*

ポートが開かれていることが確認できました。

3-4.rsyslogへ設定の反映、再起動

rsyslogを再起動して設定を反映しましょう。

コマンド
systemctl restart rsyslog.service
systemctl status rsyslog.service

これでsyslogサーバ側の設定はいったん完了になります。

一旦ここでディレクトリ構造の確認。

/etc/rsyslog.conf に設定した保存先について確認します。
理解している方は読み飛ばしていただいて問題ありません。

global(workDirectory="/var/lib/rsyslog")

rsyslogが動作中に使用する作業用ディレクトリを指定します。
メッセージのキュー(一時保存)ファイルや、ログの読み取り位置を記録するステートファイルなどがここに保存されます。
あらかじめディレクトリが存在している必要があり、適切に設定することでデータの損失を防ぎます。

$CreateDirs on

ログを出力する際に、指定した保存先のディレクトリが存在しない場合に自動生成する設定です。
後述のテンプレートなどで動的にフォルダ名を分ける場合、これがないと書き込みエラーになるため必須となります。
デフォルトは off なので、ホスト別などにログを振り分ける際は明示的に on にします。

template(name="RemoteLogs" type="string" string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")

受信したログをどのパスにどのようなファイル名で保存するかを定義する雛形です。
この設定では %HOSTNAME%(送信元ホスト名)や %PROGRAMNAME%(プログラム名)を変数として利用しています。
これにより、/var/log/remote/サーバーA/sshd.log のように、送信元ごとに整理されたログ管理が可能になります。

include(file="/etc/rsyslog.d/*.conf" mode="optional")

/etc/rsyslog.d/ ディレクトリ内にある設定ファイルを読み込むための記述です。
メインの rsyslog.conf を汚さずに、アプリケーションごとの個別設定を別ファイルで管理できるようになります。
mode="optional" を指定することで、ディレクトリが空だったりファイルが無くてもエラーを出さずに起動します。

今回のログの保存構造例(1.環境 図にあった今回のラボ)
/var/log/remote/

 ├ client
 │  ├ sshd.log
 │  ├ cron.log
 │  └ systemd.log
 │
 ├ nfs
 │  ├ rpcbind.log
 │  └ nfsd.log
 │
 └ ntp
    └ chronyd.log

上記は今回の私のラボ環境になるので例としてイメージしていただければ幸いです。

4.クライアント側の構築

4-1.rsyslog.conf の編集

送信するサーバの情報、1文のみの追記になります。
TCP、UDPで記述する内容が異なります。

コマンド
vi /etc/rsyslog.conf

私は、#### MODULES #### 内の最下部に追記しました。

/etc/rsyslog.conf
ーーーー(TCPの場合)ーーーー
*.* @192.168.0.93:514


ーーーー(UDPの場合)ーーーー
*.* @@192.168.0.93:514

送信先サーバーの設定を記入できたらrsyslogを再起動します。

コマンド
systemctl restart rsyslog.service
systemctl status  rsyslog.service

再起動したことを確認しましょう。

4-2.ログをsyslogサーバに送ってみる。

syslogサーバーにテストとしてログを送信してみます。

コマンド(クライアント側)
logger "test syslog from client"

syslogサーバーでログを受信できているか確認してみます。

※ 今回は192.168.0.90 ホスト名:cliantから送信しています。
  

サーバー側の操作になります。

コマンド(サーバー側)
~スペースの都合上結果とコマンドを同時に書きます~

# ls -l /var/log/remote/
total 0
drwx------ 2 root root 114 Mar 23 21:57 cliant
drwx------ 2 root root 216 Mar 23 20:31 syslog

※ cliantのディレクトリが作成されたことを確認

# ls -l /var/log/remote/cliant/
total 40
-rw------- 1 root root   61 Mar 23 23:06 root.log

※ 今回はrootユーザで実行したため root.log が対象になります。




# cat  /var/log/remote/cliant/root.log

Mar 24 12:06:03 cliant root[261742]: test syslog from client

※クライアントで実行したloggerコマンドの内容がサーバ側で確認できました!


これで終わりになります。

5.さいごに

sysslogサーバはどこの現場でも利用されるので覚えていて損はないと思います。

rsyslog.conf には特定のログだけ送るようにする設定値などもあるのでその辺の確認を今度はしたいと思います。

# 認証ログだけ送信
authpriv.* @@192.168.0.93:514
# cronだけ
cron.* @@192.168.0.93:514

実は書いてる途中に体調を崩したり、実家に行ったりで、10日以上空いてしまったため書きっぷりがちぐはぐだと思います。

とりあえず自分の備忘としても書ききりたかったので、投げやり感はありますが一応これで終わりにしたいと思います。

読んでいただき、ありがとうございました。
不明点や、誤りがあればコメントしていただけると幸いです…

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?