跳转到主要内容

请求日志记录

所有可以处理查询的 Apache Druid 服务也可以记录它们处理的查询请求。请求日志包含有关查询指标的信息,包括执行时间和内存使用情况。您可以使用请求日志中的信息来监控查询性能、确定瓶颈,并分析和改进慢查询。

请求日志记录默认处于禁用状态。本主题介绍了如何配置 Druid 以生成请求日志来跟踪查询指标。

配置请求日志记录

要启用请求日志记录,请确定要使用的请求记录器类型,然后设置该请求记录器类型特定的配置。

可以使用以下请求记录器类型:

  • noop:禁用请求日志记录,这是默认行为。
  • file:将日志存储到磁盘。
  • emitter:将请求记录到外部位置,该位置通过发射器(emitter)进行配置。
  • slf4j:通过 SLF4J Java 日志记录 API 记录查询。
  • filtered:在通过委派的请求记录器记录过滤后的查询之前,按查询类型或执行时间过滤请求。
  • composing:将所有请求记录到多个请求记录器。
  • switching:将原生查询和 SQL 查询记录到不同的请求记录器。

druid.request.logging.type 中定义请求记录器的类型。请参阅请求日志记录配置以了解每种请求记录器类型需要设置的属性。请在 common.runtime.properties 文件中指定这些属性。您必须重启 Druid 才能使更改生效。

除非请求日志记录类型为 emitter,否则 Druid 会将结果存储在 Broker 日志中。如果您使用发射器请求日志记录,则还必须配置指标发送(metrics emission)。

配置指标发送

Druid 包含各种发射器来发送指标和警报。要发送查询指标,请设置 druid.request.logging.feed=emitter,并在 druid.emitter 属性中定义发射器类型。

您可以在 Druid 中使用以下任一发射器:

  • noop:禁用指标发送,这是默认行为。
  • logging:将指标发送到 Log4j 2。请参阅日志记录以配置与 Druid 一起使用的 Log4j 2。
  • http:向用户定义的端点发送包含 JSON 格式指标的 HTTP POST 请求。
  • parametrized:操作方式类似于 http 发射器,但会根据事件源(event feed)微调接收端 URL。
  • composing:将指标发送到多种发射器类型。
  • graphite:将指标发送到 Graphite Carbon 服务。

请在 common.runtime.properties 文件中指定这些属性。请参阅指标发射器配置以了解每种指标发射器类型需要设置的属性。您必须重启 Druid 才能使更改生效。

示例

以下配置展示了如何启用请求日志记录并将查询指标发送到端点 http://example.com:8080/path

# Enable request logging and configure the emitter request logger
druid.request.logging.type=emitter
druid.request.logging.feed=myRequestLogFeed

# Enable metrics emission and tell Druid where to emit messages
druid.emitter=http
druid.emitter.http.recipientBaseUrl=http://example.com:8080/path

# Authenticate to the base URL, if needed
druid.emitter.http.basicAuthentication=username:password

以下是一个日志发射器输出示例:

[
{
"feed": "metrics",
"timestamp": "2022-01-06T20:32:06.628Z",
"service": "druid/broker",
"host": "localhost:8082",
"version": "2022.01.0-iap-SNAPSHOT",
"metric": "sqlQuery/bytes",
"value": 9351,
"dataSource": "[wikipedia]",
"id": "56e8317b-31cc-443d-b109-47f51b21d4c3",
"nativeQueryIds": "[2b9cbced-11fc-4d78-a58c-c42863dff3c8]",
"remoteAddress": "127.0.0.1",
"success": "true"
},
{
"feed": "myRequestLogFeed",
"timestamp": "2022-01-06T20:32:06.585Z",
"remoteAddr": "127.0.0.1",
"service": "druid/broker",
"sqlQueryContext":
{
"useApproximateCountDistinct": false,
"sqlQueryId": "56e8317b-31cc-443d-b109-47f51b21d4c3",
"useApproximateTopN": false,
"useCache": false,
"sqlOuterLimit": 101,
"populateCache": false,
"nativeQueryIds": "[2b9cbced-11fc-4d78-a58c-c42863dff3c8]"
},
"queryStats":
{
"sqlQuery/time": 43,
"sqlQuery/planningTimeMs": 5,
"sqlQuery/bytes": 9351,
"success": true,
"context":
{
"useApproximateCountDistinct": false,
"sqlQueryId": "56e8317b-31cc-443d-b109-47f51b21d4c3",
"useApproximateTopN": false,
"useCache": false,
"sqlOuterLimit": 101,
"populateCache": false,
"nativeQueryIds": "[2b9cbced-11fc-4d78-a58c-c42863dff3c8]"
},
"identity": "allowAll"
},
"query": null,
"host": "localhost:8082",
"sql": "SELECT * FROM wikipedia WHERE cityName = 'Buenos Aires'"
},
{
"feed": "myRequestLogFeed",
"timestamp": "2022-01-06T20:32:07.652Z",
"remoteAddr": "",
"service": "druid/broker",
"sqlQueryContext":
{},
"queryStats":
{
"query/time": 16,
"query/bytes": -1,
"success": true,
"identity": "allowAll"
},
"query":
{
"queryType": "scan",
"dataSource":
{
"type": "table",
"name": "wikipedia"
},
"intervals":
{
"type": "intervals",
"intervals":
[
"-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"
]
},
"virtualColumns":
[
{
"type": "expression",
"name": "v0",
"expression": "'Buenos Aires'",
"outputType": "STRING"
}
],
"resultFormat": "compactedList",
"batchSize": 20480,
"limit": 101,
"filter":
{
"type": "selector",
"dimension": "cityName",
"value": "Buenos Aires",
"extractionFn": null
},
"columns":
[
"__time",
"added",
"channel",
"comment",
"commentLength",
"countryIsoCode",
"countryName",
"deleted",
"delta",
"deltaBucket",
"diffUrl",
"flags",
"isAnonymous",
"isMinor",
"isNew",
"isRobot",
"isUnpatrolled",
"metroCode",
"namespace",
"page",
"regionIsoCode",
"regionName",
"user",
"v0"
],
"context":
{
"populateCache": false,
"queryId": "62e3d373-6e50-41b4-873b-1e56347c2950",
"sqlOuterLimit": 101,
"sqlQueryId": "cbb3d519-aee9-4566-8920-dbbeab6269f5",
"useApproximateCountDistinct": false,
"useApproximateTopN": false,
"useCache": false
},
"descending": false,
"granularity":
{
"type": "all"
}
},
"host": "localhost:8082",
"sql": null
},
...
]

了解更多

有关更多信息,请参阅以下主题: