内容简介:Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。Java Hotspot虚拟机监控指标收集JVM缓冲区监控指标。
简介
Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。
特性
-
强大的多维度数据模型:
- 时间序列数据通过 metric 名和键值对来区分。
- 所有的 metrics 都可以设置任意的多维标签。
- 数据模型更随意,不需要刻意设置为以点分隔的字符串。
- 可以对数据模型进行聚合,切割和切片操作。
- 支持双精度浮点类型,标签可以设为全 unicode。
- 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。
- 易于管理: Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
- 高效:平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。
- 使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。
- 可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端。
- 可以通过服务发现或者静态配置去获取监控的 targets。
- 有多种可视化图形界面。
- 易于伸缩。
架构
相关概念
hotspot 监控
Java Hotspot虚拟机监控指标收集
BufferPoolsExports
JVM缓冲区监控指标。
bufferPool指标是从MBean获取的,BufferPoolsExports构造函数:
public BufferPoolsExports() { try { final Class<?> bufferPoolMXBeanClass = Class.forName("java.lang.management.BufferPoolMXBean"); bufferPoolMXBeans.addAll(accessBufferPoolMXBeans(bufferPoolMXBeanClass)); getName = bufferPoolMXBeanClass.getMethod("getName"); getMemoryUsed = bufferPoolMXBeanClass.getMethod("getMemoryUsed"); getTotalCapacity = bufferPoolMXBeanClass.getMethod("getTotalCapacity"); getCount = bufferPoolMXBeanClass.getMethod("getCount"); } catch (ClassNotFoundException e) { LOGGER.fine("BufferPoolMXBean not available, no metrics for buffer pools will be exported"); } catch (NoSuchMethodException e) { LOGGER.fine("Can not get necessary accessor from BufferPoolMXBean: " + e.getMessage()); } }
- 获取Mean类对象
- 获取可访问的MBean实例并添加到成员变量中
- 获取getName方法Method对象(缓冲池名称)
- 获取getMemoryUsed方法的Method对象(估算的jvm已使用内存大小)
- 获取getTotalCapacity方法的Method对象(预估的总的缓冲池大小)
- 获取getCount方法的Method对象(缓冲池中大致的数量)
collect()
方法返回buffer pool指标收集器收集的所有指标信息。
jvm_buffer_pool_used_bytes
jvm缓冲区使用情况,包括Code Cache(编译后的代码缓存,不同版本的jvm默认大小不同)、PS Old Gen(老年代)、PS Eden Space(伊甸园)、PS Survivor Space(幸存者)、PS Perm Gen(永久代)。
jvm_buffer_pool_capacity_bytes
给定jvm的估算缓冲区大小。这个metrics数据没有收集到,可能和jvm的版本有关,部署服务器使用的是jdk 6。
jvm_buffer_pool_used_buffers
给定jvm的已使用缓冲区大小。这个metrics没有收集到,可能和jvm的版本有关,部署服务器使用的是jdk 6。
ClassLoadingExports
提供jvm类加载指标。
jvm类加载指标数据由 ClassLoadingMXBean
提供。
jvm_classes_loaded
当前jvm已加载类数量。
jvm_classes_loaded_total
从jvm运行开始加载的类的数量,这是一个Counter指标,递增。
jvm_classes_unloaded_total
jvm运行后卸载的类数量,这是一个Counter指标。生产环境一直是0。
GarbageCollectorExports
提供jvm 垃圾收集器指标,指标数据有GarbageCollectorMXBean列表提供。
jvm_gc_collection_seconds
这是一个Summary指标,与Histogram类似,可以对指标数据进行采样。
MemoryAllocationExports
内存分配情况指标,这个指标因 java 版本不兼容而没有做监控。
MemoryPoolsExports
jvm 内存区域指标。
jvm_memory_bytes_used
jvm已用内存区域。
jvm_memory_bytes_committed
Committed (bytes) of a given JVM memory area
jvm_memory_bytes_max
jvm内存区域的最大字节数
jvm_memory_bytes_init
jvm内存区域的初始化字节数
jvm_memory_pool_bytes_used
jvm内存池使用情况
jvm_memory_pool_bytes_committed
Committed bytes of a given JVM memory pool.
jvm_memory_pool_bytes_max
jvm内存池最大数
jvm_memory_pool_bytes_init
jvm内存池初始化数
ThreadExports
jvm线程区域监控。
jvm_threads_current
jvm当前线程数。
jvm_threads_daemon
jvm后台线程数。
jvm_threads_peak
jvm线程峰值
jvm_threads_started_total
jvm总启动线程数量,Counter指标。
jvm_threads_deadlocked
死锁线程数量
jvm_threads_deadlocked_monitor
Cycles of JVM-threads that are in deadlock waiting to acquire object monitors
jvm_threads_state
当前线程的状态
VersionInfoExports
jvm版本信息
jvm_info
版本信息,可以看到生产环境使用的是:1.6.0.29-b11
StandardExports
所有prometheus 客户端共有的标准指标。
process_cpu_seconds_total
用户和系统的总cpu使用时间
process_start_time_seconds
Start time of the process since unix epoch in seconds
process_open_fds
打开的文件描述符数量
process_max_fds
看支持打开的最大文件描述符数量
PromQL
todo
参考资料
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Kubernetes 网络、监控技术全面解读!
- Phoenix解读 | Phoenix源码解读之索引
- Phoenix解读 | Phoenix源码解读之SQL
- Flink解读 | 解读Flink的声明式资源管理与自动扩缩容设计
- 解读阿里巴巴 Java 代码规范,第 2 部分: 从代码处理等方面解读阿里巴巴 Java 代码规范
- websocket 协议解读
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。