Docker - 第九章 | 安裝 datalust seq
Seq 是一款使用現代化技術構建的結構化日誌存儲,查詢,分析工具。比起 ELK 這種組合要輕量級許多。只需要一個安裝包就具有數據存儲,查詢,圖表分析功能。它對 windows 友好,直接提供了安裝包。當然也可以使用 docker 來部署。Seq 對於單個用戶是免費的,這對於一些小團隊並沒有什麼問題。Seq 一個比較強大的功能是提供了類似 Sql 語句的數據查詢及處理能力,使得用戶可以直接寫 Select from 來得到自己想要的數據。
收費
免費的個人版,只能以一個使用者帳號連到網頁介面(沒有辦法做權限控管),而且同時只有一個session可以使用(以cookie:Seq-Session為準),可以在企業中使用這個版本
如果裝app在seq站台,app的行為會視為另一個使用者
在未啟用授權的狀況下,session數量不影響,但不能安裝app
環境 docker
啟動container,使用volumn mount實體路徑:
docker run --name seq -d --restart unless-stopped -e ACCEPT_EULA=Y -v D:\docker\seqdata:/data -p 5341:80 datalust/seq:latest
開發 (Microsoft.Extensions.Logging)
在專案中加入 Seq.Extensions.Logging NuGet 套件
在
Program.cs
加入 Seq 的 Log Providerbuilder.Logging.AddSeq();
如果要指定 Seq 伺服器位置與 API Key 的話,也可以這樣寫:
builder.Logging.AddSeq(serverUrl: "http://localhost:5341", apiKey: "your-api-key");
如果要直接從組態進行設定,可以這樣寫:
builder.Logging.AddSeq(builder.Configuration.GetSection("Seq"));
而
appsettings.json
的設定值如下:{ "Seq": { "ServerUrl": "http://localhost:5341", "ApiKey": "1234567890", "MinimumLevel": "Trace", "LevelOverride": { "Microsoft": "Warning" } } }
開發 (Nlog)
nuget套件 - NLog.Targets.Seq
在
Program.cs
加入 Seq 的 Log Provider#region 加入 NLog 相關資訊 // 環境的相關資訊 #if DEBUG NLogBuilder.ConfigureNLog($"nlog.config").GetCurrentClassLogger(); #else NLogBuilder.ConfigureNLog($"nlog.{environmentName}.config").GetCurrentClassLogger(); #endif // 將NLog註冊到此專案內 builder.Logging.ClearProviders(); // 設定log紀錄的最小等級 builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Information); builder.Host.UseNLog(); #endregion
nlog.config
<extensions> <!-- 引用seq type --> <add assembly="NLog.Targets.Seq"/> </extensions> <targets> <!-- 使用AsyncWrapper(nlog原生)可提升效能,且當寫入seq有問題時不會影響應用程式結果 --> <!-- 參考: https://github.com/NLog/NLog/wiki/AsyncWrapper-target --> <target name="seq" xsi:type="AsyncWrapper" overflowAction="Discard" queueLimit="10000" batchSize="200" timeToSleepBetweenBatches="1"> <!-- 可以啟用apikey,只允許授權的key寫入log,也可做到群組統計的效果 --> <target xsi:type="Seq" serverUrl="http://localhost:5341" apiKey="" > <!-- property會一起帶到seq log裡,可作為filter欄位 --> <property name="SourceContext" value="${logger}" /> <property name="ThreadId" value="${threadid}" as="number" /> <property name="MachineName" value="${machinename}" /> <property name="Environment" value="${windows-identity}" /> <property name="Application" value="KH.Lab.Seq" /> </target> </target> </targets>
調整完後按重建才可吃到config的設定
測試記錄到Seq
修改
HomeController
類別,加入不同 Log Level 的紀錄using Microsoft.AspNetCore.Mvc; namespace KH.Lab.Seq.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { _logger.LogTrace("這是 Trace"); _logger.LogDebug("這是 Debug"); _logger.LogInformation("這是 Information"); _logger.LogWarning("這是 Warning"); _logger.LogError("這是 Error"); _logger.LogCritical("這是 Critical"); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } }
進入 Seq 首頁 ( http://localhost:5341 ) 即可看見 Log 已經被成功寫入!
網頁介面
透過signals設定區分不同過濾條件(例如站台名稱),等於建置索引,效能比較好 https://docs.datalust.co/docs/signals
Workspace只是影響進入時要顯示的幾個signals
從Settings->Retention設定清空events排程
可以設定占用記憶體跟硬碟最小剩餘空間多少後不再寫入
Last updated