跳到正文

日志 ​

打开服务的 日志 卡片,或在服务的 部署记录 中点击某次部署。日志有单独的页面:

  • 部署。 顶部的下拉菜单决定查看哪次部署的日志:当前部署排在最前,更早的部署在 历史 下(已移除或失败)。旁边显示这次部署的状态、部署 ID(带复制按钮),以及部署的分支和提交;基于镜像的服务则显示镜像。
  • 构建日志 显示这次部署的输出:克隆、构建、推送和发布。部署运行期间实时更新,结束后随部署保留。只部署镜像的部署没有构建步骤,所以这个标签页不可用(部署失败时除外:这时它的步骤会说明失败原因)。
  • 运行日志 显示服务容器的输出,中间穿插 Zenavo 关于这些容器的平台事件。

阅读日志表格 ​

每一行日志是表格中的一行,有三列:

列显示内容
级别ERROR、WARN、INFO 或 DEBUG,带彩色圆点。
时间浏览器所在时区的日期和时间,例如 10/22 18:25:06。
内容单行显示的日志内容。点击这一行(或左侧箭头)查看完整内容:JSON 会格式化显示,复制 按钮复制这一行。展开后还会显示精确时间、实例和部署。

Zenavo 从日志行本身判断级别。它能识别 JSON 日志("level"、"severity"、pino 的数字级别)、level= 字段、行首附近的级别词,例如 INFO:、[WARN] 或 ERROR -(uvicorn、Python logging、Java、Rails、Go),Kubernetes 风格的 E1022 … 行、nginx 的 [error],以及崩溃信息(Traceback、panic:、…Error:)。没有级别的访问日志,4xx 响应记为 WARN,5xx 记为 ERROR。缩进的行(例如调用栈)沿用上一行的级别。其他行都是 INFO:Kubernetes 不区分写到 stderr 和 stdout 的输出,所以仅仅写到 stderr 不会让一行变成错误。

用搜索框和 ERROR / WARN / INFO / DEBUG 按钮筛选表格。表格会跟随最新的行;向上滚动即可停下来阅读,点击 跳到最新 继续跟随。导出 会把当前显示的内容保存为 .log 文件(已保存的日志则导出整个时间范围)。

平台事件 ​

在应用自己的输出之间,运行日志会显示它的实例发生了什么,以紫色的 [Zenavo] Pod/<实例> 开头:

事件含义
Scheduled实例已分配到服务器。
Pulling、Pulled正在下载镜像,或镜像已就绪。
Failed、ErrImagePull、ImagePullBackOff(ERROR)镜像拉取失败:检查镜像名、标签和镜像仓库的访问权限。
Created、Started容器已创建并启动。
Unhealthy(WARN)健康检查失败。
BackOff(WARN)容器不断退出,正在以越来越长的间隔重启。
OOMKilled(ERROR)容器内存不足,被停止。请提高内存上限或降低用量。
Exited(WARN)容器以错误码退出。
Killing、Stopped实例正在被替换(新部署、重启或缩容),并按要求停止。
FailedMount、Evicted、FailedScheduling(ERROR)卷无法挂载、服务器资源不足,或没有空间运行这个实例。

不断重复的事件(例如健康检查一直失败)每分钟最多显示一次,并带上次数,例如 (x7)。

实例和部署 ​

运行日志默认跟随 最新实例。选择 全部实例 可以看到每个副本(发布过程中新旧实例会并排显示);这时每一行都会标出所属实例。

每一行日志和每个事件都记录了启动其实例的部署,所以一次部署的日志就是它自己的日志,即使发布期间新旧实例同时运行也不会混在一起。在 Zenavo 开始记录这一点之前保存的日志,会改为按时间归到部署:从部署开始,到下一次部署完成为止。页面显示这类日志时会提示。

时间范围和已保存的日志 ​

对于当前部署,全部时间 会实时跟随日志:先显示每个实例的最后 200 行,然后实时显示新行。选择一个时间范围(最近一小时到最近 30 天,或自定义范围)会改为显示已保存的日志。已移除的部署总是显示已保存的日志。日志写出后通常在两分钟内被保存。

日志保留多久取决于团队的套餐:

套餐保留时间
Free48 小时
Dev7 天
Pro30 天
Team90 天

日志保存从功能开启且服务运行时开始。观察者可以阅读和下载它们,就像可以阅读实时日志一样。

存储方式 ​

  • 由控制面收集。 Zenavo 通过它管理你服务器时已有的连接读取日志和事件,并且只读取项目自己的命名空间。你的服务器不会拿到任何存储凭据,所以即使服务器被入侵,也无法读取或删除任何人保存的日志。
  • 先遮盖,再加密。 先移除变量值,容器输出和事件消息都一样(健康检查失败的消息里可能包含它收到的响应)。然后每个分块会被压缩,并在上传前用从控制面主密钥派生的密钥加密(AES-256-GCM)。拿到存储桶或它的访问密钥的人只能看到密文。
  • 按时删除。 超过套餐保留时间的日志每小时删除一次,已删除的项目和团队的日志也会被移除。
  • 有上限。 每个服务每小时最多保存 200 MB 日志文本;超出后会保存一行提示,并跳过这一小时剩余的内容。实时日志仍然显示每一行。超过 64 KB 的行会被截断。

要同时把日志转发到 Datadog、Loki 或你自己的地址,请添加日志转发。平台事件也会被转发,格式为 [Zenavo] Pod/<实例> — <原因>: <消息>。

与 Zeabur 无关联。