Datadog で空気の状態を監視する
これは Datadog Advent Calendar 2019 14日目の記事です。
まとめ
- Custom Metrics で Awair metrics を送って、空気の状態の監視ができるようになった
- Awair とは?
- 温度、湿度、CO2などの空気の計測機器です
- Awair で室内空気モニタリング - minato128 blog
- Awair とは?
- 過去ログを楽しく分析できるようになった
- Awair は最新の状態を見るのは簡単ですが、過去のログを見るのが難しい
- Datadog の View は高機能かつ使い慣れているのでストレスがない
- Agent を入れなくてもいいので維持コストがゼロ
- 他の SaaS だと Custom metrics だけでも1ホスト分課金されることがある
- Datadog は今のところ(2019-12-14)課金が発生しない
- 他の SaaS だと Custom metrics だけでも1ホスト分課金されることがある
Custom Metrics とは
多すぎてすべては説明しきれませんが、このような特徴があります。
- 自由に metric name や type を設計し、tag で簡単に dimension を表現できる
- 標準 metrics と同様に15ヶ月参照可能
- Datadog のリッチな View で同一時系列で何が起きているのかすぐにわかる
- Datadog の Core 機能と言っても過言ではないのでは
- 送信方法
metrics 送信の仕組み
これらをひとつの Azure Function で数分間隔で定期実行しているだけです。
- Awair Web API から metrics を取得
- 詳しくはこちらに書きました
- metrics を sample のように加工
- Datadog Web API で Datadog に送る
- https://docs.datadoghq.com/api/?lang=bash#post-timeseries-points
- endpoint :
https://api.datadoghq.com/api/v1/series?api_key=<YOUR_API_KEY>
payload sample
{ "series" : [ {"metric":"awair.co2", "points":[[1576219800, 100], ...], "tags":["deviceid:test"]}, ... ] }
Note: The timestamp should be in seconds, current. The numeric value format should be a 32bit float gauge-type value. Current is defined as not more than 10 minutes in the future or more than 1 hour in the past.
ちなみに「timestamp として有効なのは、1時間前から10分後まで」と定義されているので、過去ログをまとめて取り込むことはできません。
ダッシュボードの様子
1 Hour
1 Day
1 Week
1 Month
docker-compose で ownCloud を立ててみた
「チープなEC2インスタンスで ownCloud 立てて S3 接続すれば、Dropbox とかより安く運用できるのでは?😆」 *1 と思ったので試した。
試してみたかったこと / わかったこと
- docker-compose で ownCloud を立てることで気軽に再構築できるようにする
- S3 の view として使えるか?
- 使えなくはないが、External Storage 設定だと S3 の転送が遅すぎる
- goofys で local mount すれば速いらしいが、これはまだ試していない
- 既にデータが存在する bucket に接続しても問題なく動作するのか?
- 問題なし
- List API 叩いているっぽい
手順
- EC2 Instance 作成
- セキュリティグループの 80/443 を開ける
- DNS設定追加
- example.minato128.com を作った example.ap-northeast-1.compute.amazonaws.com に向ける
- Install docker/docker-compose
- docker-compose.yml をコピー
- docker-compose.yml の書き換え
- HTTPS-PORTALのコンテナの設定を追加
- https://github.com/SteveLTN/https-portal
- Let's Encrypt から自動的に証明書を発行して反映してくれる
- https://qiita.com/c18t/items/c693d5bcda2e9b82e39b
- Nginx のデフォルトのCLIENT_MAX_BODY_SIZEが少ないので追加
- https://github.com/SteveLTN/https-portal
- HTTPS-PORTALのコンテナの設定を追加
- docker-compose up -d
- example.minato128.com から初回ログイン
- 管理画面から S3 接続設定
yaml の追加部分抜粋
volumes: files: driver: local mysql: driver: local backup: driver: local redis: driver: local # ここを追加 org-minato-ssl-certs: services: # ここを追加 https-portal: image: steveltn/https-portal:1 container_name: proxy-https-portal ports: - '80:80' - '443:443' links: - owncloud environment: DOMAINS: 'example.minato128.com -> http://dockerhost:8080/' CLIENT_MAX_BODY_SIZE: 0 STAGE: 'production' volumes: - org-minato-ssl-certs:/var/lib/https-portal