.NET Core with 微服务 - Elastic APM
上一次我們介紹了Seq日志聚合組件。這次要給大家介紹的是Elastic APM ,一款應用程序性能監(jiān)控組件。APM 監(jiān)控圍繞對應用、服務、容器的健康監(jiān)控,對接口的調用鏈、性能進行監(jiān)控。在我們實施微服務后,由于復雜的業(yè)務邏輯,服務之間的調用會像蜘蛛網(wǎng)一樣復雜。有了調用鏈監(jiān)控后服務之間的調用可以用圖像的方式展示出來,每個請求的性能,響應等都會記錄下來。對于提前防范問題,以及排查問題有非常大的意義。
Elastic APM
大家對 ELK 套件一定非常熟悉。ELastic APM 同樣也是 Elastic 系列產品的一個組件。Elastic APM 是一款免費開源的應用程序性能監(jiān)控組件。它底層依賴 Elasticsearch 來存儲跟查詢數(shù)據(jù),使用 Kibana 來展示分析數(shù)據(jù)。它支持多種程序語音的探針,包括 JAVA,.NET, Nodejs 等語音。對于 .NET 的集成非常方便,只要簡單的配置就可以采集 .NET 程序的信息,對代碼幾乎是零入侵。
Elastic APM 的架構由4個部分組成。
Elasticsearch 負責數(shù)據(jù)的持久化,查詢等能力
Kibana APM數(shù)據(jù)的分析展示界面
APM Agent 每個服務集成對應的 sdk 后就是一個個 agent,負責采集程序的各種指標數(shù)據(jù)
APM Server ,agent 采集到數(shù)據(jù)后會上報給 APM Server ,由APM Server匯集數(shù)據(jù)后存儲到 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。其中 apmserver 定義dependson:kibana,elasticsearch 。
訪問 http://localhost:5601 出現(xiàn) kabina 界面。點擊"Add Data" 出現(xiàn)添加 Apm Server 指引。
滾動到最后,點擊 "Check APM Server Status "。
如果出現(xiàn) “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 會出現(xiàn)多個包,這里選擇 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 節(jié)點。
- ServerUrls:apm server 地址 
- ServiceName:服務的名稱 
- Environment:環(huán)境 
在 startup 類的 Configure 方法的頂部注入 ElasticApm 的中間件。這樣 Elastic APM 就跟 asp.net core 集成好了,整個過程還是很方便的。
查看 Kibana UI
我們把幾個示例項目集成后之后運行起來,隨便訪問幾個http接口。
打開 kibana 界面,點擊菜單 “APM” 。
可以看到我們3個服務已經出現(xiàn)在服務列表里面。列表上顯示了環(huán)境,TPM等信息。
點擊 “Traces” 標簽,這里就會列出剛才所有的請求列表。
隨便點擊一個服務,會出現(xiàn)這個服務的詳細信息,顯示了并發(fā)情況,延遲情況,已經請求的歷史。
查看調用鏈
在微服務架構下,服務之間的調用是非常復雜的。這給我們排錯的時候帶來非常大的壓力。現(xiàn)在有了 APM 可以幫我們改進這個問題。Elastic APM 可以幫我們顯示每個請求的調用鏈情況。
以我們訂單服務的獲取訂單詳情接口為例。我們找到/order/OD001 這個請求,點擊展示它的明細信息。可以看到這個請求里面包含了另外兩次調用。第一次是訪問Consul獲取會員服務的地址,第二次是訪問會員服務獲取會員明細信息。點擊每一次請求,里面都有詳細的元數(shù)據(jù)。這為我們調試,排錯,監(jiān)控帶來了非常大的便利。
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 網(wǎng)關
.Net Core with 微服務 - Consul 注冊中心
.Net Core with 微服務 - Seq 日志聚合
關注我的公眾號一起玩轉技術
總結
以上是生活随笔為你收集整理的.NET Core with 微服务 - Elastic APM的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 生产力提升! 自己动手自定义Visual
- 下一篇: NET问答: 为什么 IEnumerab
