IBM Cloud 仮想サーバーを IBM Cloud Monitoring で監視する


# 目的
タイトルの通り、IBM Cloud の PaaS にある Monitoring サービスを使って、IaaS の仮想サーバーを監視します。

>[Sending and retrieving data](https://console.bluemix.net/docs/services/cloud-monitoring/send_retrieve_metrics_ov.html#send_retrieve_metrics_ov)
>![Kobito.3hcNu1.png](https://qiita-image-store.s3.amazonaws.com/0/101361/78910d33-a3a6-1ef7-80c2-4096dff447b0.png "Kobito.3hcNu1.png")

2018年7月現在、Windows はサポートされていないので、Linux で試します。
「collectd」というオープンソースのエージェントを導入して、データを送って、「Grafana」というダッシュボードサービスからグラフを確認します。

>![Kobito.UhE6Sm.png](https://qiita-image-store.s3.amazonaws.com/0/101361/1bf097f4-51f8-9b7c-eb7e-461deeefa592.png "Kobito.UhE6Sm.png")


# IBM Cloud Monitoring を注文する

まずは [Catalog - IBM Cloud](https://console.bluemix.net/catalog/?category=devops) から Monitoring サービスを注文します。

![Kobito.IDTPdy.png](https://qiita-image-store.s3.amazonaws.com/0/101361/8448d0e1-8dc0-f2f9-4afd-e11d3ea2b717.png "Kobito.IDTPdy.png")

今回のケースでは、有料の Premium Plan を使う必要があり、それを注文します。
以下のような価格体系になっているので、比較的使いやすいのかなと思います。

- $2.00 USD/Million data points ingested per month
- $0.10 USD/Single metric alerting rules per month

![Kobito.2W2Uc8.png](https://qiita-image-store.s3.amazonaws.com/0/101361/afd4c92f-05d5-ecfd-d55c-22ca58be438c.png "Kobito.2W2Uc8.png")

## 参考：Lite と Premium Plan の違い

>[Service plans](https://console.bluemix.net/docs/services/cloud-monitoring/monitoring_ov.html#plan)
>
>![Kobito.zEPSoI.png](https://qiita-image-store.s3.amazonaws.com/0/101361/ef94c382-b0d6-5148-9893-b12bb1a5e784.png "Kobito.zEPSoI.png")

## 参考：Lite Plan で進めると
ちなみに無料の Lite Plan でやろうとすると、以下のエラーが出て怒られました。

```
[ERROR] IBMCM plugin: client.go:424: Failed acknowledge due to error in metrics. Ignoring compressed pack. Sequence: 0. BXNMSMG02E: Metrics can only be accepted on a paid plan
```

# IBM Cloud 仮想サーバーに設定する

こちらを参考に進めます。

>[Sending data by using the Monitoring plugin (collectd)](https://console.bluemix.net/docs/services/cloud-monitoring/send-metrics/conf_monitoring_plugin.html#conf_monitoring_plugin)
>
>![Kobito.85P2br.png](https://qiita-image-store.s3.amazonaws.com/0/101361/c99967a2-a975-a866-5ec5-a8d007b3af7f.png "Kobito.85P2br.png")

## Firewall の設定
以下のエンドポイントに対して、監視データを送信できるようにしておきましょう。

>[Sending and retrieving data](https://console.bluemix.net/docs/services/cloud-monitoring/send_retrieve_metrics_ov.html#endpoints)

>| Region       |       URL |    collectd port    |
|:-----------------|:------------------|:------------------|
| Germany             |              	https://metrics.eu-de.bluemix.net |        9095        |
| Sydney           |            https://metrics.au-syd.bluemix.net |       9095       |
| United Kingdom             |              https://metrics.eu-gb.bluemix.net |        9095        |
| US South               |                	https://metrics.ng.bluemix.net |         9095         |

## 設定の確認
こちらの OS を使います。

```
cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core) 
```

NTP の設定を確認して、「NTP synchronized: no」と設定されていなければ、時刻同期の設定をおこないます。

```
timedatectl status

      Local time: Thu 2018-07-12 03:27:53 CDT
  Universal time: Thu 2018-07-12 08:27:53 UTC
        RTC time: Thu 2018-07-12 08:27:53
       Time zone: America/Chicago (CDT, -0500)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2018-03-11 01:59:59 CST
                  Sun 2018-03-11 03:00:00 CDT
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2018-11-04 01:59:59 CDT
                  Sun 2018-11-04 01:00:00 CST
```

## 時刻同期の設定
必要なモジュールのインストール・最新化をおこないます。

```
yum update -y
yum install chrony -y
yum install ntpdate -y
systemctl stop chronyd
```

CentOS7 からは ntp ではなく chrony を使用するのが推奨のようなので、その設定をします。

```
head /etc/chrony.conf -n 3

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server time.service.softlayer.com iburst
```

事前に手動で時刻同期をおこなっておきます。

```
ntpdate -u time.service.softlayer.com

12 Jul 03:34:21 ntpdate[13446]: adjust time server 10.0.77.54 offset 0.137563 sec
```

サービスを開始します。

```
systemctl start chronyd
systemctl enable chronyd
```

時刻同期が有効になったのを確認します。

```
timedatectl status

      Local time: Thu 2018-07-12 03:47:44 CDT
  Universal time: Thu 2018-07-12 08:47:44 UTC
        RTC time: Thu 2018-07-12 08:47:44
       Time zone: America/Chicago (CDT, -0500)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2018-03-11 01:59:59 CST
                  Sun 2018-03-11 03:00:00 CDT
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2018-11-04 01:59:59 CDT
                  Sun 2018-11-04 01:00:00 CST
```

## Monitoring サービスへの接続情報取得
IBM Cloud CLI を使って事前に接続情報を取得します。
新規インストールは [Installing the stand-alone IBM Cloud CLI](https://console.bluemix.net/docs/cli/reference/bluemix_cli/download_cli.html#download_install) からどうぞ。

```
ibmcloud --version

ibmcloud version 0.7.1+8a6d40e-2018-06-07T07:13:39+00:00
```

Monitoring サービス用の API Key を発行して、変数として定義します。

```
bx iam api-key-create ibmcloud-monitoring-key -d "ibmcloud-monitoring-key"
 
export APIKEY="kjshdgf...ldkdjdj"
```

Monitoring サービスのエンドポイントを、変数として定義します。

```
export METRIC_ENDPOINT="metrics.au-syd.bluemix.net"
```

スペース ID を取得して、変数として定義します。

```
bx iam space Sydney --guid

32247b60-827f-4e8a-b4e9-8918d77073ad

export SpaceID="32247b60-827f-4e8a-b4e9-8918d77073ad"
```

## Monitoring エージェント (collectd) の導入
必要なモジュールのインストールをおこないます。

```
yum install epel-release -y
yum install collectd -y
wget -O - https://downloads.opvis.bluemix.net/client/IBM_Logmet_repo_install.sh | bash
yum install ibmcloud-monitoring -y
```

Monitoring サービス用の設定作成コマンドを CentOS7 で実行するとエラーになります。

```
/opt/ibmcloud_monitoring/configure -e $METRIC_ENDPOINT -a $APIKEY -s s-$SpaceID

Collectd configuration file '/etc/collectd/collectd.conf' does not exist
```

原因は、collectd の設定ファイル格納場所が以下で異なるからです。

- CentOS --- /etc/collectd.conf
- Ubuntu --- /etc/collectd/collectd.conf

気を取り直して、「-d /etc」のオプションをつけて再度実行します。

```
/opt/ibmcloud_monitoring/configure -e $METRIC_ENDPOINT -a $APIKEY -s s-$SpaceID -d /etc

Successfully configured IBM Cloud Monitoring Plugin for collectd at /etc/ibmcloud-monitoring.conf
```

Monitoring サービス用の設定が追加されたことを確認します。

```
tail /etc/collectd.conf -n 1

Include "/etc/ibmcloud-monitoring.conf"
```

今回は CPU 使用率をみるために、一部設定を変更します。

```
vi /etc/collectd.conf 

#CPU時間情報を取得
LoadPlugin cpu

#CPU使用率として取得
<Plugin cpu>
  ReportByCpu true
  ReportByState true
  ValuesPercentage true
</Plugin>
```

サービスを再起動します。

```
systemctl restart collectd
```

以下のようなサービスログがみえていれば問題ありません。

```
systemctl status collectd -l

● collectd.service - Collectd statistics daemon
   Loaded: loaded (/usr/lib/systemd/system/collectd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-07-12 04:52:16 CDT; 29s ago
     Docs: man:collectd(1)
           man:collectd.conf(5)
 Main PID: 25561 (collectd)
   CGroup: /system.slice/collectd.service
           └─25561 /usr/sbin/collectd

Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: [INFO] IBMCM plugin:Fetching Configuration for IBMCloudMonitoring plugin
Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: plugin_load: plugin "IBMCloudMonitoring" successfully loaded.
Jul 12 04:52:16 khayama-collectd.ibmcloud.com systemd[1]: Started Collectd statistics daemon.
Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: Systemd detected, trying to signal readyness.
Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: [INFO] IBMCM plugin:Successfully validated configuration.
Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: Initialization complete, entering read-loop.
Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: configfile: Cannot get unknown global option `Flushinterval'.
Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: [INFO] IBMCM plugin:Found Flushinterval = 64424509440
Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: [INFO] IBMCM plugin:==========Configuration======
                                                               Name: au-syd
                                                               Server: metrics.au-syd.bluemix.net:9095
                                                               Scope ID: s-32247b60-827f-4e8a-b4e9-8918d77073ad
                                                               Prefix: .
                                                               Postfix: .
                                                               Apikey: *******
                                                               Version: 3
                                                               Buffer Size: 1000
                                                               Interval: 60sec
                                                               SkipInternalPrefixForStatsd: false
                                                               RateCounter: false
                                                               MaxConnections: 10
                                                               Escapechar: _
                                                               SeparateInstances: false
                                                               Debug: false
                                                               Trace Metrics: false
Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: [INFO] IBMCM plugin:Successfully registered writer - IBMCloudMonitoring
```

```
systemctl status collectd -l

● collectd.service - Collectd statistics daemon
   Loaded: loaded (/usr/lib/systemd/system/collectd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-07-12 04:52:16 CDT; 2min 42s ago
     Docs: man:collectd(1)
           man:collectd.conf(5)
 Main PID: 25561 (collectd)
   CGroup: /system.slice/collectd.service
           └─25561 /usr/sbin/collectd

Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: [INFO] IBMCM plugin:==========Configuration======
                                                               Name: au-syd
                                                               Server: metrics.au-syd.bluemix.net:9095
                                                               Scope ID: s-32247b60-827f-4e8a-b4e9-8918d77073ad
                                                               Prefix: .
                                                               Postfix: .
                                                               Apikey: *******
                                                               Version: 3
                                                               Buffer Size: 1000
                                                               Interval: 60sec
                                                               SkipInternalPrefixForStatsd: false
                                                               RateCounter: false
                                                               MaxConnections: 10
                                                               Escapechar: _
                                                               SeparateInstances: false
                                                               Debug: false
                                                               Trace Metrics: false
Jul 12 04:52:16 khayama-collectd.ibmcloud.com collectd[25561]: [INFO] IBMCM plugin:Successfully registered writer - IBMCloudMonitoring
Jul 12 04:53:16 khayama-collectd.ibmcloud.com collectd[25561]: [WARN] IBMCM plugin:client.go:334: Sending 181 metrics in Buffer.
Jul 12 04:53:16 khayama-collectd.ibmcloud.com collectd[25561]: [NOTICE] IBMCM plugin:client.go:490: Connecting to metrics.au-syd.bluemix.net:9095
Jul 12 04:53:16 khayama-collectd.ibmcloud.com collectd[25561]: [NOTICE] IBMCM plugin:client.go:573: Successfully established a connection with metrics.au-syd.bluemix.net
Jul 12 04:53:16 khayama-collectd.ibmcloud.com collectd[25561]: [NOTICE] IBMCM plugin:client.go:435: Successfully wrote 181 metrics to the socket.
Jul 12 04:54:16 khayama-collectd.ibmcloud.com collectd[25561]: [WARN] IBMCM plugin:client.go:334: Sending 162 metrics in Buffer.
Jul 12 04:54:16 khayama-collectd.ibmcloud.com collectd[25561]: [NOTICE] IBMCM plugin:client.go:490: Connecting to metrics.au-syd.bluemix.net:9095
Jul 12 04:54:16 khayama-collectd.ibmcloud.com collectd[25561]: [NOTICE] IBMCM plugin:client.go:573: Successfully established a connection with metrics.au-syd.bluemix.net
Jul 12 04:54:16 khayama-collectd.ibmcloud.com collectd[25561]: [NOTICE] IBMCM plugin:client.go:435: Successfully wrote 162 metrics to the socket.
```

# Grafana ダッシュボードの確認
取得したデータをダッシュボードから確認します。

IBM Cloud Monitoring : https://metrics.au-syd.bluemix.net/app/#/grafana4

![Kobito.m6Fjuk.png](https://qiita-image-store.s3.amazonaws.com/0/101361/a5c45d12-09ac-d391-3c86-94e77218f570.png "Kobito.m6Fjuk.png")

新規にダッシュボードを作成します。

![Kobito.qwphki.png](https://qiita-image-store.s3.amazonaws.com/0/101361/fb09a211-c093-fefa-a83b-3691b578b452.png "Kobito.qwphki.png")

グラフ作成を選択します。

![Kobito.7e6svX.png](https://qiita-image-store.s3.amazonaws.com/0/101361/c3c89da8-c8ac-ab1f-8763-fd09f2618eb3.png "Kobito.7e6svX.png")

グラフタイトルから「edit」を選び、メトリクスから CPU 使用率を表示できます。

![Kobito.QoMH5k.png](https://qiita-image-store.s3.amazonaws.com/0/101361/2a10fcd9-a278-202d-32b2-0fa16bee6bdf.png "Kobito.QoMH5k.png")

細かくみると、1分ごとにデータが送られていることがわかります。

![Kobito.gkSGsk.png](https://qiita-image-store.s3.amazonaws.com/0/101361/98406750-4ca0-e495-20da-6af538587463.png "Kobito.gkSGsk.png")

# さいごに
IBM Cloud Monitoring は、仮想サーバーと同時に、コンテナや PaaS アプリの監視を一元的にできるところが特徴です。
システムの監視サービスに何を使うかを迷う方もいると思いますが、今回のように PaaS で提供されている安定したサービス基盤に対して、API Key ベースの連携でデータを一元的に監視できる、というのは1つの選択肢になるのではと思います。