[02] "非K8s環境" で Prometheus を導入してみる ... Promtheus と Grafana の導入

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

## 概要

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

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

そこで、オンプレ環境で、docker-compose を用いて Prometheus サーバを立てたので、
手順を書き残しておく.

また、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|同上|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/52c0d691-f708-dbe3-adb6-58fcaa7d460c.png)


## 手順

### 1. ファイル構成

ファイル構成は次の通り.

```
$ tree . --charset=C --dirsfirst
.
|-- PV
|   |-- etc
|   |   `-- prometheus
|   |       `-- prometheus.yml ..... 後述
|   `-- var
|       `-- lib
|           `-- grafana ............ 現時点では空っぽのディレクトリである
`-- docker-compose.yml
```

### 2. docker-compose.yml を作成する

公式手順にある Dockerfile を基にして、docker-compose.yml を作成する.

9090番は「Cockpit (Linux サーバ管理ツール)」と衝突するらしいので、
ここでは 49090 に変更した.[^1]

また、3000番も Rails などと衝突する恐れがあるので、43003番に変更している.

なお、9090番ポートは Zabbix における 10051番ポートに該当する.
(サーバ側が LISTEN するポートである)

```yaml
version: '3.7'
 
services:
  prometheus:
    image: prom/prometheus:v2.30.3
    container_name: myprometheus_v2_30_3
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "7"
    ports:
      - 49090:9090
    volumes:
      - ./PV/etc/prometheus/:/etc/prometheus/
  grafana:
    image: grafana/grafana:8.2.0-ubuntu
    container_name: mygrafana_v8_2_0
    ports:
      - '43003:3000'
    user: 'root'
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "7"
    volumes:
      - './PV/var/lib/grafana:/var/lib/grafana'
```


### 2. Prometheus 設定ファイルを作成する

Zabbix での `/etc/zabbix/zabbix_server.conf` に該当するファイル.
下記の 物理ホストのIPアドレス `192.168.10.47` は適宜読み替えること.

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

```yaml
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'] #🛑適宜読み替えること.
```

### 3. コンテナを稼働させる

#### 3-1. 稼働させる

Zabbix とは異なり、別途 Database を導入する必要が無い.
また Zabbix で実施している PHP のセットアップも不要である.
インストールという面では Prometheus の方が断然楽である.

```bash
$ docker-compose up -d
```

#### 3-2. 稼働確認をする

##### CLI での確認

```bash
$ docker-compose ps
        Name                      Command               State            Ports         
---------------------------------------------------------------------------------------
mygrafana_v8_2_0       /run.sh                          Up      0.0.0.0:43003->3000/tcp
myprometheus_v2_30_3   /bin/prometheus --config.f ...   Up      0.0.0.0:49090->9090/tcp
```

##### WEB-UI での確認

・http://<IP>:49090/ にアクセスして Prometheus の UI が表示されていることを確認する.

・http://<IP>:43003 にアクセスして Grafana の UI が表示されていることを確認する. 　 　



### 4. Grafana と Prometheus を連携させる

#### 4-1. Grafana WEB-UI にログインする

ここでは `http://<IP>:43003` である.
初回ログインID・PW は「admin」「admin」である.

#### 4-2. Prometheus を登録する

##### 4-2-1. 「DATA SOURCES」から Prometheus を選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/2f96aabc-f99d-ed75-3b02-9a294a2d44c9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/39e4cb49-ae8d-b15b-3407-0211a9aecb25.png)

##### 4-2-2. Prometheus を稼働させているマシンの IP と ポートを設定する

画面下部にある「`Save & test`」を実行して「`Datasource updated`」が表示されれば良い

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/a4812c88-d172-201c-f97c-7e57dd4d17c0.png)


### 5. Grafana Dashboard に監視項目を登録してみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/bbb64df3-34b4-7ffc-a6c8-baa71c5449a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/6cec9a17-a730-5990-3a96-88dab426ef0d.png)

Prometheus サーバに対するリクエスト回数を表示する次のクエリを適用する.
「**prometheus_http_requests_total**」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/f4f39628-da17-d133-a6a0-dca5abcadaab.png)

:::note warn
もしも描画に失敗する場合は、ホストの時刻ズレの疑いもあります.
当方は下記で chrony を導入することで解決しました
https://qiita.com/robozushi10/items/e0fde644a47b08e5c534
:::

表示内容が問題無ければ、保存する.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/72ed0e4c-dc16-8025-6706-0be12efafc02.png)


### 6. 稼働後のファイル構成

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

　

以上.


## 参考にした情報

・[『[改訂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)

　
　


[^1]: ・[CentOS 8 実践ガイド［サーバ構築編］](https://book.impress.co.jp/books/1119101034)