[03] "非K8s環境" で Prometheus を導入してみる ... NodeExporterを使ってみる

|本シリーズのトップページ|
|:--|
|https://qiita.com/items/dfb16ffcbbe7745e765e|

## 概要

変則的だが、職場の "**非K8s環境**" で Prometheus を導入することになったので
調査・導入検討をしてみた.

なお、職場の "**非K8s環境**" ではすでに「Zabbix 4.0」を導入しているが、
将来に備えて Prometheus を使ってみたいらしい.

前項で作成した環境に対して、NodeExporter を導入して次の監視をする.

**・5分間連続して CPU 使用率が 80% を超えていたらアラート扱いにする**

また、Zabbix ユーザ視点でのコメントも少し書き添えておく.

　

## 環境

### ホスト(物理PC)

```bash
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
```
```bash
$ hostname -I
192.168.10.47
```


### 構築する環境

|項目|値|備考|
|:--|:--|:--|
|Prometheus| version 2.30.3 |他者の環境では起動エラーになるといったトラブルを避けたいので、バージョン指定している|
|Grafana|8.2.0-ubuntu|同上|
|NodeExporter|物理ホスト上で稼働させる||

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/7829a947-8031-610f-c934-7263218fe042.png)



## 手順

### 1. ファイル構成

前項からの続き.
現時点でのファイル構成は次の通り.

```
$ tree . --charset=C --dirsfirst
.
|-- PV
|   |-- etc
|   |   `-- prometheus
|   |       `-- prometheus.yml
|   `-- var
|       `-- lib
|           `-- grafana
|               |-- csv [error opening dir]
|               |-- plugins
|               |-- png [error opening dir]
|               `-- grafana.db
`-- docker-compose.yml
```

### 2. NodeExporter を稼働させる

NodeExporter は Zabbix Agent に該当する.
物理ホストでの操作である.　今回は検証だけなので適当なディレクトリで稼働させる.

#### NodeExporter の入手をする

```bash
$ mkdir bin
$ wget --no-check-certificate \
   https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz \
   -O nodexporter.tgz
$ tar xvfz nodexporter.tgz -C node --strip-components 1
$ cd bin
```

#### NodeExporter を稼働させる

nodeexporter を実行すると、9100 番ポートを LISTEN しているログが出る.
Zabbix Agent における 15000番ポートに該当する.

```bash
$ ./nodeexporter
略
level=info ts=2021-1 (略) msg="Listening on" address=:9100🛑
level=info ts=2021-1 (略) msg="TLS is disabled." http2=false
```


### 3. 監視ルールを作成し登録する

#### 3-1. ルール「PV/etc/prometheus/prometheus-cpu.yml」を作成する

個人的には Zabbix でのトリガー設定に似ていると感じた.

なお、Zabbix とは異なり、WEB-UI を使わずに YAML で書ける点はメリットだと思うが、
Zabbix のような記述補助は充実していないようであった.

```yaml
groups:
  - name: example
    interval: 1m
    rules:
    - alert: cpu_usage_high
      expr: 1 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m]))) > 0.8
      for: 5m
```

#### 3-2. ルールを適用させる

上記 prometheus-cpu.yml を PV/etc/prometheus/prometheus.yml に適用させる

##### PV/etc/prometheus/prometheus.yml

NodeExporter として 192.168.10.47:9100 を新たに登録している.
(Zabbix だと WEB-UI で登録する操作であるが、この操作も YAML で行う)

そして、「rule_files」の項に、上記で作成した prometheus-cpu.yml を登録する.
(繰り返しになるが、このあたりの操作も Zabbix だと通常は WEB-UI での操作である)

```diff
 global:
   # How frequently to scrape targets by default.
   scrape_interval: 15s
   # How frequently to evaluate rules.
   evaluation_interval: 15s
     
 # A list of scrape configurations.
 scrape_configs:
   - job_name: 'prometheus'
     static_configs:
     - targets: ['192.168.10.47:49090']
+  - job_name: 'prometheus host machine'
+    static_configs:
+    - targets: ['192.168.10.47:9100']
  
+rule_files:
+  - prometheus-cpu.yml 

```


### 4. ルールを適用する

#### 4-1. ファイル構成

```
.
|-- PV
|   |-- etc
|   |   `-- prometheus
|   |       |-- prometheus-cpu.yml 💥追加した💥
|   |       `-- prometheus.yml
|   `-- var
|       `-- lib
|           `-- grafana
|               |-- csv [error opening dir]
|               |-- plugins
|               |-- png [error opening dir]
|               `-- grafana.db
`-- docker-compose.yml
```

#### 4-2. 再稼働させる

```bash
$ docker-compose restart prometheus
```

#### 4-3. 稼働確認する

##### 4-3-1. ターゲットの確認

監視対象であるターゲット (Zabbix における「ホスト」) が登録されたか否かを確認する.

WEB-UI を使って http://<IP>:49090/targets にアクセスして、
次のように登録されていれば良い.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/bca059c5-118d-aa82-419f-699f1ccb00d8.png)

また、上記赤枠をクリックしてメトリクス (Zabbix におけるアイテムの値) が表示されていることを見る.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/5836a6c7-4014-d45f-f3f9-1679277836d0.png)

##### 4-4-2-. メトリックの確認

監視項目 (Zabbix における アイテム) が登録されたことを確認する

`http://<IP>:49090/rules` にアクセスして、次のように登録されていれば良い.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/2796e1dd-92fe-df61-6e21-f86bb25e48fc.png)

なお、上記「expr」右横のリンクをクリックすれば、アラートの発生状況が見られる.

　

以上


## 参考にした情報

・[『[改訂3版] Zabbix統合監視実践入門 (技術評論社)』](https://gihyo.jp/book/2019/978-4-297-10611-9)
・https://kazuhira-r.hatenablog.com/entry/2019/04/29/025816
・[Prometheus 公式](https://prometheus.io/docs/introduction/overview/#architecture)
・[CentOS 8 実践ガイド［サーバ構築編］](https://book.impress.co.jp/books/1119101034)
・[Kubernetes実践ガイド　クラウドネイティブアプリケーションを支える技術](https://tatsu-zine.com/books/kubernets-jissen-guide)
・[PrometheusでKubernetesを監視する本 (電子版)](https://booth.pm/ja/items/1739498)