Taming your CQ/AEM instances with the Apache Sling Health Checks

22
Sling health checks Bertrand Delacretaz Taming your AEM instances with the Apache Sling Health Check Tools Bertrand Delacrétaz Principal Scientist, Adobe CQ/AEM R&D team, Basel Apache Sling committer, ASF Member and (current) Director @bdelacretaz - grep.codeconsult.ch AEMHub London, April 2014 slides revision 2014-04–09, at slideshare.net/bdelacretaz

description

Slides of my "Taming your AEM Instances with the Sling Health Check Tools" at AEMHub London, April 2014 - http://aemhub.cognifide.com/ The FileDetector health check example that I showed during the talk is at https://github.com/bdelacretaz/sling-filedetector-hc

Transcript of Taming your CQ/AEM instances with the Apache Sling Health Checks

Page 1: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Taming yourAEM instances with the Apache Sling Health Check Tools

Bertrand DelacrétazPrincipal Scientist, Adobe CQ/AEM R&D team, Basel Apache Sling committer, ASF Member and (current) Director@bdelacretaz - grep.codeconsult.ch AEMHub London, April 2014 slides revision 2014-04–09, at slideshare.net/bdelacretaz

Page 2: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

picture: anitapeppers on morguefile.com

How  can  you  trust  your  current  (fragile?)  combina?on  of  OSGi  bundles  and  configs?  !

It  needs  live  TESTING.  

Page 3: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Test  code  in  my  produc?on  instance?

picture: melschmitz on morguefile.com

Page 4: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

what do we mean by

Health Checks?

Page 5: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Health  Checks?

public interface HealthCheck { Result execute(); }

public class Result { public boolean isOk() ... public Status getStatus() ... public Iterator<ResultLog.Entry> iterator() ... }

HealthCheckOSGi services

Service props:name, MBean, tags

Page 6: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Webconsole and JMX

Page 7: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Webconsole  /system/console/healthcheck

Page 8: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Health  Check  MBeans  (auto-­‐created)

Service props:

name, MBean, tags

Page 9: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Health  Checks  as  JMX  Processors

MBean

MBean

MBean

HC

HC

HC

using expressions likejmx.attribute('java.lang:type=ClassLoading', 'LoadedClassCount') > 10 && jmx.attribute('java.lang:type=Runtime', 'ManagementSpecVersion') > 1

Page 10: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

JMX  ResourceProvider

curl http://localhost:8080/system/sling/monitoring/mbeans/...queriesStatus.tidy.2.json {

"mbean:objectName": “org.apache.sling.healthcheck:name=qs,type=HealthCheck", "sling:resourceType": "sling:mbean", "hc.name": "Query Performance", "mbean:description": "Health check", "status": "OK", "log": …

Page 11: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

here comes thebig (?)

demo!

(webconsole, JMX, configuration)

Page 12: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

typicalUse Cases

Page 13: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Typical  Use  Cases

System status

All bundles up? Initial content ready? Disk space ok? External services ok? Load within bounds? (for jobs)

Performance

Requests per second ok? Request duration ok? Free memory ok? Replication queues ok?

Configuration

Security checklist ok? Default accounts disabled? Demo content removed?

Self-testStartup smoke tests? Keep history of results? Report to HTTP front-end

http://bit.ly/Qjxh93

Talk to Justin Edelson!

Page 14: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Sling  devops  experiments

https://github.com/bdelacretaz/sling-devops-vol1

Health checks tell the cluster controller when a Sling instance is ready to be injected in the cluster.

Page 15: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

what do you get

Out of the box?

Page 16: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Out  of  the  Box  -­‐  core

JmxAttributeHealthCheck

ScriptableHealthCheck

CompositeHealthCheck

Single JMX attributes

Script(let)s in any languageusing BindingValuesProviders

Run other Health Checks based on their tags

Page 17: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Out  of  the  box  -­‐  support  bundle

SlingRequestStatusHC

DefaultLoginsHealthCheck

Is my resource there? Including its scripts?

admin:admin -> fail?

current HC bundles: org.apache.sling.hc.core org.apache.sling.hc.support org.apache.sling.hc.webconsole org.apache.sling.hc.samples

JUnitHealthCheckAnd also:

From the junit.healthcheck bundle

Page 18: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

how do you write

Your own Health Checks?

Page 19: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

BYOHC  -­‐  Bring  Your  Own  HCs  !

@Component(...policy=ConfigurationPolicy.REQUIRE, metatype=true) @Service(value=HealthCheck.class) !

@Property(name=HealthCheck.NAME), @Property(name=HealthCheck.TAGS,unbounded=PropertyUnbounded.ARRAY), @Property(name=HealthCheck.MBEAN_NAME) !

public class MyHealthCheck { public Result execute() { FormattingResultLog f = new FormattingResultLog(); ... if(badThings) f.warn(“Something happened with {}”, foo); return new Result(f); } }

Page 20: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Health ChecksExecutor

Page 21: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

Health  Check  Executor  Service

public interface HealthCheckExecutor { !

List<HealthCheckExecutionResult> execute(String... tags); !

}

Executes HCs selected by tags, with caching. Result includes execution metadata, timeout info etc.

Page 22: Taming your CQ/AEM instances with the Apache Sling Health Checks

Sling  health  checks      -­‐      Bertrand  Delacretaz

docs at sling.apache.org : bundles : health check. discuss on the Apache Sling dev list.

I’m @bdelacretaz - thanks!

JMX processors

Webconsole

JmxAttributeHealthCheck

ScriptableHealthCheck

CompositeHealthCheck

SlingRequestStatusHC

DefaultLoginsHealthCheck

JUnitHealthCheck

That’s  it!  Have  fun.

@Service(HealthCheck.class)public class MyHealthCheck { ....generate a Result here… }