Prometheus最速構築

# 概要
Prometheus, Node_Exporter, Grafana を構築し、ローカルPCを監視できるようになるまでのレシピ。
以下、すべてのコマンドは一般ユーザで実行することを想定としている。
実用性重視のため、Prometheus 自体の説明はここではしない



# 動作環境
- Linux (Debian [v10.8])
- Windows (以下条件)
  - WSL2 の Ubuntu [v20.04]
  - `systemctl` コマンドが使用可能な状態  
    参考: https://github.com/arkane-systems/genie



# Prometheus構築手順
### 1. Prometheus用のユーザとグループを作成
``` bash
sudo groupadd prometheus
sudo useradd -d /var/lib/prometheus -g prometheus -s /bin/false -m prometheus
```

### 2. 必要なファイルをDL & 展開
``` bash
cd
wget https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz
tar xf ./prometheus-2.28.1.linux-amd64.tar.gz
ls -1 ./prometheus-2.28.1.linux-amd64
```
- 2021/8/2 時点での最新 [v2.28.1] を選択
- 最新Verの確認: https://prometheus.io/download/

### 3. Prometheusのパスを通す
``` bash
cd ./prometheus-2.28.1.linux-amd64/
sudo cp ./prometheus ./promtool /sbin/
sudo chown root:root /sbin/prometheus /sbin/promtool
```

### 4. Prometheus用の設定ディレクトリとデータディレクトリを作成
``` bash
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus/data
sudo chown -R prometheus:prometheus /var/lib/prometheus/data
```

### 5. 設定ファイルとconsole templateを設定ディレクトリへ設置
``` bash
sudo cp -r ./prometheus.yml ./consoles ./console_libraries /etc/prometheus/
sudo chown -R root:prometheus /etc/prometheus
```

### 6. systemdのservice unit fileを設置
``` bash
cat << 'EOS' | sudo tee /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target

[Service]
User=prometheus
ExecStart=/sbin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/data --web.console.templates=/etc/prometheus/consoles  --web.console.libraries=/etc/prometheus/console_libraries
ExecStop=/bin/kill -TERM ${MAINPID}
ExecReload=/bin/kill -HUP ${MAINPID}

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

### 7. Prometheusの起動, 確認を行う
``` bash
sudo systemctl daemon-reload
sudo systemctl enable prometheus.service
sudo systemctl start prometheus.service
sudo systemctl status prometheus.service
```

### 8. http://localhost:9090



# Node_Exporter構築手順

:::note warn
Node_Exporterのみ構築する場合、0も実施する
:::

### 0. Prometheus用のユーザとグループを作成
``` bash
sudo groupadd prometheus
sudo useradd -d /var/lib/prometheus -g prometheus -s /bin/false -m prometheus
```

### 1. 必要なファイルをDL & 展開
``` bash
cd
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xf ./node_exporter-1.3.1.linux-amd64.tar.gz
ls -1 ./node_exporter-1.3.1.linux-amd64
```
- 2021/12/13 時点での最新 [v1.3.1] を選択
- 最新Verの確認: https://github.com/prometheus/node_exporter/releases/

### 2. Node_Exporterのパスを通す
``` bash
sudo cp ./node_exporter-1.3.1.linux-amd64/node_exporter /sbin/
sudo chown root:root /sbin/node_exporter
```

### 3. systemdのservice unit fileを設置
``` bash
cat << 'EOS' | sudo tee /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter for Prometheus
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/sbin/node_exporter
PrivateTmp=true

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

### 4. Node_Exporterの起動, 確認を行う
``` bash
sudo systemctl daemon-reload
sudo systemctl enable node_exporter.service
sudo systemctl start node_exporter.service
sudo systemctl status node_exporter.service
```

### 5. http://localhost:9100/metrics


# Node_Exporterを収集対象として登録
### 1. prometheus.ymlにNode_Exporterのjobを追記
``` bash
cat << 'EOS' | sudo tee -a /etc/prometheus/prometheus.yml

  - job_name: 'node'

    file_sd_configs:
    - files:
       - /etc/prometheus/nodes.yml
EOS
```

### 2. nodes.ymlへNode_Exporterを登録
``` bash
cat << 'EOS' | sudo tee /etc/prometheus/nodes.yml
- targets:
   - localhost:9100
  labels:
    role: prometheus
EOS
```

### 3. 設定ファイルの構文チェック
``` bash
sudo promtool check config /etc/prometheus/prometheus.yml
```

### 4. Prometheusをreload
``` bash
sudo killall -HUP prometheus
```

### 5. http://localhost:9090/targets



# Grafana構築手順
### 1. GrafanaのGPGキーを追加
``` bash
cd
sudo /bin/bash -c "echo deb https://packages.grafana.com/oss/deb stable main > /etc/apt/sources.list.d/grafana.list"
curl https://packages.grafana.com/gpg.key | sudo apt-key add -
```

### 2. Grafanaをインストール & 起動
``` bash
sudo apt update
sudo apt install grafana
sudo systemctl enable grafana-server.service
sudo systemctl start grafana-server.service
```

### 3. http://localhost:3000 へアクセス

### 4. Email or username: `admin`, Password: `admin` でログイン

### 5. Data Sourcesの追加
   - 画面左部の `Configuration` から `Data Sources` を選択し、`Add data source` をクリック
   - `Prometheus` を選択
   - URLに `http://localhost:9090` を入力し、`Save & Test` をクリック

### 6. Dashboardのインポート
   - 画面左部の `Dashboards` から `Manage` を選択し、`Import` をクリック
   - Import via grafana.com に `1860` を入力し、`Load` をクリック
   - Name の行頭に`[Import] ` を追記
   - prometheus の `Prometheus (default)` を選択し、`Import` をクリック



# 関連ファイル、ディレクトリ一覧
- /etc/prometheus --> Prometheus設定ファイルディレクトリ
  - prometheus.yml --> Prometheus設定ファイル
  - nodes.yml --> Node_Exporter設定ファイル
- /var/lib/prometheus/data --> Prometheus時系列データベースのデータディレクトリ



# 参考記事
- Prometheus構築
  https://gihyo.jp/admin/serial/01/ubuntu-recipe/0562

- Prometheus, Grafana全般
  https://christina04.hatenablog.com/archive/category/Prometheus