文章目錄
使用 Elastic Stack (ELK) 來監控 MongoDB
之前筆記 Windows 平台上安裝 Elastic Stack (ELK - Elasticsearch , Logstash , Kibana) 提到因為想要將部份系統資料餵進 ELK 用來監控及除錯,順手紀錄 Windows 平台上架設 Elastic Stack (ELK - Elasticsearch , Logstash , Kibana) 的步驟,也提及 ELK 較適合執行於 Linux 環境,只是身為 Microssoft 派工程師,Windows 環境相對好取得用來開發測試
首先第一個目標就是為原本沒有監控機制的 MongoDB 加上基本的效能監控。在同事強力的協助下,終於排除困難將 MongoDB 效能資訊餵進 ELK,過程況狀不斷,如果不紀錄相信一週後我就再也做不出來了,就來看該如何設定吧
安裝 Metricbeat
- 下載 Metricbeat 並解壓縮
準備 Metricbeat 的 yaml 檔 :
mongodb.yml
檔名可自訂下載的 Metricbeat 中有一份
metricbeat.reference.yml
包含許多不同 module 的設定值可以用來參考metricbeat.modules: - module: mongodb metricsets: ["dbstats", "status"] # 指定輪詢間隔 period: 10s # 連線方式有兩種 # 連線的帳號需要有 admin database 的權限 # arbiter 沒有實際 db ,無法使用預設 field 設定匯入 index # 第一種:mongo 的 host 與 port 跟 username/ passwork 分開放 hosts: ["localhost:27017","localhost:27027"] username: admin password: pass.123 # 第二種:使用 [mongodb://][user:pass@]host[:port] # hosts: ["mongodb://admin:[email protected]:27017","mongodb://admin:pass. [email protected]:27027"] # 將結果輸出至 elasticsearch output.elasticsearch: # elasticsearch url hosts: ["localhost:9200"] # 指定進 elasticsearch 的 index 名稱 (%{+yyyy.ww} 是 yaml 的時間格式) index: "localhost-mongodb-%{+yyyy.ww}" # template 是用來在 Elasticsearch 中設定 mapping ,預設就是啟用的 # 指定 template 名稱 setup.template.name: "localhost-mongodb" # 設定 template mapping 的 pattern setup.template.pattern: "localhost-mongodb-*" # 指定產生的欄位 setup.template.fields: "${path.config}/fields.yml" # 複寫已存在的 template setup.template.overwrite: true
2020/07/11 更新
metricbeat.modules: - module: mongodb metricsets: ["dbstats", "status", "collstats", "metrics", "replstatus"] # 指定輪詢間隔 period: 10s enabled: true # 連線方式有兩種 # 連線的帳號需要有 admin database 的權限 # arbiter 沒有實際 db ,無法使用預設 field 設定匯入 index # 第一種:mongo 的 host 與 port 跟 username/ passwork 分開放 hosts: ["localhost:27017","localhost:27027"] username: admin password: pass.123 # 第二種:使用 [mongodb://][user:pass@]host[:port] # hosts: ["mongodb://admin:[email protected]:27017","mongodb://admin:[email protected]:27027"] # 將結果輸出至 elasticsearch output.elasticsearch: # elasticsearch url hosts: ["localhost:9200"] # 指定進 elasticsearch 的 index 名稱 (%{+yyyy.ww} 是 yaml 的時間格式) index: "localhost-mongodb-%{+yyyy.ww}" # template 是用來在 Elasticsearch 中設定 mapping ,預設就是啟用的 # 指定 template 名稱 setup.template.name: "localhost-mongodb" # 設定 template mapping 的 pattern setup.template.pattern: "localhost-mongodb-*" # 指定產生的欄位 setup.template.fields: "${path.config}/fields.yml" # 複寫已存在的 template setup.template.overwrite: true
啟動 Metricbeat
語法
{metricbeat.exe path} -e -c {mongodb yaml path}
範例
metricbeat.exe -e -c mongodb.yml
成功啟動並開始餵資料至 Elasticsearch
修改 Metricbeat 中預設的 index template 與 dashboard
更名部份就視實際需要,只要名稱保持與 Metricbeat template 相同就可,不一定需要更名,但更名可以讓管理比較清楚
下載的 Metricbeat 的
kibana
下index-pattern
與dashboard
的資料夾有既有的 json
修改 index template :
metricbeat.json
- 預設路徑 :
{metricbeat folder}\kibana\6\index-pattern\metricbeat.json
將
title
與id
的改為之前的 template pattern修改前
修改後
- 預設路徑 :
修改 dashboard :
Metricbeat-mongodb-overview.json
- 預設路徑:
{metricbeat folder}\kibana\6\dashboard\Metricbeat-mongodb-overview.json
修改
searchSourceJSON
的 index 名稱修改前
修改後
- 預設路徑:
- 如果用不到其他 modudule 建議可以刪除其他 dashboard
匯入 Metricbeat 的 Kibana dashboards
使用
setup
指令匯入 index template 與 dashboardsmetricbeat.exe setup
完成設定
將匯入的 index pattern 設為預設 index pattern
這個步驟可略過,但沒設定會一直有 warning
開啟 Dashboard
心得
之前跟朋友聊到 Elastic Stack (ELK - Elasticsearch , Logstash , Kibana) 的架設大概是使用 Elastic Stac 時最輕鬆的一個步驟,架設完成後實際要使用或是餵資料進去,都有不少眉眉角角要解決,這次要不是有同事協助可能沒辦法那麼順利搞定
這次很幸運還不需要設定 Logstash,單單處理 Elasticsearch 跟 Kibana 就讓我人仰馬翻了,設定跟文件不僅多也比較雜亂,加入 Metricbeat 後讓我對於整體概念一直懞懞懂懂不是很清楚,另外我覺得比較難搞的一點就是不好除錯,雖然有錯誤訊息,只是成因可能很多,造成解決方法更多,當然我自己不熟悉是主要因素,就初學者的立場來看門檻較高,不過也許就是它的彈性與擴充性才讓它受到許多關注與也才得以發揚光大
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-05
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。