文档章节

Docker+Prometheus+Grafana监控SpringBoot健康信息

boonya
 boonya
发布于 05/07 15:21
字数 1428
阅读 41
收藏 4

在微服务体系当中,监控是必不可少的。当系统环境超过指定的阀值以后,需要提醒指定的运维人员或开发人员进行有效的防范,从而降低系统宕机的风险。在CNCF云计算平台中,Prometheus+Grafana是比较通用的解决方案,在SpringBoot2.0以后metrics默认与micrometer集成,而micrometer有关于Prometheus的MeterRegistry规范的实现,因此我们通过Micrometer这个桥梁能将SpringBoot的监控数据与Prometheus展示出来。然后通过Grafana提供的UI界面进行数据的实时展示。

architecture

Prometheus从对应的节点地址获取度量数据并在本地存储所有数据样例根据相关规则将现有数据聚合并记录新的时间序列(或者生成警报)。可以使用Grafana或其他API消费者来可视化收集的数据。

1. 编写SpringBoot项目并用docker启动

1.1 gradle依赖

     compile 'org.springframework.boot:spring-boot-starter-actuator'
     compile 'io.micrometer:micrometer-registry-prometheus:latest.release'
     compile 'io.micrometer:micrometer-core:1.1.0'

1.2 开放prometheus的端点

application.properties中编辑如下配置

management.endpoints.web.exposure.include=prometheus,health,info

1.3 配置与grafana集成所需的bean

    /**
         * 为了和grafana集成,因此必须配置这个bean
         * @return
         */
        @Bean
        MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
            return registry -> registry.config().commonTags("application", "MYAPPNAME");
        }

具体可以参考:micrometer

1.4 编写docker-compose.yml文件启动spring-boot应用

docker-compose.yml

    version: '3'
    services:
      application:
        image: java
        working_dir: /apps
        volumes:
          - "${project.home}/build/libs:/apps"
        container_name: app
        networks:
          - node1
        hostname: application
        entrypoint: java -jar spring-boot-project-0.0.1-SNAPSHOT.jar
        ports:
          - "8080:8080"
    networks:
      node1: 

当启动完毕后,我们可以运行如下命令来查看,是否有对应的信息输出:

    curl -G http://localhost:8080/actuator/prometheus

当这里得到如下结果时,证明我们的SpringBoot项目提供好与prometheus所需的数据了:

    # HELP tomcat_global_request_max_seconds  
    # TYPE tomcat_global_request_max_seconds gauge
    tomcat_global_request_max_seconds{application="spring-boot",name="http-nio-8080",} 0.0
    # HELP tomcat_sessions_created_sessions_total  
    # TYPE tomcat_sessions_created_sessions_total counter
    tomcat_sessions_created_sessions_total{application="spring-boot",} 0.0
    # HELP jvm_gc_live_data_size_bytes Size of old generation memory pool after a full GC
    # TYPE jvm_gc_live_data_size_bytes gauge
    jvm_gc_live_data_size_bytes{application="spring-boot",} 1.9078616E7
    # HELP process_files_open_files The open file descriptor count
    # TYPE process_files_open_files gauge
    process_files_open_files{application="spring-boot",} 38.0
    # HELP tomcat_threads_current_threads  
    # TYPE tomcat_threads_current_threads gauge
    tomcat_threads_current_threads{application="spring-boot",name="http-nio-8080",} 10.0
    # HELP jvm_gc_max_data_size_bytes Max size of old generation memory pool
    # TYPE jvm_gc_max_data_size_bytes gauge
    jvm_gc_max_data_size_bytes{application="spring-boot",} 3.49700096E8
    # HELP tomcat_servlet_request_seconds  
    # TYPE tomcat_servlet_request_seconds summary
    tomcat_servlet_request_seconds_count{application="spring-boot",name="default",} 0.0

2 安装Prometheus

我们可以借助于docker进行安装,在这里由于springboot项目我也是使用docker进行部署的,因此我们保证Prometheus的容器与SpringBoot的容器保证在同一个网络下:

    docker run --name prom --link app:app --net spring-boot-project_node1 --hostname prom -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

安装完毕后,我们编辑/tmp/prometheus.yml文件进行配置:

    global:
      scrape_interval:     15s
      evaluation_interval: 15s
    
    rule_files:
      # - "first.rules"
      # - "second.rules"
    
    scrape_configs:
      - job_name: 'spring'
        metrics_path: '/actuator/prometheus'
        static_configs:
          - targets: ['application:8080']

在这里我们指定一个job,这个job会去指定的地址获取监控数据,那么在这里targets指定的是我们SpringBoot项目的actutator的监控地址,application对应的是springboot容器的hostname。

启动以后,我们运行http://localhost:9090 可以访问Prometheus的界面:

3FEC9656_C230_4545_9AB9_59BBE455C565

F1E50B67_CBE1_4114_9CDE_DC86602E7CAB

当出现这种界面就说明 Prometheus已经可以监控到Springboot的提供的数据了

3 安装Grafana

虽然Prometheus提供的有一个简单的UI界面,但是使用起来不那么方便同时也并不好看。不过,我们可以利用Grafana来提供更直接更美观的UI展示界面。同时,Grafana能够提供多种数据源,让我们进行不同类型的中间件或服务器监控。官网地址。同样我们使用docker来构建grafana容器。grafana所有的配置都在conf/grafana.ini里进行设置。不过它能通过docker的环境变量参数-e进行覆盖,它的基本格式为:GF_<SectionName>_<KeyName>。例如:

    $ docker run \
      -d \
      -p 3000:3000 \
      --name=grafana \
      --net=spring-boot-project_node1
      --link=prom
      -e "GF_SERVER_ROOT_URL=http://grafana.server.name" \
      -e "GF_SECURITY_ADMIN_PASSWORD=secret" \
      grafana/grafana

当启动完毕后,我们可以访问http://localhost:3000
可以访问到对应的界面,其默认情况下都会跳转至登录界面,我们可以在登录界面上输入用户名admin与密码admin,这样会以管理员身份进行登录。接下来我们需要创建一个prometheus的数据源:

datasource

此处我们设置prometheus的地址,这里我的设置为http://prom:9090 用以连接prometheus的监控(注意prom是docker容器prometheus的hostname),剩余的一些设置比如说Auth,Advanced HTTP Settings请按需进行配置。此时我们需要在这个地址里下一个用于监控micrometer的Dashboard:
micrometer
我们需要下载这个dashboard对应的json数据:
download

然后我们在grafana上传json脚本:

upload

当导入成功后我们即可以展示出如下监控界面:
grafana

3.1 报警信息配置

在这里我以qq邮箱为例,首先我们必须开启smtp许可,在这里我们会收到安全码用于将来的密码设置。那么我们可以在docker启动容器时设置环境变量来配置邮件服务的信息:

docker run
-p 3000:3000
--env GF_SMTP_ENABLED=true
--env GF_SMTP_HOST=smtp.qq.com:465
--env GF_SMTP_USER=xxxx(用户名)
--env GF_SMTP_PASSWORD=(安全码)
--env GF_SMTP_SKIP_VERIFY=true
--env GF_SMTP_FROM_ADDRESS=xxxxx@qq.com
--name grafana
grafana/grafana:latest 

相关配置我们可以参考:地址,当我们启动成功以后,我们可以参考如下界面进行配置:
notification
收到测试邮件后,我们需要设置监控值,在这里我以内存监控举例:
alert_details
同时我们需要配置发送邮件具体内容:
notify

最后我们保存我们设置的Dashboard即可

本文转载自:https://yq.aliyun.com/articles/664698

boonya
粉丝 76
博文 307
码字总数 61606
作品 0
海淀
高级程序员
私信 提问
基于Docker+Prometheus+Grafana监控SpringBoot健康信息

在微服务体系当中,监控是必不可少的。当系统环境超过指定的阀值以后,需要提醒指定的运维人员或开发人员进行有效的防范,从而降低系统宕机的风险。在CNCF云计算平台中,Prometheus+Grafana是...

融科聂晨
2018/11/05
0
0
《Spring Boot 实战:从0到1》第2章 快速开始Hello World

第2章 快速开始Hello World 大约20年前,程序员们使用“企业级Java Bean”(EJB)开发企业应用,需要配置复杂的XML。在二十世纪初期,新兴Java技术——Spring,横空出世。使用极简XML和POJO(...

程序员诗人
2017/08/01
0
0
不学无数——SpringBoot入门Ⅷ

SpringBoot--Actuator 1. 初识Actuator 在开发过程中,项目被放置到生产服务器上运行时,有可能需要我们全方位的监控应用服务的运行情况。此时SpringBoot提供了Actuator模块进行监控和管理 ...

不学无数的程序员
2018/08/22
0
0
极速上手进阶大神的 5 门 SpringBoot 课程

SpringBoot 因其大大简化了配置。可快速启动一个应用的开发环境,把时间和精力更多的投入到实现业务需求上去。成为了Java 服务器端近几年特别火爆的框架。 如此火爆的技术,怎能不抢先了解一...

实验楼
08/16
0
0
【SpringBoot专题】监控健康状况

前言 《【SpringBoot专题】快速体验》 《【SpringBoot专题】多环境配置及swagger》 《【SpringBoot专题】Java平台下日志的那些事》 《【SpringBoot专题】统一异常处理和统一数据返回》 想一想...

张丰哲
2018/09/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot集成elasticsearch-rest-high-level-client的坑

我使用的是Elasticsearch7.2.0,由于官网上推荐使用elasticsearch-rest-high-level-client端集成在springboot所以尝试爬坑。 首先直接引入官网的配置文件 <dependency> <grou...

MuzzyXu
1分钟前
2
0
ECMAScript运算符之《等性运算符》

等性运算符一般用在判断两个变量是否相等的运算。在处理原始值时,这种运算相当简单,涉及对象,任务就稍有点复杂。 性运算符分: 1、等号和非等号用于处理原始值 2、全等号和非全等号用于处...

专注的阿熊
4分钟前
0
0
ssh-keygen -t rsa -C "注释内容,一般为邮件地址",生成的公钥后面会带上注释,这个注释有什么用处呢?

ssh-keygen -t rsa -C "注释内容,一般为邮件地址",生成的公钥后面会带上注释,这个注释有什么用处呢? donhui 发布于 2015/11/12 16:47 阅读 5K+ 收藏 0 答案 1 补充话题 OpenSSH 为什么8...

linjin200
6分钟前
0
0
Proxy用法——让我们创建一个API代理器

什么是Java Proxy? MDN对Proxy 的定义是: Proxy对象用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等)。 通俗的将,Proxy对象是目标对象的一个代理器,任何对目标对象的...

AiChinaTech
9分钟前
0
0
Nginx--面试基础必会

文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 最近一直在更新关于Nginx的系列文章,终于将Nginx的几个关键知识点讲的差不多了。本篇作为Ngi...

程序猿周先森
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部