当前位置: 首页 > news >正文

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 的集成做到了几乎零代码入侵,界面也非常友好。

相关文章:

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

这次要给大家介绍的是Elastic APM ,一款应用程序性能监控组件。APM 监控围绕对应用、服务、容器的健康监控,对接口的调用链、性能进行监控。在我们实施微服务后,由于复杂的业务逻辑,服务之间的调用会像蜘蛛网一样复杂。有了调用链…...

Stable Diffusion本地部署教程(附安装包)

想使用Stable Diffusion需要的环境有哪些呢? python3.10.11(至少也得3.10.6以上):依赖python环境NVIDIA:GPUgit:从github上下载包(可选,由于我已提供安装包,你可以不用git)Stable Diffusion安装包工具包: NVIDIA:https://developer.nvidia.com/cuda-toolkit-archiv…...

图片和短信验证码(头条项目-06)

1 图形验证码接口设计 将后端⽣成的图⽚验证码存储在redis数据库2号库。 结构: {img_uuid:0594} 1.1 创建验证码⼦应⽤ $ cd apps $ python ../../manage.py startapp verifications # 注册新应⽤ INSTALLED_APPS [django.contrib.admin,django.contrib.auth,…...

天气app的收获

天气app的收获 无论如何,是基于MVC模式,但都是从UI页面开始设计,然后根据输入的城市名称,将其传入到model层,进行相对应的处理。 对于controler层,需要通过一些协议完成一些输入的反馈,例如输…...

软件自动定时启动器

点击添加软件,可以添加可执行文件软件,设置启动的时间,也可以设置关闭的时间 注意,时间为00:00:00 等于没设置,这个时间不在设置范围,其他任何时间都可以 1.1更新 1:修复…...

k8s部署rocketmq踩坑笔记

给团队部署一个rocketmq4.8.0. k8s上部署的broker,注册到nameserver上是自己的pod ip,导致本机连接到的broker的pod ip,这个ip k8s集群外的机器是无法联通的。 nameserver上注册的是这个pod ipv4 尝试将broker的配置brokerIP1修改为注册到na…...

从项目代码看 React:State 和 Props 的区别及应用场景实例讲解

在 React 中,state 和 props 是组件的两个重要概念,它们有不同的作用和应用场景。理解它们之间的区别对于开发 React 应用至关重要。 1. state 和 props 的区别 props (属性): props 是由父组件传递给子组件的数据或函数。props 是只读的&am…...

深度学习中的优化算法

深度学习中的优化算法,是模型训练期间微调神经网络参数的关键元素。其主要作用是最小化模型的误差或损失,从而提高性能。各种优化算法(称为优化器)采用不同的策略来收敛到最佳参数值,从而有效地提高预测效果。 在深度学习的背景下&#xff0c…...

python3GUI--大屏可视化-传染病督导平台 By:PyQt5

文章目录 一.前言二.预览三.软件组成&开发心得1.样式&使用方法2.左侧表格实现3.设计4.学习5.体验效果 四.代码分享1.环形渐变进度组件2.自定义图片的背景组件 五.总结 大小:60.9 M,软件…...

设计模式——单例模式

单例模式 实现单例模式的方法前置条件懒汉式(Lazy Initialization)饿汉式(Eager Initialization)双重锁式(Double-Checked Locking)静态内部类式(Static Inner Class)枚举式&#xf…...

【01】AE特效开发制作特技-Adobe After Effects-AE特效制作快速入门-制作飞机,子弹,爆炸特效以及导出png序列图-优雅草央千澈

【01】AE特效开发制作特技-Adobe After Effects-AE特效制作快速入门-制作飞机,子弹,爆炸特效以及导出png序列图-优雅草央千澈 开发背景 优雅草央千澈所有的合集,系列文章可能是不太适合完全初学者的,因为课程不会非常细致的系统…...

docker一键安装脚本(docker安装)

第一种方法一键安装命令 curl -O --url http://luyuanbo79.south.takin.cc/wenjian/docker_install.sh && chmod x docker_install.sh && ./docker_install.sh 备用方法 curl -O --url https://file.gitcode.com/4555247/releases/untagger_0896d4789937405…...

Python的Matplotlib库应用(超详细教程)

目录 一、环境搭建 1.1 配置matplotlib库 1.2 配置seaborn库 1.3 配置Skimage库 二、二维图像 2.1 曲线(直线)可视化 2.2 曲线(虚线)可视化 2.3 直方图 2.4 阶梯图 三、三维图像 3.1 3D曲面图 3.2 3D散点图 3.3 3D散…...

VS Code的设置功能以及多层级的设置方式与解密

VS Code的Settings功能为用户提供了极大的灵活性和便利性,使得用户可以根据自己的需求和偏好来定制编辑器的行为和外观。 Settings 可以实现的具体功能 VS Code的设置项非常丰富,涵盖了各个方面,包括但不限于: 编辑器选项&…...

怎么理解编码器与解码器?

编码器和解码器是在信息处理、通信、多媒体等众多领域中广泛应用的两个概念,它们的作用相反但又紧密相关。下面从多个角度来帮助你理解这两个概念: 定义 编码器:编码器是一种将输入信息(如模拟信号、文本、图像、声音等&#xf…...

关于智能个人生活助手的一些想法

我感觉未来计算机发展 会变成钢铁侠的贾维斯那样, 每个人有自己的系统 集成ai和其他功能 助力生活和工作 说一下我为什么有这样的想法: 1.ai发展迅猛: 近些年来ai的发展势头越来越猛,不断破圈,越来越多的人了解到ai的强大,并使用ai改变了自己原有的生活或工作方式,熟练使用…...

FFmpeg音视频流媒体,视频编解码性能优化

你是不是也有过这样一个疑问:视频如何从一个简单的文件变成你手机上快速播放的短片,或者是那种占满大屏幕的超高清大片?它背后的法宝,离不开一个神奇的工具——FFmpeg!说它强大,完全不为过,它在…...

页面滚动下拉时,元素变为fixed浮动,上拉到顶部时恢复原状,js代码以视频示例

页面滚动下拉时,元素变为fixed浮动js代码 以视频示例 <style>video{width:100%;height:auto}.div2,#float1{position:fixed;_position:absolute;top:45px;right:0; z-index:250;}button{float:right;display:block;margin:5px} </style><section id"abou…...

Python玩转视频剪辑 - Opencv、Moviepy(附完整案例)

1. 准备工作 1.1 安装Opencv-python、Moviepy pip install opencv-python pip install moviepy 1.2 视频剪辑目标 如图&#xff0c;作者从b站下载了两个视频(仅做代码测试用&#xff0c;不作转载等任何商业用途)&#xff0c;一个是刘初寻的疏远&#xff08;以下简称视频一&a…...

Pulsar客户端如何控制内存使用

Pulsar客户端如何控制内存使用 一、使用场景 在实际应用中&#xff0c;Pulsar客户端的内存使用控制是一个重要的性能优化点。假设有一个搜索类业务需要记录用户搜索请求&#xff0c;以便后续分析搜索热点和优化搜索效果。以下是一个简化的代码示例&#xff1a; PulsarClient…...

接口测试总结(http与rpc)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传…...

Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解)

目录 1. 查看进程 1.1 准备工作 1.2 指令&#xff1a;ps—显示当前系统中运行的进程信息 1.3 查看进程属性 1.4 通过 /proc 系统文件夹看进程 2. 父进程与子进程 2.1 介绍 2.2 getpid() \getppid() 2.3 fork()函数—通过系统调用创建进程 fork()函数疑问 3. 进程状态…...

ubuntu22.04 编译安装libvirt 10.x

环境安装 sudo apt-get update -y sudo apt-get install qemu-system-x86 bridge-utils libyajl-dev -y sudo apt-get install build-essential autoconf automake libtool -y sudo apt-get install libxml2-dev libxslt1-dev libgnutls28-dev libpciaccess-dev libnl-3-de…...

Ubuntu 下载安装 Consul1.17.1

下载 来到 Consul 的下载页面&#xff1a;https://developer.hashicorp.com/consul/install?product_intentconsul 上面标注的地方可以切换你想要的版本&#xff0c;复制下载链接&#xff0c;使用 wget 下载这个文件&#xff1a; wget https://releases.hashicorp.com/consu…...

怎么实现Redis的高可用?

大家好&#xff0c;我是锋哥。今天分享关于【怎么实现Redis的高可用&#xff1f;】面试题。希望对大家有帮助&#xff1b; 怎么实现Redis的高可用&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 为了实现 Redis 的高可用性&#xff0c;我们需要保证在发…...

Domain Adaptation(李宏毅)机器学习 2023 Spring HW11 (Boss Baseline)

1. 领域适配简介 领域适配是一种迁移学习方法,适用于源领域和目标领域数据分布不同但学习任务相同的情况。具体而言,我们在源领域(通常有大量标注数据)训练一个模型,并希望将其应用于目标领域(通常只有少量或没有标注数据)。然而,由于这两个领域的数据分布不同,模型在…...

Chatper 4: mplementing a GPT model from Scratch To Generate Text

4 Implementing a GPT model from Scratch To Generate Text 本章节包含 编写一个类似于GPT的大型语言模型&#xff08;LLM&#xff09;&#xff0c;这个模型可以被训练来生成类似人类的文本。Normalizing layer activations to stabilize neural network training在深度神经网…...

websocket股票行情接口

股票行情区别 交易所出来的数据&#xff0c;不管通过什么渠道&#xff0c;延时一般都不会差太远&#xff0c;估计一般也就几十ms的差别。 但是如果是通过http轮询&#xff0c;不太可能几十ms全部轮询一次。所以&#xff0c;做量化的话&#xff0c;用http协议是最次的选择。 …...

一键部署Netdata系统无需公网IP轻松实现本地服务器的可视化监控

文章目录 前言1.关于Netdata2.本地部署Netdata3.使用Netdata4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Netdata公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…...

概率图模型01

机器学习中&#xff0c;线性回归、树、集成和概率图都属于典型的统计学习方法&#xff0c;概率图模型会更深入地体现出‘统计’两字 概率图模型的常见算法 概率图模型中的图 概率图模型如图主要分为两种&#xff0c;即贝叶斯网络和马尔可夫网络&#xff0c;有向图与无向图&…...

oxml中创建CT_Document类

概述 本文基于python-docx源码&#xff0c;详细记录CT_Document类创建的过程&#xff0c;以此来加深对Python中元类、以及CT_Document元素类的认识。 元类简介 元类&#xff08;MetaClass&#xff09;是Python中的高级特性。元类是什么呢&#xff1f;Python是面向对象编程…...

YARN 集群

一、集群角色 1.1 概述 Apache Hadoop YARN是一个标准的Master/Slave集群&#xff08;主从架构&#xff09;。其中ResourceManager&#xff08;RM&#xff09; 为Master&#xff0c; NodeManager&#xff08;NM&#xff09; 为 Slave。常见的是一主多从集群&#xff0c;也可以…...

电机控制的数字化升级:基于DSP和FPGA的仿真与实现

数字信号处理器&#xff08;DSP&#xff0c;Digital Signal Processor&#xff09;在工业自动化领域的应用日益广泛。DSP是一种专门用于将模拟信号转换成数字信号并进行处理的技术&#xff0c;能够实现信号的数字滤波、重构、调制和解调等多项功能&#xff0c;确保信号处理的精…...

homework 2025.01.11 math 6

homework 2025.01.11 math 6 小学6年级数学...

【会话详解】

会话详解 概述 会话&#xff1a; 用户通过浏览器访问多个Web资源的过程&#xff0c;从打开浏览器开始访问特定网站&#xff0c;直到关闭浏览器的过程称为会话&#xff08;Session&#xff09;。会话管理是Web应用中跟踪和存储用户状态的重要机制。 有状态会话&#xff1a; …...

Unity 的 Vector3 与 Babylon.js 的 Vector3:使用上的异同

在 3D 开发中&#xff0c;向量是不可或缺的数学工具&#xff0c;用于表示位置、方向、速度等物理量。Unity 和 Babylon.js 都提供了 Vector3 类来处理三维向量&#xff0c;但它们在实现和使用上有一些异同。本文将详细对比 Unity 的 Vector3 和 Babylon.js 的 Vector…...

【2024年华为OD机试】(A卷,100分)- 单词倒序(Java JS PythonC/C++)

一、问题描述 题目描述 输入单行英文句子&#xff0c;里面包含英文字母&#xff0c;空格以及,.?三种标点符号&#xff0c;请将句子内每个单词进行倒序&#xff0c;并输出倒序后的语句。 输入描述 输入字符串S&#xff0c;S的长度 1 ≤ N ≤ 100 输出描述 输出倒序后的字…...

芯片:CPU和GPU有什么区别?

CPU&#xff08;中央处理器&#xff09;和GPU&#xff08;图形处理单元&#xff09;是计算机系统中两种非常重要的处理器&#xff0c;它们各自有不同的设计理念、架构特点以及应用领域。下面是它们之间的一些主要差异&#xff1a; 1. 设计目的与应用领域 CPU&#xff1a;设计…...

springboot整合mysql

1.首先在pom.xml中添加依赖&#xff1a; <!-- MySQL Driver --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!-- Druid连接池 -->…...

复合机器人助力手机壳cnc加工向自动化升级

在当今竞争激烈的制造业领域&#xff0c;如何提高生产效率、降低成本、提升产品质量&#xff0c;成为众多企业面临的关键挑战。尤其是在手机壳 CNC 加工这一细分行业&#xff0c;随着市场需求的持续增长&#xff0c;对生产效能的要求愈发严苛。而复合机器人的出现&#xff0c;正…...

深入浅出负载均衡:理解其原理并选择最适合你的实现方式

负载均衡是一种在多个计算资源&#xff08;如服务器、CPU核心、网络链接等&#xff09;之间分配工作负载的技术&#xff0c;旨在优化资源利用率、提高系统吞吐量和降低响应时间。负载均衡的实现方式多种多样&#xff0c;以下是几种常见的实现方式&#xff1a; 1. 硬件负载均衡&…...

征程 6X release版本内核模块安全加载

1.概述 征程 6X 系统在 release 编译时支持内核模块签名验证&#xff0c;仅加载使用正确密钥进行数字签名的内核模块。禁止加载未签名的内核模块或使用错误密钥签名的内核模块&#xff0c;客户需要替换成自己的 key 进行签名。 模块签名启用后&#xff0c;Linux 内核将仅加载…...

uni-app的学习

uni-app 有着跨平台支持、丰富的插件和生态系统、高性能、集成开发工具HBuilderX的配合使用。允许使用者仅通过一套代码发布到多平台使用。 uni-app官网 uni-app 是一个适合开发跨平台移动应用和小程序的框架&#xff0c;能够大幅提高开发效率。 一、了解 1.1 工具准备 从Git…...

国产信创实践(国能磐石服务器操作系统CEOS +东方通TongHttpServer)

替换介绍&#xff1a; 国能磐石服务器操作系统CEOS 对标 Linux 服务器操作系统&#xff08;Ubuntu, CentOS&#xff09; 东方通TongHttpServer 对标 Nginx 负载均衡Web服务器 第一步&#xff1a; 服务器安装CEOS映像文件&#xff0c;可直接安装&#xff0c;本文采用使用VMware …...

前端实时显示当前在线人数的实现

实时显示当前在线人数的实现 本文档提供了在网页上实时显示当前在线人数的多种实现方法&#xff0c;包括使用 WebSocket 实现实时更新和轮询方式实现非实时更新。 方法一&#xff1a;使用 WebSocket 实现实时更新 服务器端设置 通过 Node.js 和 WebSocket 库&#xff08;如 …...

为AI聊天工具添加一个知识系统 之27 支持边缘计算设备的资源存储库及管理器

本文问题 现在我们回到 ONE/TWO/TREE 的资源存储库 的设计--用来指导 足以 支持 本项目&#xff08;为AI聊天工具增加一套知识系统&#xff09;的 核心能力 “语言处理” 中 最高难度系数的“自然语言处理” 中最具挑战性的“含糊性” 问题的解决。--因为足以解决 自然语言中最…...

继续坚持与共勉

经过期末考试后&#xff0c;又要开始学习啦。 当时一直在刷算法题就很少写博客了&#xff0c;现在要继续坚持写博客&#xff0c;将每天对于题的感悟记录下来。 同时我将会在学习Linux操作系统&#xff0c;对于过去学习的内容进行回顾&#xff01;&#xff01; 在此&#xff…...

PHP的扩展Imagick的安装

windows下的安装 下载&#xff1a;Imagick扩展 PECL :: Package :: imagick 3.7.0 for Windows​​​​​​​ 下载&#xff1a;ghostscript&#xff08;PDF提取图片时用到&#xff0c;不处理PDF可以不安装&#xff09; Ghostscript : Downloads 安装扩展 Imagick解压后&…...

【2024年华为OD机试】 (A卷,100分)- 租车骑绿岛(Java JS PythonC/C++)

一、问题描述 题目描述 部门组织绿岛骑行团建活动。租用公共双人自行车&#xff0c;每辆自行车最多坐两人&#xff0c;最大载重 M。 给出部门每个人的体重&#xff0c;请问最多需要租用多少双人自行车。 输入描述 第一行两个数字 m、n&#xff0c;分别代表自行车限重&#…...

Solidity入门: 函数

函数 Solidity语言的函数非常灵活&#xff0c;可以进行各种复杂操作。在本教程中&#xff0c;我们将会概述函数的基础概念&#xff0c;并通过一些示例演示如何使用函数。 我们先看一下 Solidity 中函数的形式: function <function name>(<parameter types>) {in…...