AXAMIT logo
Домашняя Страница Блог 2017 Мониторинг системы с помощью инструментария Apache Sling health checks

Мониторинг системы с помощью инструментария Apache Sling health checks

Мониторинг системы с помощью инструментария Apache Sling health checks

Если нам нужна автоматизированная система для проверки и наблюдения в прямом эфире состояния, производительности и настроек окружающей среды 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