Я работаю над проектом, который требует показать использование ЦП, а также другую системную информацию о удаленных машинах. Люди предлагают использовать SIGAR для достижения этого, но я не знаю, как его использовать. Исходный код для меня не имел никакого смысла. В основном, мой вопрос заключается в следующем: как я могу зарегистрировать MBeans, предоставляемые SIGAR, серверу, когда предоставляются IP-адрес хоста и JMX-порт, и как получить информацию о системе с другого компьютера. Пожалуйста, исправьте меня, если я ошибаюсь в работе JMX. Заранее спасибо.Как использовать SIGAR для удаленного получения информации о другой машине?
ответ
Мне кажется, что вам придется писать некоторые объекты обертывания, чтобы выставлять различные SIGAR-выходы в качестве атрибутов jMX mbean. Как вы это делаете, это сильно зависит от того, что вы используете, чтобы разоблачить ваши JMX-компоненты. Я бы написал один объект обертывания для каждого из различных типов вывода SIGAR: память, диск, ...
Я написал файл SimpleJMX library, который может помочь. Я буду использовать его формат, чтобы предоставить примерный объект, который вы можете использовать для отображения информации через JMX. Вы можете адаптировать его к любому механизму, который вы используете для публикации средств JMX. Я не знаком с SIGAR, чтобы узнать, подходит ли мой сигарный код ниже, чтобы получить экземпляр ProcMem
.
@JmxResource(description = "Show SIGAR Info", domainName = "foo")
public class SigarProcMem {
private ProcMem procMem;
{
// sorry, I'm not up on sigar so I'm not sure if this works
Sigar sigar = new Sigar();
procMem = sigar.getProcMem(sigar.getPid());
}
@JmxAttributeMethod(description = "Resident memory")
public long residentMemory() {
return procMem.getResident();
}
@JmxAttributeMethod(description = "Get the Total process virtual memory")
public long totalVirtualMemory() {
return procMem.getSize();
}
}
Это имена классов, которые являются Сигары построены в MBeans, что вы можете зарегистрироваться:
- org.hyperic.sigar.jmx.SigarCpu
- org.hyperic.sigar. jmx.SigarCpuInfo
- org.hyperic.sigar.jmx.SigarCpuPerc
- org.hyperic.sigar.jmx.SigarLoadAverage
- org.hyperic.sigar.jmx.SigarMem
- org.hyperic.sigar.jmx.SigarProcess
- org.hyperic.sigar.jmx.SigarRegistry
- org.hyperic.sigar.jmx.SigarSwap
Однако, это будет довольно сложно развертывайте их удаленно, так как Sigar зависит от собственной библиотеки, которая должна находиться в целевом JVM-lib-пути при загрузке MBeans. Это означает, что вам нужно будет активно загружать библиотеку и MBeans на каждом целевом хосте, который вы хотите контролировать.
Возможно, вы сможете взломать способ заставить целевые JVM загружать это посредством удаленного вызова, но это нетривиально и потребует от вас обойти любые настройки безопасности в JVM, поскольку по умолчанию это то, что вы «Не должно быть в состоянии сделать.
Вы можете сортировать взломать часть системы, чтобы получить легкое развертывание для Sigjar:
private String before;
private Sigar sigar;
/**
* Constructor - don't forget to call unload later!
*/
public SetlogSigar() throws Exception {
before = System.getProperty("java.library.path");
String path = "";
String add = getJarFolder();
if (before.contains(";"))
path = before + ";./;" + add;
else
path = before + ":./:" + add;
setSystemPath(path);
sigar = new Sigar();
}
/**
* This is needed to dynamically update the JAVA Path environment in order to load the needed native library
* Yes -rather an ugly hack...
*/
private String getJarFolder() {
// get name and path
String path = SetlogSigar.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String decodedPath = path;
try {
decodedPath = URLDecoder.decode(path, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
File f = new File(decodedPath);
String absolutePath = f.getParentFile().getParentFile().getParentFile().getParent()+"/lib";
return absolutePath;
}
/**
* Unloads the JNI bindings
*/
public void unload() {
this.sigar.close();
setSystemPath(before);
}
Этот хак динамически добавляет папку, в которой sigjar.jar находится в переменной окружения. Просто поместите все родные библиотеки там, и развертывание становится менее сложным.
- 1. Скрипт оболочки для удаленного получения информации о подписке Red Hat
- 2. Как я могу использовать SqlConnection.GetSchema для получения информации о синониме?
- 3. Программный код для считывания одометра и другой информации о машине
- 4. получения информации о принципиальных
- 5. Получить доступ к информации о локальной машине
- 6. Как я могу использовать сеансы для получения информации о пользователе?
- 7. Как использовать Rakuten api для получения информации о заказе?
- 8. Использование SIGAR для получения информации о процессе оракула с сервера веб-приложений (glassfish4)
- 9. Что лучше для получения информации о мероприятии?
- 10. Как использовать VFPOLEDB для получения информации DBF
- 11. Использование JWT для получения информации о пользователе
- 12. Доступ к информации о удаленной машине | Без JMX
- 13. Команда Linux для получения информации о распространении
- 14. apache mod_rewrite для получения информации о запросе
- 15. Можете ли вы использовать ворона для получения информации о происшествии?
- 16. Использовать API мобильной широкополосной связи для получения информации о местоположении
- 17. Использование SNMP для получения информации о сервере
- 18. Последовательность получения информации о узле
- 19. Запуск службы для получения информации о местоположении
- 20. Linkedin API для получения информации о компании
- 21. Сценарий для получения информации о памяти
- 22. NetQueryDisplayИнформационная проблема для получения информации о группах
- 23. Woocommerce - php для получения информации о заказе
- 24. Недоступен для получения информации о поиске mongoose()
- 25. USB: протокол для получения информации о расстоянии
- 26. Ресурсы для получения информации о Threading
- 27. Использование SNMP для получения информации о сервере
- 28. Использование Perforce для получения информации о файле
- 29. API Amazon для получения информации о заказе
- 30. Использование AsyncTask для получения информации о местоположении
отличная библиотека. мы реализовали аналогичную библиотеку, где я работаю. Любопытно, почему вы разбиваете информацию о параметрах в аннотации JmxOperation вместо отдельной аннотации для параметров? – jtahlborn
@jtahlborn Хех. Я просто ненавижу сложность этого. Мне всегда нужно посмотреть, как сделать массив полей аннотации или скопировать другой экземпляр. Я не использую его достаточно, чтобы помнить. :-) – Gray
Я думаю, вы меня неправильно поняли.я имел в виду отдельную аннотацию, которую вы наложили на параметры метода (в этом нет никаких массивов). Я думаю, что это намного проще, чем массивы значений в JmxOperation. – jtahlborn