在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