暮らしの技術

暮らしを豊かにする技術や、特に暮らしを豊かにしない技術があります

私生活における監視の実践

こんにちは、私は id:side_tana。この記事は Mackerel Advent Calendar 17 日目の記事です。昨日は koudenpa さんでした。

この記事では部屋にモニタリングを導入するまでの経緯とその結果をご紹介します。

私は春に引っ越したのですが、引っ越してからしばらく睡眠の質が低い日々を過ごしていました。1週間ほどその状態で過ごしたとき、夜間に寝室のCO2濃度が高まって、それが悪影響となっているのではないか、とひらめきました。

その日の晩に寝室のドアを開けて寝たところ、寝苦しさについてはかなり改善されました。おそらくこれが原因だったのではないか、と思っています。

ともあれ私は睡眠の質を取り戻しました。めでたしめでたし。

本当に?

果たして本当にそうでしょうか? 私は専門家ではないので睡眠の質とCO2の関係性はわかりません。しかし本当にCO2が変化したのかは計測できるはずです。

部屋の可観測性を確認する

まずは現時点での部屋の可観測性を確認します。私の部屋にはすでに Nature Remo があります。Nature Remo はスマートリモコンと呼ばれる製品です。リモコンを登録したり、学習させることでスマートフォンから家電を操作することができます。

Nature Remo には「ルール」という機能があり、例えば「部屋が暗くなったら照明をオン」「室温が15度を下回ったら暖房をオン」といったルールを設定することで、家電の操作を自動化することができます。そしてそのためのセンサと、APIがあります。これを使わない手はありません。

幸い Mackerel エージェント向けのプラグインを papix さんが公開されています。

github.com

こうして「室温」「明るさ」「湿度」については Mackerel 上から確認することができるようになりました。*1

CO2 濃度を測りたい

しかし私が今測りたいのは CO2 濃度です。入門監視にも「ツールに依存しても監視の仕組みはよくならない」といったエピソードが最初に有りました。また、「自分でツールをつくらなければならない時もある」とも書かれています。

ということで CO2 の濃度を測りましょう。今回は CO2mini という製品を使います。実はこの製品はUSBで接続すると HID デバイスとして認識され、センサー情報を取得できることが知られています。

http://r-kurain.hatenablog.com/entry/2016/01/26/164648
https://dounokouno.com/2018/05/27/raspberry-pi-co2-mini/
https://hackaday.io/project/5301-reverse-engineering-a-low-cost-usb-co-monitor

今回はこの製品を用い、Goでセンサ情報を取得する Mackerel Agent 向けのプラグインを実装しました。こうして私の部屋は CO2 濃度に対する可観測性を獲得したのです。

$ ./bin/mackerel-plugin-co2mini --local room --path /dev/co2mini0
 CO2Mini.co2ppm.room     484     1576503848
 CO2Mini.temperature.room        15.100000       1576503848

ちなみにこんな動きをします。CO2 の値が低いのは、今棒鱈煮をつくっており、換気のため窓を開けているからです。

なおホストの端末には Raspberry Pi を使っています。Mackerel Advent Calendar 3日目でhnw さんが紹介されているようにインストールが簡単になりました。助かりますね。

結果

実際に寝室のドアを締めて寝てみると Mackerel 上で以下のようなグラフを確認できました。

f:id:side_tana:20191216232810p:plain
入眠後から順調に伸びていき1500ppmで安定しました

一方で、寝室のドアを開けっ放しにして寝ると次のようになりました。

f:id:side_tana:20191216232931p:plain
寝入った直後に謎のスパイクがありますが、その後はほぼ600ppmで安定しています

寝室のドアを閉めて寝ると CO2 濃度が高まる、という当初の仮説は正しかったようです!*2

アラートの設定

監視、というとアラートとは切っても来れない関係があります。しかし今回のケースに関しては「安眠のための監視によって安眠を阻害される」といった結果になるのが目に見えているので設定しませんでした。

確かにこれがプロダクションサービスなら「睡眠中にCO2 濃度が一定の基準を超えた場合にアラートを発報する」モニタリングルールを設定します。そしてオンコールの担当者が私の家にやってきて寝室のドアを開け、去っていくでしょう。。。*3

以上、Mackerel Advent Calendar 17日目の記事でした。明日は cm-watanabeseigo さんです。

*1:Nature Remoには他にも人感センサがあります

*2:しかし実を言うと、最近はまた睡眠の質が下がっているのを感じます。寒さでしょうか?

*3:あるいは自動でドアを開けるように追加の開発をするかもしれません。

はてなブログの脚注を横に出すようにした Part2

2013年の今頃にはてなブログのカスタマイズをして脚注を傍注に変える*1、ということをしていた。

以来テンプレートを変更せずにいたのだけれど、最近ブログの名前を変えた*2流れでテンプレートも変えたくなってきたの6年ぶり? に手を入れた。カスタムドメインを有効にしたってのもある。

めちゃくちゃ腰が重くてめんどくさいな〜〜〜という気持ちだったのだけれど、やってみると意外とすぐ終わったので、こんなことならもっと気軽にやっておけばよかったと思った。

*1:https://tech-blog.tanatana.info/entry/2013/11/28/004413

*2:前は「無知を晒す」という名前でやっていたのだけれど、なんか逃げた感じの名前で気に入らなかった

最近やった Scrapbox の拡張

一週間の予定を入れる

最近あらゆるメモを Scrapbox で取っていて、当然仕事の進捗状況や家でのタスクも全て Scrapbox に書きながら生活している。

これまで結構スケジュールを雑にやってたのだけれど、最近忙しくなったり環境の変化もあって、このままではいかんということで、週に一回は Google カレンダーをメンテする時間をつくり、Scrapbox に写経するようにしている。*1

f:id:side_tana:20191019112923p:plain

写経無意味かと思いきや、

  • 予定をメンテすることにコストをかけることで、日頃から意識するようになる
    • 埋没費用効とはちょっと違うけど似たようなもんだと思う
  • 手で書き写すことでセルフチェック的に機能する

みたいなメリットがある気がしている。しているんだけれど、この表をつくるのが結構面倒。ということで Scrapbox のユーザスクリプトにした。

f:id:side_tana:20191019121844g:plain

日報生成ツール

会社での作業メモを日報フォーマットに変換するやつ。

- Task A
- Task B
----- ↑やった ↓これから--------
- Task C
- Task D

みたいなのを Scrapbox に毎朝書いていて、alt + カーソルキーでリストアイテムを上下に動かしながら仕事をしている。これはそのまま会社の日報フォーマットに変換できるので、選択した時に出てくるメニューに日報ボタンを作った。

f:id:side_tana:20191019115952p:plain

これを押すとシュッとフォーマットが変換され、その値が入力された日報投稿画面が登場する。ので、あとは投稿ボタンを押すだけで日報が終わって便利。

*1:不思議で、こうするようにしてから前より頻繁に Google カレンダー見る習慣がついた。

Mackerel で SSL 証明書の有効期限を監視する

最近は仕事で Mackerel を作っているので、機能理解も兼ねて自分のVPSへの導入を進めている。

parochially.hatenablog.com

この記事で書いたとおり、自分のサイトを作り直したときに let's encrypt を使って HTTPS 配信に切り替えた。証明書の発行と導入のためには let's encrypt のススメに従って certbot を使っている。

certbot を apt でインストールすると、自動で systemd timer または cron が設定され、これによって自動で証明書が更新される... はずなのだが、そのまま放置しているのは怖いので Mackerel で証明書の有効期限を監視するようにした。

Mackerel での証明書監視には以下の2つの方法がある。

1. 外形監視のオプションを利用する方法
2. mackerel-agent の [check-ssl-cert] プラグインを利用する

今回は外形監視を方を利用した。外形監視はTrialかStandardプランで利用できる。

左側のメニューから Monitors を選択し、右上の「監視ルールを追加」から外形監視を選択する。

f:id:side_tana:20190725234427p:plain

監視対象が HTTPS の場合、画面下部の「証明書の有効期限の監視」が利用できるので、ここからそれぞれの条件を入力する。

f:id:side_tana:20190725234546p:plain

7/25 はちょうど certbot が証明書を更新する日で、以下のように warning と crit が発火したあと、cert ボットによる更新が行われ、自動でアラートがcloseされた。

f:id:side_tana:20190725234731p:plain

証明書はほんとうについうっかりで無効にしてしまう事がある一方、うっかり無効にすると大変な目にあう。とくにメインシステムから切り出されたコンポーネントで、メインシステムとの通信にHTTPS を利用しているようなケースでは証明書の失効期限に気が付きにくかったり、開発者が存在に気が付かなかったりということが起きるケースが起きがち。そしてひとたび障害となると大きなダメージを残すことになる。

そういったコンポーネントでも外形監視は手軽に導入できるし、実際に導入されていることも多いので、追加で証明書の期限も監視できるのは嬉しいですね。

Mackerelのサービスメトリックで寿司の動きを可視化した

寿司に直近1時間のクリック数などを表示するグラフを追加した。

f:id:side_tana:20190723095219p:plain

グラフは Mackerel の機能を使っている。やったことは

  • ステータス取得用エンドポイントの追加
  • ステータスをMackerelに送信する systemd service の追加
    • アプリケーションサーバを直接ぶっ叩いてデータを引っ張り出す
    • curl -s localhost:$PORT/status | curl -s https://api.mackerelio.com/api/v0/services/sushi/tsdb -H 'X-Api-Key: $MACKEREL_API_KEY' -H 'Content-Type: application/json' -X POST -d @- みたいな感じ
  • ↑のサービスを定期的に叩く systemd timer の追加
  • グラフを外部公開する機能を使って埋め込む

みたいな感じ。systemd 周りで意外と時間がかかった*1けど、4はサクッとできて便利!

所感

*1:というかアプリケーションサービスに追加したエンドポイントがぶっ壊れてて常にサーバ起動時のタイムスタンプを使ってステータスを吐いていて、そこに気が付かなかった...