Prometheus jvm_exporter监控zookeeper

本文详细介绍如何使用Prometheus和jvm_exporter监控Zookeeper集群,包括配置jmx_exporter,编写zookeeper.yml规则文件,修改zkServer.sh,以及在Prometheus中添加Zookeeper为监控目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Zookeeper

Prometheus 监控zookeeper使用jvm_exporter来采集数据,jvm_exporter是一个可以配置抓取和暴露JMX目标的mBeans的收集器。

下载javaagent
cd /usr/local/zookeeper/prometheus
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar
编写zookeeper.yml文件
rules:
  # replicated Zookeeper
  - pattern: "org.apache.ZooKeeperService<name0=ReplicatedServer_id(\\d+)><>(\\w+)"
    name: "zookeeper_$2"
  - pattern: "org.apache.ZooKeeperService<name0=ReplicatedServer_id(\\d+), name1=replica.(\\d+)><>(\\w+)"
    name: "zookeeper_$3"
    labels:
      replicaId: "$2"
  - pattern: "org.apache.ZooKeeperService<name0=ReplicatedServer_id(\\d+), name1=replica.(\\d+), name2=(\\w+)><>(\\w+)"
    name: "zookeeper_$4"
    labels:
      replicaId: "$2"
      memberType: "$3"
  - pattern: "org.apache.ZooKeeperService<name0=ReplicatedServer_id(\\d+), name1=replica.(\\d+), name2=(\\w+), name3=(\\w+)><>(\\w+)"
    name: "zookeeper_$4_$5"
    labels:
      replicaId: "$2"
      memberType: "$3"
  # standalone Zookeeper
  - pattern: "org.apache.ZooKeeperService<name0=StandaloneServer_port(\\d+)><>(\\w+)"
    name: "zookeeper_$2"
  - pattern: "org.apache.ZooKeeperService<name0=StandaloneServer_port(\\d+), name1=InMemoryDataTree><>(\\w+)"
    name: "zookeeper_$2"
修改bin/zkServer.sh文件
if [ "x$SERVER_JVMFLAGS"  != "x" ]
then
    JVMFLAGS="$SERVER_JVMFLAGS $JVMFLAGS"
fi

## 新增javaagent
JMX_DIR="/usr/local/zookeeper/prometheus"
JVMFLAGS="$JVMFLAGS -javaagent:$JMX_DIR/jmx_prometheus_javaagent-0.3.1.jar=9505:$JMX_DIR/zookeeper.yml"

if [ "x$2" != "x" ]
then
    ZOOCFG="$ZOOCFGDIR/$2"
fi

 

验证
curl localhost:9505/metrics
加入Prometheus

编辑prometheus.yml文件,添加内容

- job_name: 'zookeeper'
    static_configs:
    - targets: ['172.16.10.62:9505']

重启prometheus,然后在Prometheus页面中的Targets中就能看到新加入的zookeeper

 

转载于:https://www.cnblogs.com/bigberg/p/10118555.html

#config.yaml jmxUrl: service:jmx:rmi:///jndi/rmi://10.20.2.200:1099/jmxrmi lowercaseOutputName: true rules: # JVM 内存 # 匹配 HeapMemoryUsage - pattern: 'java.lang<type=Memory>' attrNameSnakeCase: true attrs: HeapMemoryUsage: - used - committed - max NonHeapMemoryUsage: - used - committed - max # GC 次数和时间 # - pattern: 'java.lang<type=GarbageCollector, name=(.+)><>(Count|Time)' # name: "jvm_gc_$2" # labels: # gc: "$1" # 包括更多属性 # 1. 采集 CollectionCount 和 CollectionTime(标准 GC 指标) - pattern: 'java.lang<type=GarbageCollector,name=(.+)><>(CollectionCount|CollectionTime)' name: jvm_gc_collection_seconds valueName: "<attribute>" labels: gc: "$1" attrNameSnakeCase: true # 2. 单独采集 LastGcInfo.duration(最后一次 GC 耗时) #- pattern: 'java.lang<type=GarbageCollector, name=(.+)><>LastGcInfo.duration' # name: jvm_gc_last_duration_seconds # valueName: value # labels: # gc: "$1" # 3. (可选)采集 LastGcInfo.startTime(最后一次 GC 开始时间) # 注意:单位是毫秒,Prometheus 通常用秒,所以要除以 1000 #- pattern: 'java.lang<type=GarbageCollector, name=(.+)><>LastGcInfo.startTime' # name: jvm_gc_last_start_time_seconds # valueFactor: 0.001 # 毫秒 → 秒 # valueName: value # labels: # gc: "$1" # 线程信息 - pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount|DaemonThreadCount|PeakThreadCount)' name: "jvm_threads_$1" # 类加载 - pattern: 'java.lang<type=ClassLoading><>(LoadedClassCount|UnloadedClassCount)' name: "jvm_classes_$1" # CPU 使用率 - pattern: 'java.lang<type=OperatingSystem><>(ProcessCpuLoad|SystemCpuLoad)' name: "jvm_os_cpu_load" valueFactor: 100 # 转为百分比
最新发布
08-06
<think>首先,用户的问题是:“我想配置JMX Exporter以采集JVM监控指标”,并引用了JMX Exporter的配置。用户提供了几个引用,我需要参考这些引用来构建我的回答。 用户引用的内容包括: - [^1]: 关于JMX连接的host和port。 - [^2]: 一个nodemanager.yaml的示例配置,包括jmxUrl和ssl设置。 - [^3]: 关于JMX监控的局限性,以及Zookeeper监控的替代方案。 - [^4]: 描述如何通过启动脚本来启用JMX exporter端口。 - [^5]: 一个集群监控的配置示例,包括hostPort和jmxUrl。 用户的核心需求是配置JMX Exporter来收集JVM监控指标。所以,我需要提供一个清晰的、步骤性的指南,解释如何配置JMX Exporter。 关键点: - JMX Exporter是一个Prometheus exporter,用于从Java应用程序中收集JMX指标。 - 配置通常涉及创建一个YAML文件,定义要收集的指标。 - 需要启动应用程序时指定JMX参数,以便JMX Exporter可以连接到它。 从引用中提取有用信息: - 引用[2]和[5]提供了配置示例。 - 引用[2]: `jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1237/jmxrmi` - 引用[5]: `hostPort: master:1234` 或 `jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi` - 引用[4]提到启动脚本:先启动程序,然后通过另一个脚本开启Prometheus JMX端口。 - 引用[3]讨论了JMX监控的局限性,但用户明确要求JMX Exporter,所以我应该专注于那个。 标准配置步骤: 1. 下载JMX Exporter JAR文件。 2. 创建一个配置文件(YAML格式),定义要收集的指标。 3. 在启动Java应用程序时,添加JMX参数来启用JMX Exporter。 对于JVM监控指标,JMX Exporter有一个内置的配置,可以收集基本的JVM指标,比如内存使用、GC、线程等。用户可以使用这个默认配置,或者自定义。 配置文件的常见内容: - 指定JMX连接细节(如hostPort或jmxUrl)。 - 定义规则来收集特定MBean的指标。 从引用中,我看到配置项如: - `hostPort`: 指定主机和端口。 - `jmxUrl`: 完整的JMX服务URL。 - `ssl`: 是否使用SSL。 - `lowercaseOutputName`: 是否将指标名转换为小写。 回答结构: - 先解释JMX Exporter是什么。 - 然后提供配置步骤。 - 给出一个示例配置文件。 - 解释如何启动应用程序。 - 最后,生成相关问题。 确保回答是中文的,因为系统指令要求使用中文。 引用标识:在回答中引用段落时,在末尾自然地添加引用标识,如[^1]。用户提供了引用,所以我应该引用它们,但不要过度;只在必要时引用。 生成相关问题:在回答结束时,添加一个"相关问题"部分。 完整回答结构: 1. 介绍JMX Exporter和配置目的。 2. 步骤1: 下载JMX Exporter。 3. 步骤2: 创建配置文件。 - 提供示例配置。 4. 步骤3: 启动Java应用程序。 5. 验证配置。 6. 相关问题。 示例配置: 基于引用[5],我可以给出一个简单的配置: ```yaml startDelaySeconds: 0 hostPort: localhost:1234 # jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi ssl: false lowercaseOutputName: false lowercaseOutputLabelNames: false ``` 对于JVM指标,JMX Exporter有一个默认的配置收集器。用户可以使用`collectDefaultJvmMetrics: true`来启用它。 在配置文件中,可以添加: ```yaml rules: - pattern: ".*" ``` 或者更具体地收集JVM指标。 标准做法是使用内置的JVM收集器。 在JMX Exporter的文档中,推荐使用`collectDefaultJvmMetrics`。 所以,在配置文件中: ```yaml startDelaySeconds: 0 hostPort: localhost:1234 ssl: false lowercaseOutputName: false lowercaseOutputLabelNames: false rules: - pattern: ".*" ``` 但为了效率,最好只收集需要的指标。不过对于初学者,使用默认或通配符即可。 启动命令: 在Java启动参数中添加: ``` -javaagent:/path/to/jmx_prometheus_javaagent.jar=1234:/path/to/config.yaml ``` 其中1234是JMX Exporter暴露Prometheus指标的端口,config.yaml是配置文件。 引用[4]提到启动脚本:先启动程序,然后另一个脚本开启端口。这可能不是标准方式;标准是使用-javaagent。 在引用[4]中说:“先执行1脚本启动,然后2脚本是让程序开启一个prometheus jmx端口”,这可能指的是在启动后附加agent,但通常是在启动时指定。 我应该推荐标准方法。 最终回答。</think>### 配置 JMX Exporter 采集 JVM 监控指标 JMX Exporter 是一个轻量级工具,用于将 Java Management Extensions (JMX) 指标暴露为 Prometheus 格式,从而实现对 JVM 应用(如内存使用、GC 行为、线程状态等)的监控。以下是基于最佳实践的配置步骤,参考了提供的引用内容。配置核心包括创建一个 YAML 文件定义 JMX 连接和指标收集规则,并在启动 Java 应用时启用 JMX Exporter。 #### 步骤 1: 下载 JMX Exporter 首先,下载 JMX Exporter 的 JAR 文件: - 从官方仓库获取:[GitHub - prometheus/jmx_exporter](https://github.com/prometheus/jmx_exporter) - 推荐版本:最新稳定版(如 `jmx_prometheus_javaagent-0.20.0.jar`) #### 步骤 2: 创建配置文件(YAML 格式) 创建一个 YAML 配置文件(例如 `jmx_config.yaml`),定义 JMX 连接参数和指标收集规则。JMX Exporter 内置了对 JVM 指标的默认收集支持,可通过 `rules` 或 `collectDefaultJvmMetrics` 实现。以下是针对 JVM 监控的推荐配置: ```yaml # JMX Exporter 配置文件示例 startDelaySeconds: 0 # 启动后立即开始收集,避免延迟[^2][^5] hostPort: localhost:1234 # 指定本地 JVM 的 JMX 端口(host:port 格式)[^1][^5] # jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi # 完整的 JMX URL,可替代 hostPort[^2][^5] ssl: false # 禁用 SSL,简化本地监控[^2][^5] lowercaseOutputName: false # 保留指标名大小写,提高可读性[^2][^5] lowercaseOutputLabelNames: false # 保留标签名大小写[^2][^5] # 规则部分:启用默认 JVM 指标收集 collectDefaultJvmMetrics: true # 自动收集核心 JVM 指标(如内存、GC、线程) # 可选:自定义规则示例(精细控制指标) rules: - pattern: "java.lang<type=Memory><>(.*)" # 收集内存相关指标 name: jvm_memory_$1 - pattern: "java.lang<type=GarbageCollector, name=(.*)><>(.*)" # 收集 GC 相关指标 name: jvm_gc_$1_$2 ``` **关键说明**: - **hostPort vs jmxUrl**:`hostPort` 更简洁(如 `localhost:1234`),而 `jmxUrl` 提供完整路径(如引用[2]和[5]所示)。两者选一即可,推荐 `hostPort` 用于简单场景[^1][^5]。 - **JVM 指标**:`collectDefaultJvmMetrics: true` 会收集标准 JVM 指标,包括: - 内存使用:`jvm_memory_bytes_used` - 垃圾回收:`jvm_gc_collection_seconds` - 线程状态:`jvm_threads_state` - 类加载:`jvm_classes_loaded` - **安全**:生产环境建议启用 `ssl: true`,但测试时可禁用[^2]。 #### 步骤 3: 启动 Java 应用程序 在启动 Java 应用时,通过 `-javaagent` 参数加载 JMX Exporter。命令格式如下: ```bash java -javaagent:/path/to/jmx_prometheus_javaagent.jar=PORT:/path/to/jmx_config.yaml -jar your_application.jar ``` - **PORT**:JMX Exporter 暴露 Prometheus 指标的端口(例如 `9090`),Prometheus 将从此端口拉取数据。 - **示例**:如果配置文件在 `/opt/jmx/jmx_config.yaml`,JAR 在 `/opt/jmx/jmx_prometheus_javaagent.jar`,则命令为: ```bash java -javaagent:/opt/jmx/jmx_prometheus_javaagent.jar=9090:/opt/jmx/jmx_config.yaml -jar app.jar ``` 引用[4]提到,某些系统通过脚本启用端口,但 `-javaagent` 是标准方式,无需额外脚本[^4]。 #### 步骤 4: 验证配置 1. **检查指标暴露**:启动应用后,访问 `http://localhost:PORT`(如 `http://localhost:9090`),应看到 Prometheus 格式的指标输出。 2. **Prometheus 集成**:在 Prometheus 的 `prometheus.yml` 中添加 job: ```yaml scrape_configs: - job_name: 'jvm' static_configs: - targets: ['localhost:9090'] # 指向 JMX Exporter 端口 ``` 3. **监控可视化**:使用 Grafana 导入 JVM 仪表盘(如 ID 8563),查看实时指标。 #### 注意事项 - **性能影响**:JMX Exporter 资源消耗低,但高频率收集可能轻微增加 JVM 负载。 - **局限性**:JMX 监控可能不如专用 Exporter 丰富(如引用[3]对比 Zookeeper Monitor),但对 JVM 核心指标已足够[^3]。 - **错误排查**:如果连接失败,检查端口冲突或防火墙设置;确保 `hostPort` 与 JVM 的 JMX 端口一致。 通过以上步骤,您可以高效采集 JVM 监控指标。如需更高级配置,参考官方文档调整 `rules` 部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值