2019 年度 OSS リテラシ 3: 環境データの可視化のためのサーバ設定 (grafana)
はじめに
データベースに入力されたデータをグラフ化するために grafana を用いることにする.
grafana のインストールと設定
インストール
MySQL のデータを可視化するために, grafana を利用する. まずは apt に grafana のリポジトリを追加し, 必要となるパッケージをインストールする.
$ sudo -s # apt-get update # apt-get install curl apt-transport-https
grafana のリポジトリを追加する. gpg 鍵を追加する必要がある.
# vi /etc/apt/sources.list.d/grafana.list deb https://packages.grafana.com/oss/deb stable main (1 行だけ書く) # curl https://packages.grafana.com/gpg.key | sudo apt-key add -
grafana のインストール
# apt-get update # apt-get install grafana
grafana の起動.
# systemctl daemon-reload # systemctl enable grafana-server.service # systemctl start grafana-server
起動状態の確認.
# systemctl status grafana-server ● grafana-server.service - Grafana instance Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2018-12-10 18:29:14 JST; 18s ago Docs: http://docs.grafana.org Main PID: 24594 (grafana-server) Tasks: 7 (limit: 4915) CGroup: /system.slice/grafana-server.service └─24594 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-serv 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="Initializing InternalMetricsSer 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="Initializing CleanUpService" lo 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="Initializing NotificationServic 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="Initializing ProvisioningServic 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="Initializing PluginManager" log 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="Starting plugin search" logger= 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="Plugin dir created" logger=plug 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="Initializing TracingService" lo 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="Initializing Stream Manager" 12月 10 18:29:15 iotex grafana-server[24594]: t=2018-12-10T18:29:15+0900 lvl=info msg="HTTP Server Listen" logger=http
grafana 用のユーザの作成 (MySQL)
MySQL に select 権限しか持たないユーザを作り, そのユーザ権限で grafana を使うようにする.
# mysql -u root ...(略)... MariaDB [(none)]> create user 'grafana'@'localhost' identified by 'XXXXXX'; (パスワードは適宜) Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> grant select on iotex.* to 'grafana'@'localhost'; Query OK, 0 rows affected (0.01 sec)
初期設定
ブラウザで http://10.176.0.XXX:3000 (vm の 3000 番ポートを指定する. IP は vm のものに変更すること)にアクセスする. 初期状態では, admin/admin でログインできるので, すぐさまパスワードを変更する.
"Add Data Source" を選択.
"MySQL" を選択
データベースへのアクセス情報を入力する. 入力後に "Save & Test" をクリックし, データベースへの接続が成功することを確認すること.
- データベース名: iotex
- ユーザ名: grafana
- パスワード: MySQL コンソールで grafana 用に設定したパスワード
ログインしなくてもダッシュボードを閲覧可能とする.
ログインしなくても作成されたダッシュボードを見えるようにするために設定ファイルを修正する. 以下のように "Anonymous Auth" セクションを修正し, grafana を再起動する.
# cd /etc/grafana/ # cp grafana.ini grafana.ini.bk # vi grafana.ini #################################### Anonymous Auth ########################## [auth.anonymous] # enable anonymous access enabled = true # specify organization name that should be used for unauthenticated users org_name = Main Org. # specify role for unauthenticated users org_role = Viewer # /etc/init.d/grafana-server restart [ ok ] Restarting grafana-server (via systemctl): grafana-server.service.
テストデータの入力とダッシュボードの作成
GitHub から clone したテストデータを用いる. テストデータは松江高専のとある教室での観測データである.
# exit $ cd ~/ $ cd iotex-server/sample $ less data.sql
テストデータを入力するには以下のようなコマンドを打てば良い. data.sql には MySQL のダンプデータが格納されている.
$ mysql -u hogehoge -p -h localhost iotex < data.sql
データの入力を確認する.
$ mysql -u hogehoge -p Enter password: ...(略)... MariaDB [(none)]> use iotex; Database changed MariaDB [iotex]> select * from monitoring; ...(略)...
テストデータを用いてダッシュボードを作成する. 以下は気温と湿度をグラフ化した例である.
なお,気温データを書くための SQL 文は以下のようになっている.
SELECT UNIX_TIMESTAMP(time) as time_sec, temp as value, hostname as metric FROM monitoring WHERE $__timeFilter(time) ORDER BY time ASC
また, データの入っているテーブルは以下のように定義されている.
テーブル monitoring +---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | hostname | varchar(20) | YES | | NULL | |ホスト名 | time | datetime | YES | | NULL | |時刻 | temp | double | YES | | NULL | |温度 (SHT75, 1) | temp2 | double | YES | | NULL | |温度 (SHT75, 2) | temp3 | double | YES | | NULL | |温度 (SHT75, 3) | humi | double | YES | | NULL | |湿度 (SHT75, 1) | humi2 | double | YES | | NULL | |湿度 (SHT75, 2) | humi3 | double | YES | | NULL | |湿度 (SHT75, 3) | dp | double | YES | | NULL | |露点温度 (SHT75, 1) | dp2 | double | YES | | NULL | |露点温度 (SHT75, 2) | dp3 | double | YES | | NULL | |露点温度 (SHT75, 3) | bmptemp | double | YES | | NULL | |温度 (BMP180) | dietemp | double | YES | | NULL | |基板温度 (TMP007) | lux | double | YES | | NULL | |照度 (TSL2561) | objtemp | double | YES | | NULL | |放射温度 (TM007) | pres | double | YES | | NULL | |圧力 (BMP180) | sitemp | double | YES | | NULL | |温度 (Si7021) | sihumi | double | YES | | NULL | |湿度 (Si7021) | eco2 | double | YES | | NULL | |CO2 濃度 (SGP30) | tvoc | double | YES | | NULL | |総揮発性有機化合物量 (SGP30) +---------------+-------------+------+-----+---------+-------+ テーブル monitoring_hosts +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | hostname | varchar(20) | NO | PRI | NULL | | ホスト名 | ip | varchar(15) | YES | | NULL | | IP アドレス | time | datetime | YES | | NULL | | 時刻 +----------+-------------+------+-----+---------+-------+
課題
テーブル monitoring, monitoring_hosts から必要な情報を抜き出し, 以下の図にあるように, 物理量の時間変化と, ホスト情報 (ホスト名と IP アドレス) を表示するダッシュボードを作成せよ. なお, 作成したダッシュボードのスナップショットを wbt に登録せよ (スナップショットには ブラウザ上部に表示される URL を必ず含めること (自分のホストで行なった証拠として)).
なお, 物理量として以下を表示すること.
- 各種センサーで取得された温度 : temp, bmptemp, dietemp (3 つを 1 つのグラフに)
- 温度と壁の温度 (放射温度) : temp, objtemp (2 つを 1 つのグラフに)
- 湿度 : humi
- 露点温度 : dp
- 圧力 : pres
- 教室の照度 : lux
[参考] 新規ユーザの作成
今回はやらなくて良いが, 設定の "Server Admin" よりユーザを作成することができる. パスワードの変更なども可能である.
参考
- grafana の公式ページの Debian パッケージを用いたインストール方法 : <URL:http://docs.grafana.org/installation/debian/>