监控 JanusGraph
JanusGraph 中的指标
JanusGraph 支持 Metrics。JanusGraph 可以测量以下内容
-
已开始、已提交和已回滚的事务数
-
每种存储后端操作类型的尝试次数和失败次数
-
每种存储后端操作类型的响应时间分布
配置指标收集
要启用 Metrics 收集,请在 JanusGraph 的属性文件中设置以下内容
# Required to enable Metrics in JanusGraph
metrics.enabled = true
此设置使 JanusGraph 在运行时使用 Timer、Counter、Histogram 等 Metrics 类记录测量值。要访问这些测量值,必须配置一个或多个 Metrics 报告器,如 配置指标报告 部分所述。
自定义默认指标名称
JanusGraph 默认将所有指标名称前缀为 "org.janusgraph"。此前缀可以通过 metrics.prefix 配置属性设置。例如,将默认的 "org.janusgraph" 前缀缩短为 "janusgraph"
# Optional
metrics.prefix = janusgraph
事务特定指标名称
每个 JanusGraph 事务都可以选择指定自己的 Metrics 名称前缀,覆盖默认的 Metrics 名称前缀和 metrics.prefix 配置属性。例如,前缀可以更改为打开 JanusGraph 事务的前端应用程序的名称。请注意,Metrics 在内存中维护一个 ConcurrentHashMap 来存储指标名称及其关联对象,因此最好将不同的指标前缀数量保持在较小的范围内。
为此,请调用 TransactionBuilder.setMetricsPrefix(String)
JanusGraph graph = ...;
TransactionBuilder tbuilder = graph.buildTransaction();
JanusGraphTransaction tx = tbuilder.groupName("foobar").start();
按后端存储分离指标
JanusGraph 默认将其各种内部存储后端句柄的 Metrics 进行合并。所有存储后端交互的 Metrics 都遵循 "<prefix>.stores.<opname>" 模式,无论它们是来自 ID 存储、边存储等。当在 JanusGraph 的属性文件中设置 metrics.merge-basic-metrics = false 时,指标名称中的 "stores" 字符串将替换为 "idStore"、"edgeStore"、"vertexIndexStore" 或 "edgeIndexStore"。
索引提供程序指标
JanusGraph 收集混合索引操作的基本指标。这些指标可以在 <prefix>.indexProvider.<INDEX-NAME>.<opname> 找到。
配置指标报告
JanusGraph 支持以下 Metrics 报告器
每种报告器类型都是独立的,可以与其他报告器类型共存。例如,可以配置 JMX 和 Slf4j Metrics 报告器同时运行。只需在 janusgraph.properties 中设置所有各自的配置键(并按上述指示启用指标)。
控制台报告器
| 配置键 | 必需? | 值 | 默认值 |
|---|---|---|---|
| metrics.console.interval | 是 | 将指标转储到控制台之间等待的毫秒数 | null |
每分钟将指标打印到控制台的 janusgraph.properties 片段示例
metrics.enabled = true
# Required; specify logging interval in milliseconds
metrics.console.interval = 60000
CSV 文件报告器
| 配置键 | 必需? | 值 | 默认值 |
|---|---|---|---|
| metrics.csv.interval | 是 | 写入 CSV 行之间等待的毫秒数 | null |
| metrics.csv.directory | 是 | 写入 CSV 文件的目录(如果不存在将创建) | null |
每分钟向目录 ./foo/bar/(相对于进程的工作目录)写入 CSV 文件的 janusgraph.properties 片段示例
metrics.enabled = true
# Required; specify logging interval in milliseconds
metrics.csv.interval = 60000
metrics.csv.directory = foo/bar
Graphite 报告器
| 配置键 | 必需? | 值 | 默认值 |
|---|---|---|---|
| metrics.graphite.hostname | 是 | 发送 Graphite 纯文本协议 数据的 IP 地址或主机名 | null |
| metrics.graphite.interval | 是 | 将数据推送到 Graphite 之间等待的毫秒数 | null |
| metrics.graphite.port | 否 | 发送 Graphite 纯文本协议报告的端口 | 2003 |
| metrics.graphite.prefix | 否 | 添加到发送到 Graphite 的所有指标名称的任意字符串前缀 | null |
每分钟向 192.168.0.1 上的 Graphite 服务器发送指标的 janusgraph.properties 片段示例
metrics.enabled = true
# Required; IP or hostname string
metrics.graphite.hostname = 192.168.0.1
# Required; specify logging interval in milliseconds
metrics.graphite.interval = 60000
JMX 报告器
| 配置键 | 必需? | 值 | 默认值 |
|---|---|---|---|
| metrics.jmx.enabled | 是 | 布尔值 | false |
| metrics.jmx.domain | 否 | 指标将出现在此 JMX 域中 | Metrics 自己的默认值 |
| metrics.jmx.agentid | 否 | 指标将使用此 JMX 代理 ID 进行报告 | Metrics 自己的默认值 |
janusgraph.properties 片段示例
metrics.enabled = true
# Required
metrics.jmx.enabled = true
# Optional; if omitted, then Metrics uses its default values
metrics.jmx.domain = foo
metrics.jmx.agentid = baz
Slf4j 报告器
| 配置键 | 必需? | 值 | 默认值 |
|---|---|---|---|
| metrics.slf4j.interval | 是 | 将指标转储到日志记录器之间等待的毫秒数 | null |
| metrics.slf4j.logger | 否 | 要使用的 Slf4j 日志记录器名称 | "metrics" |
每分钟将指标记录到名为 foo 的日志记录器的 janusgraph.properties 片段示例
metrics.enabled = true
# Required; specify logging interval in milliseconds
metrics.slf4j.interval = 60000
# Optional; uses Metrics default when unset
metrics.slf4j.logger = foo
用户提供/自定义报告器
如果上面列出的 Metrics 报告器配置选项不足,JanusGraph 提供了一个实用方法来访问持有其所有测量值的单个 MetricRegistry 实例。
com.codahale.metrics.MetricRegistry janusgraphRegistry =
org.janusgraph.util.stats.MetricManager.INSTANCE.getRegistry();
以这种方式访问 janusgraphRegistry 的代码可以然后将非标准报告器类型或具有特殊配置的标准报告器类型附加到 janusgraphRegistry。如果周围的应用程序已经有一个用于 Metrics 报告器配置的框架,或者如果应用程序需要多个具有不同配置的 JanusGraph 支持的报告器类型实例,这种方法也很有用。例如,可以使用这种方法设置多个单播 Graphite 报告器,而 JanusGraph 的属性配置仅限于一个 Graphite 报告器。