使用:Linux上的.NET Core 2.2 UST跟踪/ lttng。
我试图仅侦听我在应用程序中生成的Custom EventSource事件(以及我特别感兴趣的其他一些事件,但这些事件未包含在本讨论中)。我正在将这些消息直接发送到lttng中继守护程序,并且希望将事件数据的数量保留在我的控件中。启用EventSource提供程序会生成大量我不想要或不需要的信息,并且有时会淹没我的频道。
lttng enable-event --userspace --tracepoint DotNETRuntime:EventSource
当我查看将要转发的数据时,我看到了各种各样的内置事件,我想根本避免采样:
=== DotNETRuntime:EventSource__System.Diagnostics.Eventing.FrameworkEventSource -ThreadTransferSend:11542 -线程传输接收:6480 -线程池入队工作:21437 -线程池出队工作:21437 === DotNETRuntime:EventSource__Microsoft-System-Net-Sockets -输入:22771 -信息:27463 -出口:20145 -已连接:1 -接受:1 === DotNETRuntime:EventSource__Microsoft-System-Net-NameResolution -输入:41924 -信息:41922 -出口:27950
这些都是由.NET制作的,我对捕获这些事件的兴趣不大,只有我特定于应用程序的一组事件。
我正在尝试找出--filter语法,我可能会用它来过滤我的一系列自定义事件:
-filter ='$ app.EventSourceName == MyEventSourceName'
我可以在网上找到有关静态事件的示例:
$ ctx.procname =='dotnet'
那没什么用。
或者使用$ app进行动态事件,但是我需要通过EventSourceName进行过滤的语法不是很清楚。
有没有在这方面有经验的人
答案 0 :(得分:0)
首先允许跟踪:
export COMPlus_PerfMapEnabled=1
export COMPlus_EnableEventLog=1
或使用PowerShell
$env:COMPlus_PerfMapEnabled=1
$env:COMPlus_EnableEventLog=1
根据以下代码:
using System.Diagnostics.Tracing;
using System.Collections.Generic;
using System;
namespace Demo1
{
[EventSource(Name = "JPBLog")]
class MyCompanyEventSource : EventSource
{
public static MyCompanyEventSource Log = new MyCompanyEventSource();
[Event(1, Message="{0} -> {1}", Channel = EventChannel.Admin)]
public void Startup() { WriteEvent(1); }
[Event(2, Message="{0}", Channel = EventChannel.Admin)]
public void OpenFileStart(string fileName) { WriteEvent(2, fileName); }
[Event(3, Message="OpenFileStop", Channel = EventChannel.Admin)]
public void OpenFileStop() { WriteEvent(3); }
}
class Program
{
static void Main(string[] args)
{
string name = MyCompanyEventSource.GetName(typeof(MyCompanyEventSource));
Console.WriteLine(name);
IEnumerable<EventSource> eventSources = MyCompanyEventSource.GetSources();
foreach(EventSource iS in eventSources){
Console.WriteLine(iS);
}
MyCompanyEventSource.Log.Startup();
// ...
MyCompanyEventSource.Log.OpenFileStart("SomeFile");
// ...
MyCompanyEventSource.Log.OpenFileStop();
}
}
}
这是我仅过滤事件的方式:
lttng create my-trace -o ./my-trace
lttng enable-channel --userspace DotNetCoreChannel
lttng enable-event --userspace --tracepoint DotNETRuntime:EventSource --channel=DotNetCoreChannel --filter "EventSourceName=='JPBLog'"
lttng start
dotnet run # here I run the code
lttng stop
lttng view
您将收到:
[17:24:45.219954500] (+?.?????????) cd9a097f0904 DotNETRuntime:EventSource: { cpu_id = 0 }, { EventID = 1, EventName = "Startup", EventSourceName = "JPBLog", Payload = "" }
[17:24:45.223259100] (+0.003304600) cd9a097f0904 DotNETRuntime:EventSource: { cpu_id = 0 }, { EventID = 2, EventName = "OpenFileStart", EventSourceName = "JPBLog", Payload = "{\"EventSource_Message\":\"{0}\", \"fileName\":\"SomeFile\"}" }
[17:24:45.223417300] (+0.000158200) cd9a097f0904 DotNETRuntime:EventSource: { cpu_id = 0 }, { EventID = 3, EventName = "OpenFileStop", EventSourceName = "JPBLog", Payload = "" }