diff --git a/content/zh/docs/concepts/cluster-administration/system-logs.md b/content/zh/docs/concepts/cluster-administration/system-logs.md new file mode 100644 index 0000000000..14e455641b --- /dev/null +++ b/content/zh/docs/concepts/cluster-administration/system-logs.md @@ -0,0 +1,209 @@ +--- +title: 系统日志 +content_type: concept +weight: 60 +--- + + + + + +系统组件的日志记录集群中发生的事件,这对于调试非常有用。 +你可以配置日志的精细度,以展示更多或更少的细节。 +日志可以是粗粒度的,如只显示组件内的错误, +也可以是细粒度的,如显示事件的每一个跟踪步骤(比如 HTTP 访问日志、pod 状态更新、控制器动作或调度器决策)。 + + + +## Klog + + +klog 是 Kubernetes 的日志库。 +[klog](https://github.com/kubernetes/klog) +为 Kubernetes 系统组件生成日志消息。 + +有关 klog 配置的更多信息,请参见[命令行工具参考](/zh/docs/reference/command-line-tools-reference/)。 + +klog 原始格式的示例: +``` +I1025 00:15:15.525108 1 httplog.go:79] GET /api/v1/namespaces/kube-system/pods/metrics-server-v0.3.1-57c75779f-9p8wg: (1.512ms) 200 [pod_nanny/v0.0.0 (linux/amd64) kubernetes/$Format 10.56.1.19:51756] +``` + + +### 结构化日志 + +{{< feature-state for_k8s_version="v1.19" state="alpha" >}} + + +{{}} +到结构化日志消息的迁移是一个持续的过程。 +在此版本中,并非所有日志消息都是结构化的。 +解析日志文件时,你也必须要处理非结构化日志消息。 + +日志格式和值的序列化可能会发生变化。 +{{< /warning>}} + + +结构化日志记录旨在日志消息中引入统一结构,以方便提取信息,使日志的存储和处理更容易、成本更低。 +新的消息格式向后兼容,并默认启用。 + +结构化日志的格式: +``` + "" ="" ="" ... +``` + + +示例: +``` +I1025 00:15:15.525108 1 controller_utils.go:116] "Pod status updated" pod="kube-system/kubedns" status="ready" +``` + + + +### JSON 日志格式 + +{{< feature-state for_k8s_version="v1.19" state="alpha" >}} + + +{{}} +JSON 输出并不支持太多标准 klog 参数。 +对于不受支持的 klog 参数的列表,请参见 +[命令行工具参考](/zh/docs/reference/command-line-tools-reference/)。 + +并不是所有日志都保证写成 JSON 格式(例如,在进程启动期间)。 +如果你打算解析日志,请确保可以处理非 JSON 格式的日志行。 + +字段名和 JSON 序列化可能会发生变化。 +{{< /warning >}} + + +`--logging-format=json` 参数将日志格式从 klog 原生格式改为 JSON 格式。 +JSON 日志格式示例(美化输出): +```json +{ + "ts": 1580306777.04728, + "v": 4, + "msg": "Pod status updated", + "pod":{ + "name": "nginx-1", + "namespace": "default" + }, + "status": "ready" +} +``` + + +具有特殊意义的 key: +* `ts` - Unix 时间风格的时间戳(必选项,浮点值) +* `v` - 精细度(必选项,整数,默认值 0) +* `err` - 错误字符串(可选项,字符串) +* `msg` - 消息(必选项,字符串) + +当前支持JSON格式的组件列表: +* {{< glossary_tooltip term_id="kube-controller-manager" text="kube-controller-manager" >}} +* {{< glossary_tooltip term_id="kube-apiserver" text="kube-apiserver" >}} +* {{< glossary_tooltip term_id="kube-scheduler" text="kube-scheduler" >}} +* {{< glossary_tooltip term_id="kubelet" text="kubelet" >}} + + +### 日志精细度级别 + +参数 `-v` 控制日志的精细度。增大该值会增大日志事件的数量。 +减小该值可以减小日志事件的数量。 +增大精细度会记录更多的不太严重的事件。 +精细度设置为 0 时只记录关键(critical)事件。 + + +### 日志位置 + +有两种类型的系统组件:运行在容器中的组件和不运行在容器中的组件。例如: +* Kubernetes 调度器和 kube-proxy 在容器中运行。 +* kubelet 和容器运行时,例如 Docker,不在容器中运行。 + + +在使用 systemd 的系统中,kubelet 和容器运行时写入 journald。 +在别的系统中,日志写入 `/var/log` 目录下的 `.log` 文件中。 +容器中的系统组件总是绕过默认的日志记录机制,写入 `/var/log` 目录下的 `.log` 文件。 +与容器日志类似,你应该轮转 `/var/log` 目录下系统组件日志。 +在 `kube-up.sh` 脚本创建的 Kubernetes 集群中,日志轮转由 `logrotate` 工具配置。 + `logrotate` 工具,每天或者当日志大于 100MB 时,轮转日志。 + +## {{% heading "whatsnext" %}} + + +* 阅读 [Kubernetes 日志架构](/zh/docs/concepts/cluster-administration/logging/) +* 阅读 [Structured Logging](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/1602-structured-logging) +* 阅读 [Conventions for logging severity](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md)