上一次我們介紹了Seq日志聚合組件,這次要給大家介紹的是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 的集成做到了幾乎零代碼入侵,界面也非常友好,
演示專案地址
https://github.com/kklldog/myhotel_microservice
相關文章
NET Core with 微服務 - 什么是微服務
.Net Core with 微服務 - 架構圖
.Net Core with 微服務 - Ocelot 網關
.Net Core with 微服務 - Consul 注冊中心
.Net Core with 微服務 - Seq 日志聚合
關注我的公眾號一起玩轉技術

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/288648.html
標籤:.NET技术
上一篇:WPF使用VisualTreeHelper進行復雜命中測驗
下一篇:EF Core使用
