原文作者:青蛙小白

原文地址:Prometheus监控实践:使用Prometheus监控Java应用

目录

1、Prometheus JVM Client

2、Prometheus的服务发现

3、Grafana Dashboard和告警规则


之前在《Prometheus监控实践:Kubernetes集群监控》一本中总结了我们目前基于Prometheus对Kubernetes集群的监控,除了监控Kubernetes集群本身的关键指标之外,也对部署在Kubernetes集群上应用的状态做了监控。 对于Kubernetes集群上Pod, DaemonSet, Deployment, Job, CronJob等各种资源对象,我们通过kube-state-metrics作为Prometheus的exporter完成了对这些Kubernetes资源对象的监控。而为了使监控深入到应用的内部,就需要应用自身暴露作为Exporter暴露监控指标,这就和应用的开发语言和技术框架紧密相关了。我们目前部署在Kubernetes上的微服务主要是由Go和Java两种语言开发的,本篇将总结一下目前我们使用Prometheus对Java应用的监控实践。

1、Prometheus JVM Client

Prometheus提供了一个client_java项目可以很方便的将JVM和自定义的指标暴露出来。目前我们主要用到了这个项目中的如下几个库:

  • simpleclient_hotspot
  • simpleclient_spring_web
  • simpleclient_spring_boot
  • simpleclient_httpserver

使用Java可以开发以下两种服务:

1)第一种是使用spring-boot-starter-web开发的HTTP Restful API

这类服务要集成Prometheus十分简单,只需要在项目中依赖管理如引入simpleclient_hotspotsimpleclient_spring_boot

compile 'io.prometheus:simpleclient_spring_boot:0.1.0'
compile 'io.prometheus:simpleclient_hotspot:0.1.0'

simpleclient_spring_boot中的io.prometheus.client.spring.boot.PrometheusEndpointConfiguration会将prometheus exporter注册为Spring Boot Actuator的enpoint。启动这个配置只需在spring boot项目的Appication类上加上@EnablePrometheusEndpoint的注解,例如:

@EnablePrometheusEndpoint
@EnableSpringBootMetricsCollector
@SpringBootApplication
public class BootApplication {@PostConstructpublic void init() {DefaultExports.initialize();}......

当然spring boot的配置文件中需要配置如何暴露这个endpoint:

management:port: 8088security:enabled: falsehealth:defaults:enabled: false
endpoints:enabled: falseprometheus:enabled: truepath: /prometheushealth:enabled: truepath: /health

此时http://:8088/prometheus这个端点就是这个Java应用暴露的监控指标。

2)第二种是使用最基本的spring-boot-starter和其他starter开发的rpc服务(thrift,gRPC等)

本身不包含嵌入的tomcat,而Prometheus的exporter需要以HTTP暴露监控指标。需要在项目中依赖管理如引入simpleclient_hotspotsimpleclient_httpserver

compile 'io.prometheus:simpleclient_httpserver:0.1.0'
compile 'io.prometheus:simpleclient_hotspot:0.1.0'

simpleclient_httpserver库包含一个简单的httpserver,使用其完成监控指标的暴露:

DefaultExports.initialize();
new io.prometheus.client.exporter.HTTPServer.HTTPServer(8088);

http://:8088这个端点就是这个Java应用暴露的监控指标。

2、Prometheus的服务发现

当Java应用中集成了Prometheus JVM Client后,就可以以HTTP的形式暴露监控指标。 如果Java应用以Pod的形式部署在Kubernetes集群上,为了使Kubernetes集群中的Prometheus可以发现Pod暴露的HTTP监控端点,还需要在Kubernetes manifest文件中加入下面的annotation:

---
kind: Deployment
apiVersion: apps/v1beta2
metadata:labels:......name: xxx-svcnamespace: xx
spec:......selector:matchLabels:app: xxx-svctemplate:metadata:labels:app: xxx-svcannotations:prometheus.io/scrape: 'true'prometheus.io/path: /prometheusprometheus.io/port: '8088'spec:containers:......

这样Prometheus中配置的job kubernetes-pods就可以自动发现服务暴露的监控端点:

- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]action: replaceregex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2target_label: __address__- action: labelmapregex: __meta_kubernetes_pod_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_pod_name]action: replacetarget_label: kubernetes_pod_name

3、Grafana Dashboard和告警规则

关于Java应用中JVM的监控的Dashboard,目前还没有在网上找到太好的,下图是目前我们自己画的一个,收集到了监控数据后,告警规则根据需要配置就可以了。

同系列文章推荐阅读:

监控工具—Prometheus—基础介绍

监控工具—Prometheus—安装部署

监控工具—Prometheus—监控Java程序

监控工具—Prometheus—监控Redis

监控工具—Prometheus—监控Java程序相关推荐

  1. prometheus监控java程序

    可参考链接,需找开发商量jmx端口暴露方式 https://www.jianshu.com/p/8a5e681b18ce 或者 http://www.mamicode.com/info-detail- ...

  2. 监控工具—Prometheus—监控Redis

    原文作者:wyl9527 原文地址:Grafana Prometheus系统监控Redis服务 目录 1.下载redis_exporter安装包 2.解压安装 3.systemd管理redis_exp ...

  3. Prometheus 监控 Java 应用

    Prometheus 监控 Java 应用 Prometheus 监控 Java 应用有两种方式:一种是使用官方提供的jar包,然后嵌入到应用中.这种方式一般都是新项目.我认为也是最合适的一种.不过这 ...

  4. prometheus监控java项目(jvm等):k8s外、k8s内

    前言 虽然可以使用jvisualvm之类的工具监控java项目,但是集群环境下,还是捉襟见肘,下面介绍如何用主流的prometheus来监控java项目. java项目配置 在pom.xml中添加依赖 ...

  5. 使用jvisualvm的jstatd方式远程监控Java程序

    使用Java自带的jvisualvm调试Java程序,可以查看CPU.内存.类及线程等信息,还可以进行Dump,无疑是一个利器 由于客户端是Windows.服务端是Linux,并且是最小安装的Linu ...

  6. prometheus监控java应用的jvm指标

    在k8s环境中我们有很多的java应用,需要监控其性能我们可以通过集成jmx的客户端,然后通过promethues的自动发现来实现监控数据的获取. promethues的部署he相关配置可参考:pro ...

  7. 监控工具—Prometheus—安装部署

    原文作者:虎纠卫 原文地址:监控神器-普罗米修斯Prometheus的安装 目录 步骤1:安装go 语言环境 步骤2:在监控服务器上安装prometheus 步骤3:在系统层用作系统监控 步骤4:安装 ...

  8. 监控工具—Prometheus—基础介绍

    原文作者:IT有意思 原文地址:Prometheus(普罗米修斯)--适合k8s和docker的监控系统 目录 1.介绍 2.监控原理 3.监控指标 4.系统架构 5.功能用途 6.面临挑战 1.介绍 ...

  9. java程序怎么监控错误_Fundebug上线Java程序错误监控啦!

    原标题:Fundebug上线Java程序错误监控啦! 摘要: Fundebug竭诚为你的Java程序保驾护航. 理论上讲,BUG是无法避免的,实时监控可以帮助开发者第一时间发现BUG,及时修复BUG, ...

最新文章

  1. 《JavaScript框架设计》——1.3 数组化
  2. 如何用css让一个容器水平垂直居中
  3. Nginx四层负载均衡模块添加
  4. 掌握JVM 运行时数据区,其实不是很难,加薪也是要技巧可言的!!!
  5. Oracle中临时表的深入研究
  6. 56PY宿迁味道这么可口
  7. java wait 释放_Java:wait()从同步块释放锁
  8. Module not found: Error: Can‘t resolve ‘sass-loader‘ in...
  9. 分享非常有用的Java程序(关键代码)(七)---抓屏程序
  10. python与excel-超简单:用Python让Excel飞起来
  11. 基于OptiSystem的波分+时分复用混合光网络系统
  12. 读书篇:《细说PHP》四、数组
  13. Python使用selenium+PIL实现网页长屏截图
  14. JS中的List转Map
  15. 小程序引入外部icon图标
  16. java高级实训输出张三李四_假设某数据库表中有一个姓名字段,查找姓名为张三和李四的条件是...
  17. 5G应用加速落地,酷雷曼VR直播应时而生。
  18. 《数据结构教程(李春葆主编 第五版)》第一章源代码 + 《数据结构》上机实验(第九章) —查找
  19. EXCEL数组公式(2)---数组公式的基础概念等
  20. 无法更新运行时文件夹共享状态_关于iPadOS 13.4更新的5件事

热门文章

  1. 手工编程:hello world
  2. 封装JDBC事务操作,执行存储过程测试
  3. 15个热门的编程趋势及15个逐步走向衰落的编程方向
  4. PHP 算法之 -- 计算器设计
  5. 解决每次从cmd进入sqlplus,都得重新设置pagesize、linesize的问题
  6. springMvc json 参数
  7. iOS开发的一些奇巧淫技2
  8. 安装 ibm-java-x86_64-sdk-6.0-9.3.x86_64.rpm 的三步骤
  9. PostgreSQL的 initdb 源代码分析之二十三
  10. WCF面向服务应用程序系列之十:绑定-标准绑定(HTTP/TCP)