---
# System prepended metadata

title: 普羅米修斯Prometheus監控
tags: [小專題, unix, 學校課程, 大二]

---

# 普羅米修斯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 或者其他方式通知用户。