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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 使用最新的开源监控系统,监控springboot应用程序

在微服务体系当中,监控是必不可少的。当系统环境超过指定的阀值以后,需要提醒指定的运维人员或开发人员进行有效的防范,从而降低系统宕机的风险。在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即可

目录
相关文章
|
5月前
|
Prometheus 监控 Cloud Native
Prometheus配置docker采集器
本文介绍了如何使用 Prometheus 监控 Docker 容器,涵盖环境准备、配置文件编写及服务启动等步骤。首先确保安装 Docker 和 Docker Compose,接着通过 `docker-compose.yml` 配置 Prometheus 和示例应用。创建 `prometheus.yml` 指定数据采集目标,最后用 `docker-compose up -d` 启动服务。文章还展示了甘特图和类图,帮助理解服务状态与关系,助力提升系统可靠性和可维护性。
169 11
|
4月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
338 79
|
5月前
|
监控 Java Go
无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测
本文将介绍一种基于 Docker 多阶段构建的无侵入 Golang 应用观测方法,通过此方法用户无需对 Golang 应用源代码或者编译指令做任何改造,即可零成本为 Golang 应用注入可观测能力。
298 85
|
5月前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana(docker安装)
本文档详细介绍了如何使用Docker容器快速部署Prometheus监控系统和Grafana数据可视化平台。该方案适用于需要快速搭建监控环境的开发测试场景,具备部署简单、资源占用低、易于维护等特点。
|
9月前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
479 64
|
8月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
117 23
|
8月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
148 25
|
8月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
138 22
|
9月前
|
存储 数据采集 Prometheus
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
442 20
|
9月前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana监控Linux主机
通过本文的步骤,我们成功地在 Linux 主机上使用 Prometheus 和 Grafana 进行了监控配置。具体包括安装 Prometheus 和 Node Exporter,配置 Grafana 数据源,并导入预设的仪表盘来展示监控数据。通过这种方式,可以轻松实现对 Linux 主机的系统指标监控,帮助及时发现和处理潜在问题。
724 7