##目次
- はじめに
- 構成
- Linux側の設定
- Windows側設定
- 受信確認
- 参考サイト
##はじめに
セールでファンレスの小さいPCを買いました。嬉しいことにLANポートが2つあるベアボーンです。
4コアと言えども10Wの組み込みCeleronなので能力は大したことないですが、
ESXiをインストールしました。
無理せずできる範囲で遊んでみようかと思います。
今回はLinuxのrsyslogを使って、普段使っているWindows10からメッセージを収集する方法を考えます。
##構成
今回はSyslogサーバーとして、ESXi6.7上にCentOS8.2(64bit)をインストール
仮想マシンのスペック
CPU:2コア
メモリ:2048MB
DISK:20GB
##Linux側の設定
まずは/etc/hostsにデスクトップPCを記述
# cat /etc/hosts
192.168.11.40 desktoppc
続いてrsyslogがインストールされていることを確認します。
# dnf list rsyslog
インストール済みパッケージ
rsyslog.x86_64 8.1911.0-3.el8
インストールされていない場合はインストールします。
# dnf install rsyslog
続いて、/etc/rsyslog.conf の内容を変更します。
コメントアウトを外すことでメッセージの受信が可能になります。
/var/log/rsyslog 配下に各ホスト名(or IPアドレス)毎に受信したメッセージを月ごとに分けて書き込む設定です。
# vi rsyslog.conf
# 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") #←文頭コメントアウト外す
~~~~~~
略
~~~~~~
#ファイル末尾に追記
$template ClinetMessage,"/var/log/rsyslog/%fromhost%/%$year%%$month%_messages.log"
*.* -?ClinetMessage
rsyslogサービスの再起動
# systemctl restart rsyslog.service
これでCentOSの設定は完了。
##Windowsの設定
続いてWindows側の設定。
Windows単体でのログ送信機能はないので、NXlogというソフトウェアをインストールします。
https://nxlog.co/products/nxlog-community-edition/download
こちらからwindows用の"nxlog-ce-2.10.2150.msi"をダウンロードしてインストール。
インストールにカスタムオプションは特になく、インストール先のみを指定しインストールできます。
何も変更なくインストールした場合、C:\Program Files (x86)\nxlog\confに"nxlog.conf"という設定ファイルがあります。
nxlog.confの記述
Panic Soft
#NoFreeOnExit TRUE
define ROOT C:\Program Files (x86)\nxlog
define CERTDIR %ROOT%\cert
define CONFDIR %ROOT%\conf
define LOGDIR %ROOT%\data
define LOGFILE %LOGDIR%\nxlog.log
LogFile %LOGFILE%
Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
<Extension _syslog>
Module xm_syslog
</Extension>
<Extension _charconv>
Module xm_charconv
AutodetectCharsets iso8859-2, utf-8, utf-16, utf-32, shift_jis
</Extension>
<Extension json>
Module xm_json
</Extension>
<Input in>
Module im_msvistalog
Query <QueryList>\
<Query Id="0">\
<Select Path="Application">*[System[(Level=1 or Level=2 or Level=3)]]</Select>\
<Select Path="System">*[System[(Level=1 or Level=2 or Level=3)]]</Select>\
<Select Path="Security">*[System[(Level=1 or Level=2 or Level=3)]]</Select>\
</Query>\
</QueryList>
Exec $raw_event = "json=" + to_json(); $SyslogFacilityValue = 21;
Exec convert_fields("utf-8", "utf-8");
</Input>
<Processor t>
Module pm_transformer
OutputFormat syslog_bsd
Exec $Message=(": "+$raw_event);
</Processor>
<Output out>
Module om_udp
Host 192.168.11.60
Port 514
</Output>
<Route r>
Path in => t => out
</Route>
メッセージのレベルは
1:クリティカル
2:エラー
3:警告
4:情報
となっているので、好きな範囲で記述を変更します。
タスクマネージャーからnxlogのサービスを起動させる。
Windows起動時にサービスが自動起動することも念のため確認しておきます。
##受信確認
# cd /var/log/rsyslog
# ls -l
合計 0
drwx------. 2 root root 33 12月 6 21:43 desktoppc
drwx------. 2 root root 33 12月 6 20:16 syslogsvr
# cd desktoppc
# ls -l
合計 44
-rw-------. 1 root root 44137 12月 6 21:53 202012_messages.log
メッセージが受信できました。
もし、突然PCがクラッシュしてしまったときに手掛かりが見つかるかもしれません。
##参考サイト
CentOS8 を Syslog サーバにして他機器からのメッセージを受信出来るようにする
【Windows】イベントログをLinuxに転送する