[DevSecOps] #3 Prometheus,Grafanaを使用したサーバ監視基盤の構築手順
Tags: devops, security
Published: 2020-08-06 04:31:41





# Prometheus,Grafanaを使用したサーバ監視基盤の構築手順

## 目次--------------------------------

### 0.はじめに

### 1.Architecture

### 2.Prometheus導入手順

### 3.Node_exporter導入手順

### 4.Grafana導入手順①(インストール＆初期設定)

### 5.Grafana導入手順②(ダッシュボード初期設定)

## -----------------------------------

## 0.はじめに

監視運用を行う上で、クラウド環境上の既存ツールを利用しているが、グラフの描画が見にくかったり、アラート通知の設定が複雑だったり、サーバ増築時の追加設定が面倒だったりと痒いところに手が届かないポイントが幾つかあるかと思います。そんな時にオススメできるのがPrometheus(監視)+Grafana(可視化)の監視体制がオススメです。具体的には以下の点が容易に実装できることがメリットです。またPrometheusはSoundcloud([https://soundcloud.com](https://soundcloud.com/))社がリリースしているツールであり、Soundcloudのサービスに馴染みがある方もいるのではないかと思います。

- 監視対象のサーバーから情報を取得 & 保管
- 保管済みデータに対して集計クエリを発行できる
- しきい値を超えた場合のアラート (メール、Slack、がんばればTwilioで電話)
- 柔軟なアラート設定 (同じエラーはまとめて通知とかの設定ができる)
- 構築が比較的容易

## 1.Architecture

まず、各ツールの役割は以下のようになっております。

①Prometheus : サーバ監視基盤
②Grafana : Prometheusのデータを可視化＆アラート検知/作成する
③Node_exporter : 被監視サーバのリソースデータをPrometheusへPushする

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/rrhct2lkm4qie20ra0et.png)

今回のアーキテクチャはPrometheus,Grafanaをそれぞれ一つのEC2インスタンスに導入し稼働させる構成としています。また監視対象のサーバはAPサーバ群(n台)としています。

## 2.Prometheus導入手順

## 環境

Amazon Linux 2 AMI (HVM), SSD Volume Type
Prometheus 2.3.2

今回はAWSに作成されたEC2インスタンスを利用して構築していきます。IPアドレスはそれぞれの環境に合わせて変更ください。

## Prometheusの導入

Prometheusサーバにssh接続をし以下の手順で導入を行っていきます。

### port 開放

プロメテウスサーバーはデフォルトだと9090ポートでlistenするので開放します。(解放済みの場合はスキップ)

```shell
firewall-cmd --add-port=9090/tcp --zone=public --permanent
firewall-cmd --reload
firewall-cmd --list-ports --zone=public
```

### Prometheus Serverのインストール

```shell
wget https://github.com/prometheus/prometheus/releases/download/v*.*.*/prometheus-*.*.*.linux-amd64.tar.gz
tar zxvf prometheus-*.*.*.linux-amd64.tar.gz
mv prometheus-*.*.*.linux-amd64 promethus-server
cd promethus-server
cp prometheus.yml prometheus.yml.org
(ver.は任意)
```

解凍後のディレクトリに入りprometheus.ymlを編集する。- targets:以下に監視対象のサーバip:9100を追加していく

```yml
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets:
        - 'XXX.XXX.XXX.XXX:9100'
```

### 起動スクリプト作成（任意）

/usr/lib/systemd/system/prometheus.service

```
[Unit]
Description=Prometheus - Monitoring system and time series database
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/src/prometheus/prometheus-server/prometheus \
  --config.file=/usr/local/src/prometheus/prometheus-server/prometheus.yml \

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

### 起動

```shell
systemctl daemon-reload
自動起動設定
systemctl enable prometheus.service
起動
systemctl start prometheus.service
```

バイナリを直接起動する場合は以下

```shell
nohup ./node_exporter &
```

grepしてプロセスがスタートしていることを確認できたらOK

### 確認

http://<プロメテウスサーバーのIPアドレス>:9090/graphに接続すると
以下のようなページが表示されると思います。表示されたら、インストール＆初期設定完了
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/fodbbowah6blc41baqjs.png)


## 3.Node_exporter導入手順

被監視サーバにssh接続をし以下の手順で導入を行っていきます。

### port 開放

デフォルトだと9100ポートでlistenするので開放します

```shell
firewall-cmd --add-port=9100/tcp --zone=public --permanent
firewall-cmd --reload
-- 確認 --
firewall-cmd --list-ports --zone=public
9100/tcp
```

### Node Exporterのインストール

```shell
wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-*.**.*.linux-amd64.tar.gz
tar zxvf node_exporter-*.**.*.linux-amd64.tar.gz
```

### 起動スクリプト作成

```
[Unit]
Description=Node Exporter
Documentation=https://github.com/prometheus/node_exporter

[Service]
Type=simple
ExecStart=EnvironmentFile=/usr/local/src/prometheus/node_exporter/node_exporter $OPTIONS
Restart=always

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

### 起動

/usr/lib/systemd/system/prometheus-node-exporter.service

```shell
systemctl daemon-reload
-- 自動起動設定 --
systemctl enable prometheus.service
-- 起動 --
systemctl start prometheus.service
```

### 確認

http://<監視対象サーバーのIPアドレス>/metricsに接続すると
以下のようなステータスが記載されたページが開くと思います。

ブラウザでip:9100/metriksへアクセスしてみて以下のようにスクレイプ情報が表示されたら正常に動作しています。
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/vask4te33zku6bzp4rlg.png)


## 4.Grafana導入手順①(インストール＆初期設定)

Grafanaサーバにssh接続をし以下の手順で導入を行っていきます。

### インストール

```shell
wget https://dl.grafana.com/oss/release/grafana-6.2.5.linux-amd64.tar.gz 
tar -zxvf grafana-6.2.5.linux-amd64.tar.gz 
```

### 起動

```
systemctl start grafana-server
```

バイナリを直接起動する場合は以下

```shell
nohup ./grafana &
```

grepしてプロセスがスタートしていることを確認できたらOK

### アクセス

HTTPで3000番ポートにアクセスとあるので、ブラウザからやってみます。
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/bxudbdnzrhgxrs01a27n.png)

初期ユーザ、パスワードの**admin/admin**でログインします。

### パスワードの変更

真っ先にやることは、デフォルトパスワードの変更です。画面左下のアイコンをクリックして、Preferencesを選びます。
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/yyl4foaq81dxhjei4sth.png)

次の画面で、Chenge Passwordを選択。新旧パスワードを入力して変更します。

### データソースの登録

次にデータソースを登録していきます。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/0uut5wt1kflsnidoyazl.png)

Deta Sourcesをクリックします。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/goap4avq4jfir788py2c.png)

名前を入力したらAdd data sourceをクリックしPrometheusを選択

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/b444b90bim5tjxx5ofee.png)

Prometheusを選択する。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/cfdch0qqr1zyg7nbnoin.png)

ここでhttp://localhost:9090のipはprometheusサーバのipへ変更

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/5wkych0bss4i1coypls4.png)

「Deta source is working」の表示が出たら設定完了

## 5.Grafana導入手順②(ダッシュボード初期設定)

データ連携が完了したら、次はデータの可視化を行うダッシュボードを作成していきます。ですが、予めダッシュボードの設計をしていない場合はテンプレートの利用がオススメです。

まず、目的に合わせてGrafanaのテンプレートを選定します。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/abzybqgjrgklw2fri8o3.png)

「Grafana Labs」の「Downloads」にマウスオーバし、「Dashboards」をクリックしましょう。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/he3s75nvtp8kldkt8m25.png)

すると上記のように、ダッシュボードの候補が表示されます。各ページに飛ぶとDashboard id表示されているのでコピーします。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/putxcczg84ennk4rsf0q.png)

そして、それをGrafanaのImportにidを入力しLoadするとダッシュボードが作成されます。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/l134lgx5l2ecj8hli16h.png)

作成されたダッシュボードに移動し、データが監視データがトラッキングできていれば、完了です。

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/sd917lige4yde4emc4jp.png)

上記のようなサーバリソース情報が出力されていることが確認できます。