InfluxDB+Grafana構築 on docker

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

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

## docker-compose.yml
``` 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.yml`の`DOCKER_INFLUXDB_INIT_USERNAME`と`DOCKER_INFLUXDB_INIT_PASSWORD`の値です。
![スクリーンショット 2023-07-05 14.11.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104120/7aa7da6a-9dd1-0d48-4408-019ab68c8af8.png)

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

3. 右上の [GENERATE API TOKEN]-[All Access　API Token]をクリックする。
![スクリーンショット 2023-07-05 14.19.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104120/85f91ab2-af6f-444b-ba3e-64acdf62746f.png)

4. 説明を記載して、[SAVE]をクリックする。
![スクリーンショット 2023-07-05 14.36.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104120/927cb7b4-2013-e601-bc1c-1f6dca841b01.png)

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

## Grafanaの設定（Data Sourceの追加）

1. Grafanaにログインする。
http://localhost:8085/
ログイン情報は `admin` と `docker-compose.yml`の`GF_SECURITY_ADMIN_PASSWORD`の値です。
![スクリーンショット 2023-07-05 14.53.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104120/77bccb15-cd09-e7a8-f7b7-a3c2503aa20a.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104120/c9ca22c6-12a1-7cd2-1f40-13f971d1be8d.png)

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