.NET Core with 微服务 - Elastic APM

上一次我们介绍了Seq日志聚合组件。这次要给大家介绍的是Elastic APM ,一款应用程序性能监控组件。APM 监控围绕对应用、服务、容器的健康监控,对接口的调用链、性能进行监控。在我们实施微服务后,由于复杂的业务逻辑,服务之间的调用会像蜘蛛网一样复杂。有了调用链监控后服务之间的调用可以用图像的方式展示出来,每个请求的性能,响应等都会记录下来。对于提前防范问题,以及排查问题有非常大的意义。

Elastic APM

大家对 ELK 套件一定非常熟悉。ELastic APM 同样也是 Elastic 系列产品的一个组件。Elastic APM 是一款免费开源的应用程序性能监控组件。它底层依赖 Elasticsearch 来存储跟查询数据,使用 Kibana 来展示分析数据。它支持多种程序语音的探针,包括 JAVA,.NET, Nodejs 等语音。对于 .NET 的集成非常方便,只要简单的配置就可以采集 .NET 程序的信息,对代码几乎是零入侵。

Elastic APM 的架构由4个部分组成。

  1. Elasticsearch 负责数据的持久化,查询等能力

  2. Kibana APM数据的分析展示界面

  3. APM Agent 每个服务集成对应的 sdk 后就是一个个 agent,负责采集程序的各种指标数据

  4. APM Server ,agent 采集到数据后会上报给 APM Server ,由APM Server汇集数据后存储到 Elasticsearch 。

使用 docker-compose 安装

elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.13.2restart: alwayscontainer_name: elasticsearchhostname: elasticsearchenvironment:- discovery.type=single-nodeports:- 9200:9200- 9300:9300kibana:image: docker.elastic.co/kibana/kibana:7.13.2restart: alwayscontainer_name: kibanahostname: kibanaenvironment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200ports:- 5601:5601depends_on:- elasticsearchapm_server:image: docker.elastic.co/apm/apm-server:7.13.2restart: alwayscontainer_name: apm_serverhostname: apm_servercommand: --strict.perms=false -eenvironment:- output.elasticsearch.hosts=["elasticsearch:9200"]ports:- 8200:8200depends_on:- kibana- elasticsearch

使用 docker-compose 来安装 Elastic APM 。Elastic APM 依赖 elasticsearch kibana,所以 docker-compose 文件需要定义3个service。其中 apmserver 定义dependson:kibana,elasticsearch 。

访问 http://localhost:5601 出现 kabina 界面。点击"Add Data" 出现添加 Apm Server 指引。

滚动到最后,点击 "Check APM Server Status "。

如果出现 “You have correctly setup APM Server” 的提示,说明我们的APM Server安装成功了。

在 ASP.NET Core 集成 Elastic APM

Install-Package Elastic.Apm.NetCoreAll

使用 nuget 来安装 Elastic APM 的sdk包。在 nuget 上搜索 Elastic apm 会出现多个包,这里选择 Elastic.Apm.NetCoreAll 包。

  "ElasticApm": {"ServerUrls": "http://192.168.18.164:8200", //Set custom APM Server URL"ServiceName": "ordering_service", //allowed characters: a-z, A-Z, 0-9, -, _, and space. Default is the entry assembly of the application"Environment": "dev" // Set the service environment}

在 appsettings.json 文件内添加一个 ElasticApm 节点。

  • ServerUrls:apm server 地址

  • ServiceName:服务的名称

  • Environment:环境

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseAllElasticApm(Configuration);if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}

在 startup 类的 Configure 方法的顶部注入 ElasticApm 的中间件。这样 Elastic APM 就跟 asp.net core 集成好了,整个过程还是很方便的。

查看 Kibana UI

我们把几个示例项目集成后之后运行起来,随便访问几个http接口。

打开 kibana 界面,点击菜单 “APM” 。

可以看到我们3个服务已经出现在服务列表里面。列表上显示了环境,TPM等信息。

点击 “Traces” 标签,这里就会列出刚才所有的请求列表。

随便点击一个服务,会出现这个服务的详细信息,显示了并发情况,延迟情况,已经请求的历史。

查看调用链

在微服务架构下,服务之间的调用是非常复杂的。这给我们排错的时候带来非常大的压力。现在有了 APM 可以帮我们改进这个问题。Elastic APM 可以帮我们显示每个请求的调用链情况。

以我们订单服务的获取订单详情接口为例。我们找到/order/OD001 这个请求,点击展示它的明细信息。可以看到这个请求里面包含了另外两次调用。第一次是访问Consul获取会员服务的地址,第二次是访问会员服务获取会员明细信息。点击每一次请求,里面都有详细的元数据。这为我们调试,排错,监控带来了非常大的便利。

Metrics 指标

这个页面展示了服务的硬件指标,主要是显示了CPU,内存利用率。

总结

我们通过以上内容,介绍了什么是Elastic APM ,如何安装Elastic APM,如何在 ASP.NET Core 程序里集成 Elastic APM 的 sdk ,以及简单介绍了 Kibana 上的展示信息,特别是服务调用链的内容。可以看到Elastic APM 还是非常不错的一款 APM 组件,特别是对 ASP.NET Core 的集成做到了几乎零代码入侵,界面也非常友好。

演示项目地址

https://github.com/kklldog/myhotel_microservice

相关文章

NET Core with 微服务 - 什么是微服务
.Net Core with 微服务 - 架构图
.Net Core with 微服务 - Ocelot 网关
.Net Core with 微服务 - Consul 注册中心
.Net Core with 微服务 - Seq 日志聚合

关注我的公众号一起玩转技术

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

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

相关文章

java 推送数据给js,Node.js实现数据推送

场景:后端更新数据推送到客户端(Java部分使用Tomcat服务器)。后端推送数据的解决方案有很多,比如轮询、Comet、WebSocket。1. 轮询对于后端来说开发成本最低,就是按照传统的方式处理Ajax请求并返回数据,在学校的时候实验室的项目一…

【开学季限时免费】下载19880元大数据开发全链路教程(视频+源码)

随着大数据、云计算、物联网、人工智能这些行业的发展崛起,对于大数据人才的需求越来越大,而大数据人才的培养发展周期相对较长,导致了大数据人才短缺,市场供不应求。所以也就出现了大数据开发工程师、数仓工程师、ETL工程师.....…

COM 组件设计与应用(七)

COM 组件设计与应用(七)编译、注册、调用作者:杨老师 一、前言  上两回中,咱们用 ATL 写了第一个 COM 组件程序,这回中,主要介绍编译、注册和调用方法。示例程序你已经下载了吗?如果还没有下载…

人类史上20个“最强大脑”

全世界只有3.14 %的人关注了青少年数学之旅今天给大家说道说道这人类历史上20位最强大脑,这些伟人来自各个不同的时期和领域,他们的思想和贡献对人类日后有着重大的影响,其中包括了众多的科学家,哲学家,诗人&#xff0…

LYNC2013部署系列PART4:群聊部署

前言:本篇文章将介绍LYNC2013群聊服务器的部署,在LYNC2010中,群聊服务还没集成到LYNC2010产品中,需要单独额外部署,群聊客户端也没有集成到LYNC2010客户端中。到LYNC2013中,集成工作全部搞定了。我是习惯了…

不要笑!写 | 还是 || ,还真是一个问题

这么简单的问题还写?先不要笑。打开你代码量最多的项目,搜索|或者&,看看有多少条这样的代码!前不久,我在dotnet/machinelearning上提交了一个pull request。修改内容是把"|"改成"||", 把"&"…

UNIX网络编程——ioctl 函数的用法详解

1.介绍Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口。并且还能够查看,修改,删除ARP高速缓存的信息,所以&#xf…

你对求生欲,一无所知!| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】【10】【11】【12】【13】【14】【15】(图源网络,侵权删)学到了吗?↓ ↓ ↓

C#位图BitArray 小试牛刀

前面聊了布隆过滤器,回归认识一下位图BitMap,阅读前文的同学应该发现了布隆过滤器本身就是基于位图,是位图的一种改进。难缠的布隆过滤器,这次终于通透了位图先看一个问题, 假如有1千万个整数,整数范围在1到…

装上了Visual Studio 2005

为了下Visual Studio 2005,我装上了从来没用过的BT,开着电脑下了一夜,今天早上终于下完了,2.6G呀,多么浩大的工程,比PES5还大。现在的软件动不动就是DVD,要不是还有个刻录机,我的硬盘…

在asp.net core 下定义统一的入参和出参格式

在使用.net core 开发Api的过程中,为了统一输入参数的格式,并增加一些全局必须含有的字段,比如:Code,Message,Lang等等,能采取的变通方式还是有几种的,然而都不够优雅,为…

泰勒定理的奇闻轶事

全世界只有3.14 %的人关注了青少年数学之旅泰勒展式 (Taylor expansion) 的剩余项救人一命!在俄国革命期间(1917年左右),数学物理学家塔姆 (Igor Tamm) 外出找食物,在靠近敖德萨 (Odessa) 的乡间被反共产主义的保安人员…

6月统计|.NET薪资一旦高起来,岂是其他语言能比的!

全国程序员6月平均薪资出来了,帝都和魔都平均工资超过18k,你被平均了吗?而中位数17k,你拖后腿了吗?当然,.NET开发者的目标不是平均工资,而是double!年初跳槽季,腾讯、阿里…

剑桥大学的下午茶,为何能喝出六十位诺贝尔奖获得者?

全世界只有3.14 %的人关注了青少年数学之旅英国人的骄傲是他们有世界上最古老的大学,创立于1209年的剑桥大学。英国剑桥大学每天下午有两个小时的时间,常常有计划、有组织地安排不同学科的权威教授一起在学校咖啡屋或茶园共进下午茶。在这里,…

使用bat来运行cygwin,执行脚本(命令)

2019独角兽企业重金招聘Python工程师标准>>> 这是一个没有意义的问题。 既然要跑脚本。为啥不直接在linux服务器上运行。 这个不是个人能决定的。 一般我都将功能写成jar,或者py, 然后编写bat文件, 如果是java的话,“java -jar…

.NET 下载、文档访问新姿势

dot.net 新的重定向Intro不知道大家之前有没有注意过,如果你访问 https://dot.net 的时候会自动地重定向到 https://dotnet.microsoft.com,想要访问 https://dot.net/download 的时候还是会重定向到 https://dotnet.microsoft.com,不会带着…

excel保存成matlab,matlab数据保存为excel文件

读取:A xlsread(‘Excel路径Excel的名称‘,‘工作表名称‘)例子:A xlsread(‘创新班.xlsx‘,‘Sheet2‘)A xlsread(‘创新班.xlsx‘,‘Sheet2‘,‘a1:c1‘) %读取a1 b1 c1的数据不写工作表名称,默认是第一个。写入:…

客户想你死系列,哈哈哈设计师不容易啊! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(图源网络,侵权删)学到了吗?↓ ↓ ↓

DropDownList 選項改變確認腳本

需要這個, 到網找了某先生的腳本改了改 staticpublicstringDropDownListSelectChangeConfirmScript(stringdropDownListId,stringmessage){ string script " <script> \n" " var fooIndex; \n" " function saveIndexes() \n&…

王炸!Azure云助力.NET6现高光时刻(VS2022实战尝鲜)

Azure 是一个云平台&#xff0c;旨在简化构建新式应用程序的过程。无论是选择完全在 Azure 中托管应用程序&#xff0c;还是使用 Azure 服务扩展本地应用程序&#xff0c;Azure 都可以帮助你创建可缩放且可维护的可靠应用程序。凭借你已在使用的工具&#xff08;如 Visual Stud…