自定义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;一、机械原理篇球齿机机…

编程之美 set 1 不要被阶乘吓倒

总结 1. 使用加法解决指数问题时, 可用背包问题的变形 2. 题目用到的公式和求解 1~N 中 1 出现的次数的公式类似 题目 1. 给定一个整数 N, 那么 N 的阶乘 N! 末尾有多少个 0 呢 2. 求解 N! 的二进制表示中最低位 1 的位置 思路 1. 第一道题相当于求解 N! 分别是 2^a 和 5 ^b, 第…

apache weblogic ssl linux,apache基于ssl配置weblogic(完结篇)

眼睛基本已经无大碍。今天使用apache连接weblogic&#xff0c;并使用ssl&#xff0c;终于完成&#xff0c;最终选用的方式是前端使用apache来进行ssl处理&#xff0c;weblogic只负责相关的业务处理。在apache一边&#xff0c;载入mod_ssl.so、mod_rewrite.so和mod_wl.so&#x…

×××祥解及其配置示例

转载于:https://blog.51cto.com/yaoyao/21464

动态的管理ASP.NET DataGrid数据列【转载】

在ASP.NET的DataGrid数据显示控件编程中&#xff0c;我们有几种方式可以增加DataGrid columns。其中最常见的方法是在web forms设计器中增加&#xff0c;通过在控件工具箱中拖访DataGrid控件到web设计页面&#xff0c;然后在属性生成器中增加Columns列;还有一种方式就是在HTML视…

MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题

这个话题要从哪里说起呢。博主小白一个&#xff0c;最近调试程序时(WIN-MSVC)连一些基本问题都没弄懂&#xff0c;本着遇见问题一定要解决的原则&#xff0c;下面来说下MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题&#xff1a;一 动态库DLL 静态库LIBMSVC中工程只有三种类型…

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…

jquery技巧总结

一、简介1.1、概述随着WEB2.0及ajax思想在互联网上的快速发展传播&#xff0c;陆续出现了一些优秀的Js框架&#xff0c;其中比较著名的有Prototype、YUI、jQuery、mootools、Bindows以及国内的JSVM框架等&#xff0c;通过将这些JS框架应用到我们的项目中能够使程序员从设计和书…

另一种阶乘问题

大家都知道阶乘这个概念&#xff0c;举个简单的例子&#xff1a;5&#xff01;1*2*3*4*5.现在我们引入一种新的阶乘概念&#xff0c;将原来的每个数相乘变为i不大于n的所有奇数相乘例如&#xff1a;5!!1*3*5.现在明白现在这种阶乘的意思了吧&#xff01; 现在你的任务是求出1!!…

让 Hangfire 使用 MongoDB 存储

MongoDB 支持Hangfire库。通过使用这个库&#xff0c;您可以将所有作业信息存储在 MongoDB 中。要安装 Hangfire MongoDB Storage&#xff0c;请在 Nuget 包管理器控制台中运行以下命令&#xff1a;PM> Install-Package Hangfire.Mongopublic void ConfigureServices(IServi…

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

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

Win2003 Server安全配置完整篇

Win2003 Server安全配置完整篇一、先关闭不需要的端口   我比较小心&#xff0c;先关了端口。只开了3389 21 80 1433有些人一直说什么默认的3389不安全&#xff0c;对此我不否认&#xff0c;但是利用的途径也只能一个一个的穷举爆破&#xff0c;你把帐号改 了密码设置为十五六…

c语言长整数转化为16进制字符串,一个30位的字符串十进制长整数怎么转换为对应的十六进制和八进制...

C/C code#include #include using namespace std;inline int compare(string str1,string str2) {//相等返回0&#xff0c;大于返回1&#xff0c;小于返回-1if (str1.size()>str2.size()) return 1; //长度长的整数大于长度小的整数else if (str1.size()else return str1.co…

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全球第一最搞搞笑热门神吐槽朱莉生活日记

暴笑小笑话集----转自通信公社

07-4-11.女&#xff1a;“只要有钱&#xff0c;我嫁给谁都行。”男&#xff1a;“银行的保险柜你嫁吗&#xff1f;” 2.争吵的时候&#xff0c;男人和女人的区别就像是和机关枪的区别。3.我妻子想减肥&#xff0c;所以她每天都去骑马。结果马一个月之中瘦了四十斤。4.病人&…

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

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