如何使用 Ansible 读取 JMX MBean 属性?

问题描述 投票:0回答:1

我使用 Ansible playbook 启动 JVM 应用程序,并希望进行运行状况检查任务以确保应用程序正在运行。该应用程序没有 HTTP 接口,但通过 MBean 公开多个属性。那么我可以从 Ansible 访问这些属性吗?

java ansible jvm jmx
1个回答
0
投票

其中一条评论说得对。 我发现最简单的方法是编写一个小的 python 脚本。在此示例中,我从 Artemis 代理获取 HAStatus 的值。

你必须从 python 安装 jmx 查询。

python3 -m pip install jmxquery

这是 jmx_query.py 代码。 由于某种原因,我无法指定 jmx 的用户名和密码。
jmx_connection = jmxquery.JMXConnection(jmx_url, 用户名=用户名, 密码=密码) 我还没有查看 jmxquery 代码来看看有什么问题。 我的 jmx 没有被锁定,所以我把它拿出来,它运行得很好。

import jmxquery

# Replace with your broker's JMX details
jmx_url = "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"
username = "admin"
password = "password"
mbean = "org.apache.activemq.artemis:broker=\"MyBroker\""
attribute = "HAStatus"

# Create a JMX query
jmx_connection = jmxquery.JMXConnection(jmx_url)
query = [jmxquery.JMXQuery(f'{mbean}:{attribute}')]

# Query JMX and print the result
result = jmx_connection.query(query)
print(result[0].value)

这是我的 ansible 脚本,用于报告我从 jmx 的发现。

---
- name: Check HAStatus of ActiveMQ Artemis via JMX
  hosts: all
  gather_facts: no
  tasks:
    - name: Query JMX for HAStatus
      command: >
        python3 /path/to/jmx_query.py
      register: jmx_output
      changed_when: false

    - name: Parse JMX Output
      set_fact:
        ha_status: "{{ jmx_output.stdout }}"

    - name: Emit message based on HAStatus
      debug:
        msg: >
          The ActiveMQ Artemis HAStatus is {{ ha_status }}.

    - name: Check if HAStatus is live
      when: ha_status == "live"
      debug:
        msg: "The broker is currently the primary (live) node."

    - name: Check if HAStatus is backup
      when: ha_status == "backup"
      debug:
        msg: "The broker is currently a backup node."

    - name: Fail if HAStatus is unknown
      when: ha_status not in ["live", "backup"]
      fail:
        msg: "Unknown HAStatus: {{ ha_status }}"
© www.soinside.com 2019 - 2024. All rights reserved.