搭建環(huán)境:docker+prometheus+grafana

為了搭建一個(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)容包括:

  1. 導(dǎo)出grafana.ini
  2. mysql容器創(chuàng)建成功,同時(shí)自動(dòng)創(chuàng)建grafana庫和用戶

學(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庫,成功!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容