環(huán)境搭建完成后,最終展示效果如下圖所示:20210410 Update docker-compose.yml.

docker-compose.yml
內(nèi)容如下:
version: '3'
services:
influxdb:
image: influxdb:1.8.0
container_name: influxdb
restart: always
ports:
- "8086:8086"
volumes:
- /opt/docker/influxdb:/var/lib/influxdb
- /etc/localtime:/etc/localtime
hostname: influxdb
environment:
- ADMIN_USER=root
- INFLUXDB_INIT_PWD=YOUR_PWD
- PRE_CREATE_DB=jenkins
chronograf:
image: chronograf:1.8
container_name: chronograf
restart: always
ports:
- 8888:8888
volumes:
- /opt/docker/chronograf:/var/lib/chronograf
grafana:
image: grafana/grafana:7.3.0
container_name: grafana
restart: always
links:
- influxdb:influxdb
ports:
- "3000:3000"
user: root
volumes:
- /etc/localtime:/etc/localtime
- /opt/docker/grafana/grafana-data:/var/lib/grafana
- /opt/docker/grafana/grafana-logs:/var/log/grafana
environment:
- INFLUXDB_HOST=influxdb
- INFLUXDB_PORT=8086
# 設(shè)置管理員登錄密碼, 默認(rèn)為admin, 首次登錄時(shí)需要進(jìn)行修改
- GF_SECURITY_ADMIN_PASSWORD=YOUR_PWD
# 設(shè)置要安裝的插件
- GF_INSTALL_PLUGINS=grafana-piechart-panel
搭建過程中,有幾個(gè)需要注意的地方,下面來稍微說說。
- 不需要額外為influxDB容器開放8083端口,這是因?yàn)閺腎nfluxDB 1.3以及之后的版本,已經(jīng)取消了自帶的web管理頁面了,取而代之的是使用Chronograf;
- 創(chuàng)建Chronograf容器是可選的,容器啟動(dòng)后,訪問:HTTP://IP:8888,可以進(jìn)入chronograf 控制臺頁面,如下:第一項(xiàng)Connection URL不要用localhost,可能出現(xiàn)訪問不通的情況,Username 和 Password可以保持空白后面再設(shè)置,Telegraf的默認(rèn)數(shù)據(jù)庫名稱為
telegraf,直接點(diǎn)擊按鈕下一步就好。 - influxdb 容器啟動(dòng)成功后,進(jìn)入容器內(nèi)的
/usr/bin目錄,這里面存放了Influxdb相關(guān)的工具,如下。 當(dāng)然也可以在Chronograf控制臺頁面進(jìn)行數(shù)據(jù)庫的CURD相關(guān)操作。
docker exec -it influxdb bash
cd /usr/bin
find | grep influx
./influx_stress
./influx_inspect
./influx
./influxd
./influx_tsm
# 查看版本
./influx -version
InfluxDB shell version: 1.8.0
# 進(jìn)入Influxdb客戶端命令行
./influx
# 創(chuàng)建jenkins數(shù)據(jù)庫
`CREATE DATABASE jenkins
- grafana這里使用了7.3.0版本,如果從低版本遷移到高版本會有權(quán)限問題(坑!!),詳見:https://grafana.com/docs/grafana/latest/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later。 另外,考慮到要為Jenkins做一個(gè)構(gòu)建成功率和構(gòu)成失敗率統(tǒng)計(jì),所以為Grafana預(yù)安裝了餅圖插件,相關(guān)的方法在上面的鏈接中也有詳細(xì)介紹。
Jenkins
Jenkins需要安裝influxdb插件,承擔(dān)數(shù)據(jù)采集的角色,在項(xiàng)目構(gòu)建完成后,將本次構(gòu)建信息推送到數(shù)據(jù)庫中,后續(xù)Grafana配置好數(shù)據(jù)源后,就可以將數(shù)據(jù)進(jìn)行可視化展示。
插件安裝完成后,進(jìn)入系統(tǒng)配置頁面,設(shè)置下InfluxDB Targets:



Grafana目錄代理(可選)
使用Nginx為grafana做了代理,以實(shí)現(xiàn)在公網(wǎng)下通過域名+"/grafana"的形式訪問,點(diǎn)擊查看官方文檔,步驟如下:
- 修改Nginx配置(nginx.conf),紅色部分為新增,proxy_pass后面一定要有"/"(用以去掉/grafana/匹配本身)
server {
listen 80;
root /usr/share/nginx/www;
index index.html index.htm;
location /grafana/ {
proxy_pass http://localhost:3000/;
}
}
- 修改grafana配置(grafana.ini),由于grafana以容器形式啟動(dòng),所以先拷貝配置文件到宿主機(jī)
docker cp grafana:/etc/grafana/grafana.ini /opt/docker/grafana-data/etc
然后修改配置文件中的以下內(nèi)容:
[server]
domain = 你的域名
root_url = %(protocol)s://%(domain)s/grafana/
配置文件修改完成后,重啟容器再掛載宿主機(jī)配置文件目錄到容器中。
docker kill grafana
docker rm grafana
docker run --user root -d --name grafana -p 3000:3000 -v /opt/docker/grafana-data/etc:/etc/grafana/ -v /opt/docker/grafana-data/grafana:/var/lib/grafana grafana:mc
- reload nginx
配置Grafana 數(shù)據(jù)源
數(shù)據(jù)源可以配置多個(gè),配置項(xiàng)和Jenkins中一致就可以了。
Jenkins Dashboard
Grafana提供了導(dǎo)入Dashboards模板的功能,在官網(wǎng)可以搜索很多別人已經(jīng)實(shí)現(xiàn)的模板,我們只需要按需導(dǎo)入即可,十分方便,這里以Jmeter為例,進(jìn)入官網(wǎng) Grafana Dashboards 搜索頁面,點(diǎn)擊搜索結(jié)果中的第一條:

在頁面右側(cè)可以看到模板ID為5496,復(fù)制此ID,進(jìn)入Grafana控制臺頁面,點(diǎn)擊左側(cè)的加號,選擇Import然后輸入模板ID,并導(dǎo)入即可,導(dǎo)入成功后,會自動(dòng)新建一個(gè) Jmeter Dashboard。
這里嘗試去搜索Jenkins相關(guān)的模板,發(fā)現(xiàn)并沒有符合我們要求的模板,所以后續(xù)是通過手動(dòng)配置的方式來完成的,需要手動(dòng)創(chuàng)建一個(gè)名為Jenkins的Dashboard,然后在進(jìn)行后續(xù)操作。
創(chuàng)建環(huán)境變量
采集到的數(shù)據(jù)是包括所有jenkins項(xiàng)目的構(gòu)建數(shù)據(jù),在利用這部分?jǐn)?shù)據(jù)時(shí),可以創(chuàng)建項(xiàng)目名稱變量(projectName),這個(gè)變量實(shí)際就是Jenkins的Job Name,配置如下:


后續(xù)配置Panel時(shí),在InfluxQL中可以通過$projectName的方式使用這個(gè)自定義的變量。
**Add Panel **
下面是一些我用到視圖類型以及對應(yīng)的InlfuxQL,Visualization配置可以按照喜歡自行調(diào)整。
- Pie Chart
# Title構(gòu)建成功
SELECT count("build_result") FROM jenkins_data WHERE ("build_result" = 'SUCCESS' AND "project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY time($__interval) fill(null)
# Title 構(gòu)建成功
SELECT count("build_result") FROM jenkins_data WHERE ("build_result" = 'FAILURE' AND "project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY time($__interval) fill(null)
- Graph
# Title 構(gòu)建耗時(shí)
SELECT "build_time" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter ORDER BY time DESC tz('Asia/Shanghai')
- Gauge
# Title 健康指數(shù)
SELECT project_build_health FROM jenkins_data WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter
- Table
# Title 構(gòu)建記錄
SELECT "build_agent_name", "build_number", "build_result", "build_status_message", "build_time", "project_build_health" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY "project_name" ORDER BY time DESC
除了Jenkins構(gòu)建結(jié)果外,Jmeter壓測結(jié)果也可以通過后置處理器非常方便的采集到InfluxDB中,并利用Grafana進(jìn)行展示。
To be continued....
