RaspberryPi2 のセンサーで取得したメトリクスを Mackerel に出力する ansible プレイブック
はじめに
1月から東京に移住したが、実家においてきた RaspberryPi2 のメトリクスを見る手段がなかった。
メトリクスは RaspberryPi 内にしか蓄積しておらず、アラートだけ Slack & LINE で送っていた。
過去にやったことは以下の記事。
今回は東京からメトリクスを見れるようにするための取り組み。
最近 Mackerel Meetup #10 に参加した縁もあるので、Mackerel 使ってみましたよ、というだけの話。
実装
RaspberryPi2 いじるのは年に数回なので、構成を後から追えるようにするために、最初からではないのだが ansible でデプロイできるようにしている。
なので、以下プレイブックベースで書く。
ベースの処理
ここでは温度・湿度の記録部分しか書かないが、実際は見守りカメラの反応の有無も録っているため、 yml を分けてある。
role でディレクトリ管理してなくて雑な運用。
main.yml
- hosts: pi sudo: yes vars: colon: ':' tasks: - include: tasks/base.yml - include: tasks/temperature.yml handlers: - name: restart mackerel-agent service: name=mackerel-agent state=restarted
hosts
[pi] xxx.xxx.xxx.xxx [pi:vars] ansible_connection=paramiko ansible_ssh_user=pi ansible_ssh_pass=xxxxxxx ansible_sudo_pass=xxxxxxx mackerel_apikey=xxxxxxxx
mackerel-agent のインストール
RaspberryPi2 では ARM 版のバイナリが必要なため、インストールした後にバイナリを上書きしている。
API Key も流し込む
tasks/base.yml
- name: install mackerel-agent shell: | curl -O https://mackerel.io/file/agent/deb/mackerel-agent_latest.all.deb dpkg -i mackerel-agent_latest.all.deb curl -LOk https://github.com/mackerelio/mackerel-agent/releases/download/v0.42.3/mackerel-agent_linux_arm.tar.gz tar zxf mackerel-agent_linux_arm.tar.gz cp mackerel-agent_linux_arm/mackerel-agent /usr/bin args: creates: /etc/mackerel-agent/mackerel-agent.conf - name: mackerel-agent conf lineinfile: dest=/etc/mackerel-agent/mackerel-agent.conf line='{{ item.line }}' regexp='{{ item.regexp }}' with_items: - { line: 'apikey="{{ mackerel_apikey }}"', regexp: '^apikey="{{ mackerel_apikey }}"' } notify: restart mackerel-agent
温度・湿度のメトリクス取得
公式ドキュメントを読めばわかるとおり、mackerel-agent.conf
にコマンドを書いて、コマンド内でメトリクスを標準出力に出せば完了。
ホストのカスタムメトリックを投稿する - Mackerel ヘルプ
tasks/temperature.yml
- name: mackerel temperature plugin copy: src=mackerel-temperature.sh dest=/home/pi/mackerel-temperature.sh mode=755 - name: mackerel humidity plugin copy: src=mackerel-humidity.sh dest=/home/pi/mackerel-humidity.sh mode=755 - name: mackerel-agent conf lineinfile: dest=/etc/mackerel-agent/mackerel-agent.conf line='{{ item.line }}' regexp='{{ item.regexp }}' with_items: - { line: '[plugin.metrics.temperature]', regexp: '^\[plugin.metrics.temperature\]' } - { line: 'command = "/home/pi/mackerel-temperature.sh"', regexp: '^command = "/home/pi/mackerel-temperature.sh"' } - { line: '[plugin.metrics.humidity]', regexp: '^\[plugin.metrics.humidity\]' } - { line: 'command = "/home/pi/mackerel-humidity.sh"', regexp: '^command = "/home/pi/mackerel-humidity.sh"' } notify: restart mackerel-agent
自分の場合は以下のサンプルコードをそのまま利用しているので、センサーからの取得処理は実装方法や RaspberryPi のピン番号によって異なる。
https://github.com/adafruit/Adafruit_Python_DHT
files/mackerel-humidity.sh
#!/bin/bash name="humidity.raspberrypi" humidity=`/home/pi/Adafruit_Python_DHT/examples/Adahumit.py 22 4` date=`env TZ=JST date +%s` echo -e "${name}\t${humidity}\t${date}"
files/mackerel-temperature.sh
#!/bin/bash name="temperature.raspberrypi" temperature=`/home/pi/Adafruit_Python_DHT/examples/Adatemp.py 22 4` date=`env TZ=JST date +%s` echo -e "${name}\t${temperature}\t${date}"
mackerel 画面
左から湿度、見守りカメラの反応、温度となっている。
センサーの負荷の問題か、mackerel-agent のタイムアウトが短いためか、取得に失敗することがときどきあり、グラフがぶつ切りになってしまっている。
このあたりはもうちょっと時間があるときに調べたい。
感想
認証を考慮して情報を見える化する場として、Mackerel のような SaaS はありがたい。
(フリー版で事足りてしまうので、Mackerel のビジネス的には貢献できないが・・)
1年くらい運用していて Raspberry Pi の問題は無線LANの再接続くらいしか起きていなかったが、Mackerel によって RaspberryPi ホストも監視できるようになったので、より運用しやすい状況が作れたのでよかった。
Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Element14版, Clear)-Physical Computing Lab
- 出版社/メーカー: TechShare
- メディア: エレクトロニクス
- この商品を含むブログ (4件) を見る