Если нам нужна автоматизированная система для проверки и наблюдения в прямом эфире состояния, производительности и настроек окружающей среды AEM приложения, то мы можем работать с установленным по умолчанию инструментарием Apache Sling Health Checks. В данном обзоре я подробно рассмотрю ключевые моменты этих инструментов и покажу простые примеры настроек и изменений. Также вы увидите, насколько легким и доступным для понимания является создание пользовательского интерфейса.
Задачи и цели
Перед решением любой задачи для AEM приложения нам следует проверить следующие пункты:
- Требуемые бандлы запущены и работают;
- Соответствующие конечные точки веб-сервисов доступны;
- Необходимые ресурсы и соответствующий контент присутствуют;
- И так далее ...
Конечно, вышеуказанные шаги могут иногда быть проверены вручную, но в идеале такие проверки следует выполнять автоматически, чтобы было достаточно одного беглого взгляда для наблюдения за AEM приложением.
Если надо построить такую автоматизацию проверки и слежения за окружающей средой AEM приложения в прямом эфире, то не стоит изобретать велосипед, а лучше сразу пользоваться доступным “из коробки” инструментарием Apache Sling Health Checks (далее HC).
Беглый взгляд на Health Checks
Экземпляр Health Checks - это всего лишь обычный OSGi сервис, который реализует интерфейс org.apache.sling.hc.api.HealthCheck и возвращает Result соответственно результатам проверки условий:
public interface HealthCheck {
public Result execute();
}
Result - это просто неизменный (immutable) класс, предоставляющий состояние Status (OK, WARN, CRITICAL и т.п.) и одно либо несколько похожих на логи сообщений с дополнительной информацией.
Замечание: если вы для Result задаете любое сообщение логов, то оно по умолчанию будет идентифицироваться внутри AEM со статусом WARN, поэтому нам следует указать статус явно:
new Result(Result.Status.OK, "Some Message")
Исполнение Health Checks
Благодаря тому, что AEM является модульной системой, состоящей из многих отдельных компонентов, у нас есть сразу несколько возможностей для настройки любой части системы. Одна из них - это сервис HC Executor (исполнитель), который можно настраивать через консоль: "/system/console/configMgr/org.apache.sling.hc.core.impl.executor.HealthCheckExecutorImpl":
Замечание: каждый экземпляр HC выполняется HC исполнителем (Executor) внутри пула потоков Sling, который позволяет выполняться одновременно только одному отдельному экземпляру.
Изменение и настройка Health Checks
Для реализации собственного HC сначала надо реализовать интерфейс org.apache.sling.hc.api.HealthCheck и указать настройки сервиса, как показано ниже:
@Component(metatype = true)
@Properties({
@Property(name = HealthCheck.NAME,value = "HCName"),
@Property(name = HealthCheck.TAGS,value = {"meetup"}),
@Property(name = HealthCheck.MBEAN_NAME,value = "HCName")
})
@Service(value = {HealthCheck.class})
public class IncorrectLocalhostHC implements HealthCheck {
Если HC должен выполняться планировщиком (например, ежедневно), то можно указать настройки расписания с помощью свойств:
@Property(name = HealthCheck.ASYNC_CRON_EXPRESSION, value = "0 0 12 1/1 * ? *")
Также начиная с версии Sling HC core 1.2.6 доступно новое свойство “hc.resultCacheTtlInMs”, которое перегружает глобальный TTL по умолчанию, настроенный у HC исполнителя (Executor) для HC ответов на запросы.
Кроме этого HC может настраиваться аннотацией @SlingHealthCheck, но она еще не работает в AEM 6.1 из коробки:
@SlingHealthCheck(
name="Health Check Name For Felix Console",
mbeanName="JMX Name",
description="Health Check Description",
tags={"meetup"}
)
Вот такая последовательность простых шагов позволяет реализовать HC, который можно запустить из консоли Felix по пути “/system/console/healthcheck”:
Интерфейс Пользователя Health Checks
Если открыть Tools -> Operations -> Dashboard -> Console -> Health Reports (или страницу по пути “/libs/granite/operations/content/healthreports.html”), то мы увидим карточки с Health Checks.
Чтобы добавить карточку собственного Health Check на эту панель управления, надо создать ноду под /apps/granite/operations/config/hc со следующими свойствами:
- resource{String} - /system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheck/[hc.name]
- sling:resourceType{String} - granite/operations/components/mbean
Панель управления также позволяет объединять HC карточки в группы (как это уже сделано для “System Checks” и “Security Checks”). Все настройки составных HC размещены в фабрике org.apache.sling.hc.core.impl.CompositeHealthCheck, поэтому для добавления собственного HC нам надо добавить новые настройки в эту фабрику из консоли Felix или из файла настроек. В случае настроек из консоли Felix надо указать имя “Name” для HC группы и фильтр тегов “Filter Tags”, по которому все HC с такими тегами будут доступны под такой составной HC карточкой на панели управления.
Более подробная документация:
https://sling.apache.org/documentation/bundles/sling-health-check-tool.html
https://docs.adobe.com/docs/en/aem/6-2/administer/operations/operations-dashboard.html