Skip to content

Yanai-Taketo/yagura

Repository files navigation

Yagura

Windows ネイティブな OSS syslog 集約サーバ

Status License Language Platform

注意: 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 + SyslogRowPreview projection + hint banner 統合) / SPEC-015 amendment (SMTP-AUTH + STARTTLS、MailKit SecureSocketOptions.StartTls enforced + 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 等の最新版)

インストール手順 (本番、MSI 経由)

  1. SQL Server を準備 — SQL Server Express 以上を同一マシンまたはリモートで稼働させる (DB 自体の作成は 手順 4 の init-db CLI に任せる ため、ここでは SQL Server インスタンスの稼働確認のみで OK)。

  2. Yagura.msi をダウンロードGitHub Releases から最新の Yagura-vX.Y.Z-win-x64.msi を取得 (~30 MB)。署名はまだ付与していないため、SmartScreen 警告が出る場合は「詳細情報」→「実行」で進める (v0.1 の既知の制約、SPEC-003 §セキュリティ前提)。

  3. MSI をインストール — admin 権限で実行:

    msiexec /i Yagura-v0.3.0-win-x64.msi /qn
    

    MSI が以下を一括設定:

    • 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 に書き込み権限を付与
  4. init-db CLI で 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 (default NT 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 セットアップ を参照

  5. 接続文字列を appsettings.local.json で設定 (★ SPEC-027、推奨) — 手順 3 の MSI install で C:\ProgramData\Yagura\appsettings.local.sample.json (template) が配置済。以下のいずれかで overlay を作成:

    • (a) config init CLI で 1 コマンド作成 (推奨):
      & "C:\Program Files\Yagura\Yagura.exe" config init
      対話 prompt で SQL Server 接続文字列を入力 (Enter で 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 接続経路 を参照。

  6. サービスを起動services.msc から「Yagura」を起動するか、コマンドラインで:

    sc start Yagura
    

    起動時に SELECT TOP 0 1 FROM [dbo].[SyslogMessages] でテーブル存在を検証します。テーブルが見つからなかったり SELECT 権限がない場合は Serilog Fatal で対処手順を出力して停止し、SCM recovery が 1 分後に retry します。

  7. 動作確認: 別シェルから 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)
  8. 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 が手動)。

Appendix: 手動 DB セットアップ (init-db を使わない場合)

init-db CLI を使わず手動で進めたい場合 (例: スクリプトを SCM ではなく Liquibase / Flyway 等の独自 migration に流したい組織向け)、以下を順に実行してください。本手順は v0.1.x で唯一の経路でしたが、v0.2 以降は init-db CLI に置き換えられた経路を残しています (Issue #35CREATE 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\YaguraCORP\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) は同じ。

Web UI (SPEC-004)

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 列固定出力DateTimeyyyy-MM-ddTHH:mm:ss.fffZ 固定 format で Excel 認識率向上、bool1/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/Yagura

AddWindowsService() は SCM 経由起動時のみ作動するため、dotnet run / Yagura.exe ダブルクリックでは従来どおりコンソール host として動作します (SPEC-003 NFR-004)。

SQL Server 接続経路 (3 シナリオ、ADR-0006 §原則 4)

実運用では以下のいずれかを採用。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 標準解決順):

  1. 環境変数 YAGURA__CONNECTIONSTRINGS__YAGURA=... (コンテナ / CI 向け) — 最優先
  2. C:\ProgramData\Yagura\appsettings.local.json (運用者編集用、gitignored、UAC 不要、サービス再起動なしで reloadOnChange=true) — 中
  3. 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"
  }
}

運用上の注意 (v0.1)

  • 信頼ネットワーク (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): 起動時 EnsureSchemaAsyncSqlException で失敗する典型ケース (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 参照

syslog クライアント側 (例)

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 形式で記録しています。

機能仕様書は 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.

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors