# 普羅米修斯Prometheus監控 ###### tags: `大二` # 介紹 ## Grafana ![](https://i.imgur.com/AB5sOpw.png =20%x) Grafana是一款用Go語言開發的開源數據可視化工具,可以做數據監控和數據統計,帶有警告功能,而它的介面十分精美,且可以創建自定義的面版。 Grafana本身不保存監控數據,需要從其他數據源獲取,以下是Grafana支持接收的數據源,而我們這次的主題就是其中的 prometheus ![](https://i.imgur.com/92hHjph.png) ## Prometheus ![](https://i.imgur.com/iGQ4clf.png =50%x) 是一個開源的系統監控和警報工具包 非常適合記錄時間序列資料,比如可以記錄機器CPU、Memory的使用情況,也可以在微服務中收集各個維度的資訊 本身,就是一個存時間序列的 資料集/資料庫,支援拉取資料,以及擁有外圍元件生態 Prometheus同其他時序數據庫相比有一个非常典型的特性:它是主動從各TARGET(客户端)上拉取(pull)數據,而非等待監控端的推送(push) 官方給的架構: ![](https://i.imgur.com/3sMZDcQ.png) ## Node Exporter ![](https://i.imgur.com/vHKWn76.png =35%x) 在Prometheus的架構設計中,Prometheus Server并不直接服務監控特定的目標,其主要任務負責數據的收集,儲存且對外提供數據查詢支持。因此為了能夠監控到數據,如主機的CPU使用率或是記憶體使用狀況,我們需要使用到Exporter Exporter是Prometheus的指標數據收集组件。它負責從目標Jobs收集數據,並把收集到的數據轉換為Prometheus支持的時序數據格式。和傳統的指標數據收集组件不同的是,他只負責收集,並不向Server端發送數據,而是等待Prometheus Server 主動住抓取 # 安裝 ## 1. 安裝 / 設定prometheus #### A. 先將樹梅派更新: ```bash= sudo apt-get update && sudo apt-get upgrade # p.s. 如果執行上述指令,會出現Error訊息,請執行以下指令: sudo apt full-upgrade ``` #### B. 下載壓縮檔: ```bash= wget https://github.com/prometheus/prometheus/releases/download/v2.35.0/prometheus-2.35.0.linux-armv7.tar.gz ``` :::success 執行完指令後,點選資料夾會看見出現了一個壓縮檔 ::: ![](https://i.imgur.com/i5V6hBX.png) #### C. 解壓縮檔案: ```bash= tar xfz prometheus-2.35.0.linux-armv7.tar.gz ``` :::success 執行完指令後,會出現解壓縮完畢的資料夾 ::: ![](https://i.imgur.com/P5Z3qTT.png) #### D. 將路徑轉移到 prometheus-2.35.0.linux-armv7 的資料夾: ```bash= cd prometheus-2.35.0.linux-armv7 ``` #### E. 找自己的 ip 位置: ```bash= hostname -i 192.168.209.128 ``` #### F. 執行 prometheus服務: ```bash= ./prometheus #如果上面指令無法進入該網址,是因為port9090有被占用,所以需要換一個port ./prometheus --web.listen-address=:9010 & ``` :::success 執行完指令後,會在prometheus-2.35.0.linux-armv7 的資料夾中出現data資料夾 ::: ![](https://i.imgur.com/YDXK457.png) #### G. 打開一個網頁,然後在網頁輸入網址的地方打上: ```bash= # 紅色部分為剛剛使用 hostname -i 找到的ip位置 http://192.168.209.128:9090 # 如果剛剛port有問題,有做port轉換的話,請輸入下面的網址 http://192.168.209.128:9010 ``` :::success 成功之後就會有以上畫面 ::: ![](https://i.imgur.com/HVVXNfZ.png) #### H. 將資料夾更名: ```bash= # 回到根目錄,將資料夾名字改成縮短版 cd ~ # 把資料夾prometheus-2.35.0.linux-armv7改名為prometheus mv prometheus-2.35.0.linux-armv7 prometheus ``` :::success 輸入指令過後資料夾名稱會改變 ::: ![](https://i.imgur.com/o0U8zRg.png) #### I. 開啟 nano 編輯: ```bash= sudo nano /etc/systemd/system/prometheus.service ``` :::spoiler 在 nano 的文字檔內輸入 ( 因為每次開機會執行位於 /home/pi/prometheus/prometheus 內的執行檔,配合的設定檔是 /home/pi/prometheus/prometheus.yml。yml 檔內可設定透過瀏覽器連線的 Port,預設是 9090,要改成9010 ) ```bash= [Unit] Description=Prometheus Server Documentation=https://prometheus.io/docs/introduction/overview/ After=network-online.target [Service] User=pi Restart=on-failure ExecStart=/home/pi/prometheus/prometheus \ --config.file=/home/pi/prometheus/prometheus.yml \ --storage.tsdb.path=/home/pi/prometheus/data [Install] WantedBy=multi-user.target ``` ::: #### J. 啟用 prometheus 服務、 設定開機時啟動服務 :::spoiler 如果想在開機時自動執行普羅米修斯服務: ```bash= sudo systemctl enable prometheus ``` ::: :::spoiler 如果要手動啟動普羅米修斯服務: ```bash= sudo service prometheus start ``` ::: :::spoiler 如果要手動停止服務: ```bash= sudo service prometheus stop ``` ::: :::spoiler 檢視服務是否正常啟動: ```bash= sudo service prometheus status ``` ::: :::success 成功畫面為出現綠色active (running) ::: ![](https://i.imgur.com/ZM1BCca.png) :::danger 如果遇到了錯誤訊息,可以試著使用 ```bash= systemctl daemon-reload #再填入自己的密碼,重新開啟一次 prometheus ``` ::: #### K. 去到網頁部分,先 F5 更新頁面 :::success 可以看到下拉式選單,可以選擇不同的資料類型 ::: ![](https://i.imgur.com/UXfFDUW.png) :::success 點按Execute可以得到,以下有兩個例子 ::: ![](https://i.imgur.com/Nb30mFu.png) :::success 記憶體配置的狀況圖 ::: ![](https://i.imgur.com/sJP5vmw.png) ![](https://i.imgur.com/liPmmUK.png) ## 2. 安裝 / 設定Node Exporter #### A. 下載、解壓縮 node_exporter: ```bash= # 先到 Github : node_exporter 取得版本號及相關資訊 wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-armv7.tar.gz tar -xzvf node_exporter-1.1.2.linux-armv7.tar.gz # 解壓縮 ``` :::success 下載完壓縮檔會出現tar.gz檔 ::: ![](https://i.imgur.com/V9wGXIT.png) :::success 解壓縮過後會出現一個同名資料夾 ::: ![](https://i.imgur.com/wwxHdue.png) #### B. 更改資料夾名稱: ```bash= mv node_exporter-1.1.2.linux-armv7 node_exporter ``` ![](https://i.imgur.com/z53iEKL.png) #### C. 開啟 nano 編輯: ```bash= sudo nano /etc/systemd/system/nodeexporter.service ``` :::spoiler 在 nano 的文字檔內輸入 ```bash= [Unit] Description=Prometheus Node Exporter Documentation=https://prometheus.io/docs/guides/node-exporter/ After=network-online.target [Service] User=pi Restart=on-failure ExecStart=/home/pi/node_exporter/node_exporter [Install] WantedBy=multi-user.target ``` ::: #### D. 啟用 node_exporter 服務: :::spoiler 如果想在開機時自動執行 node_exporter: ```bash= sudo systemctl enable nodeexporter ``` ::: :::spoiler 如果要手動啟動 node_exporter服務: ```bash= sudo service nodeexporter start ``` ::: :::spoiler 如果要手動停止服務: ```bash= sudo service nodeexporter stop ``` ::: :::spoiler 檢視服務是否正常啟動: ```bash= sudo service nodeexporter status ``` ::: ![](https://i.imgur.com/uMBp3cF.png) ```bash= # 去該網頁查看 nodeexporter 是否可以啟動正常 http://192.168.209.128:9100 ``` :::success 一開始進入的頁面 ::: ![](https://i.imgur.com/0V0NSY2.png) :::success 點選Metrics後的結果頁面 ::: ![](https://i.imgur.com/8A47OHY.png) #### E. 使用 nano 修改prometheus.yml ( 設定檔 ) : 讓他定時向監控主機的exporter取資料。 ```bash= # 先變更prometheus檔案所在的路徑 cd prometheus nano prometheus.yml ``` :::spoiler 在nano檔內,要修改 ( 由於安裝的 Prometheus 和 node_exporter 在同一台樹莓派,yml設定檔內用 localhost:9100 取得受監控主機數據,如果分別安裝在兩部主機,需將 localhost 改成安裝 Exporter 的主機 IP ) ```bash= - job_name: 'node_exporter' static_configs: - targets: ['localhost:9100'] ``` ::: :::success 在檔案最後加上以下幾行 node_exporter 設定 ::: ![](https://i.imgur.com/YlJwD0f.png) ## 3. 安裝 Grafana 因為grafana系統是以視覺化著稱,但prometheus的視覺化呈現的功能較弱,所以可以藉由利用原本在grafana有的dashboard範本,做出一個把主機監控的數據呈現成一個可視化圖表 ![](https://i.imgur.com/PTZFc2J.png) ```bash= # 回到根目錄 cd ~ # 繼續下載adduser 及 libfontconfig1 sudo apt-get install -y adduser libfontconfig1 # 下載 Grafana 套件、解壓縮 wget https://dl.grafana.com/oss/release/grafana-8.0.4.linux-amd64.tar.gz tar -zxvf grafana-8.0.4.linux-amd64.tar.gz ``` ![](https://i.imgur.com/Pu3wma7.png) ![](https://i.imgur.com/Q0suIj3.png) ```bash= # 更改名稱 mv grafana-8.0.4.linux-amd64 /usr/local/grafana # 更名、更改位置 ( 移動到 /usr/local/grafana ) mv grafana-8.0.4.linux-amd64 grafana #只更名,但還在原本的位置 # 啟動grafana cd /usr/local/grafana/bin #資料夾有切換 cd grafana/bin # 沒有切換資料夾,在原資料夾pi ./grafana-server & ``` ![](https://i.imgur.com/BO85O5O.png) ![](https://i.imgur.com/hpfpsEC.png) ```bash= # 測試服務是否已啟動,打開網頁 port3000的地方 192.168.209.128:3000 ``` :::success 啟動時,在cmd顯示的畫面 (去網址port 3000地方會顯示此) ::: ![](https://i.imgur.com/Tw3TtSw.png) :::spoiler 開機時會自動啟動 Grafana 服務 ```bash= sudo systemctl daemon-reload sudo systemctl enable grafana-server ``` ::: :::spoiler 如要手動啟動 Grafana 服務 ```bash= sudo systemctl start grafana-server ``` ::: ## 4. 建立普羅米修斯資料來源 #### A. 使用 admin 登入,預設密碼為 admin : :::success 第一次登入後會要求更改密碼 ::: ![](https://i.imgur.com/zb0WrZC.png) :::success 進入此畫面就可以開始使用 grafana 了 ::: ![](https://i.imgur.com/QCUGrGY.png) #### B. 利用 prometheis 蒐集的資料,呈現在 Grafana Dashboard: ##### a. 點選左下角的「齒輪」,再點選「Add data source」,進入資料來源設定畫面 ![](https://i.imgur.com/dULb6ip.png) ##### b. 選擇「Prometheus」類型 ![](https://i.imgur.com/8OW83N1.png) ##### c. 設定 Prometheus 伺服主機的網址、更改存取方式 ```bash= # 填入自己的ip位置 http://192.168.209.128:9090 #要注意port是否有更改過 ``` ![](https://i.imgur.com/Zxd4xyR.png) ##### d. 網頁下拉,選擇「Save & Test」,出現綠色框表示設定測試成功 ![](https://i.imgur.com/GE3Uzvc.png) #### C. 匯入Dashboard: ##### a. 進入[網址](https://grafana.com/grafana/dashboards/),搜尋 node exporter ![](https://i.imgur.com/VCV4Ngn.png) ##### b. 記下範本編號 或是 點選 copy ID to Clipboard ![](https://i.imgur.com/j5Lr4EL.png) ##### c. 回到 grafana 網頁,點選左側選單「+」→ 「Import」,輸入 Dashboard 編號,再按下右方的 Load 並且也可以用 ![](https://i.imgur.com/rfNhPVO.png) ##### d. 選擇 Prometheus,按下 Import ,就匯入完成了 ![](https://i.imgur.com/FLrUN6Y.png) # 展示、應用 ### 監控系統變化 假如你是個破電腦的用戶,需要多多關心記憶體狀態的話,可以多多利用Grafana觀察還剩多少可用空間。並且也可以用Grafana監控cpu狀態,避免虛擬機突然掛掉 ![](https://i.imgur.com/poSo5y6.png) ![](https://i.imgur.com/IzkNksM.png) ### 配置警告 通過Grafana圖表我們可以看見各種指標隨著時間變化,這一點方便我們判斷系統某個資源是否異常。但我們不能一直盯著 Dashboard,所以這時候 Prometheus 的告警功能就很方便了 Prometheus 提供用户可以自己配置的告警規則,在處理 Metrics 數據的时候,如果發現某個規則被觸發,就執行對應的告警動作,通過 email 或者其他方式通知用户。