InfluxDBからPythonで例として現在のCPUを使っているユーザー数を取得するのにハマったのでメモ。
InfluxDBからリストで取得後にPandasでデータフレームにして取得する。
以下のようにするとうまくいった。PythonのパッケージInfluxdbとpandasが必要。
最終的にうまく行った方法
InfluxDBの中のTelegrafのCPUデータを取得してUser数の数値のみを取得する。最終的に温度・湿度・水温などを取得してE-インクに表示させたい。
from influxdb import InfluxDBClient import pandas as pd #pandasインポート client = InfluxDBClient('127.0.0.1', 8086,'admin', '', 'telegraf') result = client.query('SELECT "usage_user" FROM "cpu" WHERE time >= now() - 1m limit 1 ;') getcpu = list(result.get_points(measurement='cpu')) #cpuをリストにする df = pd.DataFrame(getcpu) #pandasでデータフレームに変更 print df.usage_user[0]
結果は以下のように数値のみ取得できた。
$ python influxtest.py 2.2832221652108227
この数値のみ取得するのがなかなか難しかった。PHP+MySQLだったらかなり簡単にできる操作だけど・・・Pythonって面倒な言語なの?InfluxDBが特殊なDBなのかな?
Pythonパッケージ InfluxDB インストール
インストール
まずはInfluxDBにPythonから接続するためにpipでパッケージインストールする。
sudo pip install influxdb
InfluxDBからデータ取得テスト
接続のところInfluxDBClientはadminのパスワード入れなくても接続できた。Selectのみなのでエラーにならないのかな?
Selectはほぼ他のDBのクエリーと一緒の構文でクエリーを発行できた。
from influxdb import InfluxDBClient client = InfluxDBClient('127.0.0.1', 8086, 'admin', '', 'telegraf') result = client.query('SELECT "usage_user" FROM "cpu" WHERE time >= now() - 1m limit 1 ;') print("Result: {0}".format(result))
結果
jsonの配列では無い?みたい。result[‘cpu’][‘usage_user’]などとしてもうまく取り出せない。
$ python test.py Result: ResultSet({'(u'cpu', None)': [{u'usage_user': 2.298263534221487, u'time': u'2019-01-27T19:54:56Z'}]})
これをどうにかして「2.298263534221487」のみ取り出したい。
スポンサーリンク
Pythonパッケージ pandas インストール
pandasを使うとデータフレームに変更できるみたい。
pandasについてはこちらで詳しく説明されていました。

[Python] pandasの使い方まとめ - Qiita
pandasによるデータ処理メモpandasに関する情報ページはわりと豊富なので、主にリンクのまとめです。実行環境実行環境は、Jupyter(IPython) Notebook を使うのが良い…
インストール
$ sudo pip install pandas
インストールがなかなか終わらなく、失敗するときもあった。
pandas使ってみる
以下のようにつくってみた。
from influxdb import InfluxDBClient import pandas as pd #pandasインポート client = InfluxDBClient('127.0.0.1', 8086,'admin', '', 'telegraf') result = client.query('SELECT "usage_user" FROM "cpu" WHERE time >= now() - 1m limit 1 ;') getcpu = list(result.get_points(measurement='cpu')) df = pd.DataFrame(getcpu) #pandasでデータフレームに変更 print df['usage_user']
結果
以下のようになった。数値のみ欲しい場合はdf.usage_user[0]でうまく取得できた。
$ python test2.py 0 2.223926 Name: usage_user, dtype: float64
参考
influxDBからDataFrameの形にする方法
ちょっと苦戦したのでメモ。 このブログを参考にinfluxDBにBitcoinの値段のデータを入れていたんですが、 pythonで分析す
https://github.com/nkmk/python-snippets/blob/f6a84e140c8a24caa7ba5d3b4de92be097d6bb02/notebook/pandas_index.py
もっといいやり方あったら教えてくださると大喜びしますm(_ _)m
コメント