influxdb-clientによるPythonからInfluxDBへの接続

influxdb-clientによるPythonからInfluxDBへの接続 プログラミング

PythonからInfluxDBへアクセスするには、公式ライブラリを利用します。
ただ、公式ライブラリは2つ存在します。

この記事では、そのうちの一つであるinfluxdb-clientを説明しています。

本記事の内容

  • influxdb-clientとは?
  • influxdb-clientのシステム要件
  • influxdb-clientのインストール
  • InfluxDBのUI管理画面からTokenの発行
  • influxdb-clientの動作確認

それでは、上記に沿って解説していきます。

influxdb-clientとは?

influxdb-clientとは、InfluxDBのクライアントライブラリのことを言います。
ただ、InfluxDBのクライアントライブラリと言えば、fluxdb-pythonが有名です。

そして、両方ともInfluxDB公式のライブラリになります。
ここで、それぞれのGitHubにおけるスターの数を見てみましょう。

fluxdb-python

influxdb-client

やはり、fluxdb-pythonの方がスターは多いです。
でも、今後はinfluxdb-clientをおススメします。

なぜなら、influxdb-clientはInfluxDB 2系に対応しているからです。
逆に、fluxdb-pythonはInfluxDB 2系には未対応のままとなります。

正確には、influxdb-clientが対応しているのは以下のバージョンです。

  • InfluxDB 2系
  • InfluxDB 1.8以降

対して、fluxdb-pythonはInfluxDB 1.7以前をサポートしています。
つまり、InfluxDBのバージョンによって、ライブラリを使い分ける必要があるということです。

よって、InfluxDB 2系をインストールした場合は、influxdb-clientを利用します。
最新版InfluxDBのインストールは、次の記事で解説しています。

以上、influxdb-clientについての説明をしました。
次は、influxdb-clientのシステム要件を確認しましょう。

influxdb-clientのシステム要件

現時点(2021年6月)でのinfluxdb-clientの最新バージョンは、1.18.0となります。
この最新バージョンは、2021年6月4日にリリースされています。

influxdb-clientのシステム要件は、以下の3つを確認しましょう。

  • サポートOS
  • Pythonバージョン
  • ciso8601

それぞれを下記で説明します。

サポートOS

サポートOSに関しては、以下を含むクロスプラットフォーム対応となります。

  • Windows
  • macOS
  • Linux

Pythonバージョン

サポート対象となるPythonのバージョンは以下。

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9

これは、以下のPython公式開発サイクルに準じています。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月
3.72018年6月27日2023年6月
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月

3.6に関しては、Numpyがすでにサポート打ち切っています。
おそらく、2021年の12月を見越してのことでしょう。

influxdb-clientにおいても、3.6はサポート対象外と考えた方がよいかもしれません。
Numpyのように、すぐにサポートの打ち切りがやってくる可能性があります。

ciso8601

ciso8601は、datetimeオブジェクトを扱うライブラリです。
機能としては、以下の規格である日付時刻文字列をPythonのdatetimeオブジェクトに変換します。

  • ISO 8601
  • RFC 3339

また、ciso8601はC言語で書かれています。
そのため、他のライブラリよりdatetimeオブジェクトへの変換が高速に処理できます。

InfluxDBにおいては、ログの登録日時が重要な処理となります。
influxdb-clientは、その日時を扱う処理でciso8601を利用しているということです。

なお、ciso8601はオプションです。
必須というわけではありません。

ciso8601がインストールされていれば、優先的にciso8601を利用するということです。
ただし、ciso8601のインストールには注意が必要となります。

influxdb-clientの公式ページでは、上記のように記載されています。
ビルドするために、必要ということでしょう。

ciso8601をインストールするのは、以下のコマンドとなります。

pip install ciso8601

ciso8601を必要とする場合は、上記コマンドで事前にインストールしておいてください。

まとめ

ciso8601以外では、それほど注意すべきことはありません。
Pythonが古ければアウトという程度でしょうかね。

Pythonのバージョンを上げる場合は、次の記事が参考になります。

Windowsの場合

Ubuntuの場合

Ubuntuの場合は、別途インストールという形になります。
単純にPythonをアップグレードしてはダメな理由を記事内で説明しています。

以上、influxdb-clientのシステム要件ついての説明でした。
次は、influxdb-clientをインストールしていきます。

influxdb-clientのインストール

最初に、現状のインストール済みパッケージを確認しておきます。
ciso8601を事前にインストールしていません。

>pip list
Package    Version
---------- -------
pip        21.1.2
setuptools 57.0.0

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、influxdb-clientのインストールです。
influxdb-clientのインストールは、以下のコマンドとなります。

pip install influxdb-client

インストールには、少しだけ時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。

>pip list
Package         Version
--------------- ---------
certifi         2021.5.30
influxdb-client 1.18.0
pip             21.1.2
python-dateutil 2.8.1
pytz            2021.1
Rx              3.2.0
setuptools      57.0.0
six             1.16.0
urllib3         1.26.5

ciso8601がなければ、python-dateutilを利用するということでしょう。
それ以外でも、そこそこ依存関係のあるパッケージがありますね。

sixが入っているのが、若干謎です。
sixは、Python2と3の互換性ライブラリになります。

そのため、3.6以降をサポートするinfluxdb-clientには関係ないはずです。
気になりますが、これ以上は追いかけません。

以上、influxdb-clientのインストールについての説明でした。
最後に、influxdb-clientの動作確認を行います。

influxdb-clientの動作確認

事前に、InfluxDB上で次のことを済ませておいてください。

  • 初期セットアップ
  • Tokenの発行

上記については、次の記事で解説しています。

上記を済ませていれば、次のサンプルコードを動かすことができるでしょう。

from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS

# InfluxDBサーバーのIPアドレスとポート
url = "http://192.168.33.60:8086"
# 対象organization
org = "test_organization"
# 対象bucket
bucket = "test_bucket"
# 発行したToken
token = "●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●"

client = InfluxDBClient(url=url, token=token, org=org)

write_api = client.write_api(write_options=SYNCHRONOUS)
query_api = client.query_api()

p = Point("my_measurement").tag("location", "Prague").field("temperature", 25.3)

write_api.write(bucket=bucket, record=p)

## using Table structure
tables = query_api.query('from(bucket:"' + bucket + '") |> range(start: -10m)')

for table in tables:
    print(table)
    for row in table.records:
        print (row.values)

ただし、次の部分は各自の環境用に変更してください。

# InfluxDBサーバーのIPアドレスとポート
url = "http://192.168.33.60:8086"
# 対象organization
org = "test_organization"
# 対象bucket
bucket = "test_bucket"
# 発行したToken
token = "●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●"

上記コードを実行して、成功すると次のように表示されます。

FluxTable() columns: 9, records: 1
{'result': '_result', 'table': 0, '_start': datetime.datetime(2021, 6, 18, 5, 34, 32, 288950, tzinfo=tzutc()), '_stop': datetime.datetime(2021, 6, 18, 5, 44, 32, 288950, tzinfo=tzutc()), '_time': datetime.datetime(2021, 6, 18, 5, 36, 12, 839957, tzinfo=tzutc()), '_value': 25.3, '_field': 'temperature', '_measurement': 'my_measurement', 'location': 'Prague'}

実行する毎に、データが登録されていきます。
コードで言うと、下記の部分です。

write_api.write(bucket=bucket, record=p)

10分以内に登録したデータが、すべて表示されるようになっています。
その処理は、次のコードとなります。

## using Table structure
tables = query_api.query('from(bucket:"' + bucket + '") |> range(start: -10m)')

for table in tables:
    print(table)
    for row in table.records:
        print (row.values)

なお、UIの管理画面でも確認は可能です。
以下は、「Data Exploer」で確認しています。

以上、influxdb-clientの動作確認についての説明でした。

タイトルとURLをコピーしました