Believe you can

If you can dream it, you can do it.

InfluxDBに登録したデータをGrafanaで表示してみる

ども、てっしーです
先日、長野で行われたMyNA会でGrafanaの画面がチラッとでてきました
仕事で調べたこともあったので情報整理のためにブログに残しておきたいと思います
(使ったとは言っていない)

InfluxDB

InfluxData (InfluxDB) - Open Source Time Series Database for Monitoring Metrics and Events
時系列DBと呼ばれるもので時系列のデータを格納するのに適したデータベース
メトリクスやイベントの保存や解析に便利らしい
golangで作られていてバックエンドにはLevelDBを使用している

Grafana

Grafana - The open platform for analytics and monitoring
データソースに蓄積されたデータを可視化するダッシュボードツール
グラファナと読むらしい
棒グラフ・折れ線グラフ・円グラフ・表など、様々な表現方法でデータを可視化することができる



利用するもの

環境面はDockerを、データ登録はcurlでファイルインポートもできるのですが、Pythonを使ってみようと想います
ほぼサンプルのままですが^^;

  • Docker:17.03.1-ce
  • Docker-compose:1.11.2
  • InfluxDB: latest(Docker)
  • Grafana: latest(Docker)

docker-compose.yml

何はともあれ環境です
以下の内容で docker-compose.yml を配置します

# InfluxDB
influxdb:
    image: influxdb
    environment:
      - INFLUXDB_ADMIN_ENABLED=true
    ports:
      - "8083:8083" #InfluxDBのWeb UI
      - "8086:8086" #InfluxDBのHTTP API

# Grafana
grafana:
  image: grafana/grafana
  links:
    - influxdb
  ports:
    - "3000:3000"

んで起動

$ docker-compose pull
$ docker-compose up -d

止めたり削除する場合は以下のコマンドで

$ docker-compose stop
$ docker-compose rm

Webツール画面

InfluxDB

http://localhost:8083 にアクセスしてこんな画面が表示される
f:id:chichi1091:20170520170708p:plain

データベースを作成します
「Query」にCREATE DATABASE "example"を入力してエンターキーを押してSuccess! (no results to display)が表示されれば成功です

続いてユーザを作成します
同じく「Query」にCREATE USER "user" WITH PASSWORD 'user'を実行してSuccess! (no results to display)が表示されれば成功です

Grafana

http://localhost:3000/loginにアクセスしてこんな画面が表示される
admin / admin でログインができる
f:id:chichi1091:20170520170907p:plain

InfluxDBと接続するためにData Sourcesを作成します
f:id:chichi1091:20170520171729p:plain

データの登録

こちらGitHub - influxdata/influxdb-python: Python client for InfluxDBを参考にsamples.pyを作ってみました

# -*- coding: utf-8 -*-

from influxdb import InfluxDBClient

client = InfluxDBClient('localhost', 8086, 'user', 'user', 'example')
loop = 0
while loop < 10:
    client.write_points([
        {
            "measurement": "samples",
            "tags": {
                "host": "server01",
                "region": "us-west"
            },
            "fields": {
                "value": 1 * loop
            }
        }
    ])
    loop += 1

「Query」でselect * from samplesを実行すると↓が表示されます
f:id:chichi1091:20170520175607p:plain

Timeをクライアントから指定できる

samples.pyでは指定していないのでシステム日時で登録されますが、過去・未来を指定することも可能です

TagとField

TagはRDBのINDEXのようなものをイメージしてもらえばいいかと思います
GroupByに指定できるのはTagになります
FieldはデータカラムでWHEREに指定することができます

Grafanaから取得してみる

とりあえず入っている通りに表示してみます
直接SQLを書くこともできますしQueryを組み上げていくことも可能です
f:id:chichi1091:20170520180242p:plain

色々な表示ができますので試してみてください
(決してめんどくさいからではない^^;)

まとめ

InfluxDBはJOINやTagの更新ができないなど気になる点がありますが簡単に利用することができました
機会があればぜひ試してみてくださいー