JMXClient

以读取kafka metrics为例。

实际使用中可将读取的metrics存入时序数据库中,然后从页面展示。kafka-manager等不支持历史的指标展示。

JMXClient.scala

import javax.management.remote.{JMXConnector, JMXConnectorFactory, JMXServiceURL}
import javax.management._
import kafka.server.BrokerTopicMetrics
import kafka.utils.Logging
import kafka.metrics.KafkaMetricsGroup

object JMXClient {

    def useage() {
        println("Useage: java JMXClient <RMI url>")
    }

    def main(args: Array[String]) {
        if (args.length != 1) {
            useage
            System.exit(-1)
        }

        val url: JMXServiceURL = new JMXServiceURL(args(0))
        val connector: JMXConnector = JMXConnectorFactory.connect(url)
        val mbsc: MBeanServerConnection = connector.getMBeanServerConnection

        val beanSet: java.util.Set[ObjectInstance] = mbsc.queryMBeans(new ObjectName("*kafka*:type=*,name=*"), null)
        val beans: Array[ObjectInstance] = beanSet.toArray(
            new Array[ObjectInstance](0)).sortWith((o1, o2) => o1.getClassName.compare(o2.getClassName) < 0)
        for (bean <- beans) {
            val objectName: ObjectName = bean.getObjectName
            println(objectName)
            mbsc.getMBeanInfo(objectName).getAttributes.foreach(attr =>
                println("\t%s\t\t\t%s".format(attr.getName, mbsc.getAttribute(objectName, attr.getName))))
        }
    }
}

构建脚本build.sh,需设置好SCALA_HOME和KAFKA_HOME

#!/usr/bin/env bash

SCALA_HOME=~/opt/scala-2.9.2
KAFKA_HOME=~/opt/kafka_2.9.2-0.8.1.1
SCALAC=$SCALA_HOME/bin/scalac
LIBS=.
for i in $KAFKA_HOME/libs/*.jar; do
  LIBS="$LIBS:$i"
done

cmd="$SCALAC -classpath $LIBS JMXClient.scala"
echo "$cmd"
$cmd


转载于:https://my.oschina.net/guzhou/blog/481196

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用Java中的JMX(Java Management Extensions)技术来采集当前环境的设备连接和拓扑信息。 JMXJava语言的一种技术,可用于监测和管理应用程序、设备、系统和网络。 要使用JMX收集信息,你需要执行以下步骤: 1. 在应用程序中启用JMX功能。这可以通过在程序的启动脚本中添加特定的JMX参数来实现。 2. 使用JMX客户端连接到应用程序并查询相关信息。可以使用工具(例如jconsole)或编写自己的JMX客户端代码来实现。 3. 使用Java代码将收集的信息转换为JSON格式。可以使用第三方库(如Gson)或内置的Java API(例如org.json)来实现。 以下是一个简单的示例代码,展示了如何使用JMX客户端收集信息并将其转换为JSON格式: ``` import java.io.IOException; import java.util.Set; import javax.management.MBeanServerConnection; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import com.google.gson.Gson; public class JmxClient { public static void main(String[] args) throws IOException { // Connect to the JMX server JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi"); JMXConnector jmxConnector = JMXConnectorFactory.connect(url); MBeanServerConnection connection = jmxConnector.getMBeanServerConnection(); // Query MBeans ### 回答2: 要实现采集当前环境的设备的连线和拓扑信息并生成树状的JSON代码,可以使用Java编程语言结合一些相关的库和技术。 首先,需要采集当前环境的设备信息。可以使用Java的网络编程库来获取设备的IP地址、MAC地址和其他相关的网络信息。例如,可以使用Java的InetAddress类获取本机和其他设备的IP地址,使用NetworkInterface类获取设备的MAC地址。 接下来,需要获取设备之间的连线信息。可以通过扫描网络中的设备或者使用其他的网络发现技术,例如使用Java的Socket类向其他设备发送请求,然后解析响应来获取设备之间的连接关系。可以使用递归算法来遍历网络中的所有设备,并将连线关系保存在一个数据结构中。 然后,需要将设备的连线和拓扑信息转换为树状结构的JSON代码。可以使用Java的JSON库,例如Jackson或者Gson,将设备和连接关系转换为JSON对象。可以使用Java的Map和List等数据结构来表示设备和连接信息,然后使用JSON库将其序列化为JSON字符串。 最后,可以将生成的JSON代码保存到文件中或者通过网络发送给其他的应用程序进行处理和展示。可以使用Java的文件操作API将JSON字符串写入文件,或者使用Java的网络编程库将其发送给其他设备或应用程序。 综上所述,使用Java编程语言和相关的库和技术可以实现采集当前环境的设备的连线和拓扑信息生成树状的JSON代码。具体的实现过程需要根据实际情况进行调整和完善。 ### 回答3: 要实现采集当前环境的设备的连线和拓扑信息生成树状的JSON代码,可以使用Java的工具类库和数据结构来实现。以下是一个可能的实现思路: 首先,需要使用Java的网络编程功能来获取当前设备的连线信息。可以使用Java的Socket类来建立网络连接并进行数据收发,通过建立TCP连接,获取到网络设备的信息。 然后,可以使用Java的数据结构中的图(Graph)或树(Tree)来表示设备的拓扑关系。可以创建一个设备类(Device),其中包含设备的名称、IP地址等属性,并使用一个集合(如ArrayList)来存储相互连接的设备。 接下来,可以使用递归算法来遍历设备的拓扑关系,生成树状的拓扑信息。从一个根节点开始遍历,递归地访问所有连接设备,并将其添加到相应的父节点下面。 最后,可以使用Java的JSON库(如Jackson、Gson等)来将设备拓扑信息转换为JSON格式的字符串。可以创建一个根节点,将设备类的属性作为JSON对象的键值对,并将连接设备的集合作为子节点添加。再将整个树状结构转换为JSON字符串输出。 通过将上述步骤结合起来,我们就可以实现采集当前环境的设备连线和拓扑信息生成树状的JSON代码,并且使用Java编程语言来进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值