Model Driven Telemetry環境を構築してみた －後編－

# はじめに

前編では、ルータのTelemetryデータをInfluxDB上に格納するところまで行いました。
[Model Driven Telemetry環境を構築してみた －前編－](https://qiita.com/tech_kitara/items/7583b73932ff7af7c1bb)

後編では、Grafanaによるデータの可視化を行っていきます。

# 1. Grafanaのセットアップ
## (1) Grafanaのインストール
参考URL: [Install Grafana and InfluxDB on CentOS 7](https://computingforgeeks.com/install-grafana-and-influxdb-on-centos-7/)

インストールの前に、grafana.repoファイルに設定を追加します。

```
$ cat <<EOF | sudo tee /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
```

続いて、yumレポジトリからインストールを行います。

```
$ sudo yum -y install grafana
```

Firewallが有効化されている場合は、TCP3000を許可の上サービスを再起動します。
（AWSの場合、セキュリティグループでTCP3000を許可）

```
$ sudo firewall-cmd --add-port=3000/tcp --permanent
$ sudo firewall-cmd --reload
```
サービスのスタートを行います。再起動時、自動的に起動するようenableも行います。

```
$ sudo systemctl start grafana-server
$ sudo systemctl enable grafana-server
```

## (2) Grafanaへのログイン
参考URL: [How to Install TIG Stack (Telegraf, InfluxDB, and Grafana) on Ubuntu 18.04 LTS - Step7](https://www.howtoforge.com/tutorial/how-to-install-tig-stack-telegraf-influxdb-and-grafana-on-ubuntu-1804/)

Webブラウザから`http://<サーバのIPアドレス>:3000`へアクセスします。初回ログイン時のユーザ名とパスワードはいずれもadminです。
![無題0817_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/0aa4a0bf-8f09-395a-30ed-032ddb524f44.png)

パスワード変更を求められるので、任意のものに変更し、Saveボタンをクリックします。
![無題0817_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/fa71ad55-8c52-d3ca-fcd7-6137c769d4c0.png)


## (3) Grafanaへのデータソースの追加
「Add data source」をクリックし、InfluxDBのデータソースを追加します。
![無題0817_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/8452fb35-5336-0ed6-7f4b-5be08ff3d89d.png)

Time series databasesの「InfluxDB」をSelectします。
![無題0817_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/407ac207-7d2f-7301-ffb7-b5775efe8150.png)


以下の画面で、URLとDatabaseを指定します。（必要に応じてUserとPasswordも指定。）

- URL: http://localhost:8086/
- Database: telegraf

![無題0816-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/d0b6ee21-c9fc-78d3-a67c-91a5f640e390.png)
![無題0816-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/1a108100-5b87-427d-1d43-4549f5ca5bfa.png)

設定後、「Save ＆ Test」ボタンをクリックし、「Data source is working」と表示されたら成功です。


## (4) Grafanaのダッシュボードセットアップ

### 設定例1: メモリ使用量

#### ①Query設定
Home画面に戻り、「New dashboard」をクリックした後、「Add Query」をクリックします。
![無題0817_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/37a37898-391f-0c0a-c1e2-7c7956458073.png)

下の図の通り、メモリ使用量とメモリ合計量の2つのQueryを作成します。
デフォルトはGUIで入力する形ですが、まずはToggle text edit mode（右側の鉛筆マーク）をクリックし、以下のクエリを直接入力してみます。

```sql:
-- QueryA: メモリ使用量を取得  
SELECT "used_memory" FROM "Cisco-IOS-XE-memory-oper:memory-statistics/memory-statistic" WHERE "total_memory" >= 5000000

-- QueryB: メモリ容量を取得  
SELECT "total_memory" FROM "Cisco-IOS-XE-memory-oper:memory-statistics/memory-statistic" WHERE "total_memory" >= 5000000
```

いずれもWHERE句で`"total_memory" >= 5000000`を指定しています。前編の「3.(6) Telegrafの起動、DB検索」を見て頂くと分かる通り、同時刻に2種類のデータが取得されており、total_memoryが小さい方（3149400）をグラフ表示から除外するための設定です。
「ALIAS BY」を指定することで、グラフに表示されるパラメータの名称を指定できます。今回はそれぞれ「used_memory」、「total_memory」としています。
![無題0817_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/e690e2dd-82d8-e8f9-e0d9-5cb832650e19.png)

#### ②Visualization設定
画面左側の「Visualization」をクリックし、「Axes > Left Y > Unit」でY軸の単位を「bytes」にします。
また、「Legend > Values」の「Max」と「Current」を有効化し、グラフ内に過去の最大値と現状の値が表示されるようにします。
![無題0817_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/825fcd1b-03ed-90b5-23aa-47a808ca44eb.png)

#### ③General設定
画面左側の「General」をクリックし、Titleを「Memory」とします。
![無題0817_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/736c5e5d-dd28-0dd9-6800-9eb756e23b6a.png)

左上の「Go Back」ボタンをクリックすると、作成したダッシュボードが表示されていると思います。
![無題0817_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/0e9ac349-3074-cc5d-938e-ff0f3a872b87.png)


### 設定例2: CPU使用量

#### ①Query設定
続いて、CPU使用量のパネルを追加します。画面右上の「Add panel」（グラフのマーク）をクリックします。
![無題0817_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/11d7e03a-a754-e005-93db-3a4774cc6734.png)

「Add Query」をクリックし、以下のクエリを入力します。

```sql:
-- QueryA: CPU使用率を取得  
SELECT "five_seconds" FROM "Cisco-IOS-XE-process-cpu-oper:cpu-usage/cpu-utilization"
```
「ALIAS BY」は「util_five_seconds」としています。
![無題0817_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/df3e05fa-bf27-0d47-d87b-216e14d043cf.png)

#### ②Visualization設定
「Axes > Left Y > Unit」でY軸の単位を「percent(0-100)」にします。
また、「Legend > Values」の「Max」と「Current」を有効化し、グラフ内に過去の最大値と現状の値が表示されるようにします。
![無題0817_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/b04c4e09-8045-3a02-fa4c-cdfe4be14414.png)

#### ③General設定
画面左側の「General」をクリックし、Titleを「CPU」とします。
![無題0817_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/600792f0-0b8e-95b2-14f2-cc1b392d85a5.png)


### 設定例3: インターフェースのステータス、カウンター情報
参考URL: [GrafanaとInfluxDBでネットワークリソースの視覚化](https://qiita.com/kooshin/items/a770c6df33fe2ffb2d0b)

#### ①Query設定
最後に、インターフェースのカウンター情報を表示します。例として、in方向のバイトカウント（in_octets）とout方向のバイトカウント（out_octets）を表示させてみます。今回はデフォルトのGUIをそのまま使いました。
カウンターは累計値のため、直前の値との差分を取る必要があります。そのため、SELECTで「non_negative_derivative(10s)関数」を使用し、直前の10秒前の値との差分を算出しています。値を1秒単位に変換し、さらに単位をバイトからビットに変換するため、「math(*8/10)関数」も使用しています。GROUP BYでは「fill(none)」を選択します。
![無題0817_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/ac8b1598-164e-35fe-d114-f45f3ad91e68.png)

#### ②Visualization設定
「Axes > Left Y > Unit」でY軸の単位を「bits/sec」にします。
また、「Legend > Values」の「Max」と「Current」を有効化し、グラフ内に過去の最大値と現状の値が表示されるようにします。
![無題0817_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/894909f4-20de-dde9-1921-76a23a67b7c3.png)

#### ③General設定
画面左側の「General」をクリックし、Titleを「Bandwidth」とします。
![無題0817_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/9c177ccd-e498-171e-74ff-cc9942d243c1.png)

同様に、in方向のパケットカウント（in_unicast_pkts）とout方向のパケットカウント（out_unicast_pkts）でパネル「Packet Count」、in方向のエラーパケットカウント（in_errors）とout方向のエラーパケットカウント（out_errors）でパネル「Error Count」を作成し、各パネルの配置を調整したのが下の図です。
![無題0817_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310082/778060f1-f42f-3062-7188-81fbc649209c.png)

設定が終わったら、画面右上の「Save dashboard」ボタンでダッシュボードを保存します。

# 終わりに
今回は最低限の時系列グラフ表示のみを行いましたが、バー、テーブル等様々な表示形式にも対応しています。加えて、アラームを上げたり、Templateを使って効率的にダッシュボード作成ができたりするようです。
まだ使い始めたばかりなので、今後色々とカスタマイズしてみたいと思います。