RHEL9でSYSLOGサーバを構築

Linux
スポンサーリンク
スポンサーリンク

はじめに

RHEL9でsyslogサーバを検証用途で構築したい場合の手順を載せておきます。

適宜、設定ファイルの解説も行っております。勉強用途にもお使いください。

インストール済みなのか確認

次のコマンドで確認できます。

rsyslogd -v

rsyslogのインストール

rsyslogパッケージをインストールします。

dnf install rsyslog -y

起動の確認と有効化

次のコマンドを流し込んでください。

systemctl is-enabled rsyslog
systemctl enable rsyslog
systemctl start rsyslog
systemctl status rsyslog

設定ファイルの解説

設定ファイルは/etc/rsyslog.confとなります。設定ファイルの確認と解説を行います。

青色は説明となります。

# 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

#### GLOBAL DIRECTIVES ####
### ワークディレクトリの指定
# Where to place auxiliary files
global(workDirectory="/var/lib/rsyslog")

### ログのタイムスタンプ形式の指定
# Use default timestamp format
#module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
→ "OCT 10 09:01:01" のような形式で出力される。
module(load="builtin:omfile" Template="RSYSLOG_FileFormat")
→ "2018-10-10T10:37:53.063083+09:00" のような形式で出力される。

### 個別ファイルの読み取り先を指定。
# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")

#Template
template(name="DynaFile" type="string" string="/var/log/%HOSTNAME%/%$year%-%$month%-%$day%.log")
*.* action(type="omfile" dynaFile="DynaFile")

#### MODULES ####
### 旧来のunix socket file経由(systemd)のログ受信を有効にする
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.
### 現行のjournald経由のログ受信を有効にする
module(load="imjournal"             # provides access to the systemd journal
       StateFile="imjournal.state") # File to store the position in the journal
### ファシリティkernを受信する。imjournalで受信しているため無効となっている。
#module(load="imklog") # reads kernel messages (the same are read from journald)
### rsyslogが動作していることを示す rsyslogd:-- MARK --20分毎に発報(/var/log/messages)。無効で良い。
#module(load="immark") # provides --MARK-- message capability


### UDPでログを受信する
# 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")


### TCPでログを受信する
# 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")


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

# 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
ファシリティに関係なく重要度がinfo、且つファシリティがmailでもauthprivでもcronでもないものは、/var/log/messageへログを格納する
# 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:*
### ユーザコンソールにログメッセージを出すOutput Moduleomusrmsg

# 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

### 別のサーバにログを転送する際の設定。コメントは全てTCPで転送する場合のパラメータ。
# ### 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.
### 転送先サーバが停止している場合のキューファイル名を指定。ディレクトリは$WorkDirectoryを使用。
#queue.filename="fwdRule1"       # unique name prefix for spool files
### 転送先サーバが停止している場合のキューファイルサイズ。
#queue.maxdiskspace="1g"         # 1gb space limit (use as much as possible)
### 転送先サーバが停止している場合にshutdown状態のディスクに保存する。
#queue.saveonshutdown="on"       # save messages to disk on shutdown
### 転送先サーバが転送している場合のキュータイプを選択。
#queue.type="LinkedList"         # run asynchronously
### 転送先サーバが停止している場合のリトライ。0でリトライ。-1で無効。
#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")

設定ファイルの修正

設定ファイルの解説を見ながら必要に応じてコメントアウトを外したり、パラメータを修正してください。

vi /etc/rsyslog.conf

構文の確認

設定ファイルの構文の妥当性は次のコマンドで確認可能です。

rsyslogd -N 1

設定の反映

rsyslogを再起動します。

systemctl restart rsyslog

ログ受信レートの設定

ログの受信レートを調整することができます。必要に応じて修正してください。

vi /etc/systemd/journald.conf
ーーーーーーーーーーーーーーーー
[Journal]
RateLimitIntervalSec=30s
RateLimitBurst=10000
ーーーーーーーーーーーーーーーーー

systemd-journaldを再起動します。

systemctl restart systemd-journald

firewallの許可

RHEL9ではiptablesではなくfirewalldが採用されています。次のコマンドを流し込んでください。

firewall-cmd --state
systemctl start firewalld
firewall-cmd --list-all | grep port
firewall-cmd --add-port=514/udp --permanent
firewall-cmd --add-port=514/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all | grep port

rsyslogサーバのサービスポートの確認

設定ファイルでTCP、UDPの両方で514ポートを許可した場合、次のコマンドでポートがリッスンになっていることを確認します。

ss -anu | grep 514
ss -atnu | grep 514

TCPを使用している場合、syslogサーバとコネクションが張られているか次のコマンドで確認可能です。

 ss -t

ログの確認

主要なログは/var/log/配下に格納されています。

次のように確認可能です。最後に生成されたログから10番目までを表示しています。

cat /var/log/messages | tail -n 10

ログの生成

ログ自体はloggerコマンドを使用すれば簡単に生成されます。

logger -p daemon.crit rsyslog test log

構文:logger -p ファシリティ.シビアリティ ログ本文

ログの管理について

こちらを参照ください。

【図解/CentOS】rsyslogの仕組みと.confの設定例 〜template, property, ruleフィルタの種類〜
rsyslog の仕組み rsyslog とは、ローカルおよびリモートサーバのログを管理するデーモンです。 CentOS では rsyslog は最小構成 (minimal) でも標準インストールされていますが、ログのフローはやや複雑です。

説明を流用すると

まず、ローカルのログ管理は journald (systemd-journald)というデーモンがメインで行っています。なのでローカルで生成されたログは /dev/log (unix socket file) 経由で systemd-journald が受信し、/run/log/journal 配下のデータベースに保管されます。(/run は tempfs なので再起動などのタイミングで消えてしまいます。)

とのことです。試しに確認してみましょう。

[root@RHEL9 ~]# ll /dev/log
lrwxrwxrwx. 1 root root 28 9月 15 17:14 /dev/log -> /run/systemd/journal/dev-log
[root@RHEL9 ~]# ll /run/systemd/journal/dev-log
srw-rw-rw-. 1 root root 0 9月 15 17:14 /run/systemd/journal/dev-log

ソケットであることが確認できました。

[root@RHEL9 ~]# ll /run/log/journal
合計 0
drwxr-s---+ 2 root systemd-journal 60 9月 15 17:14 719de3ae57cd48c6bef510be05f7a33b
cat /run/log/journal/719de3ae57cd48c6bef510be05f7a33b/system.journal
→バイナリファイルなので確認不可。

一応、/runがtmpfsにマウントされていることを確認します。

[root@RHEL9 ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 3.1G 9.7M 3.1G 1% /run
/dev/mapper/rhel-root 61G 7.7G 54G 13% /
/dev/nvme0n1p2 1014M 290M 725M 29% /boot
/dev/mapper/rhel-home 30G 249M 30G 1% /home
/dev/nvme0n1p1 599M 7.0M 592M 2% /boot/efi
tmpfs 1.6G 52K 1.6G 1% /run/user/42
tmpfs 1.6G 36K 1.6G 1% /run/user/0

参考

【図解/CentOS】rsyslogの仕組みと.confの設定例 〜template, property, ruleフィルタの種類〜
rsyslog の仕組み rsyslog とは、ローカルおよびリモートサーバのログを管理するデーモンです。 CentOS では rsyslog は最小構成 (minimal) でも標準インストールされていますが、ログのフローはやや複雑です。
CentOS7【rsyslog】で受信できない/出力できない場合の確認事項
rsyslog で受信しているはずのログがうまく転送されないときの確認項目を洗い出してみました。 サーバ側で tcp/udp 514 を Listen しているか? ss -nltu で 514 ポートを開放しているか確認しましょう。 #
Syslogサーバーのセットアップガイド:インストールから初期設定
Syslogはネットワークデバイスやサーバーからログデータを集約し管理するための標準プロトコルです。この記事ではSyslogサーバーのインストール方法から基本的な設定、そして実用的な運用のコツまでをわかりやすく解説します。これによりシステム...
rsyslog を使用してシスログサーバを構築する方法
以前 Syslog について以下のような記事を書きました。Syslog とはこんなやつだよーという記事です。 今回はそれの続き、Linux に焦点を絞って syslog について解説し、rsyslog の具体的な構築手順 ...
CentOS/RHEL 8 で Rsyslog を使用して集中ログ サーバーをセットアップする
rsyslogの設定 - Qiita
rsyslogは、ご存じの通りシスログなどをサーバーに出力するためのサービスですが、NW機器など他の機器のシスログを受信することも可能です。今回は、その設定方法について紹介します。まずは要件を以…
rsyslog(/etc/rsyslog.conf)のデフォルト内容読解(Cent7.7) - Qiita
rsyslogの/etc/rsyslog.confのデフォルト状態について読み解いてみました。公式URL等なども併せて載せていますので原文が気になる方はそちらも確認ください。■環境CentO…
多機能なログ管理システム「rsyslog」の基本的な設定 | さくらのナレッジ
多くのLinuxディストリビューションで採用されているsyslogサービス「rsyslog」は現在でも活発に開発が進められており、ネットワーク経由でのログ転送だけでなくログの整形や柔軟な条件分岐、さまざまなデータベースへ
Linuxのポート状況を確認する
Linuxのポート状況を確認する Linuxのポート状況を確認する Linuxのポート確認には、lsof、ss、netstat、nmap等、 得たい情報やLinuxの状況によって、 様々なコマンドを利用して確認する方法があります。 そんなL...
【初心者から上級まで】Linuxの権限(パーミッション)総まとめ - Qiita
パーミッションとはPermissionは英語で「許可」を表す。Linux用語としてのパーミッションも同じ意味であるが、実際に使ってみないとその意義や役割が分からない。それは本稿の中で挟む「演習」を…

コメント