查看 Service Fabric 容器服务的日志
Azure Service Fabric 是一种容器业务流程协调程序,支持 Linux 和 Windows 容器。 本文介绍如何查看正在运行的容器服务或无响应容器的容器日志,以便诊断和排查问题。
访问正在运行的容器的日志
可以通过 Service Fabric Explorer 来访问容器日志。 在 Web 浏览器中导航到 http://mycluster.region.cloudapp.chinacloudapi.cn:19080/Explorer
,从群集的管理终结点打开 Service Fabric Explorer。
容器日志位于容器服务实例运行时所在的群集节点。 例如,可以获取 Linux Voting 示例应用程序的 Web 前端容器的日志。 在树状视图中,展开“群集”>“应用程序”>“VotingType”>“fabric:/Voting/azurevotefront”。 然后展开分区(在此示例中为 d1aa737e-f22a-e347-be16-eec90be24bc1),此时会看到容器在群集节点 _lnxvm_0 上运行。
在树状视图中找到 _lnxvm_0 节点上的代码包,方法是展开“节点”>“_lnxvm_0”>“fabric:/Voting”>“azurevotfrontPkg”>“代码包”>“代码”。 然后选择“容器日志”选项,以便显示容器日志。
访问无响应容器或故障容器的日志
从 v6.2 开始,还可以使用 REST API 或 Service Fabric CLI (SFCTL) 命令提取无响应容器或故障容器的日志。
设置容器保留策略
为了帮助诊断容器启动故障,Service Fabric(6.1 或更高版本)支持保留终止的或无法启动的容器。 此策略可以在 ApplicationManifest.xml 文件中设置,如以下代码片段所示:
<ContainerHostPolicies CodePackageRef="NodeService.Code" Isolation="process" ContainersRetentionCount="2" RunInteractive="true">
ContainersRetentionCount 设置指定在容器故障时需保留的容器数。 如果指定一个负值,则会保留所有故障容器。 如果不指定 ContainersRetentionCount 属性,则不会保留任何容器。 ContainersRetentionCount 属性还支持应用程序参数,因此用户可以为测试性群集和生产群集指定不同的值。 使用此功能时可使用放置约束,将容器服务的目标设置为特定的节点,防止将容器服务移至其他节点。 使用此功能保留的容器必须手动删除。
设置 RunInteractive 与 Docker 的 --interactive
和 tty
标志相对应。 在清单文件中将此设置设为 true 时,这些标志用于启动容器。
REST
使用获取部署在节点上的容器日志操作来获取故障容器的日志。 指定运行该容器的节点名称、应用程序名称、服务清单名称和代码包名称。 指定 &Previous=true
。 该响应将包含该代码包实例中无响应容器的容器日志。
请求 URI 的格式如下:
/Nodes/{nodeName}/$/GetApplications/{applicationId}/$/GetCodePackages/$/ContainerLogs?api-version=6.2&ServiceManifestName={ServiceManifestName}&CodePackageName={CodePackageName}&Previous={Previous}
示例请求:
GET http://localhost:19080/Nodes/_Node_0/$/GetApplications/SimpleHttpServerApp/$/GetCodePackages/$/ContainerLogs?api-version=6.2&ServiceManifestName=SimpleHttpServerSvcPkg&CodePackageName=Code&Previous=true
200 响应正文:
{ "Content": "Exception encountered: System.Net.Http.HttpRequestException: Response status code does not indicate success: 500 (Internal Server Error).\r\n\tat System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()\r\n" }
Service Fabric (SFCTL)
使用 sfctl service get-container-logs 命令来提取故障容器的日志。 指定运行该容器的节点名称、应用程序名称、服务清单名称和代码包名称。 指定 --previous
标志。 该响应将包含该代码包实例中无响应容器的容器日志。
sfctl service get-container-logs --node-name _Node_0 --application-id SimpleHttpServerApp --service-manifest-name SimpleHttpServerSvcPkg --code-package-name Code --previous
响应:
{ "content": "Exception encountered: System.Net.Http.HttpRequestException: Response status code does not indicate success: 500 (Internal Server Error).\r\n\tat System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()\r\n" }
后续步骤
- 详细了解创建 Linux 容器应用程序教程。
- 详细了解 Service Fabric 和容器