马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这次要给各人先容的是Elastic APM ,一款应用程序性能监控组件。APM 监控围绕对应用、服务、容器的康健监控,对接口的调用链、性能举行监控。在我们实施微服务后,由于复杂的业务逻辑,服务之间的调用会像蜘蛛网一样复杂。有了调用链监控后服务之间的调用可以用图像的方式展示出来,每个哀求的性能,相应等都会记录下来。对于提前防范题目,以及排查题目有非常大的意义。
Elastic APM
各人对 ELK 套件一定非常熟悉。ELastic APM 同样也是 Elastic 系列产品的一个组件。Elastic APM 是一款免费开源的应用程序性能监控组件。它底层依赖 Elasticsearch 来存储跟查询数据,使用 Kibana 来展示分析数据。它支持多种程序语音的探针,包罗 JAVA,.NET, Nodejs 等语音。对于 .NET 的集成非常方便,只要简朴的配置就可以收罗 .NET 程序的信息,对代码几乎是零入侵。
Elastic APM 的架构由4个部分构成。
- Elasticsearch 负责数据的持久化,查询等能力
- Kibana APM数据的分析展示界面
- APM Agent 每个服务集成对应的 sdk 后就是一个个 agent,负责收罗程序的各种指标数据
- APM Server ,agent 收罗到数据后会上报给 APM Server ,由APM Server搜集数据后存储到 Elasticsearch 。
使用 docker-compose 安装
- elasticsearch:
- image: docker.elastic.co/elasticsearch/elasticsearch:7.13.2
- restart: always
- container_name: elasticsearch
- hostname: elasticsearch
- environment:
- - discovery.type=single-node
- ports:
- - 9200:9200
- - 9300:9300
- kibana:
- image: docker.elastic.co/kibana/kibana:7.13.2
- restart: always
- container_name: kibana
- hostname: kibana
- environment:
- - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ports:
- - 5601:5601
- depends_on:
- - elasticsearch
- apm_server:
- image: docker.elastic.co/apm/apm-server:7.13.2
- restart: always
- container_name: apm_server
- hostname: apm_server
- command: --strict.perms=false -e
- environment:
- - output.elasticsearch.hosts=["elasticsearch:9200"]
- ports:
- - 8200:8200
- depends_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 的集成做到了几乎零代码入侵,界面也非常友好。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |