ASP.NET Core 实现微服务 - Elastic APM

这次要给大家介绍的是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。其中 apm_server 定义depends_on: 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 的集成做到了几乎零代码入侵,界面也非常友好。

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

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

相关文章

自定义EasyCode模板生成CRUD

文章目录 1.生成步骤1.定义全局逻辑删除字段名称以及删除值和未删除值2.简单三层架构模板1.概览2.Req.java3.Vo.java4.Po.java5.Mapper.java6.Mapper.xml7.Service.java8.ServiceImpl.java9.Controller.java 3.通用配置生成模板1.概览2.PageInfo.java3.PageResult.java4.SunPag…

IOS开发如何从入门进阶到高级

针对iOS开发的学习,不同阶段应采取不同的学习方式,以实现高效提升.本文将iOS开发的学习分为入门、实战、进阶三个阶段,下面分别详细介绍. 一、学习社区 iOS开源中国社区 这个社区专注于iOS开发的开源项目分享与协作,汇集了大量开…

洛谷P1617————数字转英文

题目如下 思路:将1~9的英文和20~90的英文用字符串数组存储,把下标看作对应的数字进行输出,遇到0或连续多个0就输出“and”,定义l用来看枚举到哪一位了,如果是单独输入一个“0”,则直接输出zero然后结束。否…

Kubernetes集群架构

Kubernetes集群架构 Kubernetes 集群架构控制平面组件kube-apiserveretcdkube-schedulerkube-controller-managercloud-controller-manager 节点组件kubeletkebe-proxy(可选)容器运行时 插件DNSWeb UI(Dashboard)容器资源监控集群…

esp32开发笔记之一:esp32开发环境搭建vscode+ubuntu

最近想用esp32做一个物联网项目,踩坑N个终于有点心得,写下来避免和我一样的小白踩无谓的坑。 写在前面: 第一,大家一定要用linux系统作为编译工具,速度上是windows无法比的,不要因为不熟悉linux而选择win…

探索大型语言模型新架构:从 MoE 到 MoA

探索大型语言模型新架构:从 MoE 到 MoA 当前,商业科技公司纷纷投身于一场激烈的竞赛,不断扩大语言模型的规模,并为其注入海量的高质量数据,试图逐步提升模型的准确性。然而,这种看似顺理成章的发展路径逐渐…

数据结构:LinkedList与链表—面试题(三)

目录 1、移除链表元素 2、反转链表 3、链表的中间结点 4、返回倒数第k个结点 5、合并两个有序链表 1、移除链表元素 习题链接https://leetcode.cn/problems/remove-linked-list-elements/description/ 描述:给你一个链表的头节点 head 和一个整数 val &#xff…

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,现已广泛应用于农林生态,资源环境等方面,成为Science、Nature论文的…

LAMP搭建

LAMP搭建 引子:本篇文章为LAMP的搭建流程,其中L(Ubuntu)、A(Apache)、M(Mysql)、P(PHP)。 一、L → Ubuntu Step 1:在Vmware Workstation中使…

基于高斯混合模型的数据分析及其延伸应用(具体代码分析)

一、代码分析 (一)清除工作区和命令行窗口 clear; clc;clear;:该命令用于清除 MATLAB 工作区中的所有变量,确保代码运行环境的清洁,避免之前遗留的变量对当前代码运行产生干扰。例如,如果之前运行的代码中…

成为LabVIEW自由开发者

成为LabVIEW自由开发者的体验可以非常丰富且具有挑战性,同时也充满了自我成长和多样化项目的机会。 ​ 1. 高度的灵活性与自由度 工作时间与地点:作为自由开发者,你可以自由选择工作时间和地点。你可以在家工作,也可以选择在咖啡…

33.3K 的Freqtrade:开启加密货币自动化交易之旅

“ 如何更高效、智能地进行交易成为众多投资者关注的焦点。” Freqtrade 是一款用 Python 编写的免费开源加密货币交易机器人。它就像一位不知疲倦的智能交易助手,能够连接到众多主流加密货币交易所,如 Binance、Bitmart、Bybit 等(支…

maven之插件调试

当使用maven进行项目管理的时候,可能会碰到一些疑难问题。网上资料很少,可能会想着直接调试定位问题。这里以maven-compiler-plugin为例: (1)准备maven-compiler-plugin源码 进入maven 官网-》Maven Plugins-》找到对…

如何配置Cursor的显示主题模式

cursor打开代码后,默认主题显示的主要代码颜色是白色,注解是黑色的,很不习惯,摸索一下,如何配置成与VSOCDE一样的主题,方案如下。 选择菜单 "File"--"Preferences 选择“ Theme" ---&…

Windows 系统中的任务管理器是什么,打开快捷键是什么?

任务管理器是 Windows 操作系统中一个强大的工具,它允许用户监控系统的性能、启动和停止进程、管理服务、以及查看网络活动等。掌握任务管理器的快捷键可以帮助你更高效地进行这些操作。本文中简鹿办公将教你如何利用任务管理器中的快捷键来提升你的工作效率。 一、…

论文导读 | 数据库中的连接操作

1. 连接操作的背景与问题定义 在关系型数据库中,我们通常面对以下问题: 给定一个数据库实例 I \mathcal{I} I,包含若干关系(表) R { R 1 , R 2 , ⋯ , R n } \mathcal{R}\{R_1, R_2, \cdots, R_n\} R{R1​,R2​,⋯…

最近在盘gitlab.0.先review了一下docker

# 正文 本猿所在产品的代码是保存到了一个本地gitlab实例上,实例是别的同事搭建的。最近又又又想了解一下,而且已经盘了一些了,所以写写记录一下。因为这个事儿没太多的进度压力,索性写到哪儿算哪儿,只要是新了解到的…

【搜索】【推荐】大 PK

引言 在当今信息爆炸的时代,如何从海量数据中精准地为用户推荐最相关的内容成为了科技领域的关键挑战。搜推技术作为推荐系统的核心组件,扮演着至关重要的角色。本文将深入探讨这两种技术背后的方法论,剖析它们各自面临的难点,并…

多模态大模型初探索:通过ollama部署多模态大模型

文章目录 前言模型下载 前言 今天和同事聊天,聊到多模态大模型,感觉可以作为2025年的一个新的探索方向。希望和大家一起学习,一起进步。 今天也是尝试了我能想到的最基本最快速地本地部署多模态大模型的方式,那便是使用ollama。…

maven如何从外部导包

1.找到你项目的文件位置,将外部要导入的包复制粘贴进你当前要导入的项目下。 2.从你的项目目录下选中要导入的包的pom文件即可导包成功 注意一定是选中对应的pom文件 导入成功之后对应的pom.xml文件就会被点亮