新聞中心
無論是使用SpringBootAdmin還是使用Prometheus+Grafana都離不開SpringBoot提供的核心組件Actuator。提到Actuator,又不得不提Micrometer,從SpringBoot2.x開始,Actuator的功能實(shí)現(xiàn)都是基于Micrometer的。Micrometer通過儀表客戶端為各種健康監(jiān)控系統(tǒng)提供了一個(gè)簡單的外觀Facade(Facade模式是23種設(shè)計(jì)模式中的一種,也叫外觀模式 / 門面模式,F(xiàn)acade(外觀)模式為子系統(tǒng)中的各類(或結(jié)構(gòu)與方法)提供一個(gè)簡明一致的界面,隱藏子系統(tǒng)的復(fù)雜性,使子系統(tǒng)更加容易使用。它是為子系統(tǒng)中的一組接口所提供的一個(gè)一致的界面。)。類似于SLF4J,我們可以自由選擇log4j2、logback等日志框架一樣,Micrometer支持靈活切換或者多種并存的健康監(jiān)控系統(tǒng)檢測基于 JVM 的應(yīng)用程序。

新寧ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
Micrometer提供的功能:
- 尺寸指標(biāo)(Dimensional Metrics):Micrometer 為計(jì)時(shí)器、儀表、計(jì)數(shù)器、分布摘要和長任務(wù)計(jì)時(shí)器提供了與供應(yīng)商無關(guān)的接口,具有維度數(shù)據(jù)模型,當(dāng)與維度監(jiān)控系統(tǒng)配對(duì)時(shí),允許有效訪問特定命名的度量,并具有向下鉆取的能力跨越其維度。
- 預(yù)配置綁定(Pre-configured Bindings):開箱即用的緩存、類加載器、垃圾收集、處理器利用率、線程池等工具,更適合可操作的洞察力。
- Spring集成(Integrated into Spring):Micrometer 是一個(gè)檢測庫,支持從 Spring Boot 應(yīng)用程序交付應(yīng)用程序指標(biāo)。
Micrometer支持的監(jiān)控系統(tǒng):
AppOptics, Azure Monitor, Netflix Atlas, CloudWatch, Datadog, Dynatrace, Elastic, Ganglia, Graphite, Humio, Influx/Telegraf, JMX, KairosDB, New Relic, Prometheus, SignalFx, Google Stackdriver, StatsD, and Wavefront。
上文中我們說明了如何搭建Spring Boot Admin的微服務(wù)健康檢查監(jiān)控系統(tǒng),簡單的應(yīng)用使用Spring Boot Admin即可,復(fù)雜的集群應(yīng)用建議使用Micrometer 支持的多種靈活可配的監(jiān)控系統(tǒng),這里我們選擇目前使用比較廣泛的Prometheus+Grafana監(jiān)控系統(tǒng)。兩種方式都能夠?qū)崿F(xiàn)微服務(wù)的健康檢查統(tǒng)計(jì)展示和告警,Prometheus+Grafana在功能和界面美觀上更強(qiáng)大一些,并且可以查看歷史數(shù)據(jù),而SpringBootAdmin優(yōu)點(diǎn)是部署十分簡單,不需要部署太多的環(huán)境軟件,本身就是一個(gè)微服務(wù)。在兩種方式的選擇上,如果是小的項(xiàng)目,比如單體應(yīng)用,雙擊熱備,前期可以先使用SpringBootAdmin,隨著業(yè)務(wù)的發(fā)展,可以考慮使用Prometheus+Grafana。
一、Prometheus+Grafana相關(guān)介紹
1、Prometheus介紹
Prometheus: 是一款開源的系統(tǒng)和服務(wù)監(jiān)控系統(tǒng),屬于云原生計(jì)算基金會(huì)項(xiàng)目。它可以通過設(shè)置的時(shí)間間隔從配置的目標(biāo)系統(tǒng)采集指標(biāo)數(shù)據(jù),保存指標(biāo)數(shù)據(jù)(時(shí)序數(shù)據(jù)庫),評(píng)估規(guī)則表達(dá)式,顯示結(jié)果,并在檢測到指定條件時(shí)觸發(fā)警報(bào)。
- 多維數(shù)據(jù)模型:Prometheus 實(shí)現(xiàn)了一個(gè)高維數(shù)據(jù)模型,它從根本上將所有數(shù)據(jù)存儲(chǔ)為時(shí)間序列:屬于同一指標(biāo)和同一組標(biāo)記維度的時(shí)間戳值。 除了存儲(chǔ)的時(shí)間序列,Prometheus 可能會(huì)生成臨時(shí)派生的時(shí)間序列作為查詢的結(jié)果。
- 高效存儲(chǔ):Prometheus 以高效的自定義格式將時(shí)間序列存儲(chǔ)在內(nèi)存和本地磁盤上(內(nèi)置TSDB數(shù)據(jù)庫,同時(shí)也提供了遠(yuǎn)程存儲(chǔ)接口),擴(kuò)展是通過功能分片和聯(lián)合來實(shí)現(xiàn)的。
- PromQL:一種強(qiáng)大且靈活的查詢語言,PromQL 允許對(duì)收集的時(shí)間序列數(shù)據(jù)進(jìn)行切片和切塊,以生成臨時(shí)圖形、表格和警報(bào)。
- 不依賴分布式存儲(chǔ),操作簡單:每臺(tái)服務(wù)器的可靠性都是獨(dú)立的,僅依賴于本地存儲(chǔ)。用 Go 編寫,所有二進(jìn)制文件都是靜態(tài)鏈接的,易于部署。
- HTTP拉取模型: 通過抓取HTTP端點(diǎn)采集時(shí)序數(shù)據(jù)。
- 通過用于批處理作業(yè)的中間網(wǎng)關(guān)支持推送時(shí)間序列數(shù)據(jù)。
- 通過服務(wù)發(fā)現(xiàn)或靜態(tài)配置發(fā)現(xiàn)目標(biāo)。
- 出色的可視化:Prometheus 有多種數(shù)據(jù)可視化模式,內(nèi)置表達(dá)式瀏覽器、Grafana 集成和控制臺(tái)模板語言。
- 支持分層和水平聯(lián)合。
2、Grafana介紹
雖然Prometheus也支持可視化界面展示,但是界面不美觀,更多人選擇使用Grafana來展示Prometheus的監(jiān)控?cái)?shù)據(jù)。
Grafana:Grafana是一款開源的數(shù)據(jù)可視化工具。它提供對(duì)數(shù)據(jù)指標(biāo)的查詢、可視化和告警,它可以實(shí)現(xiàn)無論數(shù)據(jù)存儲(chǔ)在哪里,都可以與您的團(tuán)隊(duì)創(chuàng)建、探索和共享十分美觀的儀表盤數(shù)據(jù)可視化,并培養(yǎng)數(shù)據(jù)驅(qū)動(dòng)的文化。
- 可視化:具有多種選項(xiàng)的快速靈活的客戶端圖表。面板插件提供了許多不同的方式來可視化指標(biāo)和日志。
- 動(dòng)態(tài)儀表板:使用在儀表板頂部顯示為下拉列表的模板變量創(chuàng)建動(dòng)態(tài)和可重復(fù)使用的儀表板。
- 探索指標(biāo):通過即席查詢(是用戶根據(jù)自己的需求,靈活地選擇查詢條件,系統(tǒng)能夠根據(jù)用戶的選擇生成相應(yīng)的統(tǒng)計(jì)報(bào)表)和動(dòng)態(tài)鉆取探索您的數(shù)據(jù)。拆分視圖并并排比較不同的時(shí)間范圍、查詢和數(shù)據(jù)源。
- 探索日志:體驗(yàn)從指標(biāo)切換到帶有保留標(biāo)簽過濾器的日志的魔力??焖偎阉魉腥罩净?qū)崟r(shí)流式傳輸它們。
- 告警:為您最重要的指標(biāo)直觀地定義告警規(guī)則。Grafana 將持續(xù)評(píng)估并向 Slack、PagerDuty、VictorOps、OpsGenie 等系統(tǒng)發(fā)送通知。
- 混合數(shù)據(jù)源:在同一個(gè)圖中混合不同的數(shù)據(jù)源!您可以基于每個(gè)查詢指定數(shù)據(jù)源。這甚至適用于自定義數(shù)據(jù)源。
二、使用Docker安裝配置Prometheus+Grafana
我們使用Docker來安裝需要的Prometheus+Grafana,通常情況下,我們會(huì)根據(jù)業(yè)務(wù)需求來安裝需要的組件,在這里健康監(jiān)控系統(tǒng)也是這樣,如果我們的微服務(wù)部署在Docker容器中,那么我們需要安裝cAdvisor組件來監(jiān)控Docker相關(guān)數(shù)據(jù)指標(biāo),如果要采集系統(tǒng)環(huán)境數(shù)據(jù),那么需要安裝 Node Exporter 組件,而且告警組件也是和Prometheus分開的,如果需要告警功能,同樣需要安裝Alertmanager組件,這一連串組件的組合,自然讓我們想到使用docker-compose來安裝我們需要所有組件。
參考:
https://github.com/stefanprodan/dockprom 我們編寫兩個(gè)docker-compose文件。
- 服務(wù)端:數(shù)據(jù)采集、展示、告警,安裝 prometheus、grafana、cadvisor、alertmanager、node-exporter、caddy。
- 客戶端: 只需安裝 cadvisor、node-exporter用于采集本機(jī)數(shù)據(jù)。
1、準(zhǔn)備Docker宿主主機(jī)的安裝部署目錄
# 創(chuàng)建prometheus掛在目錄mkdir /data/monitor/prometheuscd /data/monitor/prometheustouch prometheus.ymlmkdir /data/monitor/prometheus_data# 創(chuàng)建alertmanager掛在目錄mkdir -p /data/monitor/alertmanager# 創(chuàng)建grafana掛在目錄mkdir -p /data/monitor/grafana_datamkdir -p /data/monitor/grafana/provisioning/dashboardsmkdir -p /data/monitor/grafana/provisioning/datasources
2、編寫docker-compose-prometheus-server.yml,此處為服務(wù)編排模板參考,因某些原因docker鏡像倉庫無法訪問,需切換到能夠訪問到的鏡像倉庫
docker-compose-prometheus-server.yml:
version: '3.2'networks: monitor-net: driver: bridgevolumes: prometheus_data: {} grafana_data: {}services: prometheus: image: prom/prometheus:latest container_name: prometheus volumes: - /data/monitor/prometheus:/etc/prometheus - /data/monitor/prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--storage.tsdb.retention.time=200h' - '--web.enable-lifecycle' restart: unless-stopped expose: - 9090 networks: - monitor-net labels: org.label-schema.group: "monitoring" alertmanager: image: prom/alertmanager:latest container_name: alertmanager volumes: - /data/monitor/alertmanager:/etc/alertmanager command: - '--config.file=/etc/alertmanager/config.yml' - '--storage.path=/alertmanager' restart: unless-stopped expose: - 9093 networks: - monitor-net labels: org.label-schema.group: "monitoring" nodeexporter: image: prom/node-exporter:latest container_name: nodeexporter volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' restart: unless-stopped expose: - 9100 networks: - monitor-net labels: org.label-schema.group: "monitoring" cadvisor: image: gcr.io/cadvisor/cadvisor:latest container_name: cadvisor privileged: true devices: - /dev/kmsg:/dev/kmsg volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker:/var/lib/docker:ro #- /cgroup:/cgroup:ro #doesn't work on MacOS only for Linux restart: unless-stopped expose: - 8080 networks: - monitor-net labels: org.label-schema.group: "monitoring" grafana: image: grafana/grafana:latest container_name: grafana volumes: - /data/monitor/grafana_data:/var/lib/grafana - /data/monitor/grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards - /data/monitor/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources environment: - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin} - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} - GF_USERS_ALLOW_SIGN_UP=false restart: unless-stopped expose: - 3000 networks: - monitor-net labels: org.label-schema.group: "monitoring" pushgateway: image: prom/pushgateway:latest container_name: pushgateway restart: unless-stopped expose: - 9091 networks: - monitor-net labels: org.label-schema.group: "monitoring" caddy: image: caddy:latest container_name: caddy ports: - "3000:3000" - "9090:9090" - "9093:9093" - "9091:9091" volumes: - ./caddy:/etc/caddy environment: - ADMIN_USER=${ADMIN_USER:-admin} - ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} - ADMIN_PASSWORD_HASH=${ADMIN_PASSWORD_HASH:-JDJhJDE0JE91S1FrN0Z0VEsyWmhrQVpON1VzdHVLSDkyWHdsN0xNbEZYdnNIZm1pb2d1blg4Y09mL0ZP} restart: unless-stopped networks: - monitor-net labels: org.label-schema.group: "monitoring"在服務(wù)端安裝執(zhí)行安裝命令:
docker-compose -f docker-compose-prometheus-server.yml up -d
執(zhí)行會(huì)報(bào)錯(cuò),因無法訪問部分docker鏡像庫:Error response from daemon: Get “https://gcr.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers),請(qǐng)自行設(shè)置將docker切換到能夠訪問的云服務(wù)器。
3、編寫docker-compose-prometheus-client.yml,此處為服務(wù)編排模板參考,因某些原因docker鏡像倉庫無法訪問,需切換到能夠訪問到的鏡像倉庫
version: '3.2'services: nodeexporter: image: prom/node-exporter:latest container_name: nodeexporter volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' restart: unless-stopped network_mode: host labels: org.label-schema.group: "monitoring" cadvisor: image: gcr.io/cadvisor/cadvisor:latest container_name: cadvisor privileged: true devices: - /dev/kmsg:/dev/kmsg volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro - /cgroup:/cgroup:ro restart: unless-stopped network_mode: host labels: org.label-schema.group: "monitoring"
在服務(wù)端安裝執(zhí)行安裝命令:
docker-compose -f docker-compose-prometheus-server.yml up -d
同在服務(wù)端執(zhí)行一樣,這里執(zhí)行會(huì)報(bào)錯(cuò),請(qǐng)自行切換可以訪問到的鏡像倉庫。
4、以上為生產(chǎn)環(huán)境所需的安裝方式配置參考,下面我們使用Docker進(jìn)行最小安裝,來測試運(yùn)行Prometheus+Grafana
執(zhí)行安裝Prometheus:
docker run -d \ --restart=always \ -u root \ --name prometheus \ -p 9090:9090 \ -v /etc/localtime:/etc/localtime \ -v /data/monitor/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ -v /data/monitor/prometheus_data:/prometheus \ prom/prometheus
執(zhí)行安裝Grafana:
docker run -d \ --restart=always \ -u root \ --name grafana \ -p 3000:3000 \ -v /data/grafana_data:/var/lib/grafana \ -v /data/grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards \ -v /data/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources \ -e GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin} \ -e GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} \ -e GF_USERS_ALLOW_SIGN_UP=false \ grafana/grafana
5、安裝成功后訪問鏈接查看是否成功
Prometheus: http://192.168.0.10:9090/:
Grafana:http://192.168.0.10:3000/ ,通過我們安裝時(shí)部署的用戶名密碼: admin / admin 登錄。
三、微服務(wù)相關(guān)配置及添加Prometheus支持
1、在gitegg-platform-bom工程中引入micrometer的prometheus依賴包
請(qǐng)注意,在選擇micrometer-registry-prometheus版本時(shí),一定要和框架中SpringBoot引入的micrometer相匹配的版本,否則不兼容。
......1.5.14 ............ io.micrometer micrometer-registry-prometheus ${micrometer.registry.prometheus.version}
2、gitegg-cloud工程的父pom.xml統(tǒng)一引入prometheus依賴包,這樣,我們就可以統(tǒng)一靈活切換使用的監(jiān)控系統(tǒng)
io.micrometer micrometer-registry-prometheus
3、修改Nacos,開啟prometheus抓取端點(diǎn)
metrics.tags.application: ${spring.application.name} 設(shè)置tag方便Prometheus抓取數(shù)據(jù)時(shí)區(qū)分不同的服務(wù)。
# 性能監(jiān)控端點(diǎn)配置management: security: enabled: true role: ACTUATOR_ADMIN endpoint: health: show-details: always endpoints: enabled-by-default: true web: base-path: /actuator exposure: include: '*'metrics: tags: application: ${spring.application.name} export: prometheus: enabled: true server: servlet: context-path: /actuator health: mail: enabled: false
4、查看啟動(dòng)結(jié)果 http://127.0.0.1:8002/actuator/prometheus
四、配置Prometheus+Grafana采集并展示微服務(wù)健康監(jiān)控?cái)?shù)據(jù)
1、編輯prometheus配置文件prometheus.yml,設(shè)置采集微服務(wù)端點(diǎn)
scrape_configs: - job_name: 'actuator-gitegg' basic_auth: username: user password: password scrape_interval: 15s scrape_timeout: 10s metrics_path: '/actuator/prometheus' static_configs: - targets: ['192.168.0.2:80','192.168.0.2:8002']
- basic_auth:設(shè)置采集端點(diǎn)的basic認(rèn)證信息。
- metrics_path:設(shè)置prometheus采集端點(diǎn)的路徑。
- static_configs.targets: 設(shè)置prometheus采集端點(diǎn)的地址。
2、重啟prometheus,訪問界面status -> targets,查看采集端點(diǎn)狀態(tài)。
3、配置Grafana,添加prometheus數(shù)據(jù)源并展示JVM監(jiān)控圖表
- Configuration -> Data sources -> Add data source。
- 添加Prometheus數(shù)據(jù)源地址 http://192.168.0.10:9090/。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-EtLyP44z-1659068873697)(https://upload-images.jianshu.io/upload_images/19669137-909fb58c88c3dd9c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]。
- Import 儀表盤,Grafana提供了很多內(nèi)置的儀表盤模板,官方模板地址:https://grafana.com/grafana/dashboards , 我們這里選擇使用JVM (Micrometer)模板,輸入模板的地址https://grafana.com/grafana/dashboards/4701或者模板的編號(hào)4701,然后點(diǎn)擊Load進(jìn)行加載。
- 執(zhí)行import后就可以看到我們導(dǎo)入的儀表盤模板了,點(diǎn)擊右上角的Save進(jìn)行保存。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-u2azr5Rj-1659068873698)(https://upload-images.jianshu.io/upload_images/19669137-ea886748260469e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]。
通過以上步驟已經(jīng)能夠搭建和配置簡單的Actuator(Micrometer)+ Prometheus + Grafana 微服務(wù)健康監(jiān)控系統(tǒng),查看Prometheus / Grafana 官方文檔,我們可以知道其提供的功能非常豐富,在實(shí)際使用過程中,我們需要根據(jù)自己的業(yè)務(wù)需求進(jìn)行更細(xì)維度的部署和配置。
服務(wù)健康監(jiān)控系統(tǒng)是保障我們系統(tǒng)服務(wù)正常運(yùn)行的必要工具,配置部署非常方便,但是,我們生產(chǎn)環(huán)境一定要注意系統(tǒng)安全問題,不要把健康檢查的端點(diǎn)暴露出去,該做鑒權(quán)的做鑒權(quán),該做安全防護(hù)的做安全防護(hù),不要因?yàn)榉奖憬】当O(jiān)控而增加安全風(fēng)險(xiǎn)。
網(wǎng)站名稱:Prometheus+Grafana微服務(wù)監(jiān)控告警系統(tǒng)
文章出自:http://www.5511xx.com/article/cochcpj.html


咨詢
建站咨詢
