日志

了解 Dapr 日志记录

Dapr以纯文本形式或JSON格式生成结构化日志到标准输出。 默认情况下,所有 Dapr 进程 (运行时和系统服务) 都以纯文本写入控制台输出。 要启用 JSON 格式的日志,您需要在运行 Dapr 进程时添加 --log-as-json 命令标志。

如果要使用搜索引擎 ( 例如 Elastic Search 或 Azure Monitor ) 来搜索日志,那么建议使用 JSON 格式的日志,日志收集器和搜索引擎可以使用内置 JSON 解析器进行解析。

日志架构

Dapr 基于以下架构生成日志。

字段描述示例
timeISO8601 时间戳2011-10-05T14:48:00.000Z
level日志级别 (info/warn/debug/error)info
type日志类型log
msg日志消息hello dapr!
作用域日志记录范围dapr.runtime
instance容器名称dapr-pod-xxxxx
app_idDapr 应用 IDdapr-app
verDapr 运行时版本0.5.0

纯文本和 JSON 格式的日志

  • 纯文本日志示例
  1. time="2020-03-11T17:08:48.303776-07:00" level=info msg="starting Dapr Runtime -- version 0.5.0-rc.3 -- commit v0.3.0-rc.0-155-g5dfcf2e" instance=dapr-pod-xxxx scope=dapr.runtime type=log ver=0.5.0-rc.3
  2. time="2020-03-11T17:08:48.303913-07:00" level=info msg="log level set to: info" instance=dapr-pod-xxxx scope=dapr.runtime type=log ver=0.5.0-rc.3
  • JSON 格式的日志示例
  1. {"instance":"dapr-pod-xxxx","level":"info","msg":"starting Dapr Runtime -- version 0.5.0-rc.3 -- commit v0.3.0-rc.0-155-g5dfcf2e","scope":"dapr.runtime","time":"2020-03-11T17:09:45.788005Z","type":"log","ver":"0.5.0-rc.3"}
  2. {"instance":"dapr-pod-xxxx","level":"info","msg":"log level set to: info","scope":"dapr.runtime","time":"2020-03-11T17:09:45.788075Z","type":"log","ver":"0.5.0-rc.3"}

配置纯文本或 JSON 格式的日志

Dapr 支持纯文本和 JSON 格式的日志。 默认格式为纯文本。 如果要将纯文本与搜索引擎配合使用,那么将不需要更改任何配置选项。

要使用 JSON 格式的日志,您需要在安装 Dapr 和部署应用程序时添加额外的配置。 建议使用 JSONformatted 日志,因为大多数日志收集器和搜索引擎可以使用内置解析器更容易解析 JSON 。

在 Kubernetes 中配置日志格式

以下步骤描述如何为 Kubernetes 配置 JSON 格式的日志

使用 Helm chart将 dapr 安装到集群

通过向 Helm 命令添加 --set global.logAsJson=true 选项,可以为 Dapr 系统服务启用 JSON 格式的日志。

  1. helm install dapr dapr/dapr --namespace dapr-system --set global.logAsJson=true

为 Dapr sidecars 启用 JSON 格式的日志

通过将 dapr.io/log-as-json: "true" 注释添加到部署,可以在 Dapr sidecar-injector服务激活的 Dapr sidecars 中启用 JSON 格式的日志。

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: pythonapp
  5. namespace: default
  6. labels:
  7. app: python
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: python
  13. template:
  14. metadata:
  15. labels:
  16. app: python
  17. annotations:
  18. dapr.io/enabled: "true"
  19. dapr.io/app-id: "pythonapp"
  20. dapr.io/log-as-json: "true"
  21. ...

日志收集器

如果您在 Kubernetes 集群中运行 Dapr ,那么 Fluentd 是一个受欢迎的容器日志收集器。 您可以将 Fluentd 与 json 解析器插件 一起使用,以解析 Dapr JSON 格式的日志。 This how-to shows how to configure the Fluentd in your cluster.

如果您使用 Azure Kubernetes 服务 您可以使用默认OMS Agent和 Azure Monitor收集日志,而不需要安装 Fluentd。

搜索引擎

如果使用 Fluentd,我们建议使用 Elastic Search 和 Kibana。 此 how-to 演示如何在 Kubernetes 集群中设置 Elastic Search 和 Kibana 。

如果您正在使用 Azure Kubernetes 服务,您可以使用 针对容器的Azure monitor 而不会安装任何额外的监视工具。 也可以阅读 如何为容器启用 Azure Monitor

参考资料