DatadogでRaspberry Piを監視する

##なにしたの？

会社でDatadog使っていてなかなか便利なので、家のRaspberry Piも監視してみました。
インストールが意外に面倒だったので備忘録。

## Datadogってなに？

ちょう簡単にいうとサーバの監視サービス。

- CPUやメモリ、ディスクなどの項目をグラフ化することで今の状態が把握できる
- OSだけではなくNginxやMySQL、AWSの料金など[様々な監視](https://www.datadoghq.com/product/integrations/)も可能
- APM: アプリケーションの監視も可能。Java/Python/Ruby/Goなど[様々な言語・環境](https://docs.datadoghq.com/tracing/setup/)に対応
- ある閾値を超えたらSlackにメッセージを投げることもできる

などなど様々な機能がある。
日本のサービスだと[Mackerel](https://mackerel.io/ja/)が有名。

## Datadogって無料でどこまで使えるの？

- 5ホストまで
- データの保管期間は１日
- Alertは使えない

くわしくは https://www.datadoghq.com/pricing/ 参照。
個人のRaspberry Piだししょうがない。


## 環境

- ハードウェア：Raspberry Pi 2 Model B
- OS: Raspbian Stretch

## インストールの手順

### アカウント作成

https://www.datadoghq.com から 「Get Started free」を選択。
アカウント作成を粛々と進める。

### agentのインストール

サーバから監視に必要な情報を取得するためにRaspberry Piにagentと呼ばれるツールをインストールする必要がある。
インストールを進めると[インストール手順](https://app.datadoghq.com/account/settings#agent) になるはず。
最初はAnsibleを使おうと思ったがうまくインストールできなかったので [From Source](https://app.datadoghq.com/account/settings#agent/source)を選択。

```shell
$ sudo su -
# DD_API_KEY=<API_KEY> sh -c "$(curl -L https://raw.githubusercontent.com/DataDog/dd-agent/master/packaging/datadog-agent/source/setup_agent.sh)"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 24382  100 24382    0     0   153k      0 --:--:-- --:--:-- --:--:--  154k
Checking that logfile is writable
OK
Checking installation requirements
* uname Linux
* sysstat is installed
* python found, using `python2.7`
* downloader found, using `curl -k -L -o`
* sed found, using `sed`


Installing Datadog Agent 5.27.2
Installation is logged at /home/pi/.datadog-agent/ddagent-install.log

* Setting up a python virtual env
Done
* Activating the virtual env
Done
* Setting up setuptools
Done
* Setting up pip
Done
* Installing requirements
Done
* Downloading agent version 5.27.2 from GitHub (~5 MB)
Done
* Uncompressing tarball
Done
It looks like you hit an issue when trying to install the Datadog agent.
###
    from urllib3.packages.ordered_dict import OrderedDict
ImportError: No module named ordered_dict
sh: 234: 2: parameter not set
It looks like you hit an issue when trying to install the Datadog agent.
###
###

Do you want to send a failure report to Datadog (Content of the report is in /home/pi/.datadog-agent/ddagent-install.log)? (y/n)
```

お、エラー…。

ここで　`y` を選ぶとサポートにメールを送信できる。すぐサポートからメールが返ってきてすごい！と思ったが

> It looks like the ordered_dict module not being installed is causing some issues.
> so installing it on the machine and then try installing the datadog-agent seems to be the appropriate next step to solve this issue.

というあまり参考にならない回答でした。でもありがとう。

10/28 追記
サポートから5.28.0でFIXしたとの連絡が来ました。なので、5.28以降のバージョンをインストールした場合は「エラー解決」はスキップして進めてください。
https://github.com/DataDog/dd-agent/commit/b24a9aae76b3705d8b3a823043ef0c9361ca0617

### エラー解決

エラーの原因となった [urllib3](https://github.com/urllib3/urllib3) を見たが、たしかに `ordered_dict` が[ない](https://github.com/urllib3/urllib3/tree/master/src/urllib3/packages)。
調べてみると [Ver.1.23には存在する](https://github.com/urllib3/urllib3/tree/1.23/urllib3/packages)が、1.24にはない。
仕方がないので1.23を入れるとする。

```shell
# source .datadog-agent/venv/bin/activate
(venv)# pip uninstall urllib3
(略)
Proceed (y/n)? y
Successfully uninstalled urllib3-1.24
(venv)# pip install urllib3==1.23
(略)
Successfully installed urllib3-1.23
(venv)# deactivate
```

### 再度実行
```shell
$ sudo su -
# DD_API_KEY=<API_KEY> sh -c "$(curl -L https://raw.githubusercontent.com/DataDog/dd-agent/master/packaging/datadog-agent/source/setup_agent.sh)"
```

ビルドにものすごい時間がかかったが成功した。

フォアグラウンドで `datadog-agent` が起動し、Webでデータの送信状況が確認できます。

### ダッシュボードの作成

画面でぽちぽちすればいい感じの画面ができる。
自分はこんな感じ。
<img width="1097" alt="SS_ 2018-10-20 21.25.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/36587/155c782c-3638-4833-be09-380fa9e387ef.png">

### systemdに登録

フォアグランドでの処理は一時的なものなので、Systemdでサービスとして登録。
https://qiita.com/DQNEO/items/0b5d0bc5d3cf407cb7ff を参考に作成。


#### Unit定義ファイルの作成

```shell
$ sudo vi /etc/systemd/system/datadog.service
```

```/etc/systemd/system/datadog.service

[Unit]
Description = datadog daemon

[Service]
ExecStart = /root/.datadog-agent/bin/agent
Restart = always
Type = simple

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

#### UnitがServiceとして認識されたか確認する

```
$ sudo systemctl list-unit-files --type=service | grep datadog
datadog.service                        disabled  
```

#### enableしてstartする

```shell
# システム起動時にdatadogを起動
$ sudo systemctl enable datadog
# datadogを起動
$ sudo systemctl start datadog
```

## まとめ

- urllibのバージョンを1.23に下げるとインストールできた
    - datadog-agent 5.28以降ならこの作業は不要
- ダッシュボードは簡単に作れた
- ソースからだと起動スクリプトを作ってくれないので自分で作った

今回デフォルトでインストールされたのはagentの5系だけどGoで書き直された[6系](https://docs.datadoghq.com/agent/?tab=linux#what-is-the-agent-v6)もあるらしい。CPUやメモリの使用率が下がっているとのことなのでこちらも入れてみたい。