4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

InfluxDB 2.1 ことはじめ

Last updated at Posted at 2022-03-06

はじめに

InfluxDB とは、時系列データに特化した OSS のデータベースです。大量データを高速に処理できるのが特徴のようです。初心者なので記事の正確性は保証できませんが、日本語情報が少ないので少しでも足しになればと思い書きました。

参考

前提

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
docker-compose.yml
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 で指定したユーザ名とパスワードでログインする。

ログイン画面
image.png

ログイン後のトップページ
image.png

後から API 経由でデータ登録する際に Token が必要になるようなのでメモしておく。
Token は 「Data」-「API Tokens」から取得できる。

image.png

データを書き込む

公式の 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」ボタンを押下するとグラフが見えた。

image.png

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?