2010-08-12 2 views
4

Я создал приложение Java, которое разделено на разные подкомпоненты, каждый из которых запускается на отдельном экземпляре Tomcat. Кроме того, некоторые компоненты используют MySQL db через Hibernate.Как я могу проверить, запущены ли MySQL и Tomcat?

Теперь я создаю консоль администрирования, где сообщается о статусе всех экземпляров Tomcat и MySQL. Мне не нужна подробная информация, но зная, работают ли они или нет, этого достаточно.

Что может быть лучшим решением для этого?

Благодаря

ответ

0

розжига простой фиксированный запрос через MySQL

SELECT 'a-ok'; 

и имеют .jsp вернуть что a-ok текст. Если это время и/или не отвечает a-ok, то что-то странно. Если вам нужно что-то более подробное, вы можете добавить дополнительные чеки, например, запрашивать now() или что-то большее, например SHOW INNODB STATUS.

+0

Я думаю, что OP должен выяснить, является ли консоль администратора графическим интерфейсом или веб-приложением. Если его веб-приложение и размещенный сервер не работают, JSP не будет делать этого. –

+0

Правда, но тогда все, что делает пинг, может тайм-аут и сообщать, что сервер не работает. Я отслеживаю свои серверы с помощью wget и скрипта запроса туда и обратно. –

0

Проще всего искать файлы PID MySQL и Tomcat. Вам нужно посмотреть ваши стартовые скрипты, чтобы убедиться в точном расположении, но как только вы его найдете, вы просто проверяете наличие файла pid.

+0

Но что, если Апач и/или Томкат умерли и не убрались после себя? Вы получите ложное положительное «вверх», из-за того, что лежали устаревшие файлы pid. –

+0

Или что, если процессы MySQL или Tomcat все еще существуют, но почему-то они перестали отвечать на запросы? –

3

Самый простой способ - просто подключить сервер и посмотреть, удастся ли ему это сделать.

MySQL:

Connection connection = null; 
try { 
    connection = DriverManager.getConnection(url, username, password); 
    // Succes! 
} catch (SQLException e) { 
    // Fail! 
} finally { 
    if (connection != null) try { connection.close(); } catch (SQLException ignore) {} 
} 

Tomcat:

try { 
    new URL(url).openConnection().connect(); 
    // Succes! 
} catch (IOException e) { 
    // Fail! 
} 

Если вы хотите немного более особый статус, например, проверяя, доступна ли какая-либо таблица DB или имеется определенный ресурс webapp, тогда вам нужно запустить более конкретный оператор SELECT или HTTP-запрос соответственно.

0

Создайте сервлет как статусную страницу. В сервлете выполняется дешевый запрос, если запрос завершен, пусть сервлет печатает OK, иначе Ошибка. Поместите сервлет в войну и разверните ее во всех случаях.

Это можно использовать для проверок в консоли администратора, выполняя цикл по всем экземплярам.

1

Я бы удостоверился, что когда-либо наблюдая за настройкой, вы фактически выполняете какой-то код. Мониторинг JVM через jmx также может быть полезен после факта. Выезд http://www.cacti.net/.

0

Я бы создал простой веб-сервис REST, который запускается на каждом экземпляре Tomcat и выполняет запрос no-op к базе данных. Это позволяет легко перемещаться из любого места (командная строка, веб-приложение, графическое приложение и т. Д.).

Если это общедоступные серверы, вы можете использовать услугу binarycanary.com для опроса страницы или услуги в своем приложении.

3

Я предполагаю, что вы знаете, какие порты запускаются заранее (или из файлов конфигурации). Самый простой способ проверить - создать соединения сокетов с такими портами, как программа telnet.Что-то вроде:

public boolean isServerUp(int port) { 
    boolean isUp = false; 
    try { 
     Socket socket = new Socket("127.0.0.1", port); 
     // Server is up 
     isUp = true; 
     socket.close(); 
    } 
    catch (IOException e) 
    { 
     // Server is down 
    } 
    return isUp; 
} 

Использование:

isTomcatUp = isServerUp(8080); 
isMysqlUp = isServerUp(3306); 

Однако, я бы сказал, что это ложноотрицательный проверка .. Иногда он говорит сервер UP, но сервер застрял или не отвечает ...

Смежные вопросы