精华内容
下载资源
问答
  • Prometheus Springboot集成展示JVM

    千次阅读 2020-11-30 15:37:56
    icrometer Micrometer为最流行的监控系统提供了一个简单的仪表客户端外观,允许仪表化JVM应用,而无需关心是哪个供应商提供的指标。它的作用和SLF4J类似,只不过它...在SpringBoot中使用Prometheus其实很简单,不需...

    icrometer

    Micrometer为最流行的监控系统提供了一个简单的仪表客户端外观,允许仪表化JVM应用,而无需关心是哪个供应商提供的指标。它的作用和SLF4J类似,只不过它关注的不是Logging(日志),而是application metrics(应用指标)。简而言之,它就是应用监控界的SLF4J。
    官网:http://micrometer.io/

     

     

     

    集成prometheus

    springboot配置

    在SpringBoot中使用Prometheus其实很简单,不需要配置太多的东西,在pom文件中加入依赖,完整内容如下所示。

    • 步骤
    1. 添加pom依赖
    <!--保证web引入-->
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
    
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
    <!--prometheus-->
     <dependency>
       <groupId>io.micrometer</groupId>
       <artifactId>micrometer-registry-prometheus</artifactId>
       <version>1.2.0</version>
     </dependency>
    
    1. 添加yml文件配置
    #监控相关
    management:
      metrics:
        tags:
          application: ${spring.application.name}
        export:
          simple:
            enabled: false
      endpoints:
        web:
          exposure:
            include: "*"
            exclude: env, beans
      endpoint:
        shutdown:
          enabled: true
    
    1. 修改启动类,添加micrometer ,MeterRegistry configurer
    @EnableCaching
    public class CmsBootApp {
        private static Logger logger = LogManager.getLogger(CmsBootApp.class);
        public static void main(String[] args) {
            SpringApplication.run(CmsBootApp.class, args);
            logger.info("CmsBootApp 启动成功!");
        }
    
        @Bean
        MeterRegistryCustomizer<MeterRegistry> configurer(
                @Value("${spring.application.name}") String applicationName) {
            return (registry) -> registry.config().commonTags("application", applicationName);
        }
    }
    
    1. 如果系统存在拦截器,修改拦截器,允许prometheus接口采集
    @Configuration
    public class SecurityConfig {
    
        /**
         * 先走 filter ,然后 filter 如果检测到请求头存在 token,则用 token 去 login,走 Realm 去验证
         */
        @Bean
        public ShiroFilterFactoryBean factory(SecurityManager securityManager) {
            ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
    
            // 添加自己的过滤器并且取名为jwt
            Map<String, Filter> filterMap = new LinkedHashMap<>();
            //设置我们自定义的JWT过滤器
            filterMap.put("jwt", new JWTFilter());
            factoryBean.setFilters(filterMap);
            factoryBean.setSecurityManager(securityManager);
            // 设置无权限时跳转的 url;
            factoryBean.setUnauthorizedUrl("/auth/unauthorized/");
            Map<String, String> filterRuleMap = new HashMap<>();
            // 所有请求通过我们自己的JWT Filter
            filterRuleMap.put("/**", "jwt");
            // 访问 /unauthorized/** 不通过JWTFilter
            filterRuleMap.put("/auth/**", "anon");
            filterRuleMap.put("/actuator/**", "anon"); //保证不拦截接口,才能被prometheus采集数据
            filterRuleMap.put("/api/**", "anon");//保证不拦截接口,才能被prometheus采集数据
            factoryBean.setFilterChainDefinitionMap(filterRuleMap);
            return factoryBean;
        }
    
    1. 新增prometheus.yml增加节点配置
     - job_name: 'CMS-BOOT'
        scrape_interval: 5s
        metrics_path: '/actuator/prometheus'
        static_configs:
          - targets: ['192.168.1.128:8091']
    

    至此,prometheus结合springboot已完成成功采集。

     

    0人点赞

     

    技术分享

     



    作者:水饺鲜生
    链接:https://www.jianshu.com/p/62e701eff59b
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • Prometheus监控Springboot程序

    千次阅读 2020-01-19 14:25:13
    Prometheus监控Springboot程序 文章目录Prometheus监控Springboot程序1. 添加依赖2. 修改配置文件3. 启用Prometheus监控4. 监控埋点4.1 新建拦截器4.2 注册拦截器5. 验证监控6. 指标类型6.1 Counter6.2 Gauge6.3 ...

    Prometheus监控Springboot程序

    1. 添加依赖

    我本次使用的Springboot版本为1.5.12.RELEASE,如果是Springboot2.0+,那么监控的配置以及吐出的监控指标会有所不同。
    添加maven依赖,pom文件配置如下:

    <dependency>
                <groupId>io.prometheus</groupId>
                <artifactId>simpleclient_spring_boot</artifactId>
                <version>${prometheus.client.version}</version>
            </dependency>
            <dependency>
                <groupId>io.prometheus</groupId>
                <artifactId>simpleclient</artifactId>
                <version>${prometheus.client.version}</version>
            </dependency>
            <dependency>
                <groupId>io.prometheus</groupId>
                <artifactId>simpleclient_hotspot</artifactId>
                <version>${prometheus.client.version}</version>
            </dependency>
    

    其中Prometheus的版本号为:

    <prometheus.client.version>0.5.0</prometheus.client.version>
    

    2. 修改配置文件

    修改application.properties配置文件,添加如下内容:

    server.port=8080
    
    # 启用基础认证
    security.basic.enabled = false
    
    # 安全路径列表,逗号分隔,此处只针对/admin路径进行认证
    security.basic.path = /admin
    
    # 认证使用的用户名
    security.user.name = admin
    
    # 认证使用的密码。 默认情况下,启动时会记录随机密码。
    security.user.password = 123456
    
    # 可以访问管理端点的用户角色列表,逗号分隔
    management.security.roles = SUPERUSER
    
    # actuator暴露接口使用的端口,为了和api接口使用的端口进行分离
    management.port = 8099
    
    # actuator暴露接口的前缀
    management.context-path = /admin
    
    # actuator是否需要安全保证
    management.security.enabled = false
    
    # actuator的metrics接口是否需要安全保证
    endpoints.metrics.sensitive = false
    
    # actuator的metrics接口是否开启
    endpoints.metrics.enabled=true
    
    # actuator的health接口是否需要安全保证
    endpoints.health.sensitive=false
    
    # actuator的health接口是否开启
    endpoints.health.enabled=true
    

    application.yml 配置如下:

    # actuator是否需要安全保证
    management.security.enabled: false
    endpoints:
      metrics:
        # actuator的metrics接口是否需要安全保证
        sensitive: false
        # actuator的metrics接口是否开启
        enabled: true
      health:
        # actuator的health接口是否需要安全保证
        sensitive: false
        # actuator的health接口是否开启
        enabled: true
    

    3. 启用Prometheus监控

    在Springboot启动类上添加注解@EnablePrometheusEndpoint,同时使用simpleclient_hotspot中提供的DefaultExporter该Exporter会在metrics endpoint中放回当前应用JVM的相关信息

    @SpringBootApplication
    @EnablePrometheusEndpoint
    @EnableSpringBootMetricsCollector
    public class CaseApplication implements CommandLineRunner {
    
        public static void main(String[] args) {
            SpringApplication.run(CaseApplication.class, args);
        }
    
        @Override
        public void run(String... strings) throws Exception {
            DefaultExports.initialize();
        }
    
    }
    

    4. 监控埋点

    4.1 新建拦截器

    建立一个拦截器,用来拦截URL。

    public class PrometheusMetricsInterceptor implements HandlerInterceptor {
    
        private Histogram.Timer histogramRequestTimer;
        private Histogram.Timer nacosTimer;
        private Histogram.Child nacosChild;
    
        static final Histogram requestLatencyHistogram = Histogram.build().labelNames("path", "method", "code")
                .name("io_namespace_http_requests_latency_seconds_histogram").help("Request latency in seconds.")
                .register();
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("-------Histogram--------");
            histogramRequestTimer = requestLatencyHistogram
                    .labels(request.getRequestURI(), request.getMethod(), String.valueOf(response.getStatus()))
                    .startTimer();
            nacosTimer = MetricsMonitor.getConfigRequestMonitor(request.getMethod(), request.getRequestURI(), String.valueOf(response.getStatus()));
            nacosChild = MetricsMonitor.getNamingRequestMonitor(request.getMethod(), request.getRequestURI(), String.valueOf(response.getStatus()));
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            histogramRequestTimer.observeDuration();
            nacosTimer.observeDuration();
            nacosChild.startTimer();
        }
    }
    

    4.2 注册拦截器

    新建拦截器后需要注册到服务中才可以拦截URL。

    @Configuration
    public class WebServletContextConfiguration extends WebMvcConfigurationSupport {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
    
            registry.addInterceptor(getInterceptor()).addPathPatterns("/**");
            super.addInterceptors(registry);
        }
    
        @Bean
        public HandlerInterceptor getInterceptor() {
            return new PrometheusMetricsInterceptor();
        }
    
    }
    

    5. 验证监控

    启动应用程序,访问地址
    http://localhost:8099/admin/prometheus,验证是否存在监控指标。

    监控结果

    6. 指标类型

    普罗米修斯客户端库提供了四种核心度量类型。目前,它们只在客户端库(为了使api能够根据特定类型的使用而定制)和wire协议中有所区别。Prometheus服务器还没有利用类型信息,并将所有数据压缩成无类型的时间序列。这种情况在未来可能会改变。

    6.1 Counter

    计数器是一个累积度量,它表示一个单调递增的计数器,其值在重新启动时只能递增或重置为零。例如,您可以使用计数器来表示服务的请求、完成的任务或错误的数量。
    不要使用计数器来暴露可能降低的值。例如,不要为当前正在运行的进程的数量使用计数器;而是使用量规。
    示例代码:

    import io.prometheus.client.Counter;
    class YourClass {
      static final Counter requests = Counter.build()
         .name("requests_total").help("Total requests.").register();
    
      void processRequest() {
        requests.inc();
        // Your code here.
      }
    }
    

    6.2 Gauge

    量规是一个度量单位,它表示一个可以任意上下移动的数值。
    压力表通常用于测量温度或当前内存使用情况等测量值,但也用于“计数”,比如并发请求的数量。
    示例代码:

    class YourClass {
      static final Gauge inprogressRequests = Gauge.build()
         .name("inprogress_requests").help("Inprogress requests.").register();
    
      void processRequest() {
        inprogressRequests.inc();
        // Your code here.
        inprogressRequests.dec();
      }
    }
    

    6.3 Histogram

    直方图对观察结果(通常是请求持续时间或响应大小之类的东西)进行采样,并在可配置的桶中计数。它还提供所有观测值的和。
    示例代码:

    class YourClass {
      static final Histogram requestLatency = Histogram.build()
         .name("requests_latency_seconds").help("Request latency in seconds.").register();
    
      void processRequest(Request req) {
        Histogram.Timer requestTimer = requestLatency.startTimer();
        try {
          // Your code here.
        } finally {
          requestTimer.observeDuration();
        }
      }
    }
    

    6.4 Summary

    与柱状图类似,摘要对观察结果进行采样(通常是请求持续时间和响应大小之类的内容)。虽然它还提供了观察值的总数和所有观察值的总和,但它计算了一个滑动时间窗口上的可配置分位数。

    class YourClass {
      static final Summary receivedBytes = Summary.build()
         .name("requests_size_bytes").help("Request size in bytes.").register();
      static final Summary requestLatency = Summary.build()
         .name("requests_latency_seconds").help("Request latency in seconds.").register();
    
      void processRequest(Request req) {
        Summary.Timer requestTimer = requestLatency.startTimer();
        try {
          // Your code here.
        } finally {
          receivedBytes.observe(req.size());
          requestTimer.observeDuration();
        }
      }
    }
    

    6.5 自定义Collector

    有时不可能直接测试代码,因为它不在您的控制范围内。这要求您代理来自其他系统的指标。
    为此,您需要创建一个自定义收集器(需要将其注册为普通度量)。

    class YourCustomCollector extends Collector {
      List<MetricFamilySamples> collect() {
        List<MetricFamilySamples> mfs = new ArrayList<MetricFamilySamples>();
        // With no labels.
        mfs.add(new GaugeMetricFamily("my_gauge", "help", 42));
        // With labels
        GaugeMetricFamily labeledGauge = new GaugeMetricFamily("my_other_gauge", "help", Arrays.asList("labelname"));
        labeledGauge.addMetric(Arrays.asList("foo"), 4);
        labeledGauge.addMetric(Arrays.asList("bar"), 5);
        mfs.add(labeledGauge);
        return mfs;
      }
    }
    
    // Registration
    static final YourCustomCollector requests = new YourCustomCollector().register()
    

    7. 安装配置Prometheus

    7.1 安装配置

    下载安装包

    wget https://github.com/prometheus/prometheus/releases/download/v2.12.0/prometheus-2.12.0.linux-amd64.tar.gz
    

    解压文件

    tar -zxvf prometheus-2.12.0.linux-amd64.tar.gz
    

    修改配置文件prometheus.yml采集Nacos metrics数据。配置监控的job以及目标服务器,每一个目标服务器都是一个实例。

    cd prometheus-*
    

    Prometheus配置文件修改

    后台启动Prometheus服务,并出到日志。

    ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &
    

    通过访问http://{ip}:9090/graph可以看到prometheus的采集数据,在搜索栏搜索监控指标,例如:nacos_monitor可以搜索到Nacos数据说明采集数据成功
    数据采集结果

    在查询条件框中输入表达式,进行统计。例如:

    sum(rate(nacos_client_request_seconds_count{url=~'/dialog/slu/nlp/parser', instance=~'39.97.161.102:30315|39.97.161.102:30316'}[1m])) by (method,url,instance)
    

    结果如下图:
    查询图表结果

    8. 安装配置Grafana

    8.1 安装配置

    安装grafana,下载安装包

    wget https://dl.grafana.com/oss/release/grafana-6.5.2.linux-amd64.tar.gz
    tar -zxvf grafana-6.5.2.linux-amd64.tar.gz
    

    修改端口配置,复制一个配置文件,后续修改基于该自定义配置文件修改,不需要修改原始文件。

    cd grafana-6.5.2/conf
    cp sample.ini custom.ini
    vi custom.ini
    

    可以在该配置文件中修改端口号
    在这里插入图片描述

    访问grafana: http://{ip}:3000,用户名密码默认为:admin/admin。
    在这里插入图片描述

    登录时提示修改默认密码,如果不想修改可以跳过。

    8.2 配置数据源

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    8.3 配置监控面板

    监控面板可以自己配置,也可以通过导入json文件来进行修改,推荐使用配置好的json文件,修改起来会非常方便。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    修改后的展示效果如图所示:

    在这里插入图片描述

    注:此处grafana的模板文件是从别处下载的,可以根据需要导入自己的模板文件。

    9. 参考文献

    1. SpringBoot 应用监控踩坑集锦
    2. prometheus docs
    展开全文
  • 本篇介绍了从零开始部署prometheus服务器,使用prometheus监控springboot工程,并且使用grafana仪表盘展示系统项目工程的运行情况,设置grafana的告警规则等。
  • 主要介绍了prometheus监控springboot应用简单使用介绍详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Prometheus监控springBoot项目一、项目服务相关二、配置prometheus 一、项目服务相关 1、SpringBoot整合Prometeus <dependency> <groupId>org.springframework.boot</groupId> <artifactId...

    Prometheus监控springBoot项目

    一、项目服务相关

    1、SpringBoot整合Prometeus

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
    

    2、配置application.properties

    management.metrics.export.prometheus.enabled = true
    management.metrics.export.prometheus.step = 1ms
    management.metrics.export.prometheus.descriptions = true
    management.web.server.auto-time-requests = true
     
    management.endpoint.prometheus.enabled = true
    management.endpoints.web.exposure.include = *
    

    3、在配置类中注入一个bean

    在这里插入图片描述

    @Bean
    MeterRegistryCustomizer<MeterRegistry> configurer(
            @Value("${spring.application.name}") String applicationName) {
        return (registry) -> registry.config().commonTags("application", applicationName);
    }
    

    4、重新启动你的项目

    访问:http://10.8.132.141:8080/actuator/prometheus

    在这里插入图片描述

    二、配置prometheus

    1、来到prometheus对应的服务器,并进入prometheus目录

    在这里插入图片描述

    2、修改prometheus.yml,添加对应的job_name

    在这里插入图片描述

    3、保存配置文件,重启prometheus

    在这里插入图片描述

    展开全文
  • 使用Prometheus监控SpringBoot应用只需要在pom文件添加如下两个依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</...

    编码

    添加依赖

    使用Prometheus监控SpringBoot应用只需要在pom文件添加如下两个依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>

    修改配置

    修改application.properties或者application.yml文件,对外暴露监控端点

    spring.application.name = blog
    management.endpoints.web.exposure.include = prometheus
    management.metrics.tags.application = ${spring.application.name}

    启动应用

    访问http://localhost:50378/actuator/查看开放端点
    file

    访问http://localhost:50378/actuator/prometheus查看Metrics
    file

    之前的文章中都是监控一个实例,这次咱们把端口设置成随机,启动两个实例,等下看看监控效果。

    监控配置

    Prometheus

    修改prometheus.yml,增加监控任务

      - job_name: 'SpringBoot'
        metrics_path: '/actuator/prometheus'
        static_configs:
        - targets: ['10.1.61.10:50378','10.1.61.10:50822']

    重启Prometheus,查看监控状态。
    file

    Grafana

    直接从grafana官网寻找JVM监控DashBoard,然后导入到Grafana中(在环境搭建篇中已经讲述了操作过程,这里就不再赘述)。
    file

    查看效果

    file
    file

    彩蛋

    我们关掉其中一个SpringBoot实例,等2分钟,然后邮箱会收到这样一封告警邮件
    file

    怎么实现的呢?咱们下期有缘再见!

    展开全文
  • prometheus监控springboot

    2021-08-18 14:09:14
    /data/prometheus/conf/prometheus.yml << 'EOF' #springboot自动发现 - job_name: 'srpingboot' metrics_path: '/metrics/prometheus' file_sd_configs: - files: - /etc/prometheus/sd_config/springboot.yaml ...
  • 1. springboot项目中配置prometheus 对于springboot应用,需要以下几个步骤 springboot应用开启endpoint,添加actuator的以来和promethus的依赖 <dependency> <groupId>org.springframework.boot</...
  • 公司项目开发用的springboot,相关的开发开启里springboot的actuator对里面的服务进行监控,数据格式是JSON的,之前开发部门写了对应的监控服务,但是有如下问题:1)不能有历史监控数据的展示2)监控服务进程经常...
  • Prometheus+SpringBoot应用监控全过程详解 1. Prometheus是什么 Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包。一言以蔽之,它是一套开源监控解决方案。 Prometheus主要特性: 多维数据模型,其中...
  • ##prometheus 主动采集 springboot maven dependency <groupId>org.springframework.boot <artifactId>spring-boot-actuator ${spring-boot.version} <groupId>com.moelholm</groupId> <artifactId>...
  • 使io.prometheus.simpleclient系列0.9.0包完成对java应用的监控,但由于该版本simpleclient_spring_boot使用的spring-boot1.5.4,并引用了其中的org.springframework.boot.actuate.endpoint包,该包在2.X版本中被大...
  • 一、springboot2.x暴露健康状况 加入依赖: <!--prometheus监控 https://prometheus.io/docs/introduction/overview/--> <dependency> <groupId>org.springframework.boot</groupId> ...
  • 1.环境 springboot1.5.10.RELEASE ...2.通过micrometer与springboot应用和prometheus的集成 在项目pom.xml中添加如下依赖 <dependency> <groupId>org.springframework.boot&...
  • 关于Prometheus的安装 请看我的其他的文章 或者自行百度 关于被监控项目的配置 引入pom.xml <!--配置Prometheus的监控--> <dependency> <groupId>org.springframework.boot</groupId> &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,767
精华内容 1,106
关键字:

prometheusspringboot

spring 订阅