ELK Stack on Docker

ELK Stack 其實是三套軟體的組合,分別是負責儲存資料的 elasticSearch、收集資訊的 logstash 以及一個觀看數據的 UI 介面 Kibana

還沒有接觸過的人可以參考一下網站介紹,基本上就是拿幾套軟體建構一個可以用來監測應用程式執行效能的工具

.Net Framework

對於.Net Core 的支援應該是比較好的,如果要用在 ASP.NET MVC,必須是在.Net Framework 4.6.1 以上的版本才能支援

利用官方所提供的範例程式,可以快速地做一個 Demo 網站來看看
下載範例之後,可以看到在src目錄底下有幾個專案資料夾,

  1. Elastic.Apm.AspNetFullFramework底下 bin 目錄中的Elastic.Apm.AspNetFullFramework.dll
  2. Elastic.Apm底下 bin 目錄的 net461 底下的Elastic.Apm.dll

之所以要用這樣的方式加入參考,其實是為了要範例已經寫好的ElasticApmModule.cs這隻檔案;在網站的web.config中加入下列程式碼,註冊一個httpModule,以便讓 ELK Stack 可以自動抓到瀏覽網站的一些數據。這隻檔案繼承了IHttpModule,並實作了一些方法,有興趣的可以看看 Source;相關的知識可以看一下HttpModule 與 HttpHandler 詳解(轉載)

1
2
3
4
5
6
7
<!--Web.Config-->
<system.webServer>
<modules>
<add name="ElasticApmModule" type="Elastic.Apm.AspNetFullFramework.ElasticApmModule" />
</modules>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>

elastic public API有提供 API 的範例以及一些說明,透過這些 API 可以初步的監測應用程式效能數據

正確姿勢應該是要用 nuget 去安裝elastic.apm這個套件,而IhttpModule這一塊應該要自己寫才是

安裝 ELK Stack on Docker

直接使用Elastic stack (ELK) on Docker的 docker-compose 檔做些調整進行安裝,clone 下來之後同時掛載 APM

1
docker-compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml up

記得 windows docker 要切換到 linux container 模式,記得 C 槽的分享權限要打開

中文介面 Kibana

因為 kibana 在後續的版本有提供中文介面,首先將相關的 images 下載最新版本,目前最新為 7.2.0,然後調整一下設定

  1. 環境變數檔案.env將版本號從 6.5.1 改為 7.2.0
  2. 修改kibana.yml設定如下
1
2
3
4
server.name: kibana
server.host: "0"
elasticsearch.hosts: http://elasticsearch:9200
i18n.locale: zh-CN

Kibana 設置文件:Configuring kibana
附上 Github:my-docker-elk


補充,調整 ElasticSearch on Docker 所使用的記憶體

1
2
# 原本是256m,改為512m,或是1g之類的
ES_JAVA_OPTS: "-Xmx512m -Xms512m"