简介
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
参考资料
Prometheus 入门与实践
发表回复