在Ubuntu上監控Swagger主要涉及到性能監控和API文檔的實時查看。雖然搜索結果中沒有直接提到特定的Swagger監控工具,但可以參考.NET Core項目中的集成方法,例如使用MiniProfiler與Swagger的結合來實現監控。以下是具體步驟:
安裝MiniProfiler相關包:
通過NuGet包管理器安裝MiniProfiler的相關包,包括 MiniProfiler.AspNetCore.Mvc
和可選的 MiniProfiler.EntityFrameworkCore
,實現對EF Core生成SQL語句的監控。
# 使用NuGet包管理器安裝MiniProfiler.AspNetCore.Mvc
Install-Package MiniProfiler.AspNetCore.Mvc
# 如果需要監控EF Core生成的SQL語句,安裝MiniProfiler.EntityFrameworkCore
Install-Package MiniProfiler.EntityFrameworkCore
配置MiniProfiler服務:
在 Startup.cs
中的 ConfigureServices
方法中,添加MiniProfiler服務的配置,指定 RouteBasePath
為 /profiler
。
public void ConfigureServices(IServiceCollection services)
{
services.AddMiniProfiler(options =>
{
options.RouteBasePath = "/profiler";
});
// 其他服務配置...
}
開啟MiniProfiler中間件:
在 Configure
方法中,通過調用 app.UseMiniProfiler()
開啟MiniProfiler中間件,確保其在 UseEndpoints
之前被調用。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiniProfiler();
// 其他中間件配置...
}
配置Swagger與MiniProfiler集成:
在SwaggerUI中自定義顯示MiniProfiler的結果。具體而言,在頁面加載時,獲取MiniProfiler的HTML代碼,并通過自定義的 index.html
文件將其嵌入SwaggerUI中。
<!-- 自定義index.html文件 -->
<script src="path/to/mini-profiler-start.js"></script>
<script>
MiniProfiler.run('your-profiler-id', {
id: 'your-profiler-id',
enabled: true,
deferJS: true,
async: true,
showControls: true,
showHeader: true,
showUploadToS3: false,
showDownloadJson: false,
showRunButton: true,
showZoomOutButton: true,
zoomOutButtonDefaultSize: 200,
zoomOutButtonOffset: 10,
defaultPosition: 'right',
defaultZoom: 1,
zoomMin: 0.5,
zoomMax: 2,
highlightOpacity: 0.6,
highlightDelay: 300,
highlightScrollSpeed: 200,
highlightScrollSensitivity: 0.5,
highlightLineHeight: 20,
highlightLineThickness: 2,
highlightColor: 'rgba(0, 123, 255, 0.4)',
highlightBackgroundColor: 'rgba(0, 123, 255, 0.1)',
clearButton: true,
clearButtonLabel: 'Clear',
clearButtonColor: 'rgba(0, 0, 0, 0.5)',
clearButtonSize: 10,
clearButtonPosition: 'right',
clearButtonOffset: 10,
clearButtonTimeout: 10000,
clearButtonDelay: 100,
clearButtonOnStart: false,
clearButtonOnStop: true,
clearButtonOnZoomOut: true,
clearButtonOnZoomIn: true,
clearButtonOnZoomChange: true,
clearButtonOnPositionChange: true,
clearButtonOnTimer: false,
clearButtonOnData: false,
clearButtonOnUpload: false,
clearButtonOnDownload: false,
clearButtonOnZoom: false,
clearButtonOnPosition: false,
clearButtonOnTimerChange: false,
clearButtonOnDataChange: false,
clearButtonOnUploadComplete: false,
clearButtonOnDownloadComplete: false,
clearButtonOnZoomComplete: false,
clearButtonOnPositionComplete: false,
clearButtonOnTimerComplete: false,
clearButtonOnDataComplete: false,
clearButtonOnUploadError: false,
clearButtonOnDownloadError: false,
clearButtonOnZoomError: false,
clearButtonOnPositionError: false,
clearButtonOnTimerError: false,
clearButtonOnDataError: false,
clearButtonOnUploadTimeout: false,
clearButtonOnDownloadTimeout: false,
clearButtonOnZoomTimeout: false,
clearButtonOnPositionTimeout: false,
clearButtonOnTimerTimeout: false,
clearButtonOnDataTimeout: false,
clearButtonOnUploadInterrupt: false,
clearButtonOnDownloadInterrupt: false,
clearButtonOnZoomInterrupt: false,
clearButtonOnPositionInterrupt: false,
clearButtonOnTimerInterrupt: false,
clearButtonOnDataInterrupt: false,
clearButtonOnUploadCancel: false,
clearButtonOnDownloadCancel: false,
clearButtonOnZoomCancel: false,
clearButtonOnPositionCancel: false,
clearButtonOnTimerCancel: false,
clearButtonOnDataCancel: false,
clearButtonOnUploadResume: false,
clearButtonOnDownloadResume: false,
clearButtonOnZoomResume: false,
clearButtonOnPositionResume: false,
clearButtonOnTimerResume: false,
clearButtonOnDataResume: false,
clearButtonOnUploadPause: false,
clearButtonOnDownloadPause: false,
clearButtonOnZoomPause: false,
clearButtonOnPositionPause: false,
clearButtonOnTimerPause: false,
clearButtonOnDataPause: false,
clearButtonOnUploadResumeAfterPause: false,
clearButtonOnDownloadResumeAfterPause: false,
clearButtonOnZoomResumeAfterPause: false,
clearButtonOnPositionResumeAfterPause: false,
clearButtonOnTimerResumeAfterPause: false,
clearButtonOnDataResumeAfterPause: false,
clearButtonOnUploadPauseAfterResume: false,
clearButtonOnDownloadPauseAfterResume: false,
clearButtonOnZoomPauseAfterResume: false,
clearButtonOnPositionPauseAfterResume: false,
clearButtonOnTimerPauseAfterResume: false,
clearButtonOnDataPauseAfterResume: false,
clearButtonOnUploadResumeAfterPauseAndToggle: false,
clearButtonOnDownloadResumeAfterPauseAndToggle: false,
clearButtonOnZoomResumeAfterPauseAndToggle: false,
clearButtonOnPositionResumeAfterPauseAndToggle: false,
clearButtonOnTimerResumeAfterPauseAndToggle: false,
clearButtonOnDataResumeAfterPauseAndToggle: false,
clearButtonOnUploadPauseAfterResumeAndToggle: false,
clearButtonOnDownloadPauseAfterResumeAndToggle: false,
clearButtonOnZoomPauseAfterResumeAndToggle: false,
clearButtonOnPositionPauseAfterResumeAndToggle: false,
clearButtonOnTimerPauseAfterResumeAndToggle: false,
clearButtonOnDataPauseAfterResumeAndToggle: false,
clearButtonOnUploadResumeAfterPauseAndToggle: false,
clearButtonOnDownloadResumeAfterPauseAndToggle: false,
clearButtonOnZoomResumeAfterPauseAndToggle: false,
clearButtonOnPositionResumeAfterPauseAndToggle: false,
clearButtonOnTimerResumeAfterPauseAndToggle: false,
clearButtonOnDataResumeAfterPauseAndToggle: false,
clearButtonOnUploadPauseAfterResumeAndToggle: false,
clearButtonOnDownloadPauseAfterResumeAndToggle: false,
clearButtonOnZoomPauseAfterResumeAndToggle: false,
clearButtonOnPositionPauseAfterResumeAndToggle: false,
clearButtonOnTimerPauseAfterResumeAndToggle: false,
clearButtonOnDataPauseAfterResumeAndToggle: false,
clearButtonOnUploadResumeAfterPauseAndToggle: false,
clearButtonOnDownloadResumeAfterPauseAndToggle: false,
clearButtonOnZoomResumeAfterPauseAndToggle: false,
clearButtonOnPositionResumeAfterPauseAndToggle: false,
clearButtonOnTimerResumeAfterPauseAndToggle: false,
clearButtonOnDataResumeAfterPauseAndToggle: false,
clearButtonOnUploadPauseAfterResumeAndToggle: false,
clearButtonOnDownloadPauseAfterResumeAndToggle: false,
clearButtonOnZoomPauseAfterResumeAndToggle: false,
clearButtonOnPositionPauseAfterResumeAndToggle: false,
clearButtonOnTimerPauseAfterResumeAndToggle: false