Show Menu
主题×

操作仪表板

简介

AEM 6中的“操作”仪表板可帮助系统操作员一览地监视AEM系统运行状况。 它还提供有关AEM相关方面的自动生成的诊断信息,并允许配置和运行自包含的维护自动化,从而显着减少项目操作和支持案例。 “操作”仪表板可通过自定义运行状况检查和维护任务进行扩展。 此外,操作仪表板数据可通过JMX从外部监视工具访问。
运营仪表板:
  • 是一键式系统状态,帮助运营部门提高效率
  • 在一个集中的位置提供系统运行状况概述
  • 缩短查找、分析和修复问题的时间
  • 提供自带的维护自动化功能,有助于显着降低项目运营成本
可以从AEM欢迎屏幕转 到工 - 操作,访问它。
要能够访问“操作”仪表板,登录用户必须是“操作员”用户组的一部分。 有关详细信息,请参阅有关用户、 组和访问权限管理的文档

健康报表

运行状况报告系统通过Sling运行状况检查提供AEM实例的运行状况信息。 这可以通过OSGI、JMX、HTTP请求(通过JSON)或通过触屏UI来完成。 它优惠某些可配置计数器的度量值和阈值,在某些情况下,将优惠有关如何解决该问题的信息。
它具有以下几个功能。

运行状况检查

健康 报告 (Health Reports)是一个卡片系统,表明特定产品区域的健康状况是否良好。 这些卡是Sling运行状况检查的可视化功能,它将来自JMX和其他来源的数据聚合,并再次以MBean的身份显示处理的信息。 这些MBean还可在JMX Web控 制台中 ,在 org.apache.sling.healthcheck域下进行检查
运行状况报告界面可通过AEM欢迎屏 幕上的 工具 - 操作 - 运行状况报告,或直接通过以下URL进行访问:
https://<serveraddress>:port/libs/granite/operations/content/healthreports/healthreportlist.html
卡系统显示三种可能的状态: 确定 , 警告 , 严重 。 这些状态是规则和阈值的结果,可以通过将鼠标悬停在卡上并单击操作栏中的齿轮图标来配置这些规则和阈值:

运行状况检查类型

AEM 6中有两种类型的运行状况检查:
  1. 个人运行状况检查
  2. 综合运行状况检查
“个 人健康检查 ”是与状态卡对应的单个健康检查。 单个运行状况检查可以配置规则或阈值,并可提供一个或多个提示和链接以解决已识别的运行状况问题。 让我们以“日志错误”检查为例: 如果实例日志中有ERROR条目,您将在运行状况检查的详细信息页面上找到它们。 在页面顶部,您将在“诊断工具”部分看到指向“日志消息”分析器的链接,该链接将使您能够更详细地分析这些错误并重新配置记录器。
合运行状况检查 (Composite Health Check)是一种检查,可从多个单独的检查中聚合信息。
复合运行状况检查是借助过滤器标 签配置的 。 本质上,具有相同筛选器标签的所有单个检查都将被分组为复合运行状况检查。 仅当聚合的所有单个检查都具有“OK”状态时,“Composite Health Check”(综合运行状况检查)才会具有“OK”状态。

如何创建运行状况检查

在“操作”仪表板中,您可以直观地显示单个运行状况检查和复合运行状况检查的结果。

创建单个运行状况检查

创建单个运行状况检查涉及两个步骤: 实施Sling运行状况检查并在仪表板的配置节点中添加运行状况检查项。
  1. 要创建Sling运行状况检查,您需要创建实施Sling HealthCheck界面的OSGI组件。 您将此组件添加到捆绑包中。 组件的属性将完全标识运行状况检查。 安装该组件后,将自动为运行状况检查创建JMX MBean。 有关更多 信息,请参阅Sling Health Check文档。
    Sling Health Check组件的示例,它用OSGI服务组件注释编写:
    @Component(service = HealthCheck.class,
    property = {
        HealthCheck.NAME + "=Example Check",
        HealthCheck.TAGS + "=example",
        HealthCheck.TAGS + "=test",
        HealthCheck.MBEAN_NAME + "=exampleHealthCheckMBean"
    })
     public class ExampleHealthCheck implements HealthCheck {
        @Override
        public Result execute() {
            // health check code
        }
     }
    
    
    MBEAN_NAME 属性定义将为此运行状况检查生成的mbean的名称。
  2. 创建运行状况检查后,需要创建新的配置节点,以便在“操作”仪表板界面中访问该节点。 对于此步骤,必须知道运行状况检查的JMX Mbean名称(属 MBEAN_NAME 性)。 要为运行状况检查创建配置,请打开CRXDE,并在以下路径下添加新节点( nt:unstructured )类型: /apps/settings/granite/operations/hc
    新节点上应设置以下属性:
    • 名称: sling:resourceType
      • 类型: String
      • 值: granite/operations/components/mbean
    • 名称: resource
      • 类型: String
      • 值: /system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheck/exampleHealthCheck
    上面的资源路径按如下方式创建: 如果运行状况检查的mbean名称为“test”,则在路径末尾添加“test” /system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheck
    因此,最终的路径是:
    /system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheck/test
    确保路径 /apps/settings/granite/operations/hc 的以下属性设置为true:
    sling:configCollectionInherit
    sling:configPropertyInherit
    这将告知配置管理器将新配置与现有配置合并 /libs

创建复合运行状况检查

综合运行状况检查的作用是聚合多个共享一组常见功能的独立运行状况检查。 例如,安全组合运行状况检查将执行与安全相关验证的所有单个运行状况检查组合在一起。 创建复合检查的第一步是添加新的OSGI配置。 要使其显示在“操作”仪表板中,需要添加新的配置节点,这与我们对简单检查所做的相同。
  1. 转到OSGI控制台中的Web配置管理器。 您可以通过访问 https://serveraddress:port/system/console/configMgr
  2. 搜索名为Apache Sling Composite Health Check的条目 。 找到它后,请注意已有两种配置可用: 一个用于系统检查,另一个用于安全检查。
  3. 通过按配置右侧的“+”按钮创建新配置。 将出现一个新窗口,如下所示:
  4. 创建配置并保存。 将使用新配置创建Mbean。
    每个配置属性的用途如下:
    • 名称(hc.name): 复合运行状况检查的名称。 建议使用有意义的名称。
    • 标记(hc.tags): 此运行状况检查的标记。 如果此复合运行状况检查是另一个复合运行状况检查的一部分(如在运行状况检查的层次结构中),请添加此复合健康检查与之相关的标记。
    • MBean名称(hc.mbean.name): 此复合运行状况检查的JMX MBean将指定给的Mbean的名称。
    • 筛选标记(filter.tags): 这是特定于复合运行状况检查的属性。 这些是合成应聚合的标记。 复合运行状况检查将聚合其组下的所有运行状况检查,这些检查具有与此复合的任何过滤器标签匹配的任何标签。 例如,具有过滤器测试和检查的 复合运行状况检查 将聚合所有具 有测试 和检查 标签属性( PH)的 hc.tags 单独和复合运行状况检查。
    将为Apache Sling Composite Health Check的每个新配置创建一个新的JMX Mbean。**
  5. 最后,需要在“操作仪表板”配置节点中添加刚刚创建的复合运行状况检查的条目。 此过程与单个运行状况检查的过程相同: 需要在 下创建nt :unstructured类型的节点 /apps/settings/granite/operations/hc 。 节点的资源属性将由OSGI配置中 hc.mean.name的值 定义。
    例如,如果您创建了配置并将hc. mbean.name值设置 为diskusage ,则配置节点将如下所示:
    • 名称: Composite Health Check
      • 类型: nt:unstructured
    使用以下属性:
    • 名称: sling:resourceType
      • 类型: String
      • 值: granite/operations/components/mbean
    • 名称: resource
      • 类型: String
      • 值: /system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheck/diskusage
    如果您创建逻辑上属于复合检查的单个运行状况检查(默认情况下,该复合检查在仪表板中已存在),它们将自动捕获并分组在相应的复合检查下。 因此,无需为这些检查创建新的配置节点。
    例如,如果您创建单个安全运行状况检查,您只需将其分配为“ security ”标记,它就会安装,它将自动显示在“操作”仪表板的“安全检查”组合检查下。

AEM附带的运行状况检查

zHealthcheck名称 描述
查询性能
此运行状况检查在AEM 6.4中已得 到简化 Oak QueryStats ,现在可以检查最近重构的 SlowQueries MBean,更确切地说是属性。 如果统计数据包含任何慢速查询,运行状况检查将返回警告。 否则,返回“确定”状态。
观察队列长度
观察队列长度迭代所有事件监听器和背景观察器,将其与 queueSize 其和 maxQueueSize :
  • 如果值超过值 queueSize (即事件 maxQueueSize 将被删除时),则返回关键状态
  • 返回警告, queueSize 如果值超 maxQueueSize * WARN_THRESHOLD 过(默认值为0.75)
每个队列的最大长度来自不同的配置(Oak和AEM),不能通过此运行状况检查进行配置。 此运行状况检查的 MBean为org.apache.sling.healthcheck:name=OpercationQueueLengthHealthCheck,type=HealthCheck
查询遍历限制
查询遍历限制检 QueryEngineSettings 查MBean,更确切地 LimitInMemory 检查 LimitReads MBean和属性,并返回以下状态:
  • 如果其中一个限制等于或高于 Integer.MAX_VALUE
  • 如果某个限制低于10000,则返回“警告”状态(Oak的推荐设置)
  • 如果无法检索限制或 QueryEngineSettings 任何限制,则返回“关键”状态
同步的时钟
此检查仅与文档节点 存储群集相关 。 它返回以下状态:
  • 当实例时钟不同步并超出预定的低阈值时,返回“警告”状态
  • 当实例时钟不同步并超过预定义的高阈值时返回“关键”状态
异步索引
异步索引检查:
  • 如果至少一个索引通道出现故障,则返回关键状态
  • 检查所有 lastIndexedTime 索引通道,并:
    • 如果超过2小时前返回关键状态
    • 如果在2小时到45分钟之前,返回警告状态
    • 如果45分钟前不到,则返回“OK”状态
  • 如果没有满足这些条件,则返回“确定”状态
“严重”和“警告”状态阈值均可配置。 此运行状况检查的 Mbean为org.apache.sling.healthcheck:name=asyncIndexHealthCheck,type=HealthCheck
注意: 此运行状况检查在AEM 6.4中可用,并已支持到AEM 6.3.0.1。
大型 Lucene 索引
此检查使用MBean公开的数 Lucene Index Statistics 据来标识大索引并返回:
  • 如果有超过10亿文档的指数,则警告状态
  • 如果有超过15亿文档的指数,则处于关键状态
注意: 此检查在AEM 6.4中可用,并已支持到AEM 6.3.2.0。
系统维护
系统维护是一个复合检查,如果所有维护任务都按配置运行,则返回“确定”。 请记住:
  • 每个维护任务都伴有相关的运行状况检查
  • 如果任务未添加到维护窗口,其运行状况检查将返回“关键”
  • 您需要配置“审核日志”和“工作流清除”维护任务,或者以其他方式从维护窗口中删除它们。 如果未配置,这些任务在首次尝试运行时将失败,因此系统维护检查将返回“关键”状态。
  • 在AEM 6.4中 ,还检查Lucene二进制文 件维护任务
  • 在AEM 6.2和更低版本上,系统维护检查会在启动后立即返回警告状态,因为任务从不运行。 从6.3开始,如果尚未到达第一个维护窗口,他们将返回“OK(正常)”。
复制队列
此检查重复复制代理并查看其队列。 对于队列顶部的项,检查代理重试复制的次数。 如果代理重试的复制次数超过参数 numberOfRetriesAllowed 的值,则返回警告。 该参 numberOfRetriesAllowed 数是可配置的。
Sling 作业
Sling Jobs检查在JobManager中排队的作业数,将其与阈值 maxNumQueueJobs 比较,并:
  • 如果队列中的数量 maxNumQueueJobs 超过,则返回严重
  • 如果存在长时间运行的活动作业超过1小时,则返回关键
  • 如果存在排队的作业,并且上次完成的作业时间早于1小时,则返回关键
只能配置排队作业参数的最大数量,其默认值为1000。
请求性能
此检查将查看Sling granite.request.metrics.timer 和:
  • 如果第75百分点值超过临界阈值(默认值为500毫秒),则返回临界值
  • 返回当第75百分点值超过警告阈值时发出警告(默认值为200毫秒)
日志错误
如果日志中存在错误,此检查将返回“警告”状态。
磁盘空间
磁盘空间检查会查 FileStoreStats 看MBean,检索节点存储的大小和节点存储分区上的可用磁盘空间量,以及:
  • 如果可用磁盘空间与存储库大小比小于警告阈值(默认值为10),则返回警告
  • 如果可用磁盘空间与存储库大小比小于关键阈值(默认值为2),则返回关键值
这两个阈值都可配置。 该检查仅适用于具有区段存储的实例。
计划程序运行状况检查
如果实例的Quartz作业运行时间超过60秒,此检查将返回警告。 可配置可接受的持续时间阈值。
安全检查
安全检查是一个组合,它聚合多个与安全相关的检查的结果。 这些单独的运行状况检查可解决与安全清单文档页上提供的安全清 单不同的问题。 该检查在实例启动时可用作安全烟雾测试。
活动包
活动包检查所有包的状态,并:
  • 返回“警告”状态(如果任何包未激活)或(以延迟激活开始)
  • 它忽略忽略忽略列表中包的状态
可以配置忽略列表参数。
代码缓存检查
这是一个运行状况检查,它验证几个JVM条件,这些条件可以触发Java 7中存在的CodeCache错误:
  • 在启用代码缓存刷新的情况下,返回在Java 7上运行实例时发出警告
  • 返回警告,如果实例在Java 7上运行,且保留代码缓存大小小于最小阈值(默认值为90MB)
阈值 minimum.code.cache.size 是可配置的。 有关该错误的详细信息,请 查看 view_bug.do?bug_id=8012547view_bug.do?bug_id=8012547 本页
资源搜索路径错误
检查路径中是否有任何资源, /apps/foundation/components/primary 并:
  • 返回警告:如果存在子节点 /apps/foundation/components/primary

使用Nagios进行监视

运行状况检查仪表板可以通过Granite JMX Mbeans与Nagios集成。 以下示例说明如何在运行AEM的服务器上添加一个检查,其中显示已使用的内存。
  1. 在监视服务器上安装和安装Nagios。
  2. 然后,安装Nagios Remote Plugin Executor(NRPE)。
    有关如何在系统上安装Nagios和NRPE的详细信息,请查阅Nagios 文档
  3. 为AEM服务器添加主机定义。 这可以通过Nagios XI Web界面使用配置管理器来完成:
    1. 打开浏览器并指向Nagios服务器。
    2. 按顶 部菜 单中的“配置”按钮。
    3. 在左窗格中,按“Advanced Configuration(高 级配置)”下 的“Core Config Manager(核心配置管理器) ”。
    4. 按“监 ”部分下 的Hosts 链接。
    5. 添加主机定义:
    以下是主机配置文件的示例,如果您使用的是Nagios Core:
    define host {
       address 192.168.0.5
       max_check_attempts 3
       check_period 24x7
       check-command check-host-alive
       contacts admin
       notification_interval 60
       notification_period 24x7
    }
    
    
  4. 在AEM服务器上安装Nagios和NRPE。
  5. 在两台 服务器上安装check_http _json插件。
  6. 在两台服务器上定义通用JSON检查命令:
    define command{
    
        command_name    check_http_json-int
    
        command_line    /usr/lib/nagios/plugins/check_http_json --user "$ARG1$" --pass "$ARG2$" -u 'https://$HOSTNAME$:$ARG3$/$ARG4$' -e '$ARG5$' -w '$ARG6$' -c '$ARG7$'
    
    }
    
    
  7. 在AEM服务器上添加已用内存的服务:
    define service {
    
        use generic-service
    
        host_name my.remote.host
    
        service_description AEM Author Used Memory
    
        check_command  check_http_json-int!<cq-user>!<cq-password>!<cq-port>!system/sling/monitoring/mbeans/java/lang/Memory.infinity.json!{noname}.mbean:attributes.HeapMemoryUsage.mbean:attributes.used.mbean:value!<warn-threshold-in-bytes>!<critical-threshold-in-bytes>
    
        }
    
    
  8. 检查您的Nagios仪表板以了解新创建的服务:

Diagnosis tools

操作仪表板还提供对诊断工具的访问,这些工具可以帮助查找和排除来自运行状况检查仪表板的警告的根本原因,并为系统操作员提供重要的调试信息。
其最重要的功能包括:
  • 日志消息分析器
  • 能够访问堆和线程转储
  • 请求和查询性能分析器
您可以从AEM欢迎屏幕转到工具- 操作——诊断,来进入 “诊断工具”屏幕。 您还可以通过直接访问以下URL来访问屏幕: https://serveraddress:port/libs/granite/operations/content/diagnosis.html

日志消息

默认情况下,日志消息用户界面将显示所有ERROR消息。 如果要显示更多日志消息,您需要配置具有相应日志级别的记录器。
日志消息使用内存日志附加器,因此与日志文件无关。 另一个结果是更改此UI中的日志级别不会更改传统日志文件中记录的信息。 在此UI中添加和删除记录程序只会影响内存记录程序。 另外,请注意,更改记录器配置将反映在内存记录器的将来——已记录且不再相关的条目不会被删除,但类似条目将来不会记录。
您可以通过在UI中从左上角的齿轮按钮提供记录器配置来配置记录内容。 您可以在此添加、删除或更新记录器配置。 记录器配置由日志级 (WARN / INFO / DEBUG)和过滤器 名称组成 。 筛 选器名 称具有筛选日志消息源的角色。 或者,如果记录器应捕获指定级别的所有日志消息,则过滤器名称应为“ root ”。 设置记录器的级别将触发所有消息的捕获,其级别等于或高于指定的级别。
示例:
  • 如果您计划捕获所有 ERROR 消息——无需配置。 默认情况下,会捕获所有ERROR消息。
  • 如果您计划捕获所 有ERROR WARN INFO消息——记录器名称应设置为: “ root ”和记录器级别: 信息
  • 如果您计划捕获来自特定包的所有消息(例如com.adobe.granite)-记录器名称应设置为: “com.adobe.granite”和记录器级别: 调试 (这将捕获所 有ERROR 、WARN INFO 和DEBUG消息 ),如下图所示。
无法设置记录器名称以通过指定的过滤器仅捕获ERROR消息。 默认情况下,会捕获所有ERROR消息。
日志消息用户界面不反映实际错误日志。 除非您在UI中配置其他类型的日志消息,否则将只显示错误消息。 有关如何显示特定日志消息,请参阅上面的说明。
诊断页面中的设置不会影响记录到日志文件的内容,反之亦然。 因此,尽管错误日志可能会捕获INFO消息,但您可能在日志消息UI中看不到这些消息。 此外,通过UI,可以从某些包中捕获DEBUG消息,而不会影响错误日志。 有关如何配置日志文件的详细信息,请参 阅日志
在AEM 6.4中 ,维护任务在INFO级别以更多信息丰富格式注销。 这允许更好地了解维护任务的状态。
如果您使用第三方工具(如Splunk)来监视和维护任务活动并做出响应,则可以使用以下日志语句:
Log level: INFO
DATE+TIME [MaintanceLogger] Name=<MT_NAME>, Status=<MT_STATUS>, Time=<MT_TIME>, Error=<MT_ERROR>, Details=<MT_DETAILS>

请求性能

“请求性能”页允许分析处理的最慢页面请求。 此页面上仅注册内容请求。 具体而言,将捕获以下请求:
  1. 访问资源的请求 /content
  2. 访问资源的请求 /etc/design
  3. 具有扩展的请 ".html"
此时将显示页面:
  • 发出请求的时间
  • URL和请求方法
  • 持续时间(以毫秒为单位)
默认情况下,会捕获最慢的20个页面请求,但可以在配置管理器中修改此限制。

查询性能

“查询性能”页允许分析系统执行的最慢查询。 此信息由JMX Bean中的存储库提供。 在Jackrabbit中, com.adobe.granite.QueryStat JMX Mbean提供此信息,而在Oak存储库中,它由 org.apache.jackrabbit.oak.QueryStats.
此时将显示页面:
  • 制作查询的时间
  • 查询语
  • 发布查询的次数
  • 查询声明
  • 持续时间(以毫秒为单位)

说明查询

对于任何给定查询,Oak都会尝试根据存储库中oak:index节点下定义的Oak索引找到最 佳执行方 法。 根据查询,Oak可以选择不同的索引。 了解Oak如何执行查询是优化查询的第一步。
Explain查询是一个工具,用于说明Oak如何执行查询。 可以从AEM欢迎屏幕转 到工具——操作 -诊断,然后单击 查询性能 ,并切换到解 释查询选项卡
功能
  • 支持Xpath、JCR-SQL和JCR-SQL2查询语言
  • 报告提供查询的实际执行时间
  • 检测速度较慢的查询并警告可能速度较慢的查询
  • 报告用于执行查询的Oak索引
  • 显示实际Oak查询引擎说明
  • 提供慢速和流行查询的点击加载列表
进入“解释查询UI”后,只需输入查询并按“解释”按钮即可 使用 :
“查询说明”部分中的第一个条目是实际说明。 说明将显示用于执行查询的索引类型。
第二项是执行计划。
在运行 查询之前 ,勾选“包括执行时间”框还将显示查询的执行时间,以便获得更多可用于优化应用程序或部署索引的信息。

索引管理器

索引管理器的目的是便于索引管理,如维护索引或查看其状态。
可以从欢迎屏幕转到​ 工具——操作——诊断 ,然后单击索引管理器按 钮访问
也可以通过以下URL直接访问它: https://serveraddress:port/libs/granite/operations/content/diagnosistools/indexManager.html
UI可用于通过在屏幕左上角的搜索框中键入筛选条件来筛选表中的索引。

下载状态ZIP

这将触发下载包含有关系统状态和配置的有用信息的zip文件。 该归档文件包含实例配置、捆绑包列表、OSGI、Sling指标和统计信息,这可能会生成大文件。 您可以使用“下载状态ZIP”窗口来减少大型状 态文件的 ​影响。 窗口可从以下位置访问: AEM >工具>操作>诊断>下载状态ZIP。
在此窗口中,您可以选择要导出的内容(日志文件和线程转储)以及下载中包含的相对于当前日期的日志天数。

下载线程转储

这将触发下载包含系统中线程相关信息的zip文件。 提供了有关每个线程的信息,如其状态、类加载器和堆栈跟踪。

下载堆转储

您还可以下载堆的快照,以便稍后分析它。 请注意,这将触发以数百兆字节的顺序下载大型文件。

自动维护任务

“自动维护任务”页是一个位置,您可以在该页视图和跟踪计划定期执行的推荐维护任务。 任务与运行状况检查系统集成。 任务也可以从界面手动执行。
要转到“操作”仪表板的“维护”页,您需要从AEM欢迎屏幕转 到“工具”-“操作”-“仪表板” -“维护”,或直接转到以下链接:
https://serveraddress:port/libs/granite/operations/content/maintenance.html
以下任务在“操作”仪表板中可用:
  1. “Revision Clean Uptask(修 ​订清理升级任务)”位于“Daily Maintenance Window(每 日维护窗口) ”菜单下。
  2. Lucene Binaries Cleanup 任务,位于Daily Maintenance Window (每日维护窗口)菜单 下。
  3. 工作 流清除任务 ,位于“每周维护 窗口”菜单下
  4. “数 据存储垃圾收集 ”任务,位于“每周 维护窗口”菜单
  5. “Audit Log Maintenance (审核日志维护 )”任务,位于“Weekly Maintenance(每周 维护)窗口”菜单下。
  6. Version Purge Maintenance (版本清除维护 )”任务,位于“Weekly Maintenance Window(每 周维护窗口)”菜单下。
每日维护窗口的默认时间是凌晨2点到5点。 配置为在每周维护窗口中运行的任务将在星期六的上午1点到2点之间执行。
您还可以通过按任意两个维护卡上的齿轮图标来配置时间:
自AEM 6.1起,还可以将现有维护窗口配置为每月运行一次。

修订清理

有关执行修订清理的详细信息,请 参阅此专用文章

Lucene 二进制文件清理

通过使用Lucene二进制清除任务,可以清除lucene二进制文件并减少正在运行的数据存储大小要求。 这是因为lucene的二进制服务器服务器服务器将每天重新申请,而不是以前对成功运行数据存储 垃圾收集的依赖
虽然开发维护任务是为了减少与Lucene相关的修改垃圾,但运行任务时总体效率有所提高:
  • 每周执行数据存储垃圾收集任务将更快完成
  • 它还可以略微提高AEM的整体性能
您可以从以下位置访问Lucene二进制文件清除任务: AEM >工具>操作>维护>每日维护窗口> Lucene二进制文件清理

数据存储垃圾收集

有关数据存储垃圾收集的详细信息,请参阅专用 文档页

Workflow purge

工作流也可以从维护仪表板中清除。 要运行“工作流清除”任务,您需要:
  1. 单击“每周 维护窗口 ”页。
  2. 在下一页中,单击“工 作流 ”清除卡 中的“播放 ”按钮。
有关工作流维护的详细信息,请参 阅此页

审核日志维护

有关审核日志维护,请参阅单 独的文档页面。

版本清除

您可以计划“版本清除”维护任务,以自动删除旧版本。 因此,这会最大限度地减少手动使用版本清 除工具的需求 。 您可以通过访问“工具”>“操作”>“维护”>“每周维 护窗口”并执行以下步骤来计划和配置“版本清除 ”任务,具体方法如下:
  1. 单击“添 ”按钮。
  2. 下拉菜单 中选择版本清除。
  3. 要配置“版本清除”任务,请单击新 创建 “版本清除”维护卡上的齿轮图标。
在AEM 6.4中 ,您可以按如下方式停止版本清除维护任务:
  • 自动——如果计划的维护窗口在任务完成之前关闭,任务会自动停止。 下次维护窗口打开时,它将恢复。
  • 手动——要手动停止任务,请在“版本清除”维护卡上单击“停 ”图标。 下次执行时,任务将安全恢复。
停止维护任务意味着暂停其执行,而不丢失对已进行作业的跟踪。
要优化存储库大小,您应经常运行版本清除任务。 任务应在业务时间以外安排,当流量有限时。

自定义维护任务

自定义维护任务可以作为OSGi服务实现。 由于维护任务基础结构基于Apache Sling的作业处理,因此维护任务必须实现java接口 [org.apache.sling.event.jobs.consumer.JobExecutor](https://sling.apache.org/apidocs/sling7/org/apache/sling/event/jobs/consumer/JobExecutor.html) 。 此外,它必须声明若干服务注册属性作为维护任务进行检测,如下所示:
服务属性名称 描述 示例 类型
granite.maintenance.isStoppable 布尔属性,用于定义用户是否可以停止任务。 如果任务声明其可停止,则必须在执行过程中检查其是否已停止,然后相应地执行。 默认值为false。 true 可选
granite.maintenance.mandatory 布尔属性,用于定义任务是否为必填项并且必须定期运行。 如果任务是强制计划,但当前不在任何活动的窗口中,运行状况检查会将此报告为错误。 默认值为false。 true 可选
granite.maintenance.name 任务的唯一名称——此名称用于引用任务。 这通常是一个简单的名称。 MyMaintenanceTask 必填
granite.maintenance.title 此任务显示的标题 我的特殊维护任务 必填
job.topics 这是维护任务的一个独特主题。 Apache Sling作业处理将完全开始具有此主题的作业以执行维护任务,并在为此主题注册任务时执行该主题。 主题必须与 com/adobe/granite/maintenance/job/开始 com/adobe/granite/maintenance/job/MyMaintenanceTask 必填
除了上述服务属性外, process() 还需要 JobConsumer 通过添加应为维护任务执行的代码来实现接口的方法。 提供的 JobExecutionContext 状态信息可用于输出状态信息,检查用户是否停止了作业并创建结果(成功或失败)。
如果维护任务不应在所有安装上运行(例如,仅在发布实例上运行),则可以通过添加使服务需要配置才能处于活动状态 @Component(policy=ConfigurationPolicy.REQUIRE) 。 然后,您可以根据配置将其标记为运行模式(取决于存储库中)。 有关详细信息,请参 阅配置OSGi
下面是一个自定义维护任务的示例,该自定义维护操作从可配置的临时目录中删除文件,这些临时目录在过去24小时内已被修改:
src/main/java/com/adobe/granite/samples/maintenance/impl/DeleteTempFilesTask.java
/*
* #%L
* sample-maintenance-task
* %%
* Copyright (C) 2014 Adobe
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package com.adobe.granite.samples.maintenance.impl;
import java.io.File;
import java.util.Calendar;
import java.util.Collection;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.event.jobs.Job;
import org.apache.sling.event.jobs.consumer.JobConsumer;
import org.apache.sling.event.jobs.consumer.JobExecutionContext;
import org.apache.sling.event.jobs.consumer.JobExecutionResult;
import org.apache.sling.event.jobs.consumer.JobExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.granite.maintenance.MaintenanceConstants;
@Component(metatype = true,
label = "Delete Temp Files Maintenance Task",
description = "Maintatence Task which deletes files from a configurable temporary directory which have been modified in the last 24 hours.")
@Service
@Properties({
@Property(name = MaintenanceConstants.PROPERTY_TASK_NAME, value = "DeleteTempFilesTask", propertyPrivate = true),
@Property(name = MaintenanceConstants.PROPERTY_TASK_TITLE, value = "Delete Temp Files", propertyPrivate = true),
@Property(name = JobConsumer.PROPERTY_TOPICS, value = MaintenanceConstants.TASK_TOPIC_PREFIX
+ "DeleteTempFilesTask", propertyPrivate = true) })
public class DeleteTempFilesTask implements JobExecutor {
private static final Logger log = LoggerFactory.getLogger(DeleteTempFilesTask.class);
@Property(label = "Temporary Directory", description="Temporary Directory. Defaults to the java.io.tmpdir system property.")
private static final String PROP_TEMP_DIR = "temp.dir";
private File tempDir;
@Activate
private void activate(Map<string, object=""> properties) {
this.tempDir = new File(PropertiesUtil.toString(properties.get(PROP_TEMP_DIR),
System.getProperty("java.io.tmpdir")));
}
@Override
public JobExecutionResult process(Job job, JobExecutionContext context) {
log.info("Deleting old temp files from {}.", tempDir.getAbsolutePath());
Collection<file> files = FileUtils.listFiles(tempDir, new LastModifiedBeforeYesterdayFilter(),
TrueFileFilter.INSTANCE);
int counter = 0;
for (File file : files) {
log.debug("Deleting file {}.", file.getAbsolutePath());
counter++;
file.delete();
// TODO - capture the output of delete() and do something useful with it
}
return context.result().message(String.format("Deleted %s files.", counter)).succeeded();
}
/**
* IOFileFilter which filters out files which have been modified in the last 24 hours.
*
*/
private static class LastModifiedBeforeYesterdayFilter implements IOFileFilter {
private final long minTime;
private LastModifiedBeforeYesterdayFilter() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
this.minTime = cal.getTimeInMillis();
}
@Override
public boolean accept(File dir, String name) {
// this method is never actually called.
return false;
}
@Override
public boolean accept(File file) {
return file.lastModified() <= this.minTime;
}
}
}
<file></string,>
部署服务后,它将暴露在“操作”仪表板UI中。 您可以将其添加到可用的维护计划之一:
这将在/apps/granite/operations/config/maintenance/ schedule //添加相应资源 taskname 。 如果任务依赖于运行模式,则需要在该节点上设置granite.operations.conditions.runmode属性,其值必须为此维护任务的活动运行模式。

系统概览

系统概述 ”仪表板显示AEM实例的配置、硬件和运行状况的高级概述。 这意味着系统运行状况是透明的,所有信息都会聚集到一个仪表板中。
您还可以观 看此视频 ,了解“系统概述”仪表板。

如何访问

要访问“系统概述”仪表板,请导航到 工具>操作>系统概述

系统概述仪表板说明

下表描述了“系统概述”仪表板中显示的所有信息。 请记住,当没有要显示的相关信息(例如,备份尚未进行,没有关键的运行状况检查)时,相应的部分将显示“无条目”消息。
您还可以通过单 JSON 击仪表板右上角的“ 下载 ”按钮来下载汇总仪表板信息的文件。端点是 JSON /libs/granite/operations/content/systemoverview/export.json ,可用于外部监 curl 视的脚本中。
区域 显示哪些信息 什么时候关键 链接到
运行状况检查
  • 处于“关键”状态的列表检查
  • 处于“警告”状态的列表检查
可视指示:
  • 关键检查的红色标签
  • 警告检查的橙色标签
  • 运行状况报告页面
维护任务
  • 一列表失败的任务
  • 列表当前运行的任务
  • 一列表任务在上一轮选举中成功
  • 一列表任务从未跑过
  • 未计划的列表任务
可视指示:
  • 失败任务的红色标记
  • 用于运行任务的橙色标签(因为它们可能影响性能)
  • 其他状态均为灰色标记
  • 维护任务页
系统
  • 操作系统和操作系统版本(例如,Mac OS X)
  • 系统负载平均值,从OperatingSystemMXBeanusable中检
  • 磁盘空间(在主目录所在的分区上)
  • 最大堆,由MemoryMXBean返
不适用 不适用
实例
  • AEM版本
  • 列表运行模式
  • 实例开始的日期
不适用 不适用
存储库
  • Oak版
  • 节点存储类型(段Tar或文档)
    • 如果类型是文档,则显示文档存储的类型(RDB或Mongo)
  • 如果存在自定义数据存储:
    • 对于文件数据存储,将显示路径
    • 对于S3数据存储,将显示S3存储段的名称
    • 对于共享的S3数据存储,将显示S3存储段的名称
    • 对于Azure数据存储,将显示容器
  • 如果没有自定义外部数据存储,则显示一条消息,指明此情况
不适用 不适用
分发代理
  • 列表队列被阻止的代理
  • 列表配置错误的代理(“配置错误”)
  • 队列处理暂停的代理列表
  • 一列表闲置代理
  • 运行代理的列表(当前正在处理条目)
可视指示:
  • 被阻止的代理或配置错误的红色标记
  • 暂停的代理的橙色标签
  • 暂停、空闲或正在运行的代理的灰色标记
分发页
复制代理
  • 列表队列被阻止的代理
  • 一列表闲置代理
  • 运行代理的列表(当前正在处理条目)
可视指示:
  • 被阻止的代理的红色标签
  • 暂停代理的灰色标记
复制页
工作流
  • 工作流作业:
    • 失败的工作流作业数(如果有)
    • 已取消的工作流作业数(如果有)
  • 工作流计数——处于给定状态的工作流数(如果有):
    • 运行
    • 失败
    • 暂停
    • 中止
对于以上显示的每种状态,将执行查询,限制为400毫秒。 在400毫秒时,将显示截至该点获取的条目数。
未解释:
  • 用户应调查是否存在意外状态的工作流和作业。
“工作流失败”页
Sling 作业
Sling作业计数——处于给定状态的作业数(如果有):
  • 失败
  • 排队
  • 已取消
  • 活动
未解释:
  • 用户应调查哪些作业处于意外状态或计数较高。
不适用
预计节点计数
估计数量:
  • 资产
  • 标记
  • 可创作
  • 节点总数
节点总数从nodeCounterMBean获取,其余统计信息则从IndexInfoService获取。
不适用 不适用
备份 如果出现这种情况,则显示“正在进行联机备份”。 不适用 不适用
索引
显示:
  • "正在进行索引"
  • "正在进行查询"
如果在线程转储中存在索引或查询线程。
不适用 不适用