InfluxDB データ取得のガイド

このガイドでは、InfluxDB v2 APIを使用してデータを取得するための方法を説明します。 以下の方法をカバーします:

  • 必要なツールのインストール

  • 環境変数の設定

  • Bashスクリプトを使用したデータ取得

  • InfluxDB GUIを使用したデータ取得

  • Pythonを使用したデータ取得

必要なツールのインストール

以下のツールが必要です。 インストールされていない場合は、以下のコマンドを使用してインストールしてください。

sudo apt update
sudo apt install curl jq

環境変数の設定

まず以下の環境変数を設定してください。これらは、InfluxDBのURL、トークン、組織名、およびバケット名となります。

export INFLUXDB_URL="http://[IP_ADDRESS]:8086"  # InfluxDBのURL
export INFLUXDB_TOKEN="[YOUR_TOKEN]"            # 認証トークン
export INFLUXDB_ORG="[YOUR_ORGANIZATION]"       # 組織名
export INFLUXDB_BUCKET="[YOUR_BUCKET]"          # バケット名

Bashスクリプトを使用したデータ取得

InfluxDB v2 APIからデータを取得し、解析を行います。

#!/bin/bash

# クエリを設定
QUERY='from(bucket: "pinode")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "00")
  |> filter(fn: (r) => r._field== "temperature")
  |> yield(name: "mean")
  '

# curlコマンドを実行してデータを取得
response=$(curl --request POST \
  "${INFLUXDB_URL}/api/v2/query?org=${INFLUXDB_ORG}&bucket=get-started" \
  --header "Authorization: Token ${INFLUXDB_TOKEN}" \
  --header "Content-Type: application/vnd.flux" \
  --header "Accept: application/csv" \
  --data "query=${QUERY}" \
)

# エラーチェック
if [ $? -ne 0 ]; then
    echo "curlコマンドの実行中にエラーが発生しました。"
    exit 1
fi

# データをCSV形式で保存
echo "${response}" > ./influxdb_data.csv

スクリプトの実行

このスクリプトは、scripts/fetch_influxdb_data.sh に記載されています。 これを実行します。

scripts/fetch_influxdb_data.sh

スクリプトが正常に実行されると、InfluxDBから取得したデータが`influxdb_data.csv`に保存されます。

InfluxDB GUIを使用したデータ取得

  1. InfluxDBのGUIページに移動します。デフォルトのURLは`http://[IP_ADDRESS or HOSTNAME]:8086`です。

  2. ログインします。デフォルトのユーザー名は`pinode`、パスワードは`pinode-pass`です。

  3. 左側のメニューから「Explore」を選択します。

  4. クエリエディタに以下のFluxクエリを入力します。

Note

ログイン設定は PiNode3 software configuration を参照してください。

from(bucket: "pinode")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "00")
  |> filter(fn: (r) => r._field == "temperature")
  |> yield(name: "mean")
  1. 「Submit」ボタンをクリックしてクエリを実行します。

  2. 結果が表示されたら必要に応じてデータをエクスポートします。

Pythonを使用したデータ取得

以下は、Pythonを使用してInfluxDB v2 APIからデータを取得する例です。

必要なライブラリのインストール

pip install influxdb-client

Pythonスクリプト

from influxdb_client import InfluxDBClient

# 環境変数の設定
INFLUXDB_URL = "http://[INFLUXDB_URL]:8086"
INFLUXDB_TOKEN = "[INFLUXDB_TOKEN]"
INFLUXDB_ORG = "pinode"
INFLUXDB_BUCKET = "pinode"

# InfluxDBクライアントの作成
client = InfluxDBClient(url=INFLUXDB_URL, token=INFLUXDB_TOKEN, org=INFLUXDB_ORG)

# クエリを設定
query = """
from(bucket: "pinode")
    |> range(start: -1h)
    |> filter(fn: (r) => r._measurement == "00")
    |> filter(fn: (r) => r._field == "temperature")
    |> yield(name: "mean")
"""

# クエリを実行
df = client.query_api().query_data_frame(query)

# CSVファイルに保存
df.to_csv("influxdb_data.csv", index=False)

スクリプトの実行

このスクリプトは、scripts/fetch_influxdb_data.py に記載されています。 これを実行します。

python scripts/fetch_influxdb_data.py

スクリプトが正常に実行されると、InfluxDBから取得したデータが`influxdb_data.csv`に保存されます。

InfluxDB データ取得結果

以下の出力は、InfluxDBから取得したデータの例です。 このデータは、特定のバケットから過去1時間の温度データをクエリした結果です。 各フィールドの意味を詳しく説明します。

result

table

_start

_stop

_time

_value

_field

_measurement

mean

0

2024-06-30T07:49:33.091101235Z

2024-06-30T08:49:33.091101235Z

2024-06-30T07:49:53Z

24.804

temperature

00

mean

0

2024-06-30T07:49:33.091101235Z

2024-06-30T08:49:33.091101235Z

2024-06-30T07:50:54Z

24.847

temperature

00

mean

0

2024-06-30T07:49:33.091101235Z

2024-06-30T08:49:33.091101235Z

2024-06-30T07:51:03Z

24.847

temperature

00

mean

0

2024-06-30T07:49:33.091101235Z

2024-06-30T08:49:33.091101235Z

2024-06-30T07:52:13Z

24.922

temperature

00

mean

0

2024-06-30T07:49:33.091101235Z

2024-06-30T08:49:33.091101235Z

2024-06-30T07:53:23Z

24.997

temperature

00

mean

0

2024-06-30T07:49:33.091101235Z

2024-06-30T08:49:33.091101235Z

2024-06-30T07:54:33Z

25.04

temperature

00

各フィールドの説明

  • result: クエリの結果タイプを示します。ここではすべて`mean`となっており、平均値の計算結果を示しています。

  • table: データのテーブル番号を示します。すべて`0`なので、単一のテーブルに格納されています。

  • _start: クエリの開始時間を示します。例では 2024-06-30T07:49:33.091101235Z です。

  • _stop: クエリの終了時間を示します。例では 2024-06-30T08:49:33.091101235Z です。

  • _time: データポイントのタイムスタンプを示します。このタイムスタンプはUTCで表示されます。例えば、 2024-06-30T07:49:53Z2024年6月30日 07:49:53 UTC を示しています。

  • _value: 測定された値を示します。例では温度データの値が表示されています。例えば、 24.804 は温度を示します。

  • _field: 測定されたフィールド名を示します。例では temperature です。

  • _measurement: 測定の種類を示します。例では 00 です。