# 普羅米修斯Prometheus監控
###### tags: `大二`
# 介紹
## Grafana

Grafana是一款用Go語言開發的開源數據可視化工具,可以做數據監控和數據統計,帶有警告功能,而它的介面十分精美,且可以創建自定義的面版。
Grafana本身不保存監控數據,需要從其他數據源獲取,以下是Grafana支持接收的數據源,而我們這次的主題就是其中的 prometheus

## Prometheus

是一個開源的系統監控和警報工具包
非常適合記錄時間序列資料,比如可以記錄機器CPU、Memory的使用情況,也可以在微服務中收集各個維度的資訊
本身,就是一個存時間序列的 資料集/資料庫,支援拉取資料,以及擁有外圍元件生態
Prometheus同其他時序數據庫相比有一个非常典型的特性:它是主動從各TARGET(客户端)上拉取(pull)數據,而非等待監控端的推送(push)
官方給的架構:

## Node Exporter

在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
執行完指令後,點選資料夾會看見出現了一個壓縮檔
:::

#### C. 解壓縮檔案:
```bash=
tar xfz prometheus-2.35.0.linux-armv7.tar.gz
```
:::success
執行完指令後,會出現解壓縮完畢的資料夾
:::

#### 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資料夾
:::

#### G. 打開一個網頁,然後在網頁輸入網址的地方打上:
```bash=
# 紅色部分為剛剛使用 hostname -i 找到的ip位置
http://192.168.209.128:9090
# 如果剛剛port有問題,有做port轉換的話,請輸入下面的網址
http://192.168.209.128:9010
```
:::success
成功之後就會有以上畫面
:::

#### H. 將資料夾更名:
```bash=
# 回到根目錄,將資料夾名字改成縮短版
cd ~
# 把資料夾prometheus-2.35.0.linux-armv7改名為prometheus
mv prometheus-2.35.0.linux-armv7 prometheus
```
:::success
輸入指令過後資料夾名稱會改變
:::

#### 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)
:::

:::danger
如果遇到了錯誤訊息,可以試著使用
```bash=
systemctl daemon-reload #再填入自己的密碼,重新開啟一次 prometheus
```
:::
#### K. 去到網頁部分,先 F5 更新頁面
:::success
可以看到下拉式選單,可以選擇不同的資料類型
:::

:::success
點按Execute可以得到,以下有兩個例子
:::

:::success
記憶體配置的狀況圖
:::


## 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檔
:::

:::success
解壓縮過後會出現一個同名資料夾
:::

#### B. 更改資料夾名稱:
```bash=
mv node_exporter-1.1.2.linux-armv7 node_exporter
```

#### 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
```
:::

```bash=
# 去該網頁查看 nodeexporter 是否可以啟動正常
http://192.168.209.128:9100
```
:::success
一開始進入的頁面
:::

:::success
點選Metrics後的結果頁面
:::

#### 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 設定
:::

## 3. 安裝 Grafana
因為grafana系統是以視覺化著稱,但prometheus的視覺化呈現的功能較弱,所以可以藉由利用原本在grafana有的dashboard範本,做出一個把主機監控的數據呈現成一個可視化圖表

```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
```


```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 &
```


```bash=
# 測試服務是否已啟動,打開網頁 port3000的地方
192.168.209.128:3000
```
:::success
啟動時,在cmd顯示的畫面
(去網址port 3000地方會顯示此)
:::

:::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
第一次登入後會要求更改密碼
:::

:::success
進入此畫面就可以開始使用 grafana 了
:::

#### B. 利用 prometheis 蒐集的資料,呈現在 Grafana Dashboard:
##### a. 點選左下角的「齒輪」,再點選「Add data source」,進入資料來源設定畫面

##### b. 選擇「Prometheus」類型

##### c. 設定 Prometheus 伺服主機的網址、更改存取方式
```bash=
# 填入自己的ip位置
http://192.168.209.128:9090
#要注意port是否有更改過
```

##### d. 網頁下拉,選擇「Save & Test」,出現綠色框表示設定測試成功

#### C. 匯入Dashboard:
##### a. 進入[網址](https://grafana.com/grafana/dashboards/),搜尋 node exporter

##### b. 記下範本編號 或是 點選 copy ID to Clipboard

##### c. 回到 grafana 網頁,點選左側選單「+」→ 「Import」,輸入 Dashboard 編號,再按下右方的 Load 並且也可以用

##### d. 選擇 Prometheus,按下 Import ,就匯入完成了

# 展示、應用
### 監控系統變化
假如你是個破電腦的用戶,需要多多關心記憶體狀態的話,可以多多利用Grafana觀察還剩多少可用空間。並且也可以用Grafana監控cpu狀態,避免虛擬機突然掛掉


### 配置警告
通過Grafana圖表我們可以看見各種指標隨著時間變化,這一點方便我們判斷系統某個資源是否異常。但我們不能一直盯著 Dashboard,所以這時候 Prometheus 的告警功能就很方便了
Prometheus 提供用户可以自己配置的告警規則,在處理 Metrics 數據的时候,如果發現某個規則被觸發,就執行對應的告警動作,通過 email 或者其他方式通知用户。