本文將介紹使用Docker同時將Grafana和MySQL起起來,建立你自己專屬的數據儀表板。
環境及工具
使用工具:
- Docker
- Grafana
- MySQL
作業系統:
MacOS Ventura 13.4.1
實際操作
Step1: 將MySQL和Grafana的鏡像檔pull下來。
docker pull mysql:latest
docker pull grafana/grafana:latest
現在我的版本
MySQL: 8.0.33
Grafana: 10.0.3
Step2: 建立MySQL的database/table,並且插入數據
2–1 以docker起mysql的container
docker run --name mysql_dev -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Dev1234 -d mysql:8.0.33
2–2 進入container內建立資料庫
docker exec -it mysql_dev /bin/bash
mysql -u root -p
這時候應該會跳出要你輸入密碼,這時候就繼續輸入Dev1234(剛剛的MYSQL_ROOT_PASSWORD=Dev1234),他不會顯示你打的,所以輸入完直接enter
看到以下的畫面就代表成功進入了。
2–3 創建資料庫(假設資料庫名稱為DevDb)
CREATE DATABASE DevDb;
2–4 創建資料表
use DevDb
CREATE TABLE model_performance (datetime datetime, y_pred FLOAT);
2–5 插入數據,這邊切到使用python插入數據到數據庫
這邊要先在自己的環境安裝mysql library
pip install mysql-connector-python
接著執行以下script(.py)
(因為此篇不教學SQL,所以就不逐一解釋以下範例了,只是製造數據)
from mysql import connector
import numpy as np
from datetime import datetime
import pandas as pd
db = "DevDb"
table_name = "model_performance"
db_settings = {
"host":"localhost",
"port":3306,
"user":"root",
"password":"Dev1234",
"db":db,
}
t = pd.date_range(start="20230101",end="20230730",freq="1H")
t = [datetime.strftime(d, '%Y-%m-%d %H:%M:%S') for d in t]
y_pred = [float(i) for i in np.random.random(len(t))-1]
t_val_pair = list(zip(t,y_pred))
conn = connector.connect(**db_settings)
cursor = conn.cursor()
command = "INSERT INTO model_performance (datetime, y_pred) VALUES (%s, %s)"
for i in range(len(y_pred)):
cursor.execute(command, t_val_pair[i])
conn.commit()
conn.close()
這時候可以在終端機內查看一下是否插入成功
select * from DevDb.model_performance;
資料表內數據如下
Step3: 以docker起Grafana服務
3–1 啟動Grafana服務
docker run -it -d --name grafana_dev -p 3000:3000 grafana/grafana grafana
接著在瀏覽器輸入 localhost:3000,會看到如下畫面,
帳號密碼都是admin
輸入後他會要求更改密碼,就在自行更改
3–2 點選New dashboard →Add visualization
3–3 點選右下方”Configure a new data source”
3–4 選擇data source(這邊先以MySQL做範例,也可用其他的database)
3–5 黃色匡是需要輸入的,這邊最大的重點是Host要怎麼填,不能填localhost:3306
打開新的終端機,輸入以下指令,用來檢查mysql的container的位址
docker inspect mysql_dev
在下方找到這行
按下方的Save & test,如果看到綠色匡”Database Connection OK”就表示有成功連到了
3–6 接下來進入panel的設定
下方黃色匡設定好,最後按紅色匡(Run query)
上方應該可見query完呈現的結果,可能跟下方圖不一樣(因為數據是隨機產生的)
3–7 也可以自行調整要顯示的時間範圍
3–8 右方的bar有很多東西可以調整,例如要畫怎麼樣的圖,或是設定threshold等等,如下方可設定threshold
3–9 設定好後,點選Apply,可以看到dashboard上就有一個panel(剛剛畫的)了
結果展示
最後可以看到我們的dashboard有剛剛建立的一個panel,也可以根據自己的需求建立好幾個panel,也可以設定定時的刷新週期(例如右上角可以設定5s刷新一次)
後記
本篇的定位是非常入門的新手教學,Grafana還有很多很精彩的應用,像是散佈圖、折線圖、圓餅圖、儀表板、線條顏色、寬度,也可以設定警戒值等等。
這次的展示個人認為最重要的步驟是不同container間的溝通,Host IP應該要設定多少? 這其實跟docker container的bridge有關,但此篇以應用為主,就不多說這方面的細節了。
如果有哪裡錯誤的話,再麻煩告訴我,感謝~
參考資料