自定义EventSource(一)EventCounter

之前的Counters都是系统内置的,我们只需在进程外,或进程内采集,然后交给专门的展示指标工具即可。本篇说一下自定义EventSource,来采集自己业务中,或自己产品中的指标收集方式。

自定义EventSource是以EventCounters作为核心,EventCounters的作用是实时自动定期推送指标到侦听器的。

在自定义EventSource时,可以使用四种EventCounter:

  • EventCounter:统计指标收集器,比如平均值,最大值,最小值

  • PollingCounter:自定义统计指标收集器,通过自定义统计方法的方式实现对指标的统计

  • IncrementingEventCounter:累加指标收集器,采集一定时间段内的指标汇总

  • IncrementingPollingCounter:自定义累加指标收集器,通过自定义累函数,实现指标收集


本例先说一下用EventCounter实现自定义EventSource。

本例是定义了一个WorkingEventSouce事件源,定义了WorkingEventListener监听器,和发送指标采集指标的类型EventCounterDemo。

WorkingEventSouce事件源

/// <summary>
/// Working业务事件源
/// </summary>
[EventSource(Name = "WorkingEventSource")]
public sealed class WorkingEventSource : EventSource
{public static readonly WorkingEventSource Instance = new WorkingEventSource();private EventCounter _workingCounter;private WorkingEventSource(){_workingCounter = new EventCounter("working-time", this){DisplayName = "Working Time",DisplayUnits = "ms"};}     /// <summary>/// Working发送业务指标/// </summary>/// <param name="elapsedMilliseconds"></param>public void Working(long elapsedMilliseconds){_workingCounter?.WriteMetric(elapsedMilliseconds);}protected override void Dispose(bool disposing){_workingCounter?.Dispose();_workingCounter = null;base.Dispose(disposing);}
}

WorkingEventListener监听器

/// <summary>
/// 指标输出委托
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public delegate void WriteContent(string key, string value);
/// <summary>
/// 指标监听器
/// </summary>
public class WorkingEventListener : EventListener
{protected readonly string[] _countersName = new string[] { "WorkingEventSource" };public event WriteContent WriteEvent;protected override void OnEventSourceCreated(EventSource source){if (_countersName.Contains(source.Name)){EnableEvents(source, EventLevel.Verbose, EventKeywords.All, new Dictionary<string, string>(){["EventCounterIntervalSec"] = "1"});}}protected override void OnEventWritten(EventWrittenEventArgs eventData){if (eventData.EventName.Equals("EventCounters")){for (int i = 0; i < eventData.Payload.Count; ++i){if (eventData.Payload[i] is IDictionary<string, object> eventPayload){var counterName = "";var counterValue = "";if (eventPayload.TryGetValue("DisplayName", out object displayValue)){counterName = displayValue.ToString();}if (eventPayload.TryGetValue("Mean", out object value) ||eventPayload.TryGetValue("Increment", out value)){counterValue = value.ToString();}WriteEvent(counterName, counterValue);}}}}
}

发送指标采集指标的类型EventCounterDemo

public class EventCounterDemo
{public static void Run(){var listener = new WorkingEventListener();listener.WriteEvent += Listener_WriteEvent;new Thread(Working).Start();}//以控制台方式展示采集到的指标private static void Listener_WriteEvent(string key, string value){Console.WriteLine($"{key}:{value}");}/// <summary>/// 模拟写业务指标,每秒写两次,i递增/// </summary>static void Working(){int i = 0;while (true){var count = i;Console.WriteLine(count);WorkingEventSource.Instance.Working(count);System.Threading.Thread.Sleep(500);i += 1;}}
}

调用方法:

    class Program{static void Main(){EventCounterDemo.Run();Console.Read();}}

运行结果如下,可以看到,每少发送两次指标,而采集的结果是取其平均值展示了出来。

下图是跟踪EventListener的OnEventWritten的Payload有效载荷时的数据,可以看到有最大最小值,时间间隔,间隔里的次数,平均值,和当前指标类型为Mean等信息,这是EventCounter指标器的类型原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看完这些自动化原理图,有一种豁然开朗的感觉

全世界只有3.14 % 的人关注了青少年数学之旅机械动态图有的可以洞察工作原理&#xff0c;有的可以洞察结构&#xff0c;有的可以表达工作过程&#xff0c;不学机械的也能看得懂&#xff01;今天的动态图总有一些你没有见过&#xff0c;相当棒&#xff01;一、机械原理篇球齿机机…

WPF开源项目:AIStudio.Wpf.AClient

介绍Wpf客户端&#xff0c;AIStudio.Wpf.AClient软件架构本框架使用Prism做MVVM&#xff0c;优点咱就不说了&#xff0c;主要了容器注入&#xff0c;消息和DI&#xff0c;比自己写省很多事。网上有很多标准的MVVM的使用方法&#xff0c;但是没有形成一个系统级的框架。本框架从…

有一说一,确实。。 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅来源微博 月刊勇者KuMa君

linux一键启动,Linux一键启动、停止、重启Tomcat sh脚本

使用方式sh service-tomcat.sh {start|stop|restart} {si|cas|fr|all}#使用过程总配置一下即可属性名字#1、COMMANDPREFIX#2、APPS#3、APPS2#4、NAMES############################ 统一启动停止前缀 begin# 统一启动停止前缀 模块名称 tomcat7_si_20080COMMANDPREFIX"to…

颠覆认知!关于c²= b² + a²,你不知道的N个事实

全世界只有3.14 % 的人关注了青少年数学之旅数是什么&#xff1f;毕达哥拉斯会告诉你&#xff0c;数是众神之母&#xff0c;万物之源——节选自《数学之旅闪耀人类的54个数学家》一般人看来&#xff0c;勾股定理只存在于特定的三角形或几何图形中。但实际上&#xff0c;绝大多数…

TinyUI组件开发示例

2019独角兽企业重金招聘Python工程师标准>>> TinyUI实际上并不是一个具体的UI展现组件&#xff0c;它只是一个UI构建体系。它可以适应于各种HtmlCSSJS的体系架构中。 TinyUI主要解决下面的问题&#xff1a; UI中JS的引入与顺序&#xff0c;JS合并的问题 UI中css的…

一键搞定ASP.NET Core Web API幂等性

API的幂等性&#xff08;Idempotent&#xff09;&#xff0c;是指调用某个方法1次或N次对资源产生的影响结果都是相同的。GET请求默认是幂等的&#xff0c;因为它只是查询资源&#xff0c;而不会修改资源。而POST请求默认是不幂等的&#xff0c;多次调用POST方法可能会产生不同…

你这么爱听歌,一定活得很难过吧 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅让笑声飞沙雕营长大象ROV全球第一最搞搞笑热门神吐槽朱莉生活日记

Web开发中的矢量绘图(vml,svg)处理和应用

为什么80%的码农都做不了架构师&#xff1f;>>> 前言 1991 年物理学家 Tim Berners-Lee 首次在因特网上发布了 HTML 的第一版描述规范文档。经过了 20 多年的发展&#xff0c;HTML 语言成为如今编程最为广泛的语言和互联网上采用最广的文档格式。虽然 HTML 发展十分…

C#新手该如何规划学习【学习路线指南】

花费了几天时间整理了C#学习路线图&#xff0c;可以说是纯野生C#程序员成长路线规划&#xff0c;在这里分享下&#xff0c;希望可以帮助到想从事C#开发的同学们。本人阅历尚浅&#xff0c;有些知识点可能分享不正确&#xff0c;希望广大网友评论区补充&#xff0c;我会同步修正…

丰巢刷脸取件被小学生破解,号称3D、深度学习加持的人脸识别究竟靠谱吗?...

全世界只有3.14 % 的人关注了青少年数学之旅经费不够&#xff0c;2D来凑&#xff1f;前些天&#xff0c;丰巢智能快递柜被“小学生”用打印照片破解&#xff0c;让人大跌眼镜。据《人民日报》报道&#xff0c;嘉兴上外秀洲外国语学校402班科学小队向都市快报《好奇实验室》报料…

伍迷随想冷饭集 之 瞻前顾后之随想

哈哈&#xff0c;很是开心&#xff0c;今天是我的生日&#xff0c;由于各地对年龄的计算方法不同&#xff0c;你认为我是25周岁、26岁、还是27虚岁都行&#xff0c;反正是又老一年了。几乎在每年的这个时候&#xff0c;我都会对自己做一个小小的总结&#xff0c;不过以前都没有…

boost pool内存池库使用简要介绍

2019独角兽企业重金招聘Python工程师标准>>> 我厂内存次神马的一般都自己实现。我曾经也自己写过一个demo(mempool)。后来发现boost库里面有一个内存池库boost pool&#xff0c;貌似很好用&#xff0c;使用挺好&#xff0c;例子可以贴出来。 boost一共有4种内存池&…

嫁给我好吗?| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅

.NET Core etcd 配置源

etcd 是一个高可用的 Key/Value 存储系统&#xff0c;主要用于共享配置和服务发现&#xff0c;和目前比较主流的配置中心&#xff08;如&#xff1a;Spring Cloud Config、Apollo、Consul、Nacos&#xff09;、注册中心&#xff08;如&#xff1a;Zookeeper、Eureka、Consul、N…

继相对论、量子论之后,它的出现,给牛顿又来了致命一刀

全世界只有3.14 % 的人关注了青少年数学之旅前两天&#xff0c;有模友留言。今天&#xff0c;它来了。“微小的变化能带动整个系统的长期的巨大的连锁反应。”——节选自其实“混沌”一词&#xff0c;最早指的是宇宙未形成之前的混乱状态。/此混沌非彼馄饨/在希腊神话中&#x…

django基础1--django安装与helloworld测试

第一步测试服务器是否安装python直接输入python命令即可&#xff0c;ctrld退出第二步上传django安装包&#xff0c;解压进入后python setup.py install 安装第三步Python导入django看看是否生效先python进入python环境&#xff0c;然后import django命令查看是否正常执行第四步…

这就是你在妈妈肚子里尿尿的样子 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅其实“站着说话不腰疼”是有科学依据的不同姿势下腰椎承受的压力是这样的三思逍遥这是你在妈妈肚子里尿尿的样子不少人觉得葡萄上白色的这一层粉是“脏”的表现其实它是葡萄的“果粉”不仅对人体无害还可以代表这个葡萄很新鲜现实告诉…

c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法

usingSystem;usingSystem.IO;usingSystem.Data;usingSystem.Text;usingSystem.Diagnostics;usingSystem.Security;usingSystem.Security.Cryptography;/**//* * .Net框架由于拥有CLR提供的丰富库支持&#xff0c;只需很少的代码即可实现先前使用C等旧式语言很难实现的加密算法…

C# WPF MVVM项目实战(进阶①)

这篇文章还是在之前用Caliburn.Micro搭建好的框架上继续做的开发&#xff0c;今天主要是增加了一个用户窗体TestFormView&#xff0c;然后通过TabControl&#xff0c;将新增的窗体加载到主界面上进行分页显示&#xff0c;新增的页面引用了WPF UI&#xff1a;WPF Datagrid合并表…