Dapr 可观测性文档中的日志
Dapr 以纯文本或 JSON 格式生成结构化日志到 stdout。默认情况下,所有的 Dapr 进程(运行时和系统服务)都以纯文本的形式写入控制台。要启用 JSON 格式的日志,需要在运行 Dapr 进程时添加-log-as-json 命令标志。
如果要使用搜索引擎(如 Elastic Search 或 Azure Monitor)搜索日志,建议使用 JSON 格式的日志,日志收集器和搜索引擎可以使用内置的 JSON 分析器进行解析。
Log schema
Dapr 根据以下模式生成日志:
| 字段 | 描述 | 例子 |
|---|---|---|
| time | ISO8601 Timestamp | 2011-10-05T14:48:00.000Z |
| level | Log Level (info/warn/debug/error) | info |
| type | Log Type | log |
| msg | Log Message | hello dapr! |
| scope | Logging Scope | dapr.runtime |
| instance | Container Name | dapr-pod-xxxxx |
| app_id | Dapr App ID | dapr-app |
| ver | Dapr Runtime Version | 0.5.0 |
纯文本和 JSON 格式的日志
- 纯文本日志示例
time="2020-03-11T17:08:48.303776-07:00" level=info msg="starting Dapr Runtime -- version 0.5.0-rc.2 -- commit v0.3.0-rc.0-155-g5dfcf2e" instance=dapr-pod-xxxx scope=dapr.runtime type=log ver=0.5.0-rc.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.2
- JSON 格式日志示例
{"instance":"dapr-pod-xxxx","level":"info","msg":"starting Dapr Runtime -- version 0.5.0-rc.2 -- 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.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.2"}
配置纯文本或 JSON 格式的日志
Dapr 支持纯文本和 JSON 格式的日志。默认的格式是纯文本。如果您想使用纯文本与搜索引擎,您不需要更改任何配置选项。
要使用 JSON 格式的日志,您需要在安装 Dapr 和部署应用程序时添加额外的配置。建议使用 JSON 格式的日志,因为大多数日志收集器和搜索引擎可以通过内置的解析器更容易地解析 JSON。
在 Kubernetes 中配置日志格式
以下步骤描述了如何为 Kubernetes 配置 JSON 格式的日志。
使用 Helm chart 将 Dapr 安装到集群中
您可以通过在 Helm 命令中添加 --set global.logAsJson=true 选项为 Dapr 系统服务启用 JSON 格式的日志。
helm install dapr dapr/dapr --namespace dapr-system --set global.logAsJson=true
为 Dapr Sidecar 启用 JSON 格式的日志。
您可以通过在 deployment 中添加 dapr.io/log-as-json: "true " 注解,在 Dapr sidecars-injector 服务激活的 Dapr sidecars 中启用 JSON 格式的日志。
apiVersion: apps/v1
kind: Deployment
metadata:
name: pythonapp
namespace: default
labels:
app: python
spec:
replicas: 1
selector:
matchLabels:
app: python
template:
metadata:
labels:
app: python
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "pythonapp"
dapr.io/log-as-json: "true"
...
日志收集器
如果你在 Kubernetes 集群中运行 Dapr,Fluentd 是一个流行的容器日志收集器。你可以使用 Fluentd 和 json 解析器插件来解析 Dapr JSON 格式的日志。本攻略介绍了如何在集群中配置 Fleuntd。
如果你使用 Azure Kubernetes 服务,你可以使用默认的 OMS 代理与 Azure Monitor 收集日志,而不需要安装 Fluentd。
搜索引擎
如果你使用 Fluentd,我们建议使用 Elastic Search 和 Kibana。这篇攻略介绍了如何在 Kubernetes 集群中设置 Elastic Search 和 Kibana。
如果你使用的是 Azure Kubernetes 服务,你可以使用 Azure 监控容器,而无需安装任何额外的监控工具。另请阅读如何为容器启用 Azure Monitor。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!

发布评论