JBossを搭載したサーバーを実行しており、エラーにはlog4jを使用しています。jboss コンソールを介さずにこれらを監視できるように、freememory やアクティブなスレッド グループ数などをログに記録する方法を考え出すように依頼されました。ただし、既存のサーバーに変更を加えることなくこれを行うことができれば望ましいとのことです。私の最初の考えは、log4j.xml を変更して関連データをデータベースに保持し、後で解析して表示することでしたが、今では本当にわかりません。サードパーティのアプリをインストールせずに、jboss サーバーから情報を自動的に取得して永続化する他の方法はありますか? それとも、log4j xml の変更を許可されるように戦い続ける必要がありますか? また、これは可能ですか?私'
質問する
232 次
1 に答える
0
猟師;
ネットワーク障害がなく、JMX リモート処理が無効になっていないと仮定すると、JMX API を使用してこれらの値をリモートで監視できます。これを行うための Groovy コードを次に示しますが、これを Java に簡単に変換できます。
import javax.management.*;
import javax.naming.*;
Properties p = new Properties();
p.put(Context.PROVIDER_URL, url);
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
p.put("jnp.disableDiscovery", "true");
ctx = new InitialContext(p);
contexts.put(url, ctx);
mbeanServer = ctx.lookup("/jmx/rmi/RMIAdaptor");
// Lookups here
クラスパスに/client/jbossall-client.jarを配置します。
次に、JMXConsole (必要に応じて Dev サーバー上) をスクロールして、収集する属性と ObjectName を選択します。たとえば、上記の例を拡張して FreeMemory を取得します (これもグルーヴィーです)。
import javax.management.*;
def objectName = new ObjectName("jboss.system:type=ServerInfo");
def freeMem = mbeanServer.getAttribute(objectName, "FreeMemory");
JMXConsole では、この MBean にマップされます。
そして、その MBean のこの属性に:
したがって、このデータを時々収集するようにスケジューラを設定すると、DB に書き込んだり、電子メールなどに送信したりできます。
わかる ?
于 2012-05-18T19:47:58.310 に答える