溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用spring-boot-admin+nacos+prometheus+grafana實(shí)現(xiàn)監(jiān)控閉環(huán)

發(fā)布時(shí)間:2021-06-25 10:20:35 來源:億速云 閱讀:1517 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“怎么用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ù)常用組件

  1. 阿里開源的

    • dubbo sentinel rocketmq nacos seata

  2. spring官方的

    • gateway sleuth

  3. apache的shardingsphere

    • sharding-jdbc

  4. 第三方開源的監(jiān)控spring-boot項(xiàng)目

    • spring-boot-admin

期間也碰到了一些問題,其中一個(gè)就是sharding-jdbc分表配合seata來在dubbo服務(wù)中完成分布式事務(wù)。最后也是參考git上面別人提出的方案解決了,雖然看起來不怎么幽雅,但是也能跑通??赡芫褪切阅苌厦孢€是有瑕疵,就如官方說的:sharding-jdbcseata對(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中看起來終究不直觀,于是就考慮著加入prometheusgrafana來圖表化這些數(shù)據(jù)了。

正題開始

prometheusgrafana單獨(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)槲疫@邊nacosconsul的轉(zhuǎn)換直接寫在spring-boot-admin中了。

微服務(wù)啟動(dòng)之后在admin控臺(tái)就可以看見類似如下圖示內(nèi)容 怎么用spring-boot-admin+nacos+prometheus+grafana實(shí)現(xiàn)監(jiān)控閉環(huán)

然后在prometheus的菜單:Status-Targets下面可以看見類似如下圖示內(nèi)容 怎么用spring-boot-admin+nacos+prometheus+grafana實(shí)現(xiàn)監(jiān)控閉環(huán)

最后在grafana里面就可以看到監(jiān)控圖表了(先配置prometheus數(shù)據(jù)源和id為4701的dashboard) 怎么用spring-boot-admin+nacos+prometheus+grafana實(shí)現(xiàn)監(jiān)控閉環(huán)

結(jié)束

這樣整個(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)注!

向AI問一下細(xì)節(jié)

免責(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)容。

AI