自定链路日志
/// <summary>
/// 自定链路日志
/// </summary>
/// <returns></returns>
public string SkywalkingLog()
{
//获取全局traceId
var traceId = _segContext.Context.TraceId;
_segContext.Context.Span.AddLog(LogEvent.Message($"自定义日志1, traceId: {traceId}"));
// Thread.Sleep(1000);
// _segContext.Context.Span.AddLog(LogEvent.Message("自定义日志2"));
return traceId;
}
接管原本的log,将下面代码加入到Startup.cs之后,skywalking将采集所有日志。
builder.Services.AddSkyApmExtensions().AddMSLogging();
新增自定义监控指标
- 在/config/oal/core.oal 中定义新的指标名
- 在应用中,发送type为entry的span,
- 在entrySpan中加入x-el参数,启动logic-endpoint
- 在x-el中定义EndPoint的名称以及其他参数,供在core.oal中使用
内部埋点处理器的注册流程
内部依赖的注入关系
- 提供ITracingDiagnosticProcessor的实现类ImplProcessor
- 在AddSkyAPM or AddSkyAPMCore中添加单例TracingDiagnosticProcessorObserver(实现自IObserver)
a. 然年在AddSkyAPMCore添加InstrumentStartup作为singleton
b. 然后在InstrumentStartup中注入了TracingDiagnosticProcessorObserver
c. 然后在InstrumentationHostedService(实现自IHostedService)注入了IInstrumentStartup
d. 在CacheLoaderService.cs的StartAsync执行 - TracingDiagnosticProcessorObserver内部注入了ITracingDiagnosticProcessor
主要流程调用栈
- app.Run()
- HostingAbstractionsHostExtensions.Run(this);
- HostingAbstractionsHostExtensions.RunAsync(this);
- WebApplication.StartAsync(这一步不知道如何注入的)
- hostedService.StartAsync
此外,TracingDiagnosticProcessorObserver该观察者是在Skyapm.InstrumentStartup中的StartSync中订阅的
public async Task StartAsync(CancellationToken cancellationToken = default (CancellationToken))
{
this._logger.Information("Initializing ...");
foreach (IExecutionService service in this._services)
await service.StartAsync(cancellationToken);
DiagnosticListener.AllListeners.Subscribe((IObserver<DiagnosticListener>) this._observer);
this._logger.Information("Started SkyAPM .NET Core Agent.");
}
因此如果要实现自己的处理器,则实现ITracingDiagnosticProcessor接口,然后将其注册为单例。