Windows ネイティブな OSS syslog 集約サーバ
注意: v0.5.0 alpha — v0.1〜v0.4 の 18 仕様 + 4 ADR (+ 2 ADR amendment) に加え、v0.5 で 3 仕様 + 1 仕様 amendment + 2 ADR を追加実装 (SPEC-020 TLS syslog 受信 / SPEC-021 Web UI AD 連携認証 / SPEC-022 検索 UX 拡張 / SPEC-015 amendment SMTP-AUTH+STARTTLS / ADR-0010 v0.5 セキュリティモデル [ADR-0006 supersede] / ADR-0011 v0.6+ ロードマップ整理)。TLS 受信 + AD 連携認証 + SMTP-AUTH/STARTTLS + 検索 UX 拡張 をテーマに、Yagura を「信頼 NW 前提 default 継続だが、必要な経路だけ opt-in で TLS / AD / STARTTLS を有効化できる + Windows EventLog Viewer 慣習に倣う検索 UX」へ拡張。SmartScreen 警告 (未署名、v0.7 で SPEC 化予定) と本番運用前の手動検証は残るため、本番環境での利用は事前検証 + 信頼ネットワーク (LAN / VLAN 分離) 配下 + 必要なら TLS / AD 認証 / SMTP-AUTH+STARTTLS の opt-in 有効化を推奨。詳細は CHANGELOG.md 参照。
Yagura は、Windows 環境向けの OSS syslog 集約サーバです。各種サーバやネットワーク機器から syslog プロトコルで送信されるログメッセージを受信し、Microsoft SQL Server に保存して、Web ブラウザから検索・閲覧できる構造を目指しています。Windows 管理者が既に保有するスキル (SQL Server 運用、Active Directory 認証等) を活かしながら導入・運用できることを設計の主軸としています。
Windows 環境で syslog を集約しようとすると、現状の選択肢は限定的です。
- 商用製品 (SolarWinds Kiwi Syslog Server、Adiscon WinSyslog 等) は機能的には充実しているが、永続的なライセンス費用がかかる
- OSS の Linux ベース集約サーバ (Graylog、ELK Stack 等) は高機能だが、Windows shop に Linux VM の運用負荷を強いる
- 既存の OSS Windows ネイティブ製品は、機能・メンテ状況の両面で不十分
「Windows サーバに直接インストールでき、SQL Server に保存し、ブラウザから閲覧でき、商用ライセンス不要」という空白地帯を埋めるのが Yagura の目的です。
- Windows サーバ環境でログ集約を始めたい中小企業の IT 管理者
- 商用 syslog サーバの永続ライセンスを避けたいが、Linux VM の運用も避けたい組織
- SQL Server の運用ノウハウを既に保有している組織
- 閉域・社内環境で動作する syslog サーバを必要とする組織
| バージョン | 機能 |
|---|---|
| v0.1 | UDP/TCP 受信 (RFC 3164/5424 auto-detect parse 含む)、SQL Server 保存、最小 Web UI、Windows サービス化 |
| v0.2 | セットアップ UX (init-db / suggested-db-setup) + observability (UDP drop) + retention CLI + Web UI CSV エクスポート + Web UI Facility filter |
| v0.3 | ダッシュボード、保存検索、全文検索性能改善 (FULLTEXT INDEX 評価) |
| v0.4 | メール通知・アラート |
| v0.5 (実装済) | TLS 受信、AD 連携認証 (Kerberos / NTLM)、SMTP-AUTH/STARTTLS、検索 UX 拡張 (narrowing 閾値撤廃 + cap 50k + projection 切り出し) |
| v0.6 (ADR-0011 で scope 確定) | DB 抽象化レイヤ (PostgreSQL / MySQL 対応) + 信頼性 3 件 (DB 切断時 local spool / per-source rate limit / throughput ベンチ) + 設定保持改善 (MSI sample appsettings + Yagura.exe config init CLI) |
| v0.7 (ADR-0011) | コード署名 (SmartScreen 警告除去) + Alert 拡張 (Webhook / Teams / Slack) + 検索 UX 次世代化 (FULLTEXT INDEX 採用判断、ADR-0008 trigger #2 連動) |
| v0.8 (ADR-0011) | 監査ログ + 多言語化 (i18n、英語 / 日本語 default) |
| v1.0 (ADR-0011 trigger 5 件 達成時) | 機能 lockdown + 商用 deployment 3 件 + docs lockdown + breaking change freeze + コード署名 |
各バージョンの詳細は docs/spec/ に仕様書として整備予定です。
v0.5 完成: v0.1 / v0.2 / v0.3 / v0.4 の 18 SPEC に加え、v0.5 で SPEC-020 (TLS syslog 受信、TCP 6514 + SslStream + 自己署名 cert + opt-in default false) / SPEC-021 (Web UI AD 連携認証、Kestrel + Negotiate + Kerberos/NTLM 自動切替 + gMSA 推奨 + opt-in default false) / SPEC-022 (検索 UX 拡張、
NarrowingThresholdMinutes撤廃 + cap 50,000 +SyslogRowPreviewprojection + hint banner 統合) / SPEC-015 amendment (SMTP-AUTH + STARTTLS、MailKitSecureSocketOptions.StartTlsenforced + AUTH opt-in) / ADR-0010 (v0.5 セキュリティモデル、ADR-0006 supersede) / ADR-0011 (v0.6+ ロードマップ整理、v1.0 trigger 5 件客観基準化) を追加。MSI で導入 →Yagura.exe init-dbで 1 コマンド DB セットアップ → サービスが UDP/TCP 514 (平文 default 継続) + TCP 6514 (TLS opt-in) で受信 → SQL Server に保存 → ブラウザからhttp://<server>:8080/(匿名 default 継続) または AD 認証 opt-in 経由で narrowing 制約なし + 現地 TZ 入力 + Facility filter 含む検索 (cap 50,000) + CSV ダウンロード →/Dashboardで受信レート時系列 (bin クリックで検索遷移) / Severity 分布 / Top Source IPs / OS UDP Drop trend (24h) を可視化 →/SavedSearchesで頻出クエリを named preset 保存 →appsettings.local.jsonで SMTP 設定 (STARTTLS / SMTP-AUTH opt-in) → Critical+ severity / 受信停止 / OsDropDelta spike の能動的メール通知 →Yagura.exe retentionで定期削除、までが Web UI 中心 + 能動的通知 + opt-in セキュリティ強化経路で完結します。
- Windows 10 / Windows Server 2019 以降
- (本番) SQL Server Express 以上 — 同一マシン or リモート、AD or workgroup
- (開発) .NET 10 SDK (global.json で固定) + SQL Server LocalDB
- (受信側) UDP/514 + TCP/514 + (Web UI) TCP/8080 の listen が可能なネットワーク設定 (MSI が Windows Defender Firewall に Domain+Private プロファイル限定でルール作成、ADR-0006 §原則 1)
- (運用者側) Web UI 閲覧用ブラウザ (Chrome / Edge / Firefox 等の最新版)
-
SQL Server を準備 — SQL Server Express 以上を同一マシンまたはリモートで稼働させる (DB 自体の作成は 手順 4 の
init-dbCLI に任せる ため、ここでは SQL Server インスタンスの稼働確認のみで OK)。 -
Yagura.msi をダウンロード — GitHub Releases から最新の
Yagura-vX.Y.Z-win-x64.msiを取得 (~30 MB)。署名はまだ付与していないため、SmartScreen 警告が出る場合は「詳細情報」→「実行」で進める (v0.1 の既知の制約、SPEC-003 §セキュリティ前提)。 -
MSI をインストール — admin 権限で実行:
msiexec /i Yagura-v0.3.0-win-x64.msi /qnMSI が以下を一括設定:
C:\Program Files\Yagura\に Yagura.exe + 依存 DLL +scripts\sql\init.sqlを配置- Windows サービス
Yaguraを Auto (Delayed Start) で登録 (起動アカウント既定 =NT SERVICE\Yagura) - SCM recovery (1st restart 60s / 2nd restart / 3rd none / reset 1 day)
- Windows Defender Firewall に UDP/514 + TCP/514 + TCP/8080 を Domain+Private 限定で開放 (Public profile は対象外)
- EventLog source
Yaguraを Application log に登録 C:\ProgramData\Yagura\logs\を作成しNT SERVICE\Yaguraに書き込み権限を付与
-
init-dbCLI で DB セットアップを 1 コマンド化 (★ SPEC-005、推奨) — admin PowerShell で:& "C:\Program Files\Yagura\Yagura.exe" init-db
この 1 コマンドで以下 5 ステップを idempotent (再実行で壊れない) に実行:
CREATE DATABASE Yagura(存在しなければ)scripts\sql\init.sql適用 (テーブル + 3 indexes)CREATE LOGIN [NT SERVICE\Yagura] FROM WINDOWS(server-level)CREATE USER [NT SERVICE\Yagura] FOR LOGIN [...](DB-level)GRANT INSERT, SELECT ON [dbo].[SyslogMessages] TO [NT SERVICE\Yagura]
主要オプション:
--server <host>/--database <name>: 接続先 / 対象 DB を override (default はappsettings.local.jsonから導出、または(localdb)\MSSQLLocalDB / Yagura)--admin-user <user>--admin-password <pwd>: SQL Server 認証で接続 (default は現在の Windows ユーザの Trusted_Connection)--service-account <name>: GRANT 先のサービスアカウントを override (defaultNT SERVICE\Yagura、AD 環境ではCORP\YaguraSvc等を指定)--dry-run: 計画表示のみ、実行なし--script-out <path>: 実行せず idempotent な.sqlファイルを生成 (sqlcmd -E -i <path>で別途実行可能)--non-interactive/--json: silent install / scripting 連携用 (確認 prompt スキップ + structured 出力)
詳細は docs/operations/windows-service.md §init-db CLI 参照。手動 sqlcmd でセットアップしたい場合は本手順を skip して下記 Appendix: 手動 DB セットアップ を参照。
-
接続文字列を
appsettings.local.jsonで設定 (★ SPEC-027、推奨) — 手順 3 の MSI install でC:\ProgramData\Yagura\appsettings.local.sample.json(template) が配置済。以下のいずれかで overlay を作成:- (a)
config initCLI で 1 コマンド作成 (推奨):対話 prompt で SQL Server 接続文字列を入力 (Enter で& "C:\Program Files\Yagura\Yagura.exe" config init
Server=localhost;Database=Yagura;Trusted_Connection=true;TrustServerCertificate=true;の既定を採用)。既存 file がある場合は.bak.YYYYMMDD-HHMMSSで backup してから上書き、--forceで上書き確認をスキップ。 - (b) sample を手で copy + 編集:
Copy-Item 'C:\ProgramData\Yagura\appsettings.local.sample.json' 'C:\ProgramData\Yagura\appsettings.local.json'→ エディタで開いて接続文字列を編集。VSCode で sample を開くと plain JSON モードでは//行コメントが警告表示されるが、Microsoft.Extensions.Configuration.Json(JsonCommentHandling.Skip+AllowTrailingCommas = true) が host 起動経路で許容するため警告は無視可。 - (c) 同一マシン SQL Express + 既定値で動かす場合: (a) を実行して Enter のみで終わらせれば最小構成 OK。
重要:
C:\Program Files\Yagura\appsettings.local.json側には置かないでください (MSI upgrade で消失します)。誤配置時は host 起動時に Serilog Warning +config initへの誘導が 1 行出力されます (SPEC-027 AC-009)。リモート DB / AD アカウント / SQL Server 認証等の構成詳細は下記 §SQL Server 接続経路 を参照。 - (a)
-
サービスを起動 —
services.mscから「Yagura」を起動するか、コマンドラインで:sc start Yagura起動時に
SELECT TOP 0 1 FROM [dbo].[SyslogMessages]でテーブル存在を検証します。テーブルが見つからなかったり SELECT 権限がない場合は Serilog Fatal で対処手順を出力して停止し、SCM recovery が 1 分後に retry します。 -
動作確認: 別シェルから syslog メッセージを送信し、SQL Server で行が増えることを確認:
$udp = New-Object System.Net.Sockets.UdpClient $msg = [Text.Encoding]::ASCII.GetBytes("<34>Oct 11 22:14:15 myhost app: hello yagura") $udp.Send($msg, $msg.Length, "127.0.0.1", 514)
-
Web UI を開く (SPEC-004): ブラウザで
http://<server>:8080/にアクセス → 検索画面が表示。ローカル環境ならhttp://localhost:8080/。詳細は下記 §Web UI 参照。
アンインストール: msiexec /x Yagura-v0.3.0-win-x64.msi /qn で完全削除 (サービス・ファイル・ファイアウォール rule・EventLog source すべて対称的に削除されます。C:\ProgramData\Yagura\ 配下のログ・ローカル設定はユーザデータとして保持、DB は保護優先で残ります。明示削除は DROP DATABASE Yagura; で operator が手動)。
init-db CLI を使わず手動で進めたい場合 (例: スクリプトを SCM ではなく Liquibase / Flyway 等の独自 migration に流したい組織向け)、以下を順に実行してください。本手順は v0.1.x で唯一の経路でしたが、v0.2 以降は init-db CLI に置き換えられた経路を残しています (Issue #35 で CREATE LOGIN 抜けが指摘済の手順)。
a. DB を作成 + init.sql 適用:
sqlcmd -S "your-sql-server" -E -Q "CREATE DATABASE Yagura;"
sqlcmd -S "your-sql-server" -d Yagura -E -i scripts/sql/init.sql
b. LOGIN / USER / GRANT を発行 — CREATE LOGIN を先に実行する必要があります (NT SERVICE\Yagura は SCM が生成する仮想 SID のため、SQL Server には自動登録されません):
USE master;
IF NOT EXISTS (SELECT 1 FROM sys.server_principals WHERE name = 'NT SERVICE\Yagura')
CREATE LOGIN [NT SERVICE\Yagura] FROM WINDOWS;
USE Yagura;
IF USER_ID('NT SERVICE\Yagura') IS NULL
CREATE USER [NT SERVICE\Yagura] FOR LOGIN [NT SERVICE\Yagura];
GRANT INSERT, SELECT ON [dbo].[SyslogMessages] TO [NT SERVICE\Yagura];AD 環境で SERVICE_ACCOUNT=CORP\YaguraSvc を override する場合、上記の NT SERVICE\Yagura を CORP\YaguraSvc に置換。SQL Server 認証を使う場合 (シナリオ D、AD なし + リモート DB) は CREATE LOGIN yagura WITH PASSWORD = '...'; 形式 (scripts/sql/init.sql のヘッダコメント参照)。
このステップを抜かすと Msg 15007 ("...は有効なログインではありません") が CREATE USER で発生、または Error 18456 (Login failed) で Yagura が起動できません (Issue #35)。
c. 上記の手順 5〜8 (サービス起動 / 動作確認 / Web UI) は同じ。
Yagura.exe と同一プロセスで Razor Pages ベースの最小 Web UI が稼働、operator が sqlcmd / SSMS なしで syslog 行を検索閲覧できます。
| 項目 | 値 |
|---|---|
| URL | http://<server>:8080/ (default、Yagura:WebUI:Url で override 可能) |
| 認証 | なし (v0.1)。ADR-0006 §原則 1 信頼ネットワーク前提 + Firewall rule (Domain+Private 限定) で防御。AD 連携認証は v0.5 で実装予定 |
| Health endpoint | http://<server>:8080/health (匿名 200 OK + JSON) |
| 必須絞り込み | 時間範囲 + (Severity / Facility / Source address / Free text のいずれか 1 つ以上)。narrowing 前の unfiltered 全文検索は 400 で reject (FR-011)。v0.2 SPEC-012 で Facility (RFC 3164 §4.1.1 facility 0-23 = kern / user / mail / daemon / ... / local0-local7 の 24 値) dropdown を追加、PRI 系 (Severity + Facility) 複合 narrowing で「特定 facility の error 以上」等の運用調査を支援。v0.3 SPEC-009 で narrowing 強制を 2 層緩和: 時間範囲 ≤ Yagura:WebUI:NarrowingThresholdMinutes (default 15 分) なら narrowing 不要 ((ReceivedAt, Id) PK seek で本来高速な「直近 N 分」を救う)、結果が Yagura:WebUI:MaxResultsTotal (default 10,000) を超えると TOP (N+1) 検出で SQL 中断 + sentinel banner 表示。Free-text 検索は時間範囲短くても緩和対象外 (LIKE フルスキャン抑止維持) |
| CSV ダウンロード | v0.2 SPEC-011 で「Download as CSV」ボタンを検索結果テーブル上下に追加。同じ filter (時間範囲 + Severity / Facility / Source address / Free text) を /Export?<same-query> に渡して UTF-8 BOM + CRLF + RFC 4180 quote 規則 の Excel 互換 CSV を stream download (memory 一定、Dapper QueryUnbufferedAsync 経由で 1 行 buffer のみ)。行数 cap 1,000,000、上限到達時は末尾に # truncated at 1000000 rows; refine your filter sentinel コメント。SPEC-002 schema 全 17 列固定出力、DateTime は yyyy-MM-ddTHH:mm:ss.fffZ 固定 format で Excel 認識率向上、bool は 1/0 |
| ダッシュボード | v0.3 SPEC-013 で /Dashboard ページを追加 (nav 経由アクセス、default landing は引き続き /)。3 widget = (1) 受信レート時系列 chart (1h/6h/24h/7d preset、DATEADD/DATEDIFF で時間 bucket 集計、Chart.js line chart) + (2) Severity 分布 bar chart (RFC 3164 §4.1.1 name 表示、bar クリックで検索ページに narrowing 引き渡し) + (3) Top Source IPs table (件数 / 全体比 % 付き、行クリックで ?sourceAddress=... narrowing 引き渡し)。集計は on-demand クエリ + IMemoryCache (TTL 30s、Yagura:WebUI:DashboardCacheTTLSeconds で override 可)、pre-aggregated table は不採用 (Receiver INSERT 負荷源回避 + SQL Agent Job が Express 利用不可)。Chart.js 4.5.1 (MIT、~204 KB) を MSI 静的同梱 (CDN 不採用、ADR-0006 信頼ネットワーク前提整合、SHA256 sidecar で supply-chain integrity 担保)。/Dashboard には SPEC-009 narrowing 強制を適用しない (集計クエリは LIKE フルスキャンを撃たない、(ReceivedAt, Id) クラスタ PK seek で実用範囲)。histogram drilldown / Drop trend / auto-refresh は v0.4 へ deferral |
| 保存検索 | v0.3 SPEC-014 で「Saved searches」dropdown + 「Save current search」ボタン + /SavedSearches 管理ページを追加。永続化先は browser localStorage (per-browser scope、Yagura runtime DB / 設定ファイル / 認証経路には影響なし、ADR-0006 §原則 6 緩和不要)。検索フォーム上部の dropdown 選択で preset を 1-click apply (時間範囲は relative last N min を保存、apply 時 client-side JS で current time から計算) → 検索ページに narrowing parameters + submitted=1 で navigate (SPEC-009 緩和判定 path で preset の妥当性が自動 verify される)。JSON Export / Import で PC 移行 / team 共有を operator 主導で対応 (Blob URL + FileReader API、サーバ往復なし)。preset name 1-50 文字 + Unicode 許可 + per-browser unique + case-sensitive。Update (既存 preset 編集) / 絶対時刻範囲 / Built-in presets / Default preset auto-apply / Permalink 共有 / per-user scope (AD 統合) は v0.4 / v0.5 へ deferral |
| ページネーション | (ReceivedAt, Id) cursor pagination — 50 件/ページ default、深いページでも O(log n) |
| 時刻表示 | ブラウザローカル TZ default、画面右上のトグルで UTC 切替可能 (localStorage 保存) |
起動時に Serilog WARN ログ「Web UI started without authentication」が出力されます (Yagura:Security:SuppressWebUiUnauthenticatedWarning=true で抑制可、抑制した事実は Information ログに残ります)。
性能特性 (NFR-001): SQL Server Express の 100 行サブセットに対する LIKE 検索で P95 < 500ms。数百万行に対する unfiltered 全文検索は明示的にスコープ外で、UI が必須絞り込みを強制します。FULLTEXT INDEX (CONTAINS) ベースの高速検索は v0.3+ で再評価予定 (Issue #51 §件 3 で v0.3+ deferral 判断、SQL Server Express w/ Advanced Services edition 利用率と v0.3 ダッシュボード強化の集計負荷を踏まえて再判断)。
# 1. データベース準備 (LocalDB)
sqlcmd -S "(localdb)\MSSQLLocalDB" -E -Q "CREATE DATABASE Yagura;"
sqlcmd -S "(localdb)\MSSQLLocalDB" -d Yagura -E -i scripts/sql/init.sql
# 2. Yagura をコンソール起動 (dotnet run = console host で起動、サービス化されない)
dotnet run --project src/YaguraAddWindowsService() は SCM 経由起動時のみ作動するため、dotnet run / Yagura.exe ダブルクリックでは従来どおりコンソール host として動作します (SPEC-003 NFR-004)。
実運用では以下のいずれかを採用。MSI 既定 (appsettings.json ship 値) はシナリオ A の LocalDB 想定ですが、production では B を推奨します。
| シナリオ | 想定環境 | 接続文字列 (appsettings.local.json 例) |
|---|---|---|
| A. ローカル LocalDB (開発専用) | 開発者マシン、dotnet run |
Server=(localdb)\MSSQLLocalDB;Database=Yagura;Trusted_Connection=true;... |
| B. ローカル SQL Express + 同一マシン (★ 本番推奨、最小構成) | 単一サーバ、AD/workgroup どちらも可 | Server=.\SQLEXPRESS;Database=Yagura;Trusted_Connection=true;... (Yagura 起動アカウント NT SERVICE\Yagura の Windows 統合認証) |
| C. リモート SQL Server in AD | AD 環境、複数サーバ構成 | Server=sqlhost.corp.example;Database=Yagura;Trusted_Connection=true;... (MSI install 時に SERVICE_ACCOUNT=CORP\YaguraSvc SERVICE_PASSWORD=... で AD アカウントに override) |
| D. リモート SQL Server in workgroup | AD なし、複数サーバ構成 | Server=sqlhost;Database=Yagura;User Id=yagura;Password=...;TrustServerCertificate=true;... (SQL Server 認証、appsettings.local.json で接続文字列を上書き) |
設定上書きの優先順位 (.NET IConfiguration 標準解決順):
- 環境変数
YAGURA__CONNECTIONSTRINGS__YAGURA=...(コンテナ / CI 向け) — 最優先 C:\ProgramData\Yagura\appsettings.local.json(運用者編集用、gitignored、UAC 不要、サービス再起動なしでreloadOnChange=true) — 中appsettings.json(MSI 同梱、Program Files 配下) — 最低
シナリオ C / D では (2) の appsettings.local.json を作成して接続文字列を上書きするのが標準パターン。appsettings.json (Program Files 配下) を直接編集するのは避けてください (UAC 昇格が必要 + MSI upgrade で上書きされる可能性)。appsettings.local.json の最小例:
{
"ConnectionStrings": {
"Yagura": "Server=sqlhost.corp.example;Database=Yagura;Trusted_Connection=true;TrustServerCertificate=true;Encrypt=false"
}
}- 信頼ネットワーク (LAN / VLAN 分離) 専用。インターネット直接公開禁止 (ADR-0006 §原則 1)
- MSI が Firewall rule を Domain+Private 限定で作成するため、Public profile (= internet 接続セッション) では UDP/514 / TCP/514 / TCP/8080 が listen されません。手動運用したい場合は
msiexec /i ... SETUP_FIREWALL=0で MSI のルール作成をスキップ - TLS 受信は v0.5 で実装予定。v0.1 起動時に Serilog WARN を出力します (
Yagura:Security:SuppressPlaintextWarning=trueで抑制可、抑制した事実は Information ログに残ります) - DB 一時障害: 5 attempts × 指数 backoff で ~3 秒の transient retry。これを超える障害は 縮退モード (5 分まで継続)、5 分超で host 停止 → SCM recovery が 1 分後に retry (SPEC-002 §エラー処理方針, SPEC-003 FR-006)
- DB schema check 失敗時の自動復旧 (v0.2 SPEC-007): 起動時
EnsureSchemaAsyncがSqlExceptionで失敗する典型ケース (init.sql未実行 / GRANT 漏れ等) で、Yagura がC:\ProgramData\Yagura\suggested-db-setup.sqlを自動生成 + Fatal ログに具体的復旧コマンド (sqlcmd -S "<server>" -E -C -i ...) を埋め込み。生成 SQL は idempotent、operator は コピペ 1 行で復旧 可能。詳細はdocs/operations/windows-service.md§トラブルシューティング - ログ出力先:
C:\ProgramData\Yagura\logs\yagura-yyyymmdd.log(Serilog file rolling、日次)。MSI install 時にNT SERVICE\Yagura書き込み権限が付与されます - データ保持期間 (retention): v0.1 では Yagura は何もしません。SQL Server Agent ジョブまたは Windows タスクスケジューラ +
sqlcmdで定期DELETE WHERE ReceivedAt < @cutoffを運用者が実行してください (PK が(ReceivedAt, Id)クラスタ化済のため高速)。アーカイブはbcp/SELECT INTO等の SQL Server 標準機能を利用。v0.2 SPEC-010 以降はYagura.exe retention --days N --executeで 1 コマンド完結 (chunked DELETE + ROWLOCK で受信影響 < 5%、EventLog audit 自動記録、--register-task --user "DOMAIN\YaguraSvc" --output retention-task.xmlで Task Scheduler 登録用 XML 自動生成)。詳細はdocs/operations/retention-scheduling.md - 30 秒集計ログ:
MetricsReporterServiceが Parsed / Failed / Dropped / Persisted / RetryAttempts / FatalErrors の 30 秒ごとの増分を Warning レベルで出力します (空 window はスキップ)。v0.2 SPEC-008 でOsRecvDelta/OsDropDelta(estimated) の OS UDP 受信 / kernel drop 推定値が同じ行に追加され、kernel UDP buffer 段階の silent drop を可視化 — 連続 2 window でOsDropDelta > Yagura:Receiver:Udp:OsDropAlertThreshold(default 0) なら Error 昇格。詳細はdocs/operations/windows-service.md§UDP drop monitoring - アップグレード: MSI Major Upgrade で in-place stop → 上書き → start (
msiexec /i Yagura-vX.Y.Z-...msi /qn)。ダウンタイムは数秒〜十数秒、SyslogMessages データは保持されます (SPEC-003 FR-007)。詳細運用手順は docs/operations/windows-service.md 参照
NXLog / rsyslog / journald → UDP 514 / TCP 514 への転送設定は標準的な手順で動作します。RFC 3164 / RFC 5424 + RFC 6587 (TCP framing) を auto-detect します。エンコーディングも UTF-8 / Shift-JIS / EUC-JP の自動判別が動作します。
Windows EventLog → Yagura への転送 は NXLog Community Edition (GPLv2、無償) を primary path として推奨 します。Yagura 自身は Sender Agent を提供せず (ADR-0007 で v0.3+ deferral、ADR-0011 で v0.6+ も deferral 継続)、agent 役は mature な OSS に委譲する設計判断です。具体的な NXLog 設定例 (最小構成 / 推奨構成 / トラブルシューティング) は docs/operations/nxlog-config-example.md を参照、v0.5 で Yagura 側に TLS 受信 (TCP 6514、SPEC-020) が追加されたため、NXLog om_ssl modules 経由の TLS 転送設定例の追加は今後の課題。
主要な意思決定は Architecture Decision Records (ADR) として docs/adr/ 配下に MADR 3.0 形式で記録しています。
- ADR-0001 言語選定: C# (.NET 10 LTS)
- ADR-0002 ライセンス選定: Apache 2.0
- ADR-0003 DB 選定: Microsoft SQL Server
- ADR-0004 ドキュメント戦略と 2 エージェント協働ワークフロー
- ADR-0005 ブランチ保護設定の段階的運用
- ADR-0006 v0.1 セキュリティモデル (superseded by ADR-0010)
- ADR-0007 Sender Agent positioning — NXLog との住み分けと SPEC-006 の v0.3+ deferral
- ADR-0008 全文検索性能改善 — SQL Server FULLTEXT INDEX 採用判断 (v0.4 planning + signal gate で再評価予告)
- ADR-0009 v0.4 ロードマップ整理 — メール通知・アラート + v0.3 持ち越し選別 + ADR-0007/0008 trigger 再評価
- ADR-0010 v0.5 セキュリティモデル — TLS 受信 + AD 連携認証 + SMTP-AUTH の opt-in 部分解消 (ADR-0006 supersede)
- ADR-0011 v0.6+ ロードマップ整理 — DB 抽象化 + 信頼性強化 + Alert 拡張 + 検索 UX 次世代化 + v1.0 trigger 5 件客観基準化
機能仕様書は docs/spec/ 配下に、バージョン別に整備されていく予定です。
Apache License 2.0 のもと公開されています。
Copyright 2026 YANAI Taketo
現在は初期設計フェーズのため、外部コントリビュータ受け入れ準備は整っていません。MVP (v0.1) リリース後、コントリビューションガイドラインを整備予定です。
設計や方針に関する議論・提案は GitHub Issues でお気軽にどうぞ。
本プロジェクトは、AI エージェント (Claude / Claude Code) との協働により設計・実装を進めています。設計と実装を別エージェントに分離し、すべての変更は Pull Request 経由でレビュー・承認するワークフローを採用しています。詳細は ADR-0004 を参照してください。
「Yagura」(櫓 / 矢倉) は日本語で「物見櫓」「見張り台」を意味します。各サーバを見張ってログを集約する本ツールのコンセプトをそのまま表す名前として採用しました。
Yagura (Japanese: 櫓) means "watchtower" — a structure used to monitor and observe surroundings. The name reflects this tool's purpose of watching over Windows servers and aggregating their logs.