はじめに
InfluxDB とは、時系列データに特化した OSS のデータベースです。大量データを高速に処理できるのが特徴のようです。初心者なので記事の正確性は保証できませんが、日本語情報が少ないので少しでも足しになればと思い書きました。
参考
- Docker Hub/influxdb (公式)
- InfluxDB OSS 2.1 Docs (公式)
- InfluxDBの2.0を試してみる
- RDBエンジニアから見たInfluxDB -時系列DBってRDBとはどう違うの?
- InfluxDB入門
- InfluxDB 2.0 を使う(1) 値の登録・取得を試す
- InfluxDB 2.0 を使う(2) 色々な値の取得を行う
前提
docker や docker-compose が使えるようになっているという前提。動作確認済は下記のバージョン
- Docker version 20.10.12, build e91ed57
- Docker Compose version v2.2.3
InfluxDB 起動
docker-compo.yml を配置して下記のコマンドを実行する。
mkdir conf
mkdir data
# デフォルトの config.yml を作成
docker run --rm influxdb:2.1 influxd print-config > ./conf/config.yml
docker-compose up -d
version: '3'
services:
db:
image: influxdb:2.1
ports:
- '8086:8086'
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=my-user
- DOCKER_INFLUXDB_INIT_PASSWORD=my-password
- DOCKER_INFLUXDB_INIT_ORG=my-org
- DOCKER_INFLUXDB_INIT_BUCKET=my-bucket
volumes:
- ./data:/var/lib/influxdb2
- ./conf/config.yml:/etc/influxdb2/config.yml
公式の用語集 によると、下記のように説明がある。
- organization
- A workspace for a group of users. All dashboards, tasks, buckets, members, and so on, belong to an organization.
- (deepLによる機械翻訳) ユーザーグループのためのワークスペース。ダッシュボード、タスク、バケット、メンバーなど、すべて組織に属します。
- (私の理解) RDB のスキーマのようなもの。 bucket
- A bucket is a named location where time series data is stored. All buckets have a retention period. A bucket belongs to an organization.
- (deepLによる機械翻訳) バケットとは、時系列データを保存するための名前付きの場所である。すべてのバケットには保存期間があります。バケットは組織に所属する。
- (私の理解) RDB のテーブルスペースのようなもの。
Web UI へアクセス
InfluxDB 1.0 の途中から Web UI が無くなって Chronograf に分離されたと書いてあったのだが、1.x 系列の話のようだ。2.x からはまた Web UI が組み込まれたらしい。Chronograf で何とかしようと思って無駄な時間を費やしてしまったので、後から追ってくる人は気を付けて欲しい。
Web ブラウザで 8086 ポートへアクセスすると、ログイン画面が表示されるので、docker-compose.yml で指定したユーザ名とパスワードでログインする。
後から API 経由でデータ登録する際に Token が必要になるようなのでメモしておく。
Token は 「Data」-「API Tokens」から取得できる。
データを書き込む
公式の v2 API Docs によると、InfluxDB にデータを書き込む為には下記の5つの情報が必要だと書いてある。
- organization name or ID – See View organizations for instructions on viewing your organization ID.
- bucket – See View buckets for instructions on viewing your bucket ID.
- API token – See View tokens for instructions on viewing your API token.
- InfluxDB URL – See InfluxDB URLs.
- data in line protocol format.
データを書き込む (PowerShell)
PowerShell でデータを登録してみる。
ここで使う PowerShell は Core のほうではなく、 Windows PowerShell v5.1 のほう。
PowerShell-Influx というモジュールが公開されていたのでこれを使うことにする。
インストール
Install-Module Influx -Scope CurrentUser
README.md に使い方が載っていたが、これは v1.x 用のもののようで、このまま実行しても上手く登録できなかった。
Write-Influx.md により詳細なドキュメントがあり、 v2.x の構文が載っていたため、これを参考にして、1秒ごとにCPU使用率を書き込んでみる。
先ほど docker-compose.yml で設定した organization, bucket と、Web UI から取得した API Token を使う。
while ($true) {
$metrics=@{
CPU=Get-WmiObject Win32_PerfFormattedData_PerfOS_Processor | where { $_.Name -eq '_Total' } | Select -ExpandProperty PercentProcessorTime
}
Write-Influx -Measure Server -Tags @{Hostname=$env:COMPUTERNAME} -Metrics $metrics -Server http://your-hostname:8086 -Organisation "my-org" -Bucket "my-bucket" -Token "your-api-token"
echo $metrics
Start-Sleep 1
}
Measurement は、公式の用語集 を読んでもよくわからなかった。参考サイトを読んで下記のように理解した。
- measurement
- The part of InfluxDB’s structure that describes the data stored in the associated fields. Measurements are strings.
- (DeepL) InfluxDBの構造体のうち、関連するフィールドに格納されているデータを記述する部分。計測値は文字列。
- (私の理解) フィールドをいくつかまとめたグループ名
データを書き込む (Python)
次に、Python でデータ登録してみる。
Python では、公式から influxdb-client-python というモジュールが出ているのでこれを使うことにする。余談だが、v1.x 系列のモジュールは InfluxDB-Python というモジュールで、 v2.x 系列とは別になっているようなので注意したい。
Python実行環境の起動
docker run -it --rm python:3 bash
インストール
pip install 'influxdb-client[ciso]' psutil
CPU使用率を書き込む
import influxdb_client
import os
import psutil
import time
from influxdb_client.client.write_api import SYNCHRONOUS
client = influxdb_client.InfluxDBClient(url="http://your-hostname:8086", token="your-api-token", org="my-org")
write_api = client.write_api(write_options=SYNCHRONOUS)
while True:
cpu = psutil.cpu_percent()
p = influxdb_client.Point("my_measurement") \
.tag("Hostname", os.uname()[1]) \
.field("CPU", cpu)
write_api.write(bucket="my-bucket", record=p)
time.sleep(1)
データを書き込む (Telegraf)
未確認。そのうち追記したい。
データの参照 (Web UI)
Web UI から「Explorer」を選択し、bucket や measurement、field、期間 を UI からぽちぽち選択し「Submit」ボタンを押下するとグラフが見えた。