如何在Java上对Microsoft Azure WebApp进行故障排除?如何访问日志?

时间:2019-02-05 20:15:55

标签: java spring azure azure-web-app-service

我有一个Java应用程序(默认教程为https://spring.io/guides/gs/spring-boot-for-azure/的标准springboot),我通过Eclipse / maven插件azure-webapp:deploy将其“成功”部署到了WebApp(在部署过程中创建)

一旦部署,文件就位于WebApp中,我可以看到它们。如果启动成功,则可以运行应用程序,但如果启动失败,则-我不知道如何进行故障排除。我不知道在哪里可以找到错误日志,是什么原因导致了问题,以及如何解决。

作为如何使其失败的示例,请添加以下行:

throw new RuntimeException("Doomed to fail");

我尝试从“诊断日志选项卡”启用日志,希望在LogFiles / Applications下看到它们,但是该文件夹仍然为空。

如何解决无法在Azure的WebApp中启动的Java应用程序?

编辑:排查异常的其他示例:

public static void main(String[] args) {
    throw new RuntimeException("start failure #21");
    //SpringApplication.run(Application.class, args);
}

3 个答案:

答案 0 :(得分:1)

要监视Java App Service Web App,可以使用下面的工具。

Azure Monitor

Azure Monitor指标:Azure App Service已加入Azure Monitor指标。这些指标可以发送到Application Insights。

Azure Monitor诊断日志:App Service诊断日志尚未安装到Azure Monitor;但是,通过为App Service Web App启用Application Insights,可以捕获类似的诊断信息,例如Web请求,异常等(请参见下面的“ Application Insights”。)

有关已随附到Azure Monitor诊断日志的Azure服务的列表,请参见此资源。

应用洞察力

Application Insights支持Java应用程序(请参阅“语言”部分)。如果您点击Java链接,就会带您到这里。

除了Windows性能计数器之外,您还可以捕获JMX计数器,并将其发送到Application Insights。

Application Insights支持的“日志记录框架”包括Log4J。由于Tomcat使用Apache的Java Commons Logging(JCL),因此可以捕获Tomcat日志。 Log4J是JCL的流行实现。

Azure Log Analytics

您可以使用处于预览状态的此连接器将Application Insights遥测发送到Azure Log Analytics。

如果您使用Logback或Log4J(v1.2或v2.0)进行跟踪,则可以将跟踪日志自动发送到Application Insights,在其中可以进行探索和搜索。

有关分步配置指南,请浏览至以下网址:-

https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-trace-logs

希望有帮助。

答案 1 :(得分:0)

听起来您像按照springboot教程Deploying a Spring Boot app to Azure来构建GitHub项目microsoft/gs-spring-boot并部署到Azure一样,但是不起作用。

这是我遵循本教程的步骤,但是是以我自己的方式进行部署的。

  1. 我在本地计算机上创建了一个目录SpringBoot,并执行命令cd SpringBootgit clone https://github.com/microsoft/gs-spring-boot
  2. 然后,通过命令cd gs-spring-boot/completemvnw clean package来构建它

注意:我在Linux上的Create a sample Spring Boot web app下查看了本教程的各个部分,但是web.config中的microsoft/gs-spring-boot/complete文件已经可以用于Windows的Azure WebApp。但是,没有任何评论描述用于Windows或Linux的Azure WebApp的部署目标。

  1. 因此,我使用了现有的Windows版WebApp来测试我的部署。我通过URL https://<webapp name>.scm.azurewebsites.net/DebugConsole在浏览器中打开Kudu控制台,并将文件complete/web.configcomplete/target/gs-spring-boot-0.1.0.jar拖到site/wwwroot,如下图所示。然后,我启动了我的webapp,它运行正常。

enter image description here

enter image description here

注意:请检查通过命令JAVA_HOME在Azure上配置的echo %JAVA_HOME%环境变量,如下图。

enter image description here

如果没有,则需要在Azure门户的Application settings选项卡中设置Java运行时。

enter image description here

或者,您也可以配置web.config文件,以将引用%JAVA_HOME%替换为安装在Azure WebApp路径D:\Program Files\Java中的现有Java运行时,如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
        </handlers>
        <!-- <httpPlatform processPath="%JAVA_HOME%\bin\java.exe" -->
        <httpPlatform processPath="D:\Program Files\Java\jre1.8.0_181\bin\java.exe"
                      arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\gs-spring-boot-0.1.0.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>

enter image description here

答案 2 :(得分:0)

我没有设法在基于Windows的计算机上找到日志,但是如果在基于Linux的计算机上启用日志,则会在“诊断日志”输出中看到它们。不过有一个陷阱。

有230个超时。它将等待完整的“超时”时间,直到在日志文件中生成日志为止,之后您可以通过日志文件或通过“诊断日志”来访问它们。在启动应用程序之前,请确保启用日志记录。这适用于基于Linux的计算机,我不知道它是否可以适用于基于Windows的计算机。

然后等待答案触发。事实证明,答案触发是控制台输出“ X秒内启动应用程序”中的短语。我将超时时间增加到500秒,因为尽管它在本地计算机上的启动时间为60秒,但在Microsoft Azure *的基于远程Linux的计算机上却需要430秒。

第二,我将主类的名称从“ GameStart”更改为“ Application”,然后它实际上捕获了触发器。之后,应用程序启动。在手册的任何地方都找不到提到的“直到超时-没有日志”和“触发短语”子句。

ps:作为参考,我花了20分钟上传应用程序,花了5分钟启动了它。我当时使用的是CentralUS服务器,尽管我本人也位于欧盟中部,但是cuz centralEU并没有为我解决,甚至更长的时间

-

*使用测试帐户。付费帐户上的帐号可能不同或相似。