Prometheus + Node_exporter + Grafanaでシステム管理



# [Promeateus](https://prometheus.io/)
## インストール
[GETTING STARTED](https://prometheus.io/docs/prometheus/latest/getting_started/)に従う

```shell
wget "https://github.com/prometheus/prometheus/releases/download/v2.50.1/prometheus-2.50.1.linux-amd64.tar.gz"
tar xvfz prometheus-2.50.1.linux-amd64.tar.gz
cd prometheus-2.50.1.linux-amd64
```
## promtheusの設定
prometheus.ymlを作成します

```yaml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
```

## 実行
```shell
./prometheus --config.file=./prometheus.yml
```

## アクセス
`http://localhost:9090/`でアクセスして確認します

タブの`Status` > `Targets`で下記のようになっていたら問題ありません

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315779/aa730585-495f-58b5-7a3a-403d9496c22a.png)


# Node_exporter

## インストール
```shell
wget "https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz"
tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz
cd node_exporter-1.7.0.linux-amd64
```

# prometheusの設定
Node_exporterを読み込むために`prometheus.yaml`を編集します

```yaml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

  # 追加
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']
```

## 実行

```shell
./node_exporter
```

## 確認
Prometheusを再実行して、`http://localhost:9090/`にアクセスします

下記のようになっていれば、問題なくNode_exporterが読み込めています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315779/3f55d090-78cf-78d1-c726-8ee403e31fd1.png)


# Grafana
## インストール
[Install Grafana](https://grafana.com/docs/grafana/latest/setup-grafana/installation/)を参考にインストールする

### 前提パッケージをインストール
```shell
sudo apt-get install -y apt-transport-https software-properties-common wget
```

### GPGキーをインポート
```shell
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
```

### 安定リリースのリポジトリを追加
```shell
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
```

### Grafanaをインストール
```shell
sudo apt-get update
sudo apt-get　install grafana
sudo apt-get install grafana-enterprise
```

## 起動
```shell
sudo systemctl start grafana-server
```

## アクセス
下記URLからアクセス

```
http://localhost:3000
```
下記ログイン画面では、デフォルトのユーザ名：`admin`,パスワード:`admin`を入れる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315779/9388ce3c-43ad-4810-5d55-075c80a92a22.png)

パスワードの変更を求められるので変更

## Prometheusと連携
1. サイドバーの`Dashboards > Create Dashboard`をクリック
2. `import dashboard`をクリック
3. URLに`https://grafana.com/grafana/dashboards/1860-node-exporter-full/`を入力
4. `Prometheus > Configure new data source > prometheus`をクリック
5. Connectionに`http://localhost:9090`を入力
5. `Save & test`をクリック

## 確認

Dashboardで確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315779/d62e3840-7e3a-b8a5-07d9-9ae62d49b660.png)

# systemdで管理する

## Prometheus
1. `/usr/bin/prometheus`にprometheusのバイナリファイルを設置
2. `/etc/prometheus/prometheus.yml`に設定ファイルを配置
3. `/usr/lib/systemd/system/prometheus.service` に以下を配置
```text
[Unit]
Description=Monitoring system and time series database
Documentation=https://prometheus.io/docs/introduction/overview/

[Service]
Restart=always
#User=prometheus
ExecStart=/usr/bin/prometheus --config.file=/etc/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no
LimitNOFILE=8192

[Install]
WantedBy=multi-user.target
```

- 自動起動設定
`systemctl enable prometheus.service`

- 開始
`systemctl start prometheus.service`

## Node exporter
1. `/usr/bin/node_exporter`にnode_exporterのバイナリファイルを設置
2. `/usr/lib/systemd/system/node_exporter.service` に以下を配置
```text
[Unit]
Description=Prometheus exporter for machine metrics
Documentation=https://github.com/prometheus/node_exporter

[Service]
Restart=always
#User=prometheus
ExecStart=/usr/bin/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no

[Install]
WantedBy=multi-user.target
```

- 自動起動設定
`systemctl enable node_exporter.service`

- 開始
`systemctl start node_exporter.service`

## Grafana

- 自動起動設定
`sudo systemctl enable grafana-server`