您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用spring-boot-admin+nacos+prometheus+grafana實(shí)現(xiàn)監(jiān)控閉環(huán)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用spring-boot-admin+nacos+prometheus+grafana實(shí)現(xiàn)監(jiān)控閉環(huán)”吧!
最近學(xué)習(xí)使用spring-cloud-alibaba
,集成各個(gè)微服務(wù)常用組件
阿里開源的
dubbo
sentinel
rocketmq
nacos
seata
spring官方的
gateway
sleuth
apache的shardingsphere
sharding-jdbc
第三方開源的監(jiān)控spring-boot
項(xiàng)目
spring-boot-admin
期間也碰到了一些問題,其中一個(gè)就是sharding-jdbc
分表配合seata
來在dubbo
服務(wù)中完成分布式事務(wù)。最后也是參考git上面別人提出的方案解決了,雖然看起來不怎么幽雅,但是也能跑通??赡芫褪切阅苌厦孢€是有瑕疵,就如官方說的:sharding-jdbc
和seata
對(duì)sql重復(fù)解析的問題。具體改動(dòng)點(diǎn)就是在類SpringBootConfiguration
中,取消它的自動(dòng)配置,然后把getDataSource
方法的結(jié)果包裝成seata
的如下
@SuppressWarnings("unchecked") private DataSource getDataSource(final Environment environment, final String prefix, final String dataSourceName) throws ReflectiveOperationException, NamingException { Map<String, Object> dataSourceProps = PropertyUtil.handle(environment, prefix + dataSourceName.trim(), Map.class); Preconditions.checkState(!dataSourceProps.isEmpty(), "Wrong datasource properties!"); if (dataSourceProps.containsKey(jndiName)) { return getJndiDataSource(dataSourceProps.get(jndiName).toString()); } // add seata wrapper update at 2019年10月31日 09:04:22 return new DataSourceProxy(DataSourceUtil.getDataSource(dataSourceProps.get("type").toString(), dataSourceProps)); }
以上模塊整合完畢之后,加入spring-boot-admin
模塊,可以很方便的從nacos
中拉取服務(wù),但是那些數(shù)據(jù)在admin中看起來終究不直觀,于是就考慮著加入prometheus
和grafana
來圖表化這些數(shù)據(jù)了。
prometheus
和grafana
單獨(dú)靜態(tài)整合不是什么大的問題,配置文件寫死地址即可展示圖表了,主要就是prometheus
如何集成nacos
的問題。
prometheus
官方是有SD(service-discovery)模塊配置的,有consul
的,但是沒有nacos
的,在nacos
的issues列表里面也可以看到有人提出過這個(gè)問題,本人也是在那里看到了他們提出的方案,就是參考eureka-consul-adapter
這個(gè)開源項(xiàng)目了。
把這個(gè)代碼clone下來之后照著葫蘆畫瓢,由于我對(duì)于eureka
也不是很熟悉,所以搗鼓了挺久的才和spring-boot-admin
融合起來了。主要的改動(dòng)點(diǎn)就是在RegistrationService
這個(gè)類的倆方法,如下
public Single<ChangeItem<Map<String, String[]>>> getServiceNames(long waitMillis, Long index) { return returnDeferredMap(waitMillis, index, serviceChangeDetector::getLastEmitted, serviceChangeDetector::getTotalIndex, () -> { try { return registry.getServicesOfServer(1,Integer.MAX_VALUE).getData().stream() .collect(Collectors.toMap(Function.identity(), a -> NO_SERVICE_TAGS, MERGE_FUNCTION, TreeMap::new)); } catch (NacosException e) { log.error(e.getErrMsg(),e); return Collections.emptyMap(); } }); } public Single<ChangeItem<List<Instance>>> getService(String appName, long waitMillis, Long index) { return returnDeferredList(waitMillis, index, () -> serviceChangeDetector.getLastEmittedOfApp(appName), waitMillisInternal -> serviceChangeDetector.getIndexOfApp(appName, waitMillisInternal), () -> { try { return registry.selectInstances(appName, true); } catch (NacosException e) { return Collections.emptyList(); } }); }
其中的registry
對(duì)象看調(diào)用的方法應(yīng)該就能猜出來是NamingService
對(duì)象了
prometheus
的配置文件修改點(diǎn)如下
scrape_configs: - job_name: 'nacos-consul-adapter' scrape_interval: 20s static_configs: consul_sd_configs: - server: '127.0.0.1:8888' relabel_configs: - source_labels: ['__metrics_path__'] regex: '/metrics' target_label: __metrics_path__ replacement: '/actuator/prometheus'
consul_sd_configs
就是我的spring-boot-admin
地址,因?yàn)槲疫@邊nacos
到consul
的轉(zhuǎn)換直接寫在spring-boot-admin
中了。
微服務(wù)啟動(dòng)之后在admin控臺(tái)就可以看見類似如下圖示內(nèi)容
然后在prometheus
的菜單:Status-Targets下面可以看見類似如下圖示內(nèi)容
最后在grafana
里面就可以看到監(jiān)控圖表了(先配置prometheus
數(shù)據(jù)源和id為4701的dashboard)
這樣整個(gè)監(jiān)控閉環(huán)就靠nacos維系起來了,一旦有接入nacos的微服務(wù)上線,spring-boot-admin
、prometheus
、grafana
都能動(dòng)態(tài)加載數(shù)據(jù)了
感謝各位的閱讀,以上就是“怎么用spring-boot-admin+nacos+prometheus+grafana實(shí)現(xiàn)監(jiān)控閉環(huán)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么用spring-boot-admin+nacos+prometheus+grafana實(shí)現(xiàn)監(jiān)控閉環(huán)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。