Logging

OpenShift 提供了一些方便的机制来查看应用程序日志。首先也是最重要的是能够直接从 Web 控制台或通过命令行检查Pod的日志。

背景:容器日志

OpenShift 的构建方式使其期望容器将所有信息记录到STDOUT. 这样,常规和错误信息都是通过标准化的 Docker 机制捕获的。直接查看Pod的日志时,您实际上是通过 Docker 守护程序通过 OpenShift 的 API 访问容器的日志。

在某些情况下,应用程序可能并未设计为将其所有信息发送到STDOUT和STDERR。在许多情况下,会使用多个本地日志文件。虽然 OpenShift 无法解析这些文件中的任何信息,但也无法阻止它们的创建。在其他情况下,日志信息会发送到某个外部系统。在这里,OpenShift 也不禁止这些行为。如果您的应用程序没有登录到STDOUT,要么是因为它已经将日志信息发送到某个“外部”系统,要么是因为它将各种日志信息写入了各种文件,请不要担心

练习:查看日志

由于我们已经部署了我们的应用程序,我们可以花一些时间来检查它的日志。在Developer Perspective 中,从 Topology 视图中,单击parksmap条目,然后单击Resources选项卡。您应该会在Pod条目旁边看到一个查看日志链接。

View Logs for Pod

单击View Logs链接,您应该会看到Pod日志的视图:

Application Logs
如果您在日志中发现一些错误,那没关系。我们稍后会解决这些问题。

您还可以选择从命令行查看日志。获取Pod的名称:

oc get pods
NAME               READY     STATUS    RESTARTS   AGE
parksmap-1-hx0kv   1/1       Running   0          5h

然后使用logs命令查看这个Pod的日志:

oc logs parksmap-1-hx0kv

您将在屏幕上看到所有应用程序日志滚动:

2019-05-22 19:37:01.433  INFO 1 --- [           main] o.s.m.s.b.SimpleBrokerMessageHandler     : Started.
2019-05-22 19:37:01.465  INFO 1 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2019-05-22 19:37:01.468  INFO 1 --- [           main] c.o.evg.roadshow.ParksMapApplication     : Started ParksMapApplication in 3.97 seconds (JVM running
 for 4.418)
2019-05-22 19:38:00.762  INFO 1 --- [MessageBroker-1] o.s.w.s.c.WebSocketMessageBrokerStats    : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(
0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)]
, stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active
 threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0]
2019-05-22 19:44:11.517  INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2019-05-22 19:44:11.517  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization sta
rted
2019-05-22 19:44:11.533  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization com
pleted in 16 ms
2019-05-22 19:44:13.395  INFO 1 --- [nio-8080-exec-2] c.o.e.roadshow.rest.BackendsController   : Backends: getAll
如果您滚动日志,您可能会注意到提及服务帐户的错误。那是什么?不要害怕,我们很快就会讲到。