查看 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”>“代码包”>“代码”。 然后选择“容器日志”选项,以便显示容器日志。

Service Fabric 平台

访问无响应容器或故障容器的日志

从 v6.2 开始,还可以使用 REST APIService Fabric CLI (SFCTL) 命令提取无响应容器或故障容器的日志。

设置容器保留策略

为了帮助诊断容器启动故障,Service Fabric(6.1 或更高版本)支持保留终止的或无法启动的容器。 此策略可以在 ApplicationManifest.xml 文件中设置,如以下代码片段所示:

 <ContainerHostPolicies CodePackageRef="NodeService.Code" Isolation="process" ContainersRetentionCount="2"  RunInteractive="true"> 

ContainersRetentionCount 设置指定在容器故障时需保留的容器数。 如果指定一个负值,则会保留所有故障容器。 如果不指定 ContainersRetentionCount 属性,则不会保留任何容器。 ContainersRetentionCount 属性还支持应用程序参数,因此用户可以为测试性群集和生产群集指定不同的值。 使用此功能时可使用放置约束,将容器服务的目标设置为特定的节点,防止将容器服务移至其他节点。 使用此功能保留的容器必须手动删除。

设置 RunInteractive 与 Docker 的 --interactivetty 标志相对应。 在清单文件中将此设置设为 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" }

后续步骤