前言
首先我們下載ElasticSearch、Kibana、APM Server;可以先簡單的理解為 ElasticSearch是儲存資料用的,Kibana是展示資料用的。
ElasticSearch下載地址:
https://www.elastic.co/cn/downloads/elasticsearch
Kibana下載地址:
https://www.elastic.co/cn/downloads/kibana
APM Server下載地址:
https://www.elastic.co/cn/downloads/apm
在下載時需要注意,ElasticSearch、Kibana、APM Server要下載相同的版本,相同平臺的;下圖為下載時的注意事項。
這裡我下載的都是window下的安裝包,下載檔案如下圖:
安裝ElasticSearch
ElasticSearch依賴於java的SDK,所以需要安裝Java的SDK。
為了測試,我隨便找了一臺有java環境的電腦,系統是window10,java環境如下圖:
然後將ElasticSearch壓縮包解壓,找到config\elasticsearch.yml檔案,記事本開啟,修改配置如下:
cluster.name: kiba001 node.name: master node.master: true network.host: 0.0.0.0 http.cors.enabled: true http.cors.allow-origin: "*" cluster.initial_master_nodes: ["kiba518"]
然後找到bin下面的elasticsearch.bat,雙擊執行指令碼安裝ElasticSearch。
elasticsearch.bat會啟動一個CMD視窗,該視窗將是ElasticSearch的宿主,即關閉了他,ElasticSearch就會關閉。
讓CMD視窗執行一會,然後開啟瀏覽器,輸入 http://localhost:9200 ,顯式以下畫面,說明ES安裝成功。因為我是隨機找的有java環境的電腦安裝的,所以ElasticSearch雖然依賴於JDK,但似乎對版本並不苛刻。
安裝Kibana
與ElasticSearch類似,將Kibana壓縮包解壓,找到bin下面的Kibana.bat,雙擊執行指令碼安裝Kibana。
Kibana.bat也會啟動一個CMD視窗,該視窗將是Kibana的宿主。
讓CMD視窗執行一會,然後開啟瀏覽器,輸入http://localhost:5601/,顯式以下畫面,說明kibana安裝成功。
Config資料夾下的kibana.yml是預設的配置檔案,想深入研究的可以百度搜尋一下這個檔案的使用,這裡我沒有配置,所以使用的都是預設配置,用的請求地址也是localhost。
修改server.host可以修改請求地址:
server.host: "0.0.0.0"
修改i18n.locale的值為"zh-CN"為,可以啟動漢化版本kibana。
安裝APM Server
首先解壓APM Server的壓縮包,如下圖:
然後在裡面找到ApmServer的配置檔案apm-server.ym。
將配置檔案最開始的host: “localhost:8200”修改成“0.0.0.0:8200”,以便讓他能允許通過ip:埠號的方式訪問。然後增加elasticsearch地址配置:
apm-server: # Defines the host and port the server is listening on. Use "unix:/path/to.sock" to listen on a unix domain socket. host: "0.0.0.0:8200" output.elasticsearch: hosts: ["localhost:9200"] #hosts: ["已安裝好的ES地址,多個之間用逗號隔開"]
效果如下:
然後執行apm-server.exe,這裡需要注意的是apm-server.exe是個window服務,所以這裡不能雙擊執行。不過安裝包中已經有可以啟動服務的檔案了——install-service-apm-server.ps1。
具體安裝ApmServer步驟。
1.從下載頁面下載 APM Server Windows zip 檔案。
2.將 zip 檔案的內容解壓縮到 C:\Program Files
。
3.將 apm-server-7.16.3-windows
目錄重新命名為 APM-Server
。
4.以管理員身份開啟 PowerShell 提示符(右鍵單擊 PowerShell 圖示,然後選擇以管理員身份執行)。如果執行的是 Windows XP,則可能需要下載並安裝 PowerShell。
5.從 PowerShell 提示符處,執行以下命令以將 APM Server 安裝為 Windows 服務。
然後在彈出的頁面中輸入Y,然後回車。
注意:如果您的系統禁用了指令碼執行,則需要為當前會話設定執行策略,以允許指令碼執行。示例:
PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-apm-server.ps1`
然後我們開啟控制皮膚—管理工具—服務,就可以看到,我們已經安裝了一個apm-server的服務了。
不過他的當前狀態是未啟動,我們右鍵將服務啟動就可以了。
然後我們瀏覽http://localhost:8200/,得到如下介面,代表ApmServer已經安裝成功了。
預設的日誌在:C:\ProgramData\apm-server
聯合測試
我們重新開啟Kibana——http://localhost:5601/,然後點選AddIntegrations。
然後點選ElasticAPM。
然後選擇Windows。
然後頁面向下拉,點選Check APM Server status——檢測APM Server的狀態。
如下圖,提示了已經正確安裝了APM Server。
APMAgent使用
首先建立一個NETCore的Web專案,然後引入Elastic相關DLL。
可以單獨引用獨立的DLL。
也可以直接就引用一個整合的DLL,推薦就引用一個Elastic.Apm.NetCoreAll。
然後在Startup的Configure方法中使用 app.UseElasticApm(Configuration)。
程式碼如下:
using ... using Elastic; using Elastic.Apm; using Elastic.Apm.AspNetCore; using Elastic.Apm.EntityFrameworkCore; namespace ElasticAPMTest { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseElasticApm(Configuration); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } }
然後appsettings.json修改如下:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "ElasticApm": { "Environment": "production", // Set the service environment "SecretToken": "", "ServerUrl": "http://192.168.50.28:8200/", //設定前面安裝好的APM Server URL,預設埠號是8200 "LogLevel": "Error", // Log級別, "ServiceName": "TEST1", //應用的名字 //"CaptureBody": "all", //"CaptureBodyContentTypes": "application/x-www-form-urlencoded*, text/*, application/json*, application/xml*", "ServiceVersion": "1.0.0.0" //"Environment": "staging", //"CaptureHeaders": "false", //"TransactionSampleRate": 0.456, //"TransactionMaxSpans": 375, //"CaptureBody": "all", //"CaptureBodyContentTypes": "application/x-www-form-urlencoded*, text/*, application/json*, application/xml*" } }
然後執行網站,如下圖:
專案執行後,第一行提示我們ElasticAPM收集資料是30000毫秒的間隔,即每30秒採集一次資料。
Github參考網站,可以下載原始碼瞭解更多詳情。
檢視檢測的資料
我們回到剛才Kibana的頁面,繼續向下拉,如下圖(截圖已經是中文 了,因為我已經漢化了)。
點選【檢測代理狀態】,提示尚未從代理收到任何資料,但我的專案執行正常,所以直接點選載入Kibana物件,然後啟動APM,進入服務管理介面。
點選Test1,這是配置ApmAgent的專案,介面如下。
可以看到,他已經在檢測我的網站的訪問和吞吐量等等資訊了。
點選【指標】,還有CPU和記憶體的統計。
點選【事務】,這裡的【時間線】就有我們請求的鏈路跟蹤,即微服務所需的鏈路跟蹤功能。
結語