VLT-SYSLOGD

Veltrea Syslog Server / v0.4.0

syslog の日本語が、化けない

受信した 1 通ごとに文字コードを判定して復号します。 Shift_JIS の機器と UTF-8 の機器が同じポートに混ざっていても、 どちらもそのまま読めます。インストール不要の単一ファイル。

v0.4.0 をダウンロード マニュアル Windows / macOS / Linux (x86_64)
Rust 製・MIT License
RECEIVING 0.0.0.0:514 / UDP RX 0000
1通ごとに判定
5符号化の決め方
8重大度
3動作形態
0インストール

1 通ずつ、根拠を示して復号する

通信全体で 1 つの文字コードを決め打ちしません。判定に使った根拠は Enc 欄にそのまま出るので、表示を信じてよいかどうかを 利用者の側で確かめられます。

受信例 / RFC 3164 / 本文 UTF-8

届いたバイト列 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 を流して撮影したものです。

Portable — ログ一覧 Enc 欄には UTF-8Shift_JISShift_JIS (MSG-SD/BOM-Missing) が同じ画面に混ざっています。すべて別々の送信元・別々の形式で 届いたものです。 原寸で開く
環境設定 待ち受けポートとログの保存先だけの、二項目の設定です。 514 が既に使われている環境では、ここで別のポートに変えられます。 起動時の bind の成否は、ログ一覧の 1 行目にそのまま出ます。 全体を開く
Console — 常駐 Server に接続中 緑の「● 受信中」は配信チャネルが繋がっている状態です。 サービスの開始 / 停止 / 再起動もここから行えます(この画面は サービス登録せずエンジンを直接起動しているため、サービス状態は 「未インストール」と出ています)。 原寸で開く

入手して動かす

最新は v0.4.0。用途に合うものだけ落としてください。

  1. 展開して起動する

    Portable はインストール不要です。展開して vlt-syslogd-portable.exe をダブルクリック。 SmartScreen が出たら「詳細情報」→「実行」。

  2. 1 行目で待ち受けを確かめる

    Listening on 0.0.0.0:514 (UDP) と出れば成功です。失敗していればその旨が出るので、環境設定で 1024 番以上のポートに変えます。

  3. 試しに 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 の順に 確かめてください。