Veltrea Syslog Server / v0.4.0
syslog の日本語が、化けない。
受信した 1 通ごとに文字コードを判定して復号します。 Shift_JIS の機器と UTF-8 の機器が同じポートに混ざっていても、 どちらもそのまま読めます。インストール不要の単一ファイル。
1 通ずつ、根拠を示して復号する
通信全体で 1 つの文字コードを決め打ちしません。判定に使った根拠は Enc 欄にそのまま出るので、表示を信じてよいかどうかを 利用者の側で確かめられます。
届いたバイト列 3c 31 33 32 3e 61 75 74 68 3a 20 e8 aa 8d e8 a8 bc e3 81 ab e5 a4 b1 e6 95 97 e3 81 97 e3 81 be e3 81 97 e3 81 9f 3a 20 …
符号化を1つに決め打ちした受信側 <132>auth: 隱崎ィシ縺ォ螟ア謨励@縺セ縺励◆: 繝ヲ繝シ繧カ繝シ admin
vlt-syslogd の表示 認証に失敗しました: ユーザー admin (3 回目)Enc: UTF-8
- UTF-8 / Shift_JIS
- RFC 3164 などで届いたものを、バイト列から判定して復号した。
- Shift_JIS (MSG-SD/BOM-Missing)
-
RFC 5424 の構造化データが
charset="Shift_JIS"と宣言していたので、それに従った。BOM は付いていなかった。 - UTF-8 (MSG-UTF8/BOM)
- 宣言は無かったが BOM があったので UTF-8 として読んだ。
- UTF-8 (Implicit)
- 宣言も BOM も無く、UTF-8 として妥当だったのでそう解釈した。
- Shift_JIS (Guess)
- 手掛かりが無く、バイト列から推定した。ここだけは推測。
元のバイト列は捨てずに持っているので、行を右クリックして Copy as Hex で取り出せます。表示がおかしいと思ったとき、 送信側とこちらのどちらの問題かを切り分けられます。
同じエンジンを、三つの形で
syslog を読む部分は同じ実装で、動かし方だけが違います。 迷ったら Portable から。
Portable
vlt-syslogd-portable
自分で UDP を待ち受ける単体の GUI。ダブルクリックで起動し、 その場で受信が始まります。インストールもサービス登録も要りません。
- Bind
- 514/udp
- Priv
- なし(Windows)
- Resident
- no
Server
vlt-syslogd-srv
画面を持たない常駐エンジン。Windows サービス / launchd / systemd として OS の起動と同時に受信を始め、ファイルへ書き出します。
- Bind
- 514/udp
- Stream
- 5141/tcp
- Ctrl
- 5142/tcp
- Resident
- yes
Console
vlt-syslogd-console
常駐している Server に TCP で繋いで見る GUI。閉じても受信は 止まりません。サービスの開始・停止もここから。
- Link
- 127.0.0.1:5141
- Ctrl
- 127.0.0.1:5142
- Resident
- no
配信 (5141) と制御 (5142) は既定でループバック限定、かつ共有トークンで 保護されています。詳しくはマニュアルのネットワークの節へ。
実機の画面
v0.4.0 の Windows 版配布バイナリを Windows 11 上で動かし、 UTF-8 と Shift_JIS を混ぜた syslog を流して撮影したものです。
UTF-8・Shift_JIS・Shift_JIS (MSG-SD/BOM-Missing)
が同じ画面に混ざっています。すべて別々の送信元・別々の形式で
届いたものです。
原寸で開く
入手して動かす
最新は v0.4.0。用途に合うものだけ落としてください。
| OS | 形 | ファイル |
|---|---|---|
| Windows | Portable |
vlt-syslogd-portable-windows-v0.4.0.zip
|
| Windows | Server + Console |
vlt-syslogd-srv-windows-v0.4.0.zipvlt-syslogd-console-windows-v0.4.0.zip
|
| macOS | Portable |
vlt-syslogd-macos-portable-v0.4.0.dmg
|
| macOS | App |
vlt-syslogd-macos-app-v0.4.0.dmg
|
| Linux | Portable(単一 ELF) |
vlt-syslogd-linux-x86_64-portable-v0.4.0
|
-
展開して起動する
Portable はインストール不要です。展開して
vlt-syslogd-portable.exeをダブルクリック。 SmartScreen が出たら「詳細情報」→「実行」。 -
1 行目で待ち受けを確かめる
Listening on 0.0.0.0:514 (UDP)と出れば成功です。失敗していればその旨が出るので、環境設定で 1024 番以上のポートに変えます。 -
試しに 1 通投げる
行が増えれば完了です。
$u = New-Object System.Net.Sockets.UdpClient $b = [Text.Encoding]::UTF8.GetBytes('<132>auth: 認証に失敗しました') $u.Send($b, $b.Length, '127.0.0.1', 514) | Out-Null; $u.Close()常駐させたい、別の機器から受けたい、という先は マニュアルにあります。
先に言っておくこと
macOS / Linux の 514 番は特権ポート
0〜1023 番は root でないと bind できません。macOS(Mojave 以降)は
0.0.0.0:514 なら root 不要ですが、
127.0.0.1:514 のように特定のインターフェースを
指定すると root が要ります。Linux では root か
CAP_NET_BIND_SERVICE が必要です。
macOS 版は ad-hoc 署名(公証なし)
Apple Developer 登録をしていないため、初回起動で Gatekeeper に
止められます。右クリック →「開く」を一度行うか、
xattr -dr com.apple.quarantine で隔離属性を
外してください。
「サービス稼働中」は「ポート到達可能」ではない
Server が動いていても、ファイアウォールが UDP 514 を塞いでいれば
リモート機器のログは 1 通も届きません。受信できないときは
bind_addr、ファイアウォール、送信側の宛先 IP の順に
確かめてください。