张裕 发表于 2025-1-10 00:46:54

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



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

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

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 。
 
https://i-blog.csdnimg.cn/img_convert/d92388c5414d109e44a947d8e3e94827.png

访问 http://localhost:5601 出现 kabina 界面。点击"Add Data" 出现添加 Apm Server 指引。
 
https://i-blog.csdnimg.cn/img_convert/8615cdd3807fd5d617e440af47884c5f.png

滚动到最后,点击 "Check APM Server Status "。
 
https://i-blog.csdnimg.cn/img_convert/5f86d2447d3dbb5e01310ae34a8f2a36.png

假如出现 “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接口。
 
https://i-blog.csdnimg.cn/img_convert/b6e98c466227c4c4943e1f0ec0a7f691.png

打开 kibana 界面,点击菜单 “APM” 。
 
https://i-blog.csdnimg.cn/img_convert/9862d678c7f91dd69068a7860ae47b3f.png

可以看到我们3个服务已经出现在服务列表里面。列表上显示了情况,TPM等信息。
 
https://i-blog.csdnimg.cn/img_convert/c56827b38272fb40d14da272bc607f34.png

点击 “Traces” 标签,这里就会列出刚才所有的哀求列表。
 
https://i-blog.csdnimg.cn/img_convert/1cb0ba91a21ec88eefa149e2c2175fd7.png

任意点击一个服务,会出现这个服务的具体信息,显示了并发情况,延迟情况,已经哀求的汗青。
检察调用链

在微服务架构下,服务之间的调用是非常复杂的。这给我们排错的时候带来非常大的压力。现在有了 APM 可以帮我们改进这个题目。Elastic APM 可以帮我们显示每个哀求的调用链情况。
 
https://i-blog.csdnimg.cn/img_convert/07f042a60af46eb1ae9e165926074e73.png

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


https://i-blog.csdnimg.cn/img_convert/2852390bbd2ec89e5b64a8c08afd067c.png

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: ASP.NET Core 实现微服务 - Elastic APM