Elastic AMP监控.NET程序性能
什么是Elastic AMP
Elastic APM 是一个应用程序性能监控系统。它可以请求的响应时间、数据库查询、对缓存的调用、外部 HTTP 请求等的详细性能信息,可以实时监控软件服务和应用程序。这可以帮助我们快速查明和修复性能问题。
Elastic APM 还会自动收集未处理的错误和异常。因此我们可以在出现新错误时识别它们并密切关注特定错误发生的次数。
服务器指标是另一个重要的信息来源。Elastic APM 代理会自动获取基本的主机级别指标和特定于代理的指标。
Elastic APM 目前支持 Node.js, Python, Ruby, PHP, Java, Go, RUM (JS), 和.NET.
工作原理
Elastic AMP 通过Agent收集应用程序的指标信息
Agent将收集的信息上传至AMP Server
AMP Server对数据进行聚合后,存储至Elasticsearch
通过Kibana查看指标信息
环境安装
我们通过Docker搭建一个单机的环境来演示Elastic APM的功能。
1.安装ElasticSearch
docker network create elastic
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2
docker run -d --name es01-test --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.15.2
2.安装Kibana
docker pull docker.elastic.co/kibana/kibana:7.15.2
docker run -d --name kib01-test --net elastic -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es01-test:9200" docker.elastic.co/kibana/kibana:7.15.2
3.安装ElasticAPM
docker run -d -p 8200:8200 --name=apm-server --net elastic --user=apm-server docker.elastic.co/apm/apm-server:7.15.2 --strict.perms=false -e -E output.elasticsearch.hosts=["es01-test:9200"]
代码演示
Elastic AMP支持.NET Framwork4.6.1+和.NET Core2.1+,支持的组件有:
GRPC,HttpClient,EF6,EFCore,ElasticSearch,Mysql,Mongo,Redis,Kafka,RabbitMQ等,具体详见https://www.elastic.co/guide/en/apm/agent/dotnet/master/supported-technologies.html。我们这次使用.NET Framwork新建一个Web项目来演示
1.新增Web项目
2.新增Nuget包
<package id="Elastic.Apm" version="1.12.1" targetFramework="net472" /><package id="Elastic.Apm.AspNetFullFramework" version="1.12.1" targetFramework="net472" /><package id="Elastic.Apm.SqlClient" version="1.12.1" targetFramework="net472" /><package id="Elastic.Apm.StackExchange.Redis" version="1.12.1" targetFramework="net472" /><package id="StackExchange.Redis" version="2.2.88" targetFramework="net472" />
3.配置HttpModule
web.config中的system.webServer中新增以下节点
<modules><add name="ElasticApmModule" type="Elastic.Apm.AspNetFullFramework.ElasticApmModule, Elastic.Apm.AspNetFullFramework" />
</modules>
4.配置Agent
我们可以通过环境变量配置Agent的信息
protected void Application_Start()
{Environment.SetEnvironmentVariable("ELASTIC_APM_SERVICE_NAME", "TestFromworkSite"); //服务名Environment.SetEnvironmentVariable("ELASTIC_APM_ENVIRONMENT", "Dev"); //环境Environment.SetEnvironmentVariable("ELASTIC_APM_SERVER_URL", "http://localhost:8200"); // APM serverEnvironment.SetEnvironmentVariable("ELASTIC_APM_FLUSH_INTERVAL", "5s"); //上传数据的周期Environment.SetEnvironmentVariable("ELASTIC_APM_LOG_LEVEL", "Trace");//..........
}
5.启动网站
直接启动网站即可在Kibana中看到对应的Service:TestFromworkSite
Elastic APM核心模块
1.Transaction:我们通过Transaction可以看其中Api的调用信息
2. Dependencies:通过Dependencies看到服务依赖关系
3. Error: 能通过Error看到程序中的错误信息
4. Matrics: 可以通过Matrics看到服务气的内存与CPU信息
Elastic监控MSSql与Redis等组件
新增MSSqlHelper
public class MSSqlHelper
{public static DataSet SqlExecuteReader(string _sql, SqlParameter[] _parameters, CommandType _type = CommandType.Text, string _constring = @"Data Source=.\SQLEXPRESS;Initial Catalog=dev;Integrated Security=True;"){DataSet ds = new DataSet();try{using (SqlConnection conn = new SqlConnection(_constring)){SqlCommand cmd = new SqlCommand(_sql, conn);if (_parameters != null){foreach (SqlParameter p in _parameters){ cmd.Parameters.Add(p); }}cmd.CommandType = _type;cmd.CommandTimeout = 10;//超时时间,单位Sconn.Open();using (SqlDataAdapter sda = new SqlDataAdapter()){sda.SelectCommand = cmd;sda.Fill(ds);//填充dataset}}return ds;}catch (Exception ex){throw;}}
}
新增RedisHelper
public class RedisHelper
{private static IDatabase database;public static void UseApmForRedis(){var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");connection.UseElasticApm();database = connection.GetDatabase();}public static void StringSet(string key,string value){database.StringSet(key,value);}
}
在Application_Start()中开启SqlServer与Redis的监控
Agent.Subscribe(new SqlClientDiagnosticSubscriber());
RedisHelper.UseApmForRedis();
HomeController.Index接口中新增sqlserver与Redis的调用
public ActionResult Index()
{MSSqlHelper.SqlExecuteReader("select * from S_dev.UserObject", null);RedisHelper.StringSet("a", "a");
}
启动程序即可看到MSSql与Redis的相关数据
Elastic APM Api的深入使用
1.StartTransaction与StartSpan开启自定义transaction与span
一些定时任务同样可以使用Elastic APM的Agent.Tracer.StartTransaction和来监控,并且我们可以通过StartSpan来新增一个自定义节点,这种方式需要我们自己处理异常信息。我们新增一个Job
public class TestJob
{public void Run(){while (true){var trans = Agent.Tracer.StartTransaction("TestJob", ApiConstants.TypeRequest);try{MSSqlHelper.SqlExecuteReader("select * from S_dev.UserObject", null);RedisHelper.StringSet("a", "a");trans.SetLabel("name", "chester");var span = trans.StartSpan("自定义Span", ApiConstants.TypeExternal, ApiConstants.SubtypeHttp, ApiConstants.ActionQuery);try{//Http request}catch (Exception e){span.CaptureException(e);}finally{span.End();}Thread.Sleep(1000);}catch (Exception ex){trans.CaptureException(ex);throw;}finally{trans.End();}}}
}
Application_start中启动Testjob
Task.Run(() => new TestJob().Run());
启动程序即可看到对应的TestJob监控
2.CaptureTransaction与CaptureSpan开启自定义transaction与span
CaptureTransaction与CaptureSpan相对于StartTransaction与StartSpan可以帮助我们结束Transaction与Span,也可以自动捕获异常,新增一个TestJob2
public class TestJob2
{public void Run(){while (true){Agent.Tracer.CaptureTransaction("TestJob2", ApiConstants.TypeRequest, (trans) =>{MSSqlHelper.SqlExecuteReader("select * from S_dev.UserObject", null);RedisHelper.StringSet("a", "a");trans.SetLabel("name", "chester");trans.CaptureSpan("自定义Span2", ApiConstants.TypeDb, (s) =>{//execute db query}, ApiConstants.SubtypeMssql, ApiConstants.ActionQuery);Thread.Sleep(1000);});}}
}
Application_start中启动Testjob2
Task.Run(() => new TestJob2().Run());
启动程序即可看到对应的TestJob2监控
3.Agent全局拦截
我们可以通过过滤器拦截Transaction与Span,并为其添加例如label等附加内容
Agent.AddFilter((ITransaction t) =>
{//t.SetLabel("foo", "bar");return t;
});
Agent.AddFilter((ISpan span) =>
{// ..return span;
});
Elastic AMP监控.NET程序性能相关推荐
- 一文了解 Java 应用程序性能优化指南
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 在<2018 最具就业前景的 7 大编程语言>一文中,通过分析了来自 Indee ...
- Elasticsearch:使用 Elastic APM 监控 Android 应用程序(一)
作者:Alexander Wert, Cesar Munoz 人们通过私人和专业的移动应用程序在智能手机上处理越来越多的事情. 拥有成千上万甚至数百万的用户,确保出色的性能和可靠性是移动应用程序和相关 ...
- JVM-Java程序性能监控-初级篇
前篇 - 小伙们都知道,java程序的性能监控主要是针对jvm中heap的监控~ 那么在做压力测试时如何对heap.线程等一系列的指标进行的监控的呢? 首先-你若不懂命令,那么就需要了解一套Java程 ...
- Spring Boot之程序性能监控
转载自 Spring Boot之程序性能监控 Spring Boot特别适合团队构建各种可快速迭代的微服务,同时为了减少程序本身监控系统的开发量,Spring Boot提供了actuator模块,可以 ...
- java端到端_Java应用程序性能监控:复杂分布式应用程序的端到端性能
java端到端 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 在最复杂和分布式环境中端到端监视Java应用程序性能-专注于业务事务. 自 ...
- 初探 performance – 监控网页与程序性能
初探 performance – 监控网页与程序性能 使用 window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据. 配合上报一些客户端浏览器的设备类型等数 ...
- springboot actuator_Spring Boot之程序性能监控
今天跟大家分享Spring Boot之程序性能监控的知识. 1 Spring Boot之程序性能监控 Spring Boot特别适合团队构建各种可快速迭代的微服务,同时为了减少程序本身监控系统的开发量 ...
- python程序性能监控
文章目录 Python程序性能监控 1 耗时监控:line_profiler 1.1 安装 1.2 使用 方法一(简单): 方法二(推荐): 1.3 API介绍 2 内存监控:memory_profi ...
- 同程艺龙小程序性能监控系统的探索与实践
导语 |近日,云+社区开发者大会(苏州站)圆满落幕.本次开发者邀请了腾讯内部及业内行业大咖就物联网.小程序.微服务等当前互联网领域的热点技术的落地实践问题进行了深度探讨.本文是同程艺龙资深架构师牛提罚 ...
最新文章
- 【卷积神经网络结构专题】一文详解LeNet(附代码实现)
- springboot高级——消息队列相关
- android wear2.9新功能,Android Wear 2.0确认2月9日正式登场
- AC算法在美团上单系统的应用
- WebSphere 管理员界面 修改配置之后,没有反应的原因,需要按下[保存]link
- 关于AD15中恢复默认菜单的快捷操作
- 2021年低压电工模拟考试题库及低压电工作业考试题库
- GAMIT处理GLONASS数据
- Hyperledger fabric-couchdb镜像版本的坑
- PMP-我是如何两周拿下5A的
- 面试要点之——23种设计模式及其应用场景
- python 使用正则表达式爬取淘宝店铺图片
- Scratch项目整合
- local-preference-实践理解(22/3/2)
- 如何实现两个笔记本电脑间的文件传输
- 学生计算机测评安排,计算机系学生综合素质测评办法(修改)
- Cisco packet tracert汉化
- 如何开始自动化员工招聘的五个提示
- 论文笔记--(HRNet)用于人类姿势估计的深度高分辨率表征学习(Deep High-Resolution Representation Learning for Human Pose Estima)
- 标准cpci接口定义_CPCI数据总线接口的设计与实现
热门文章
- 如何科学的组织React组件样式
- C#利用Socket实现客户端之间直接通信
- 关于epoll,select,poll的理解
- [BZOJ4671]异或图
- 生信入门-爱课程上的华中农业大学
- zbb20180710 maven Failed to read artifact descriptor--maven
- 《DOS命令全集(中英文对照)》CHM版.CHM
- Java SpringMvc+hibernate架构中,调用Oracle中的sp,传递数组参数
- Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config
- linux df命令功能,Linux df命令简要介绍