6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

標準Agentと違う「Datadog IoT Agent」って何?

Posted at

はじめに

本記事を Datadog アドベントカレンダー2023 の12月4日に投稿します。

Datadogはサーバーを監視・モニタリングするさまざまなオブザーバビリティ機能を利用できます。AWSやAzureなどのクラウドサービスとDatadogを連携(インテグレーション)するだけでもモニタリングを開始できますが、仮想サーバーOSに Datadog Agent をインストールすると高度な監視・モニタリングができます。そして IoTデバイスに組み込みされたアプリケーション向けの Datadog IoT Agent が存在することをご存じでしょうか?

image.png

Datadog IoT Agent とは

Datadog の Iot Agent は、IoTデバイス及び組み込みアプリ用のAgentです。
サイネージやセキュリティ・デバイスなどを監視することを目的としているとのこと。

できること

機能は、CPU・メモリのリソース、ディスク、ネットワーク、Systemd、NTPの監視。
独自の監視メトリクスは DogStatsD サーバーを経由して監視できる。
Journaldなどのログ収集もできる。

できないこと

サーバー向け標準Agentにパッケージされている機能が少ない。

リソース比較

IoT Agent Standard Agent
平均利用CPU 0.5% 0.08%
メモリ 36MB 130MB
ネットワーク帯域 アップ237bps, ダウン79bps アップ800bps, ダウン140bps
占有ディスク 63MB 830MB~880MB

ゴールの姿

Datadog IoT Agentを使って、ダッシュボードでIoTデバイスとなるラズパイを監視・モニタリングする。中央の赤色グラフがラズパイの温度センサーの値。今年の11月はとても暖かかったので毎日20℃以上ありました。

image.png

インストール

Raspberry Pi 3B ラズパイに Datadog IoT Agent をインストールしてみる。
いつものようにDatadogコンソールのインテグレーションメニューから対象OSを探すと・・・

image.png

RaspberryPi OS は見つからない?

Datadog ポータルのインテグレーション メニューからは RaspberryPi OS が見つかりません。下記のWEBサイトに IoT Agent のインストール手順が記載されていました。

https://docs.datadoghq.com/ja/agent/iot/

説明によると下記のコマンドで Datadog IoT Agent を自動インストールできます。標準Agentのコマンドと異なるのは「DD_AGENT_FLAVOR」オプションの部分に"datadog-iot-agent"を指定することです。

pi@raspberrypi:~ $ DD_API_KEY=<YOUR_DD_API_KEY> DD_SITE="datadoghq.com" \
DD_AGENT_FLAVOR=datadog-iot-agent \
bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"

インストールを実行すると

image.png

インストール後、サービスのステータスが Running になって、サービス名の横に「Datadog IoT Agent」が表示されることを確認できます。
image.png

IoT デバイスをモニタリング

なんちゃってIoTですが寒くなってきた室内環境をラズパイで計測してみます。GPIOには温度センサー「DS18B20」を繋ぎました。ラズパイ上のセンサーの読み取りなどは既出のブログで紹介しています。前回はIoT Agentがなかったので標準Agentで試していましたが、今回はIoTに特化したAgentです。
image.png

デフォルトのダッシュボード

IoT Agentが起動するとDatadogダッシュボードでモニタリングがスタートします。
image.png

初期設定

独自メトリックをモニタリングするために大切な設定ファイル
image.png

(参考)ラズパイの温度データをモニタリングする方法

この章では温度データを「iotdata.json」というファイルに書き込みます。あとでこの温度データをDatadogダッシュボードに監視メトリックスとして送信します。

1-Wire デジタル温度センサー(DS18B20)

1-Wireデバイスをラズパイのブート・コンフィグに追加して使います。
設定ファイル: /boot/config.txt
追加する設定値: dtoverlay=w1-gpio,pullup=on

$ sudo nano /boot/config.txt

一旦、再起動してデバイスを認識します。

$ sudo reboot

Linuxコマンドで温度データを読み取ります。「t=29812」を1000で割って29.8℃としています。

$ cat /sys/bus/w1/devices/28-031652ddc4ff/w1_slave
 
dd 01 4b 46 7f ff 0c 10 06 : crc=06 YES
dd 01 4b 46 7f ff 0c 10 06 t=29812

温度データをDatadogダッシュボードに送信する python コード

ラズパイで読み取った温度センサーの値は、Datadog IoT Agent に含まれている DogStatsD というメトリクス集計サービスを経由して、独自メトリックスとしてダッシュボードに記録します。

image.png

/home/pi/cron_temperature_datadog.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datadog import initialize, statsd
import subprocess

# DogStatsD インスタンスを作成
options = {
    'statsd_host':'127.0.0.1',
    'statsd_port':8125
}
initialize(**options)

# 温度センサー(CPU)
CPU = float(subprocess.getoutput("cat /sys/class/thermal/thermal_zone0/temp"))/1000
# 温度センサー(室温)
TEMP = "cat /sys/bus/w1/devices/28-031652ddc4ff/w1_slave"
TEMP = subprocess.getoutput( TEMP )
TEMP = float(TEMP[-5:])/1000
# DogStatsDに値を渡してDatadogポータルへ反映する
statsd.gauge('kano_CPU_temp', CPU, tags=["environment:dev"])
statsd.gauge('kano_Room_temp', TEMP, tags=["environment:dev"])

# END

pythonコードを毎分起動する

温度センサーの値を毎分、jsonファイルに出力するように crontab -e で設定しました

$ crontab -e

# ファイルの最下段に下記を追加
*/1 * * * * python /home/pi/cron_temperature_datadog.py

Datadog Iot Agent の DogStatsD を有効化する

/etc/datadog-agent/datadog.yaml
## @param use_dogstatsd - boolean - optional - default: true
## Set this option to false to disable the Agent DogStatsD server.

use_dogstatsd: true           # コメントを解除した

## @param dogstatsd_port - integer - optional - default: 8125
## Override the Agent DogStatsD port.
## Note: Make sure your client is sending to the same UDP port.
#
dogstatsd_port: 8125          # コメントを解除した

ダッシュボードに独自メトリックスが届く検査

メニュー[Metrics] > [Explorer]
メトリックス名にわかりやすく「kano_room_temp」という名前を設定しておいたので「kano」で検索すると温度データが記録開始されたことを確認できました。

image.png

グラフ種類は「ライン」と「棒グラフ」のどちらを使っていますか

グラフ種類「Lines(下図の折れ線グラフ)」を使うとメトリックスが欠損しているときでもデータとデータを繋いでしまうのでメトリックスが欠損していることに気づき難いと思います。データ欠損も可視化するにはグラフ種類「Bars(下図の棒グラフ)」の方がわかりやすいと思います。
image.png

予測モニタリング

これから本格的な冬なのでいつから寒くなるのか予想してもらいました
image.png

もちろん監視アラートも届きます

image.png

以上、まとめ

  • Datadog IoT Agent をインストールして使い方を検証しました
  • ラズパイ(RaspberryPi OS)で監視・モニタリングできました
  • 今回は室温データをモニタリングできました(カスタムメトリックス)
    つまり、IoTデバイスとしてのデータ自体も Datadog でモニタリングできます

image.png

いつか、たくさんのIoTデバイスをひとまとめにしてオブザーバビリティしてみたいです。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?