LoginSignup
6
3

InfluxDB+Grafana構築 on docker

Posted at

調査のため、Docker上に InfluxDB + Grafana を構築した時のメモです。

環境

% sw_vers
ProductName:		macOS
ProductVersion:		13.2
BuildVersion:		22D49
% docker --version
Docker version 20.10.17, build 100c701

docker-compose.yml

version: "2"

services:
  influxdb:
    image: influxdb:2.7.1
    container_name: influxdb-local
    volumes:
      - ./docker/influxdb2/data:/var/lib/influxdb2
      - ./docker/influxdb2/config:/etc/influxdb2
    ports:
      - 8086:8086
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_USERNAME=admin
      - DOCKER_INFLUXDB_INIT_PASSWORD=password
      - DOCKER_INFLUXDB_INIT_ORG=organization
      - DOCKER_INFLUXDB_INIT_BUCKET=bucket
  
  grafana:
    image: grafana/grafana-oss:9.5.5
    container_name: grafana-local
    ports:
      - 8085:3000
    user: "472"
    volumes:
      - ./docker/grafana/data:/var/lib/grafana
    depends_on:
      - influxdb
    environment:
      - GF_SERVER_ROOT_URL=http://localhost:8085
      - GF_SECURITY_ADMIN_PASSWORD=admin

InfluxDBにデータを投入

Go言語で10秒毎にデータを投入するプログラムを作成。

main.go
package main

import (
	"context"
	"math/rand"
	"time"

	influxdb2 "github.com/influxdata/influxdb-client-go/v2"
)

const (
	INFLUXDB_TOKEN = "!!!ここにトークンを記述する!!!"
)

func main() {

	rand.Seed(time.Now().UnixNano())
	client := influxdb2.NewClient("http://localhost:8086", INFLUXDB_TOKEN)
	writeAPI := client.WriteAPIBlocking("organization", "bucket")

	field1 := 50.0
	field2 := 50.0
	field3 := 50.0

	for i := 0; i < 180; i++ {
		p := influxdb2.NewPointWithMeasurement("stat").
			AddTag("unit", "temperature").
			AddField("field1", field1).
			AddField("field2", field2).
			AddField("field3", field3).
			SetTime(time.Now())

		err := writeAPI.WritePoint(context.Background(), p)
		if err != nil {
			panic(err)
		}

		field1 += float64(rand.Intn(200)-100) / 10
		field2 += float64(rand.Intn(200)-100) / 10
		field3 += float64(rand.Intn(200)-100) / 10

		time.Sleep(10 * time.Second)
	}
}

APIトークンを発行

上記のGo言語のプログラムの INFLUXDB_TOKEN に設定するトークンを取得する。

  1. InfluxDB の Web UI にログインする。
    http://localhost:8086/
    ログイン情報は docker-compose.ymlDOCKER_INFLUXDB_INIT_USERNAMEDOCKER_INFLUXDB_INIT_PASSWORDの値です。
    スクリーンショット 2023-07-05 14.11.33.png

  2. ログインしたら、左メニューの [Load Data]-[API Tokens]をクリックする。

  3. 右上の [GENERATE API TOKEN]-[All Access API Token]をクリックする。
    スクリーンショット 2023-07-05 14.19.43.png

  4. 説明を記載して、[SAVE]をクリックする。
    スクリーンショット 2023-07-05 14.36.19.png

  5. トークンが発行されるので、Go言語のプログラムの INFLUXDB_TOKEN にコピペする。

Grafanaの設定(Data Sourceの追加)

  1. Grafanaにログインする。
    http://localhost:8085/
    ログイン情報は admindocker-compose.ymlGF_SECURITY_ADMIN_PASSWORDの値です。
    スクリーンショット 2023-07-05 14.53.53.png

  2. 左メニューから [Administration]-[Data sources]をクリックする。

  3. 右上の [+ Add new data source]をクリックする。

  4. 次の通りに入力し、[Save & test] をクリックする。

項目名 入力値 備考
Query Language InfluxQL
HTTP - URL http://influxdb-local:8086 localhostではなく、container_nameを入力
Basic Auth Details - User docker-compose.yml の DOCKER_INFLUXDB_INIT_USERNAME
Basic Auth Details - Password docker-compose.yml の DOCKER_INFLUXDB_INIT_PASSWORD
Custom HTTP Headers - Header Authorization
Custom HTTP Headers - Value  Token s3zf3uR-hErpMz7w... Grafana用にInfluxDBのAPIトークンを新規発行して設定
InfluxDB Details - Database  docker-compose.yml の DOCKER_INFLUXDB_INIT_BUCKET 
InfluxDB Details - User docker-compose.yml の DOCKER_INFLUXDB_INIT_USERNAME
InfluxDB Details - Password docker-compose.yml の DOCKER_INFLUXDB_INIT_PASSWORD
InfluxDB Details - HTTP Method  GET

結果

Grafanaで表示された(やったぜ!)
スクリーンショット 2023-07-05 15.22.40.png

謝辞

参考にさせていただいたWebサイトがたくさんありました。
皆様、ありがとうございます。

6
3
1

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
6
3