新聞中心
1 簡(jiǎn)介
每個(gè)部署到生產(chǎn)環(huán)境的應(yīng)用程序都需要監(jiān)控方式來(lái)評(píng)估其性能情況,這可以幫助開(kāi)發(fā)人員判斷應(yīng)用程序是否按預(yù)期運(yùn)行,是否需要采取措施以達(dá)到期望的性能水平。這些數(shù)據(jù)被稱為應(yīng)用程序性能指標(biāo)(APM),現(xiàn)在有許多商業(yè)工具如Newrelic、Datadog APM等提供這些功能的SAAS服務(wù)。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),醴陵企業(yè)網(wǎng)站建設(shè),醴陵品牌網(wǎng)站建設(shè),網(wǎng)站定制,醴陵網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,醴陵網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
本文介紹兩個(gè)開(kāi)源工具:Grafana和Prometheus。Prometheus以時(shí)間序列格式收集和存儲(chǔ)指標(biāo)數(shù)據(jù),而Grafana使用Prometheus作為數(shù)據(jù)源,在儀表板上可視化這些數(shù)據(jù)。
我們從創(chuàng)建一個(gè)應(yīng)用程序并使用Grafana進(jìn)行監(jiān)控開(kāi)始。
2 創(chuàng)建Spring Boot應(yīng)用程序
訪問(wèn)https://start.spring.io,創(chuàng)建一個(gè)帶有以下依賴項(xiàng)的簡(jiǎn)單應(yīng)用程序。
- Spring Boot Actuator(運(yùn)維)
- Prometheus(可觀測(cè)性)
- Spring Web(可選:僅用于創(chuàng)建一個(gè)簡(jiǎn)單的REST控制器。)
接下來(lái),需要通過(guò)一個(gè)管理端點(diǎn)暴露出來(lái),Prometheus將使用該端點(diǎn)以Prometheus可理解的格式收集指標(biāo)數(shù)據(jù)。為此,添加以下屬性。
management:
endpoints:
web:
exposure:
include:
- prometheus
然后,添加一個(gè)簡(jiǎn)單的控制器,用于生成一些警告日志。將使用它來(lái)監(jiān)控收到的警告數(shù)量。
@RestController
@SpringBootApplication
public class PrometheusIntegrationApplication {
final static Logger logger = LoggerFactory.getLogger(PrometheusIntegrationApplication.class);
public static void main(String[] args) {
SpringApplication.run(PrometheusIntegrationApplication.class, args);
}
@GetMapping("/something")
public ResponseEntity createLogs() {
logger.warn("Just checking");
return ResponseEntity.ok().body("All Ok");
}
有了這些,來(lái)啟動(dòng)應(yīng)用程序并打開(kāi)以下URL。
http://localhost:8080/actuator/prometheus
3 理解指標(biāo)數(shù)據(jù)
在打開(kāi)上述端點(diǎn)后,會(huì)發(fā)現(xiàn)以下格式的一些指標(biāo)數(shù)據(jù):
jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 1005592.0
第一部分jvm_memory_used_bytes被稱為標(biāo)簽(label),而花括號(hào)內(nèi)的字段被稱為屬性(attribute)。每個(gè)標(biāo)簽代表一個(gè)特定的指標(biāo),屬性提供了一種查詢方式,以獲取值。
接下來(lái),配置Prometheus來(lái)讀取這些數(shù)據(jù)。
4 配置Prometheus
為了啟動(dòng)Prometheus,使用一個(gè)Prometheus Docker鏡像,并提供一些配置來(lái)從應(yīng)用程序中收集指標(biāo)數(shù)據(jù)。它通過(guò)創(chuàng)建作業(yè)來(lái)從端點(diǎn)抓取數(shù)據(jù)。因此,在prometheus.yaml配置文件中定義作業(yè),如下所示。
scrape_configs:
- job_name: 'Spring Boot Application input'
metrics_path: '/actuator/prometheus'
scrape_interval: 2s
static_configs:
- targets: ['localhost:8000']
labels:
application: "My Spring Boot Application"
在這里,定義了一個(gè)作業(yè),每2秒調(diào)用應(yīng)用程序上的管理端點(diǎn)以獲取指標(biāo)數(shù)據(jù)。
接下來(lái),創(chuàng)建一個(gè)docker-compose文件,用于啟動(dòng)和運(yùn)行Prometheus Docker鏡像。
services:
prometheus:
image: prom/prometheus:v2.35.0
network_mode: host
container_name: prometheus
restart: unless-stopped
volumes:
- ./data/prometheus/config:/etc/prometheus/
command:
- "--config.file=/etc/prometheus/prometheus.yaml"
在這里,將配置文件掛載到/etc/prometheus位置,并將配置文件的位置作為命令的參數(shù)。為了簡(jiǎn)單起見(jiàn),使用了主機(jī)網(wǎng)絡(luò)模式,這樣Prometheus可以直接訪問(wèn)應(yīng)用程序端點(diǎn)。
有了這些,使用docker compose up啟動(dòng)docker鏡像,并在瀏覽器上打開(kāi)URL http://localhost:9090。
現(xiàn)在搜索標(biāo)簽logback_events_total。
圖片
正如所看到的,可以看到Prometheus在特定時(shí)間收集的指標(biāo)。
如果找不到該標(biāo)簽,可以通過(guò)導(dǎo)航到“Status > Targets”來(lái)檢查作業(yè)是否正在運(yùn)行。應(yīng)該看到狀態(tài)為“UP”,如下所示。
圖片
因此,通過(guò)這種方式,數(shù)據(jù)每2秒就會(huì)被攝入到Prometheus中。
現(xiàn)在使用Grafana來(lái)可視化這些數(shù)據(jù)。
5 在Grafana中可視化指標(biāo)
使用Grafana的Docker鏡像,將其添加到docker-compose文件中。
grafana:
image: grafana/grafana-oss:8.5.2
pull_policy: always
network_mode: host
container_name: grafana
restart: unless-stopped
links:
- prometheus:prometheus
volumes:
- ./data/grafana:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_SERVER_DOMAIN=localhost
在這里,也使用了主機(jī)網(wǎng)絡(luò)模式,以便和Grafana可以輕松訪問(wèn)Prometheus端點(diǎn)。
接下來(lái),打開(kāi)URL http://localhost:3000,使用用戶名和密碼“admin”訪問(wèn)Grafana。
6 配置Grafana數(shù)據(jù)源
首先,添加Prometheus數(shù)據(jù)源。在"添加數(shù)據(jù)源"中選擇Prometheus,然后只需添加一個(gè)屬性,即Prometheus的URL:http://localhost:9090。
圖片
點(diǎn)擊"保存并測(cè)試",現(xiàn)在,創(chuàng)建第一個(gè)儀表板。
7 創(chuàng)建Grafana儀表板
點(diǎn)擊左側(cè)的"+"圖標(biāo),選擇"創(chuàng)建儀表板"?,F(xiàn)在,添加第一個(gè)面板。
接下來(lái),在指標(biāo)瀏覽器中查詢一個(gè)標(biāo)簽,例如logback_events_total。
圖片
正如在這里所看到的,我們可以得到各種類型日志的計(jì)數(shù)。這些計(jì)數(shù)目前來(lái)自應(yīng)用程序的啟動(dòng)日志,并以時(shí)間序列的形式顯示。
我們僅查看警告日志。為此,需要在屬性中添加level="warn",如下所示。
圖片
剛剛創(chuàng)建了一個(gè)簡(jiǎn)單的指標(biāo)可視化面板,用于查看警告日志的數(shù)量。
通常,我們希望查看一定時(shí)間內(nèi)錯(cuò)誤或警告日志的速率。這將幫助我們了解系統(tǒng)是否存在問(wèn)題。為此,可以使用rate函數(shù)來(lái)計(jì)算一段時(shí)間內(nèi)日志的速率。
因此,在觸發(fā)Spring Boot應(yīng)用程序上的控制器端點(diǎn)后,它生成了一些警告日志,從而得到了這個(gè)圖表。
圖片
保存這個(gè)面板,完成了。剛剛創(chuàng)建了第一個(gè)具有警告日志指標(biāo)面板的Grafana儀表板。
圖片
現(xiàn)在不需要從頭開(kāi)始創(chuàng)建儀表板。實(shí)際上,有許多社區(qū)提供的儀表板可供使用。因此,可以從這里使用針對(duì)Spring Boot應(yīng)用程序的現(xiàn)成儀表板。但是,在嘗試使用時(shí)會(huì)遇到一些問(wèn)題,因?yàn)閿?shù)據(jù)無(wú)法正確地可視化。所以這里對(duì)儀表板進(jìn)行了更新。
圖片
本文名稱:使用Prometheus和Grafana監(jiān)控SpringBoot應(yīng)用
轉(zhuǎn)載來(lái)源:http://m.fisionsoft.com.cn/article/dhijjdd.html


咨詢
建站咨詢
