InfluxDB
Docker version: 19.03.8
運行容器實例:
docker run -d \
--rm \
--name influxdb \
-p 8086:8086 \
-v /opt/docker/influxdb:/var/lib/influxdb \
--hostname=influxdb \
influxdb:1.8.0
這里不需要再額外為influx開放8083端口,因為InfluxDB 1.3以及之后的版本,已經取消了自帶的web管理頁面了,取而代之的是使用Chronograf。啟動Chronograf容器實例:
這里選擇是否創建Chronograf並不會影響后續的操作;
docker run -d \
-p 8888:8888 \
--name chronograf \
-v /opt/docker/chronograf:/var/lib/chronograf \
chronograf:1.8
Chronograf 容器啟動后,訪問:IP:8888,進入控制台頁面。
除了使用Chronograf,若要在本地連接InfluxDB數據庫,還可以下載使用 InfluxDB Studio.
influxdb 容器啟動成功后,進入容器內的/usr/bin
目錄,這里面存放了Influxdb相關的工具:
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
# 進入Influxdb客戶端命令行
./influx
# 創建數據庫用戶root,並設置密碼
CREATE USER "root" WITH PASSWORD "123456" WITH ALL PRIVILEGES
# 創建jenkins數據庫
`CREATE DATABASE jenkins
Jenkins
Jenkins需要安裝influxdb插件,承擔數據采集的角色,在項目構建完成后,將本次構建信息推送到數據庫中,后續Grafana配置好數據源后,就可以將數據進行可視化展示。
插件安裝完成后,進入系統配置頁面,設置下InfluxDB Targets:
配置保存成功后,進入項目配置頁面,添加構建后操作。
當項目構建完成后,會自動上報十分詳細的構建信息到數據庫中,通過InfluxDB Studio連接數據庫,可以看到一些數據表已經自動被創建了。
Grafana
我是之前在k8s的一套測試環境安裝的kube-promethus,直接拿過來用
配置Grafana 數據源
數據源可以配置多個,配置項和Jenkins中一致就可以了。
Jenkins Dashboard
Grafana提供了導入Dashboards模板的功能,在官網可以搜索很多別人已經實現的模板,我們只需要按需導入即可,十分方便,這里以Jmeter為例,進入官網 Grafana Dashboards 搜索頁面,點擊搜索結果中的第一條:
在頁面右側可以看到模板ID為5496,復制此ID,進入Grafana控制台頁面,點擊左側的加號,選擇Import然后輸入模板ID,並導入即可,導入成功后,會自動新建一個 Jmeter Dashboard。
這里嘗試去搜索Jenkins相關的模板,發現並沒有符合我們要求的模板,所以后續是通過手動配置的方式來完成的,需要手動創建一個名為Jenkins的Dashboard,然后在進行后續操作。
創建環境變量
采集到的數據是包括所有jenkins項目的構建數據,在利用這部分數據時,可以創建項目名稱變量(projectName),這個變量實際就是Jenkins的Job Name,配置如下:
下面就直接參考別人的博客了https://www.jianshu.com/p/06b0da4737fd,grafana沒有系統的學一下,配置有點一頭霧水
保存完成后,在Dashboard頁面,會發現多了一個名為"項目名稱"的篩選項:
后續配置Panel時,在InfluxQL中可以通過$projectName的方式使用這個自定義的變量。
**Add Panel **
下面是一些我用到視圖類型以及對應的InlfuxQL,Visualization配置可以按照喜歡自行調整。
- Pie Chart
# Title構建成功
SELECT count("build_result") FROM jenkins_data WHERE ("build_result" = 'SUCCESS' AND "project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY time($__interval) fill(null)
# Title 構建成功
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 構建耗時
SELECT "build_time" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter ORDER BY time DESC tz('Asia/Shanghai')
- Gauge
# Title 健康指數
SELECT project_build_health FROM jenkins_data WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter
- Table
# Title 構建記錄
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
成功的圖: