2017-08-30 81 views
0

我在C#中当前的项目需要从卡夫卡服务器获取下复制分区的数量。我可以在mbeans部分的jconsole中查看它,但我需要在c#程序中获取值。我尝试使用NetMX与此代码进行初始连接。有没有一种方式来获得在C#程序中的卡夫卡远程服务器的指标?

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
INetMXConnector connector = NetMXConnectorFactory.Connect(new Uri("http://<myserver>:<jmxport>"), null);  
IMBeanServerConnection remoteServer = connector.MBeanServerConnection; 

“未找到部分”错误是在第二行抛出,我想知道如果有人能帮助这一点吗?

+0

这不是在.NET中,但我用椒一些基本的监控和它工作正常。 没试过INetMXConnector,但看着github上的代码,你的错误出现,你需要一个app.config,它的工作 - 看样品这里 https://github.com/SzymonPobiega/NetMX/tree/master/Samples/JmxClientDemo https://github.com/SzymonPobiega/NetMX/blob/master/NetMX.Default/MBeanServer.cs#L36 – Treziac

回答

0

我不认为NetMX将连接到Java JMX端点。这是专门针对DotNet的“独立”实现。

最好的办法是到Jolokia Java的代理加载到你的目标卡夫卡服务器。 Jolokia通过可以通过C#访问的HTTP/REST接口公开JMX。

你可以尝试IKVM(一个java字节码给CLR,它将为你提供一个Java JMX兼容的DLL,你可以调用它,IKVM是一个将Java字节码转换成.NET字节码的编译器。从

+0

嘿,所以我把Jolokia war代理安装到了tomcat的webapp文件夹中。但是,当我提出获取kafka指标的请求时,它会给出错误。此外,我用列表请求,并且也没有显示关于卡夫卡任何东西,但它确实表明了标准的Java类的东西“的java.lang”。但是,当我在我的计算机上使用jconsole连接到服务器上的jmx端口时,我可以看到所有kafka指标。你以前遇到过吗? – Rish

+0

我会使用jolokia java代理而不是战争。 – Nicholas

+0

我尝试运行此文件中所述:java -javaagent:jolokia-jvm-1.3.7-agent.jar = port = 7777,host = localhost 我得到这个异常:线程“main”java.lang中的异常。 reflect.InvocationTargetException 引起:java.lang.NumberFormatException:对于输入字符串:“7777 host = localhost” 本机方法中的致命错误:处理-javaagent失败。我遗漏了大部分堆栈跟踪。 – Rish

0

关于你椒配置的C#的客户,也许你需要完全限定在坛路矿看起来像这样和作品:

export JOLOKIA_HOME=/libs/java/jolokia/1.3.7 
export JOLOKIA_JAR=$JOLOKIA_HOME/jolokia-jvm-1.3.7-agent.jar 
export KAFKA_OPTS="-javaagent:$JOLOKIA_JAR=port=7778,host=* $KAFKA_OPTS" 

当我在非守护启动卡夫卡模式,它打印此:

I> No access restrictor found, access to any MBean is allowed 
Jolokia: Agent started with URL http://10.8.36.121:7778/jolokia/ 

然后我指出我的浏览器http://localhost:7778/jolokia/search/和获取:

{ 
    "request": { 
    "mbean": "*:*", 
    "type": "search" 
    }, 
    "value": [ 
    "kafka.network:name=ResponseQueueTimeMs,request=ListGroups,type=RequestMetrics", 
    "kafka.server:delayedOperation=topic,name=PurgatorySize,type=DelayedOperationPurgatory", 
    "kafka.server:delayedOperation=Fetch,name=NumDelayedOperations,type=DelayedOperationPurgatory", 
    "kafka.network:name=RemoteTimeMs,request=Heartbeat,type=RequestMetrics", 
<-- SNIP --> 
    "kafka.network:name=LocalTimeMs,request=Offsets,type=RequestMetrics" 
    ], 
    "timestamp": 1504188793, 
    "status": 200 
} 
+0

谢谢。我实际上是在Windows服务器上运行kafka。因此,我为“KAKFA_OPS”设置了一个环境变量并重新启动了kafka,但仍然无法工作。我需要有其他东西来运行代理jar吗?仅供参考我已安装JRE – Rish

相关问题