Als we een geautomatiseerd systeem willen gebruiken voor real-time controle en monitoring van de huidige status, prestaties en configuratie van een AEM-applicatieomgeving, kunnen we kiezen voor de OOTB Apache Sling Health Checks-tools.
Hieronder zal ik het basisidee van deze tools uitleggen en enkele eenvoudige voorbeelden van configuratie en aanpassing demonstreren. U zult zien hoe eenvoudig en gemakkelijk het is om een gebruikersinterface te creëren.
Problemen en Doelstellingen
Voordat we een probleem met een AEM-applicatie oplossen, moeten we de volgende punten controleren:
- De vereiste pakketten zijn opgestart en actief;
- De gerelateerde webdiensten-endpoints zijn beschikbaar;
- De vereiste bronnen en een passende inhoudsstructuur zijn aanwezig.
Alle bovenstaande stappen kunnen van tijd tot tijd handmatig worden uitgevoerd, maar we moeten deze validaties automatisch uitvoeren. Een dergelijke aanpak helpt ons om de AEM-applicatie in één oogopslag te monitoren.
Als we een dergelijke automatisering willen bouwen voor real-time controle en monitoring van omgevingen, kunnen we de OOTB Apache Sling Health Checks-tools (of HC) gebruiken.
Health Checks in het kort
Een HC-instantie is een OSGi-service die de org.apache.sling.hc.api.HealthCheck-interface implementeert en een Result retourneert volgens de validatievoorwaarden:
public interface HealthCheck {
public Result execute();
}
Een Result is een eenvoudige, onveranderlijke klasse die de Status (OK, WARN, CRITICAL, etc.) en een of meer logachtige berichten voor aanvullende informatie levert.
Opmerking: als u een logbericht van een Result instelt, wordt dit in AEM geïdentificeerd als WARN. Als gevolg hiervan moeten we het definiëren als:
new Result(Result.Status.OK, "Some Message")
Uitvoering van Health Checks
AEM is een modulair systeem, dus we hebben verschillende configuratieplaatsen voor elk element van het systeem. De HC Executor-service is een van die services die kan worden geconfigureerd via “/system/console/configMgr/org.apache.sling.hc.core.impl.executor.HealthCheckExecutorImpl”:

Opmerking: De HC Executor voert elke gezondheidscontrole uit binnen de Sling Thread pool, wat garandeert dat we slechts één actieve instantie tegelijk hebben.
Aangepaste Health Checks
Voor een individuele implementatie van een HC, moeten we eerst de interface org.apache.sling.hc.api.HealthCheck implementeren en de opties voor de service als volgt specificeren:
@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 {
Als de HC door een scheduler moet worden uitgevoerd (bijv. eenmaal per dag), kunnen we de scheduler-intervallen in de eigenschappen specificeren:
@Property(name = HealthCheck.ASYNC_CRON_EXPRESSION, value = "0 0 12 1/1 * ? *")
Sling HC core versie 1.2.6 zal een nieuwe eigenschap hebben, “hc.resultCacheTtlInMs”. Deze overschrijft de globale standaard TTL die is geconfigureerd in de HC executor voor HC-antwoorden.
Een HC kan ook worden geconfigureerd met behulp van de annotatie @SlingHealthCheck, maar dit werkt niet out-of-the-box (OOTB) in AEM 6.1:
@SlingHealthCheck(
name="Health Check Name For Felix Console",
mbeanName="JMX Name",
description="Health Check Description",
tags={"meetup"}
)
Deze eenvoudige stappen maken de implementatie van een HC mogelijk, die wordt uitgevoerd vanuit de Felix-console onder het pad “/system/console/healthcheck”:

Gebruikersinterface voor gezondheidscontroles
Als we Gereedschappen -> Bewerkingen -> Dashboard -> Console -> Statusrapporten openen (of via het pad “/libs/granite/operations/content/healthreports.html”), zien we de tabbladen met HC’s.

Om een aangepaste HC als een tabblad aan dit dashboard toe te voegen, moeten we een knooppunt aanmaken onder het pad /apps/granite/operations/config/hc met de volgende eigenschappen:
- resource{String} – /system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheck/[ hc.name ]
- sling:resourceType{String} – granite/operations/components/mbean

Het Operations Dashboard maakt het ook mogelijk om HC-kaarten in groepen te combineren (zoals reeds gedaan voor “Systeemcontrole” en “Beveiligingscontrole”). Alle samengestelde HC-configuraties worden opgeslagen in de factory org.apache.sling.hc.core.impl.CompositeHealthCheck. Om hier onze aangepaste HC toe te voegen, moeten we een nieuwe configuratie implementeren voor deze factory vanuit de Felix-console of vanuit een configuratiebestand. In het geval van de Felix-console moeten we een “Naam” specificeren voor de HC-groep en “Filtertags”, zodat alle HC’s met deze tags beschikbaar zijn onder deze samengestelde HC-kaart op het Operations Dashboard.
