為了搭建一個(gè)基于prometheus和grafana的基礎(chǔ)監(jiān)控環(huán)境,用于應(yīng)用監(jiān)控的預(yù)研,找到《【監(jiān)控】Prometheus+Grafana監(jiān)控簡(jiǎn)介》一文,學(xué)習(xí)后進(jìn)行了練習(xí)總結(jié),本文補(bǔ)充原文后半部分例子的搭建步驟,補(bǔ)充內(nèi)容包括:
學(xué)習(xí)并總結(jié)了一個(gè)docker工程docker-prometheus-scaffold,歡迎指導(dǎo)!
導(dǎo)出grafana.ini
假設(shè)工作目錄為 ~/Develop/prometheus/docker
原文中“還有Grafana的配置(如果找不到配置,或者容器無法將配置映射出來,那么直接進(jìn)入容器拷貝一份出來即可)”,這一句話的操作步驟:
# 從Grafana容器中導(dǎo)出grafana.ini
$ docker exec -it <Grafana-container-ID> cat /etc/grafana/grafana.ini > grafana.ini
# 將其放到宿主機(jī)目錄,并映射給Grafana容器
$ mkdir -p ~/Develop/prometheus/docker/grafana/config
$ mv grafana.ini ~/Develop/prometheus/docker/grafana/config
需要調(diào)整的內(nèi)容如下(其他部分保持不變)
[database]
# You can configure the database connection by specifying type, host, name, user and password
# as separate properties or as on string using the url properties.
type = mysql
host = mysql:3306
name = grafana
user = grafana
password =grafana
url = mysql://grafana:grafana@mysql:3306/grafana
[session]
# Either "memory", "file", "redis", "mysql", "postgres", default is "file"
#provider = file
provider = mysql
provider_config = grafana:grafana@tcp(mysql:3306)/grafana
mysql容器創(chuàng)建成功,同時(shí)自動(dòng)創(chuàng)建grafana庫和用戶
參考自《如何讓docker中的mysql啟動(dòng)時(shí)自動(dòng)執(zhí)行sql語句》
step1:準(zhǔn)備目錄和初始腳本
# 存放mysql容器構(gòu)建時(shí)自動(dòng)運(yùn)行的shell腳本
mkdir -p ~/Develop/prometheus/docker/mysql/auto
# 存放初始SQL腳本
mkdir -p ~/Develop/prometheus/docker/mysql/init
touch ~/Develop/prometheus/docker/mysql/auto/init.sh
touch ~/Develop/prometheus/docker/mysql/init/init_grafana.sql
touch ~/Develop/prometheus/docker/mysql/init/check_grafana.sql
step2:init.sh內(nèi)容,這個(gè)腳本目的在于控制sql執(zhí)行順序
#!/bin/bash
mysql -uroot -p$MYSQL_ROOT_PASSWORD << EOF
source $INIT_SQL_PATH/$INIT_SQL_0;
source $INIT_SQL_PATH/$INIT_SQL_1;
step3:init_grafana.sql內(nèi)容,創(chuàng)建grafanak庫和用戶
create database grafana DEFAULT CHARACTER SET utf8mb4 ;
GRANT ALL ON grafana.* TO grafana@'%' IDENTIFIED BY 'grafana' WITH GRANT OPTION ;
step4:check_grafana.sql內(nèi)容 ,這個(gè)check腳本只是為了演示如何指定SQL的執(zhí)行順序,也可以都在一個(gè)里面
-- 檢查有沒有g(shù)rafana用戶的表空間
use mysql ;
select Host,User from user ;
step5:修改docker-compose.yml,修改db部分即可,... 的地方保持不動(dòng)
...
db:
image: mysql:5.7
container_name: mysql
environment:
- MYSQL_ROOT_PASSWORD=root # mysql的root用戶秘密
- INIT_SQL_PATH=/usr/local/init # mysql容器構(gòu)建好后,執(zhí)行init.sh腳本時(shí)會(huì)到這個(gè)目錄找需要執(zhí)行的sql腳本
- INIT_SQL_0=init_grafana.sql # 需要初始化的腳本,初始化grafana的庫和用戶并賦權(quán)
- INIT_SQL_1=check_grafana.sql # 需要初始化的腳本,檢查init_grafana.sql的執(zhí)行結(jié)果
hostname: mysql
restart: always
volumes:
- ~/Develop/prometheus/docker/mysql/auto:/docker-entrypoint-initdb.d # 掛載mysql容器構(gòu)建完成后自動(dòng)執(zhí)行的腳本
- ~/Develop/prometheus/docker/mysql/init:/usr/local/init # 掛載初始化sql腳本到容器
- ~/Develop/prometheus/docker/mysql/config:/etc/mysql
- ~/Develop/prometheus/docker/mysql/data:/var/lib/mysql
- ~/Develop/prometheus/docker/mysql/log:/var/log/mysql
ports:
- "3306:3306"
expose:
- "3306"
networks:
- monitor
...
執(zhí)行docker-compose up 啟動(dòng)后,做如下檢查,判斷是否成功:
查看grafana容器日志:
$ docker logs grafana
應(yīng)該有
t=2020-05-09T16:42:53+0000 lvl=info msg="HTTP Server Listen" logger=http.server address=0.0.0.0:3000 protocol=http subUrl= socket=
查看prometheus容器日志:
$ docker logs prometheus
應(yīng)該有
level=info ts=2020-05-09T16:42:31.355Z caller=main.go:623 msg="Server is ready to receive web requests."
檢查一下MySQL數(shù)據(jù)庫中是否有Grafana資源
$ docker exec -it mysql /bin/bash
> mysql -uroot -proot
> show databases ;
能看見grafana庫,成功!