IBM Cloud Docs
查看日志

查看日志

日志记录可帮助您对 IBM Cloud® Code Engine中的问题进行故障诊断。 您可以使用控制台或 CLI 来查看日志。

自 2024 年 3 月 28 日起,IBM Log Analysis该服务已弃用,自 2025 年 3 月 30 日起将不再受支持。 客户需要迁移到IBM Cloud Logs 2025年3月30日之前。 在迁移期间,客户可以使用IBM Log Analysis随着IBM Cloud Logs。 两种服务的日志记录相同。 有关从IBM Log Analysis到IBM Cloud Logs并并行运行服务,请参见 迁移规划

从控制台查看日志

启用日志功能后,当您在控制台中使用Code Engine应用程序、作业、函数或构建时,日志会被转发到IBM Cloud Logs服务,并在该服务中编制索引,从而可以全文搜索所有生成的消息,并根据特定字段进行便捷查询。

要在 "Code Engine控制台中查看应用程序、作业或构建的日志,必须在 "Code Engine项目的同一区域创建一个 "IBM Cloud Logs实例。 在使用 Code Engine 组件之前,不需要创建此实例。 从控制台中的 Code Engine 应用程序,作业,函数或构建页面,可以添加日志记录功能。

您只需为每个帐户的每个区域启用一次 Code Engine 日志记录。

从控制台查看日志的注意事项

要使用控制台日志时,必须首先配置“IBM Cloud Logs平台日志,以便接收”Code Engine日志数据。 要检查活动的IBM Cloud Logs实例,请参阅 Observability 面板

在考虑保留、搜索和日志分析需求时,请查看IBM Cloud Logs 服务计划 信息。

当您查看“Code Engine应用程序、作业运行或构建运行的日志数据时,在”IBM Cloud Logs中提供数据之前可能会出现延迟。 例如,日志数据可能需要 5 到 10 分钟才能显示在IBM Cloud Logs 中,尤其是在使用 "Store and search 数据管道的情况下。

查看 数据管道 文档,了解平衡IBM Cloud Logs实例的日志延迟和成本的选项。

使用 CLI 日志时,无需配置IBM Cloud Logs平台日志,因为Code EngineCLI 日志获取数据的方式与此不同。CLI 日志获取数据的方式不同。

CLI 提供的日志功能有限,只能用于开发目的。 运行生产工作负载时,应始终使用IBM Cloud Logs实例,该实例具有日志保留、过滤和搜索功能。

能否对IBM Cloud Logs数据应用筛选器?

是的! 您可以根据自己的需要,在IBM Cloud Logs页面修改过滤器并调整其范围,以显示特定级别的日志数据,或更细粒度地显示特定应用程序版本、作业运行或构建运行的日志数据。

  • 如果设置了 "message.serviceName:"codeengine",则只显示Code Engine日志。

  • 如果设置了 label.Project:'<project_name>',那么仅显示来自特定项目的日志。

  • 如果设置了 message._app:'<your_component_name>',那么仅显示来自指定组件 (应用程序,作业或构建) 的日志。 如果 Code Engine 组件同名,那么过滤器将包含来自这些组件的日志。 例如

    • 过滤器 message.serviceName:"codeengine" AND message._app:"myapp" 将日志的作用域限定为 myapp 应用程序级别。
    • 过滤器 message.serviceName:"codeengine" AND message._app:"myapp\-00002" 将日志的作用域限定为 myapp-0002 应用程序修订版级别。
    • 过滤器 message.serviceName:"codeengine" AND message._app:"myjob" 将日志的作用域限定为特定 myjob 作业级别。
    • 过滤器 message.serviceName:"codeengine" AND message._app:"myjob\-jobrun\-t6m7l" 将日志作用域限定为特定 myjob-jobrun-t6m7l 作业运行级别。
    • 过滤器 message.serviceName:"codeengine" AND message._app:"mybuild" 将日志的作用域限定为特定 mybuild 构建级别。
    • 过滤器 message.serviceName:"codeengine" AND message._app:"mybuild\-run\-121212" 将日志的作用域限定为特定 mybuild-run-121212 构建运行级别。

有关在控制台中配置和启动日志记录的更多信息,请参阅 从控制台查看应用程序、任务或功能日志

如果我的日志数据是多行的,该怎么办?

每行日志都必须包含日志级别和时间戳信息,才能正确显示在IBM Cloud Logs 中。 如果日志行跨多行,请更改日志的格式和输出方式,以便它们位于单行中。 使用IBM Cloud Logs 为日志创建 JSONL 格式。 您的日志还必须 符合 "IBM Cloud Logs的限制。 更改日志格式后,即可利用IBM Cloud Logs搜索和格式化功能。

从控制台查看应用程序,作业或功能日志

您可以查看应用程序,作业或功能的日志。 从控制台查看任何这些内容的步骤都非常相似。

选择要使用的项目后,可以从 Code Engine“概述”页面或其某个子页面 (例如,“应用程序”,“作业”或“函数”页面) 或特定于应用程序,作业或函数的页面添加日志记录功能。 以下步骤假定您是从特定 Code Engine 页面工作。

  1. 转至您创建和部署的应用程序,作业或功能。 从 Code Engine 控制台上的 "项目" 页面中,选择项目,然后根据需要选择 应用程序作业功能。 选择要使用的应用程序,作业或功能。
  2. 如果之前创建了IBM Cloud Logs实例,请单击日志,打开IBM Cloud Logs服务。
  3. 添加和配置日志记录功能:
    1. 测试应用程序提交作业测试功能选项菜单中,单击添加日志创建IBM Cloud Logs实例。 此操作将打开IBM Cloud Logs服务。
    2. 从IBM Cloud Logs服务创建日志实例。 要确认已创建日志记录实例,请检查 可观察性仪表板
    3. 从 Code Engine 应用程序,作业或功能页面,单击 测试应用程序提交作业测试功能 选项菜单中的 添加日志记录。 这次,请选择一个IBM Cloud Logs实例来接收平台日志。 选择在上一步中创建的日志记录实例。 单击 选择。Code Engine 需要已启用的平台日志才能接收 Code Engine 日志记录数据。 完成此操作时,Code Engine 将为您启用平台日志记录。
  4. 现在已配置平台日志,从 Code Engine 应用程序,作业或功能页面,单击 测试应用程序提交作业测试功能 选项菜单中的 日志记录 以打开平台日志窗口。 要确认为您的区域设置了平台日志,请检查 可观察性仪表板
  5. (可选) 根据需要,优化 搜索过滤器
  6. 通过执行下列其中一个步骤来验证配置:
    • 对于应用程序或功能,测试它:单击测试应用程序或者测试功能根据需要,然后单击发送请求。 要在 Web 页面中打开应用程序或函数,请单击 应用程序 URL函数 URL。 您可以在“平台日志”窗口中从测试查看平台日志。
    • 对于作业,运行它: 从 作业运行 区域,单击 提交作业 以运行作业。 提供作业运行配置值,或者可以采用缺省值。 单击 提交作业 以运行作业。 您可以在“平台日志”窗口中查看作业运行中的平台日志。

您的IBM Cloud Logs实例现已配置为可接收Code Engine应用程序、作业或函数的平台日志。

或者,您也可以使用 Observability 面板 创建IBM Cloud Logs实例,然后配置 平台日志路由

从控制台查看构建日志

您可以从控制台显示特定构建运行实例的日志。

  1. 转至 Code Engine 仪表板
  2. 选择项目 (或 创建一个)。
  3. 在项目页面中,单击 映像构建
  4. 映像构建 选项卡中,单击映像构建的名称以打开已定义构建的构建页面,或者 创建构建
  5. 从已定义构建的构建页面中,单击 构建运行 部分中构建运行实例的名称。 您可能需要单击 提交构建 以创建构建运行。 您可以在“平台日志”窗口中查看来自构建运行的平台日志。 或者,您还可以从构建运行实例页面查看构建步骤详细信息的构建日志信息。 展开特定构建步骤日志数据的构建步骤。 如果需要,您可以选择优化 搜索过滤器

使用 CLI 查看日志

要使用 CLI 查看日志记录输出,您必须具有正在运行的应用程序或作业实例。 如果 应用程序缩放为零 或作业运行实例已完成,那么 ibmcloud ce app logsibmcloud ce jobrun logs 命令的输出没有日志数据。 您也可以使用IBM Cloud Logs服务查看日志数据。

使用 CLI 查看应用程序日志

要使用 CLI 查看特定应用程序的应用程序日志,请使用 application logs 命令。 您可以显示应用程序的所有实例的日志,也可以显示应用程序的特定实例的日志。 app get 命令显示有关应用程序的详细信息,包括应用程序正在运行的实例。

  • 要查看 myapp 应用程序的所有实例的日志,请使用 --app 选项指定应用程序的名称; 例如,

    ibmcloud ce app logs --app myapp
    

    示例输出

    Getting logs for all instances of application 'myapp'...
    OK
    
    myapp-ii18y-2-deployment-7657c5f4f9-dgk5f:
    Server running at http://0.0.0.0:8080/
    
  • 要查看应用程序的特定实例的日志,请使用 --instance 选项指定应用程序的特定实例的名称; 例如,

    ibmcloud ce app logs --instance myapp-ii18y-2-deployment-7657c5f4f9-dgk5f
    

    示例输出

    Getting logs for application instance 'myapp-a5yp2-2-deployment-65766594d4-hj6c5'...
    OK
    
    myapp-a5yp2-2-deployment-65766594d4-hj6c5:
    Server running at http://0.0.0.0:8080/
    

使用 CLI 查看作业日志

要查看使用 CLI 运行的特定作业的日志,请使用 jobrun logs 命令。 您可以显示作业运行的所有实例的日志,也可以显示作业运行的特定实例的日志。 jobrun get 命令显示有关作业运行的详细信息,包括作业运行的实例。

  • 要查看 testjobrun 作业运行的所有实例的日志,请使用 --jobrun 选项指定作业运行的名称; 例如,

    ibmcloud ce jobrun logs --jobrun testjobrun
    

    示例输出

    Getting jobrun 'testjobrun'...
    Getting instances of jobrun 'testjobrun'...
    Getting logs for all instances of job run 'testjobrun'...
    OK
    
    testjobrun-1-0:
    Hello World!
    
    testjobrun-2-0:
    Hello World!
    
    testjobrun-3-0:
    Hello World!
    
    testjobrun-4-0:
    Hello World!
    
    testjobrun-5-0:
    Hello World!
    
  • 要查看 testjobrun-1-0 作业运行实例的日志,请使用 --instance 选项指定作业运行的特定实例的名称; 例如,

    ibmcloud ce jobrun logs --instance testjobrun-1-0
    

    示例输出

    Getting logs for job run instance 'testjobrun-1-0'...
    OK
    
    testjobrun-1-0:
    Hello World!
    

使用 CLI 查看构建日志

要使用 CLI 查看特定构建运行的构建日志,请使用 buildrun logs 命令。 您可以根据构建运行的名称显示构建运行的所有实例的日志。

要查看 mybuildrun 构建运行的所有实例的日志,请使用 --name 选项指定构建运行的名称; 例如,

ibmcloud ce buildrun logs --name mybuildrun

示例输出

Getting build run 'mybuildrun'...
Getting instances of build run 'mybuildrun'...
Getting logs for build run 'mybuildrun'...
OK

mybuildrun-zg5rj-pod-z5gzb/step-git-source-source-r9fcf:
{"level":"info","ts":1614363665.8331757,"caller":"git/git.go:169","msg":"Successfully cloned https://github.com/IBM/CodeEngine @ 8b514ce871e50d67cfea3e344b90cade4bd26e90 (grafted, HEAD, origin/main) in path /workspace/source"}
{"level":"info","ts":1614363666.82988,"caller":"git/git.go:207","msg":"Successfully initialized and updated submodules in path /workspace/source"}

mybuildrun-zg5rj-pod-z5gzb/step-build-and-push:
INFO[0002] Retrieving image manifest node:12-alpine
INFO[0002] Retrieving image node:12-alpine
INFO[0003] Retrieving image manifest node:12-alpine
INFO[0003] Retrieving image node:12-alpine
INFO[0003] Built cross stage deps: map[]
INFO[0003] Retrieving image manifest node:12-alpine
INFO[0003] Retrieving image node:12-alpine
INFO[0004] Retrieving image manifest node:12-alpine
INFO[0004] Retrieving image node:12-alpine
INFO[0004] Executing 0 build triggers
INFO[0004] Unpacking rootfs as cmd RUN npm install requires it.
INFO[0008] RUN npm install
INFO[0008] Taking snapshot of full filesystem...
INFO[0010] cmd: /bin/sh
INFO[0010] args: [-c npm install]
INFO[0010] Running: [/bin/sh -c npm install]
npm WARN saveError ENOENT: no such file or directory, open '/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/package.json'
npm WARN !invalid#2 No description
npm WARN !invalid#2 No repository field.
npm WARN !invalid#2 No README data
npm WARN !invalid#2 No license field.

up to date in 0.267s
found 0 vulnerabilities

INFO[0011] Taking snapshot of full filesystem...
INFO[0011] COPY server.js .
INFO[0011] Taking snapshot of files...
INFO[0011] EXPOSE 8080
INFO[0011] cmd: EXPOSE
INFO[0011] Adding exposed port: 8080/tcp
INFO[0011] CMD [ "node", "server.js" ]

mybuildrun-zg5rj-pod-z5gzb/step-image-digest-exporter-ngl6j:
2021/02/26 18:21:02 warning: unsuccessful cred copy: ".docker" from "/tekton/creds" to "/tekton/home": unable to open destination: open /tekton/home/.docker/config.json: permission denied
{"severity":"INFO","timestamp":"2021-02-26T18:21:26.372494581Z","caller":"logging/config.go:116","message":"Successfully created the logger."}
{"severity":"INFO","timestamp":"2021-02-26T18:21:26.372621756Z","caller":"logging/config.go:117","message":"Logging level set to: info"}