使用 Glowroot{ #glowroot_tutorial }¶
Glowroot是一个轻量级 Java 应用程序性能监控器,在运行 DHIS2 时,它可以非常有用地提供对性能问题的洞察。
本页旨在提供一个快速概览,以帮助您开始使用 Glowroot。
- [安装](#安装)
- [用法](#用法提示)
安装¶
安装非常简单,在 Glowroot wiki 中已有说明。 我们建议你按照他们的说明进行安装,这些说明涵盖了各种不同的环境。
对于基本设置,只需几个简单的步骤就可以开始使用:
下载并解压 Glowroot{ #download-and-unpack-glowroot }¶
从 releases 页面选择最新版本的 Glowroot,然后解压缩到所需位置。
示例:
# 创建一个安装 glowroot 的位置。我将使用 /opt/glowroot mkdir -p /opt/glowroot # 下载所选版本并解压 cd /opt/glowroot wget https://github.com/glowroot/glowroot/releases/download/v0.13.6/glowroot-0.13.6-dist.zip 解压 glowroot-0.13.6-dist.zip 现在应该有一个名为 /opt/glowroot/glowroot.jar 的文件了 注意:确保运行 DHIS2 服务的用户有写入 glowroot 安装目录的权限。例如,如果以 `dhis` 用户身份在 tomcat 下运行 DHIS2,则 chown -R dhis:/opt/glowroot
将 DHIS2 服务设置为使用 glowroot{ #set-your-dhis2-service-to-use-glowroot }¶
在应用程序服务器的 JVM args 中添加 -javaagent:path/to/glowroot.jar。此步骤在 [此处] 有详细描述(https://github.com/glowroot/glowroot/wiki/Where-are-my-application-server's-JVM-args%3F )。 然后重启 DHIS2,开始使用 glowroot。默认情况下,它可以在 http://localhost:4000上访问。在大多数情况下,您需要远程访问...
设置外部访问 glowroot{ #set-up-external-access-to-glowroot }¶
如果要通过反向代理(如 nginx)访问 glowroot,则应将其配置为重定向到 glowroot 实例。
例如,如果在名为 "myserver.com "的主机上运行nginx,并希望访问 "https://myserver.com/glowroot "的glowroot,则需要在nginx服务器配置中设置重定向,例如
在这种情况下,你需要在nginx服务器配置中设置一个重定向,例如
位置 /glowroot {
proxy_pass http://127.0.0.1:4000/glowroot;
}
glowroot 上下文路径下运行的,因此还需要在 glowroot 配置中进行设置。这可以通过创建(或编辑)admin.json(与 glowroot.jar 位于同一目录)来更改,例如在 web 部分: {
"网络":{
"contextPath":"/glowroot"、
}
}
设置管理员密码{ #set-an-admin-password }¶
在 Glowroot 用户界面的 Administration -> Users 下为管理员账户设置密码
使用技巧{ #usage-tips }¶
Glowroot 界面非常直观,我们鼓励你去探索它,但这里有一些关于需要注意的事项的提示。
交易选项卡{ #transactions-tab }¶
事务 "选项卡提供了应用程序所服务的不同 API 的各种实时信息,以及相关查询、响应时间、慢跟踪等信息。左侧窗格将显示 API 交易总数的概览,选择单个 API 交易类型后,可列出慢跟踪/响应时间/查询的详细明细。对该选项卡的实时监控将有助于确定是否有任何特定的 API 性能不佳。可以在 "慢跟踪 "选项卡中打开 API 的相应 "慢跟踪",该选项卡可提供特定 API 的详细信息。如果从性能不佳的 API 的慢跟踪中检索到 "JVM 线程统计 "和 "查询统计",则可了解问题是否出在特定的慢查询或内存分配过多等方面。
错误 "选项卡{ #errors-tab }¶
错误 "选项卡显示系统执行过程中发生的异常堆栈跟踪。通常需要其他选项卡中的信息才能获得完整的信息。
JVM 选项卡{ #jvm-tab }¶
注意事项
该选项卡有强制 GC(垃圾回收)、堆转储或线程转储等选项,因此应谨慎使用。不必要地使用这些选项会给 JVM 增加额外的压力!
JVM "选项卡中的某些子部分有助于了解 JVM 的当前状态。该选项卡中的一个有用区域是 "Mbean 树 "部分。DHIS2 中的 Mbeans 公开了多个配置。其中一些是连接池配置及其当前状态。它显示了连接池的配置,如 maxPoolSize 和其他参数,以及连接池参数的实时状态,如 numBusyConnections, numConnections, numIdleConnections 等,让人了解连接池的运行情况。如果你注意到 "numBusyConnection "等于 "maxPoolSize "配置,而且数据库并没有在资源上挣扎,那么明智的做法是增加 "maxPoolSize "dhis2 配置,使可用连接池更大。
报告选项卡{ #reporting-tab }¶
报告 "选项卡可用于导出特定日期/时间范围内的任何指标。它支持从 "事务 "选项卡导出响应时间(平均值或百分位数)或事务计数等指标。它还支持导出与 JVM 标签相关的指标,其中包括不同内存空间的指标。在大多数情况下,实时监控和分析就足够了,但最好还是评估一下是否需要导出特定指标供将来参考。
仪器{ #instrumentation }¶
默认情况下,glowroot 会将对端点的所有请求归入一个事务组。当您想对特定流程进行优化并跟踪改进情况时,这可能不是最佳选择。在这种情况下,可以对 glowroot 进行检测,根据 java 方法将请求分成不同的事务组。这可以在配置 -> 仪器中完成。
示例:分别对 /trackedEntityInstances 进行 GET 和 POST{ #example-separate-gets-and-posts-to-trackedentityinstances }¶
撷取跟踪实体实例的速度可能比创建实体实例的速度慢,因此分别监控这些类型的请求可能很有用。为此,可以将以下配置导入 glowroot("Instrumentation -> Import")。
{
"className":"org.hisp.dhis.webapi.controller.event.TrackedEntityInstanceController"、
"methodName":"getTrackedEntityInstances"、
"methodParameterTypes":[
".."
],
"captureKind":"其他"、
"交易类型":"网络"、
"transactionNameTemplate":"/api/trackedEntityInstances:GET" }
}
示例:监控异步请求{ #example-monitor-asynchronous-requests }¶
有些异步请求不易监控。其中一种情况是使用 /tracker 端点导入跟踪器,并将 async 参数设置为 true(适用于 2.37 及以上版本)。这是因为初始请求只会返回作业 ID,而不会等待作业完成。要监控跟踪器导入的内部过程,需要导入以下配置("Instrumentation -> Import")。
{
"className":"org.hisp.dhis.tracker.report.DefaultTrackerImportService"、
"methodName":"importTracker"、
"methodParameterTypes":[
".."
],
"捕获类型":"事务"、
"事务类型":"网络"、
"transactionNameTemplate":"/api/tracker: import"、
"alreadyInTransactionBehavior":"capture-new-transaction"、
"traceEntryMessageTemplate":"{{0}}",
"traceEntryStackThresholdMillis":1000,
"traceEntryCaptureSelfNested": true、
"timerName":"计时器"
}