- 追加された行はこの色です。
- 削除された行はこの色です。
- Grafana へ行く。
#author("2024-01-09T03:57:33+09:00","","")
#mynavi()
#setlinebreak(on);
* 目次 [#q45c628b]
#contents
- 関連
-- [[Grafanaプラグイン開発]]
-- [[Grafanaパネルプラグイン開発(create-plugin版)]]
-- [[InfluxDB入門]]
* インストール [#qf7a806d]
#html(<div class="pl10">)
https://grafana.com/docs/grafana/latest/installation/docker/
influxdbと連携させたいので、influxdb も一緒にインストール。
docker-compose.yml
#mycode2(){{
version: "3"
services:
influxdb:
image: influxdb:latest
container_name: local-influxdb # grafanaからの接続用にコンテナ名を明示しておく
hostname: local-influxdb
ports:
- "8086:8086"
volumes:
- ./influxdb/data:/var/lib/influxdb
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- ./grafana/dashboards:/etc/grafana/provisioning/dashboards
- ./grafana/datasources:/etc/grafana/provisioning/datasources
depends_on:
- influxdb
environment:
- GF_SERVER_ROOT_URL=http://localhost:3000
- GF_SECURITY_ADMIN_PASSWORD=admin
}}
起動
#myterm2(){{
docker-compose up -d
Starting influxdb_grafana_influxdb_1 ... done
Recreating influxdb_grafana_grafana_1 ... done
}}
#html(</div>)
* influxdbのデータベース作成 [#ofe2abeb]
#html(<div class="pl10">)
influxdbのコンテナに入ってDBを作成しておく
#myterm2(){{
docker exec -it `docker ps | awk '/8086/ {print $1}'` /bin/bash
# influx -execute "create database mydb1"
# exit
}}
#html(</div>)
* サンプルデータを作成する [#d2a96287]
#html(<div class="pl10">)
python 仮想環境の作成とinfluxdb用のクライアントライブラリのインストール
※ https://github.com/influxdata/influxdb-python
#myterm2(){{
python3 -m venv venv
source venv/bin/activate
pip install influxdb
}}
サンプルデータは以下の通り作成した。
create_sample_data.py
#mycode2(){{
import random
from datetime import datetime
from datetime import timedelta
from influxdb import InfluxDBClient
if __name__ == '__main__':
# 1分間隔でデータ作成
interval_sec = 1
# 最初と最後のデータの日時 ( 現在日時の24時間前〜2時間後まで )
first_datetime = datetime.now() - timedelta(hours=int(24))
last_datetime = datetime.now() + timedelta(hours=int(2))
# 一度に書き込むサイズ
batch_size = 100
records = []
client = InfluxDBClient('localhost', 8086, 'admin', 'admin', 'mydb1')
for server in ["server01", "server02"]:
ts = first_datetime
while True:
date_text = ts.strftime("%Y-%m-%dT%H:%M:%SZ")
records.append({
"measurement": "cpu_load_sample",
"tags": {
"host": server,
},
"time": date_text,
"fields": {
"value": round(random.random(),2)
}
})
if len(records) >= batch_size:
client.write_points(records)
print("writed ... server: {}, time: {} 〜 {}".format(server, records[0]["time"], records[-1]["time"]))
records = []
if ts.timestamp() >= last_datetime.timestamp():
break
next_ts = ts.timestamp() + interval_sec
ts = datetime.fromtimestamp(next_ts)
if len(records) > 0:
client.write_points(records)
result = client.query('select first(value) from cpu_load_sample;')
print("First: {}".format(result))
result = client.query('select last(value) from cpu_load_sample;')
print("Last : {}".format(result))
}}
データ作成の実行
#myterm2(){{
python3 create_sample_data.py
}}
#html(</div>)
* Grafana の設定 [#l7e96e6d]
#html(<div class="pl10">)
http://localhost:3000 にアクセスして設定を行っていく。
** データソースの作成 [#k05d88e8]
#html(<div class="pl10">)
Configuration から [Add data source] で InfluxDB を選択後、以下の通り作成する。
| | 設問/設定 | 設定/選択値 | 補足 |h
|HTTP| Name | InfluxDB_mydb1 ||
|~| URL | http://local-influxdb:8086 | docker-compose.yml で指定したコンテナ名 |
| InfluxDB Details | Database | mydb1 ||
|~| User | admin | 初期パスワードから変更していない場合 |
|~| Password | admin | 〃 |
#html(</div>)
** ダッシュボードの作成 [#p18d610e]
#html(<div class="pl10">)
[New dashboard] → [Add Query] から以下の通り作成。
#ref(sample_query.png,nolink)
最後に右上の [Save dashboard] で保存
作成されたダッシュボードのイメージ
#ref(sample_dashboard.png,nolink)
#html(</div>)
** タイムゾーンの設定 [#cd046399]
#html(<div class="pl10">)
タイムゾーンの設定は [Configuration] → [Preferences] から行う事が可能。
#html(</div>)
#html(</div>)