Build your Grafana dashboard with docker image

Qi Fong
8 min readJul 30, 2023

--

本文將介紹使用Docker同時將Grafana和MySQL起起來,建立你自己專屬的數據儀表板。

環境及工具

使用工具:

  1. Docker
  2. Grafana
  3. 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有關,但此篇以應用為主,就不多說這方面的細節了。

如果有哪裡錯誤的話,再麻煩告訴我,感謝~

參考資料

--

--

Qi Fong
Qi Fong

No responses yet