首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用lttng过滤EventSource事件

如何使用lttng过滤EventSource事件
EN

Stack Overflow用户
提问于 2019-05-07 07:15:04
回答 1查看 235关注 0票数 1

使用:.NET Core2.2 on linux UST tracing / lttng。

我试图只侦听我在应用程序中生成的自定义EventSource事件(以及其他一些我特别感兴趣的事件,但它们并不是本文讨论的因素)。我正在将这些消息发送到lttng-relayd守护进程,并希望在一定程度上控制事件数据量。打开EventSource提供程序会产生大量我不想要或不需要的信息,它有时会淹没我的频道。

lttng enable-event --userspace --tracepoint DotNETRuntime:EventSource

当我查看推送到relayd的数据时,我看到了各种各样的内置事件,我希望完全避免采样:

线程DotNETRuntime:EventSource__System.Diagnostics.Eventing.FrameworkEventSource -线程传输发送: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过滤的语法不是很清楚。

有没有对lttng有这方面经验的人

EN

回答 1

Stack Overflow用户

发布于 2020-01-30 22:00:51

首先允许跟踪:

代码语言:javascript
复制
export COMPlus_PerfMapEnabled=1
export COMPlus_EnableEventLog=1

或者使用PowerShell

代码语言:javascript
复制
$env:COMPlus_PerfMapEnabled=1
$env:COMPlus_EnableEventLog=1

根据以下代码:

代码语言:javascript
复制
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();
        }
    }
}

下面是我如何只过滤我的事件:

代码语言:javascript
复制
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

您将收到:

代码语言:javascript
复制
[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 = "" }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56013486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档