DatadogでRaspberry Piを監視する


なにしたの?

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

Datadogってなに?

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

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

などなど様々な機能がある。
日本のサービスだとMackerelが有名。

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

  • 5ホストまで
  • データの保管期間は1日
  • 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と呼ばれるツールをインストールする必要がある。
インストールを進めるとインストール手順 になるはず。
最初はAnsibleを使おうと思ったがうまくインストールできなかったので From Sourceを選択。

$ 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 を見たが、たしかに ordered_dictない
調べてみると Ver.1.23には存在するが、1.24にはない。
仕方がないので1.23を入れるとする。

# 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

再度実行

$ 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でデータの送信状況が確認できます。

ダッシュボードの作成

画面でぽちぽちすればいい感じの画面ができる。
自分はこんな感じ。

systemdに登録

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

Unit定義ファイルの作成

$ 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する

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

まとめ

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

今回デフォルトでインストールされたのはagentの5系だけどGoで書き直された6系もあるらしい。CPUやメモリの使用率が下がっているとのことなのでこちらも入れてみたい。