IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> prometheus监控JAVA应用(JVM等)并自定义监控指标 -> 正文阅读

[Java知识库]prometheus监控JAVA应用(JVM等)并自定义监控指标


使用docker搭建服务监控prometheus+node_export+grafana的过程详解文章中我们已经完成了使用docker搭建prometheus+node_export+grafana监控环境并展示了最终的监控效果图,有兴趣的可以去阅读参考一下,接下来我们将进入下一步:使用Prometheus+Grafana监控注册在Nacos中的服务,我们来看看会有什么样的监控效果吧!

主体思路

要想使用Prometheus来监控注册在Nacos中的服务,怎么做呢?是不是把Nacos的URL作为Prometheus一个job配置项就可以呢?事实并非如此,能够通过如此方便的配置就可以实现监控所有服务的,现在只有Consul可以做到,因为Prometheus官方提供Consul为注册中心的配置方式,配置后可自动获取Consul中所有实例的信息并进行监控,那我们怎么办呢?有的同学可能就想到了:那我们是不是也可以在服务中以相同的接口给Prometheus返回服务信息,将自己伪装成一个Consul服务器节点,这样就可以使用Prometheus配置Consul那样来配置我们的假的Consul服务器节点呢?
有了这样的思路,下面我们要做的就是如何做到将自己伪装成一个Consul服务器节点。

将Nacos伪装成Consul

我们知道Prometheus只支持Consul的接口,不支持Nacos的接口,但是Nacos是可以取到这些信息的,所以我们需要一个中间层来将Nacos的数据转换为Prometheus可以识别的。在GitHub上找到了大佬开源了Eureka的实现方式,也有大佬提供了Nacos的方式,哈哈,这个时候就是体现我们『拿来主义』的时候了,项目的开源地址:Nacos Consul Adapter,有兴趣的可以去下载下来学习学习。

快速开始

在Spring Cloud Gateway引入jar包

可以是服务中任意的节点,在Spring Cloud Gateway中引入jar包的原因是它基于Reactor,如果不是使用Spring WebFlux则还需要引入额外的包。

<dependency>
    <groupId>io.github.chen-gliu</groupId>
    <artifactId>nacos-consul-adapter</artifactId>
    <version>version</version>
</dependency> 

如果拉取不到包,可以在setting文件中添加如下配置:

<mirror>
	<id>mvnrepository</id>
	<mirrorOf>*</mirrorOf>
	<name>仓库</name>
	<url>https://repo1.maven.org/maven2</url>
</mirror>

Prometheus配置

在Prometheus中添加如下配置:

- job_name: nacos-prometheus
   scrape_interval: 2s
   metrics_path: '/actuator/prometheus'
   static_configs:
   consul_sd_configs:
   - server: '192.168.0.4:18016'
     services: []

注意:-targets: 后面是引入了nacos-consul-adapter.jar包的实例IP+端口,记得换成自己的实例IP和端口。如图:
在这里插入图片描述
这个配置表示:prometheus每隔2秒钟从http://192.168.0.4:18016/actuator/prometheus这个url拉取指标数据。

在每个Spring Cloud实例中的配置

引入Prometheus监控包

<dependency>
   <groupId>io.micrometer</groupId>
   <artifactId>micrometer-registry-prometheus</artifactId>
   <version>1.5.1</version>
</dependency>

暴露每个应用的指标接口

在每个需要监控的项目里面加上:

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

在项目启动类加上这个bean配置之后,别忘记在配置文件加上management.endpoints.web.exposure.include=*这些配置来开启 Actuator 服务,因为Spring Boot Actuator 会自动配置一个 URL 为 /actuator/Prometheus 的 HTTP 服务来供 Prometheus 抓取数据,不过默认该服务是关闭的,该配置将打开所有的 Actuator 服务,完成之后,我们再启动服务,然后在浏览器访问http://192.168.0.4:6601/actuator/prometheus,就可以看到服务的一系列不同类型 metrics 信息,例如 http_server_requests_seconds_count、jvm_threads_states_threads、jvm_classes_loaded_classes、jvm_memory_max_bytes、jvm_gc_pause_seconds summary、jvm_gc_memory_promoted_bytes_total counter 等等。在这里插入图片描述

查看Prometheus中监控到的服务

重启prometheus容器,访问http://192.168.0.4:9090/targets
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
状态为UP表明prometheus已经成功获取到了这个target的数据,也就是说我们配置成功了。
我们也可以到graph中去根据关键字搜索一些统计数据,如下:在这里插入图片描述
上图就是根据关键字:jvm_threads_states_threads在prometheus中搜索到的相关统计数据的图表展示,也可以点击Table标签页直接看数字。

配置grafana并展示一些监控界面

前面搭建监控环境的时候已经介绍过怎么通过import导入dashboard了,这里就不在赘述了,有需要的,可以直接去看一下。
我们从grafana官方dashboards里面找到我们要import的模板ID:10280
,直接操作导入即可,我们来看一下导入后的结果:
在这里插入图片描述
下面是JVM相关的监控数据:
在这里插入图片描述
GC情况:在这里插入图片描述
日志统计分析数据:
在这里插入图片描述
等等,还有很多,感兴趣的同学,可以操作一下。

自定义监控指标并展示到 Grafana

虽然spring-boot-actuator集成了Micrometer来提供的默认监控项,覆盖 JVM 各个层间的监控,配合 Grafana Dashboard 模板基本可以满足我们日常对 Java 应用的监控,当然,它也支持自定义监控指标,实现各个方面的监控,例如统计访问某一个 API 接口的请求数,统计实时在线人数、统计实时接口响应时间等功能,而这些都可以通过使用Micrometer来实现,那么接下来,我们来演示下如何自定义监控指标并展示到 Grafana 上。

监控所有API请求次数

监控请求次数可以使用 Counter 计数器来处理,为了测试,我们就直接在Controller类中进行累计,项目中,可以使用一个AOP切面,通过切面注入可以做到统计所有请求记录,代码:

@RestController
@RequestMapping("/gateway/metrics")
public class GrafanaTestController {
    @Autowired
    private MeterRegistry meterRegistry;
    private Counter counter;

    @PostConstruct
    public void init() {
        Tags tags = Tags.of("common", "test");
        // 公共标签
        meterRegistry.config().commonTags(tags);
        counter = Counter.builder("metrics.request.common").register(meterRegistry);
    }

    /**
     * 订单请求测试
     */
    @GetMapping("/order/{appId}")
    public RestResponse<String> orderTest(@PathVariable("appId") String appId) {
        counter.increment();
        return RestResponse.ok(appId);
    }

    /**
     * 商品请求测试
     */
    @GetMapping("/product/{appId}")
    public RestResponse<String> productTest(@PathVariable("appId") String appId) {
        counter.increment();
        return RestResponse.ok(appId);
    }
}

然后分别访问接口/order/{appId}6次,访问接口/product/{appId}6次,然后我们在 Grafana Dashboard 上添加一个新的 Panel 并添加 Query 查询,最后图形化展示出来,这个就不截图赘述了,有兴趣的自己试一下吧。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:04:09  更:2022-05-05 11:04:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:04:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码