你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
实时流式处理 Azure Spring Apps 托管组件日志
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用。
本文适用于: ❎ 基本计划/标准计划 ✅ 企业计划
本文介绍如何使用 Azure CLI 获取托管组件的实时日志进行故障排除。 还可以使用诊断设置来分析 Azure Spring Apps 中的诊断数据。 有关详细信息,请参阅使用诊断设置分析日志和指标。 有关流式处理日志的详细信息,请参阅实时流式传输 Azure Spring Apps 应用程序控制台日志和实时流式传输 Azure Spring Apps 作业日志。
先决条件
- 具有 Azure Spring Apps 扩展的 Azure CLI 版本 1.24.0 或更高版本。 可以使用以下命令安装扩展:
az extension add --name spring
。
支持的托管组件
下表列出了当前支持的托管组件及其子组件:
托管组件 | 子组件 |
---|---|
应用程序配置服务 | application-configuration-service flux-source-controller (在 ACS Gen2 版本中受支持) |
Spring Cloud 网关 | spring-cloud-gateway spring-cloud-gateway-operator |
Spring Cloud 配置服务器 | config-server |
可以使用以下命令列出所有子组件:
az spring component list
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name>
分配 Azure 角色
若要流式传输托管组件的日志,必须分配有相关的 Azure 角色。 下表列出了所需的角色以及向这些角色授予权限以进行的操作:
托管组件 | 所需角色 | Operations |
---|---|---|
应用程序配置服务 | Azure Spring Apps 应用程序配置服务日志读取者角色 | Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action |
Spring Cloud 网关 | Azure Spring Apps Spring Cloud Gateway 日志读取者角色 | Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action |
Spring Cloud 配置服务器 | Azure Spring Apps Spring Cloud Config Server 日志读取者角色 | Microsoft.AppPlatform/Spring/configService/logstream/action |
按照以下步骤使用 Azure 门户分配 Azure 角色:
打开 Azure 门户。
打开你的 Azure Spring Apps 服务实例。
在导航窗格中,选择“访问控制(IAM)”。
在“访问控制(IAM)”页上选择“添加”,然后选择“添加角色分配”。
在“添加角色分配”页上的“名称”列表中,搜索并选择目标角色,然后选择“下一步”。
选择“成员”,然后搜索并选择你的用户名。
选择“查看 + 分配”。
列出组件中的所有实例
使用以下命令列出组件中的所有实例:
az spring component instance list \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--component <component-name>
例如,若要列出 ACS Gen2 版本中 flux-source-controller
的所有实例,请使用以下命令:
az spring component instance list \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--component flux-source-controller
查看跟踪日志
本部分提供了使用 Azure CLI 生成跟踪日志的示例。
查看特定实例的跟踪日志
若要查看特定实例的跟踪日志,请使用带 -i/--instance
参数的 az spring component logs
命令,如下一部分所示。
查看 application-configuration-service 实例的跟踪日志
使用以下命令查看 application-configuration-service
的跟踪日志:
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name application-configuration-service \
--instance <instance-name>
对于 ACS Gen2,该命令返回类似于以下示例的日志:
...
2023-12-18T07:09:54.020Z INFO 16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8090 (https)
2023-12-18T07:09:54.116Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Starting service [Tomcat]
2023-12-18T07:09:54.117Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:54.522Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:54.524Z INFO 16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 14100 ms
2023-12-18T07:09:56.920Z INFO 16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8090 (https) with context path ''
2023-12-18T07:09:57.528Z INFO 16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2023-12-18T07:09:57.529Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Starting service [Tomcat]
2023-12-18T07:09:57.529Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:57.629Z INFO 16715 --- [main] org.apache.juli.logging.DirectJDKLog : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:57.629Z INFO 16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 603 ms
2023-12-18T07:09:57.824Z INFO 16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path ''
2023-12-18T07:09:58.127Z INFO 16715 --- [main] o.springframework.boot.StartupInfoLogger : Started ReconcilerApplication in 21.005 seconds (process running for 22.875)
...
查看 flux-source-controller 实例的跟踪日志
使用以下命令查看 flux-source-controller
的跟踪日志:
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name flux-source-controller \
--instance <instance-name>
该命令将返回类似于以下示例的日志:
...
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"controller-runtime.metrics","msg":"Metrics server is starting to listen","addr":":8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"setup","msg":"starting manager"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","path":"/metrics","kind":"metrics","addr":"[::]:8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","kind":"health probe","addr":"[::]:9440"}
{"level":"info","ts":"2023-12-18T07:07:54.817Z","logger":"runtime","msg":"attempting to acquire leader lease flux-system/source-controller-leader-election...\n"}
{"level":"info","ts":"2023-12-18T07:07:54.830Z","logger":"runtime","msg":"successfully acquired lease flux-system/source-controller-leader-election\n"}
...
查看 spring-cloud-gateway 实例的跟踪日志
使用以下命令查看 spring-cloud-gateway
的跟踪日志:
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name spring-cloud-gateway \
--instance <instance-name>
该命令将返回类似于以下示例的日志:
...
2023-12-11T14:13:40.310Z INFO 1 --- [ main] i.p.s.c.g.s.SsoDeactivatedConfiguration : SSO is deactivated, setting up default security filters
2023-12-11T14:13:40.506Z INFO 1 --- [ main] .h.HazelcastReactiveSessionConfiguration : Configuring Hazelcast as a session management storage
2023-12-11T14:13:51.008Z INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8443
2023-12-11T14:13:51.810Z INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 7 endpoint(s) beneath base path '/actuator'
2023-12-11T14:13:52.410Z INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8090
2023-12-11T14:13:52.907Z INFO 1 --- [ main] i.p.s.c.g.r.h.HazelcastRateLimitsRemover : Removing Hazelcast map 'GLOBAL_RATE_LIMIT' with rate limit information
2023-12-11T14:13:52.912Z INFO 1 --- [ main] i.p.s.cloud.gateway.GatewayApplication : Started GatewayApplication in 36.084 seconds (process running for 38.651)
...
查看 spring-cloud-gateway-operator 实例的跟踪日志
使用以下命令查看 spring-cloud-gateway-operator
的跟踪日志:
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name spring-cloud-gateway-operator \
--instance <instance-name>
该命令将返回类似于以下示例的日志:
...
2023-12-01T08:37:05.080Z INFO 1 --- [ main] c.v.t.s.OperatorApplication : Starting OperatorApplication v2.0.6 using Java 17.0.7 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2023-12-01T08:37:05.157Z INFO 1 --- [ main] c.v.t.s.OperatorApplication : No active profile set, falling back to 1 default profile: "default"
2023-12-01T08:37:14.379Z INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path '/actuator'
2023-12-01T08:37:15.274Z INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8080
2023-12-01T08:37:15.366Z INFO 1 --- [ main] c.v.t.s.OperatorApplication : Started OperatorApplication in 11.489 seconds (process running for 12.467)
...
查看 config-server 实例的跟踪日志
使用以下命令查看 config-server
的跟踪日志:
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name config-server \
--instance <instance-name>
该命令将返回类似于以下示例的日志:
...
{"app":"config-server","ts":"2024-05-08T05:38:29.44Z","logger":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext","level":"INFO","class":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext","method":"prepareWebApplicationContext","file":"ServletWebServerApplicationContext.java","line":291,"thread":"main","message":"Root WebApplicationContext: initialization completed in 3771 ms"}
{"app":"config-server","ts":"2024-05-08T05:38:31.058Z","logger":"com.microsoft.azure.spring.service.CloudConfigServerApplication","level":"INFO","class":"org.springframework.boot.StartupInfoLogger","method":"logStarted","file":"StartupInfoLogger.java","line":57,"thread":"main","message":"Started CloudConfigServerApplication in 6.888 seconds (process running for 8.986)"}
...
在一个命令中查看所有实例的跟踪日志
若要查看所有实例的跟踪日志,请使用 --all-instances
参数,如以下命令中所示。 实例名称是每个日志行的前缀。 如果有多个实例,则为每个实例批量打印日志,因此一个实例的日志不会与另一个实例的日志交错混杂。
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name <component-name> \
--all-instances
连续流式传输新日志
默认情况下,az spring component logs
仅打印流式传输到控制台的现有日志,然后退出。 如果要流式传输新日志,请添加 -f/--follow
参数。
使用 -f/--follow
选项跟踪即时日志时,Azure Spring Apps 日志流式处理服务会每隔一分钟向客户端发送一次检测信号日志,除非该组件不断写入日志。 检测信号日志消息使用以下格式:2023-12-18 09:12:17.745: No log from server
。
流式传输特定实例的日志
使用以下命令流式传输特定实例的日志:
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name <component-name> \
--instance <instance-name> \
--follow
流式传输所有实例的日志
使用以下命令流式传输所有实例的日志:
az spring component logs \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name <component-name> \
--all-instances \
--follow
在组件中流式传输多个实例的日志时,一个实例的日志与其他实例的日志交错。
在虚拟网络注入实例中流式传输日志
对于部署在自定义虚拟网络中的 Azure Spring Apps 实例,可以默认从专用网络访问日志流式处理。 有关详细信息,请参阅在虚拟网络中部署 Azure Spring Apps
借助 Azure Spring Apps,还可以从公用网络访问实时托管组件日志。
注意
如果在公用网络上启用日志流式处理终结点,会将公共入站 IP 添加到虚拟网络。 如果你担心这一点,请务必谨慎使用。
使用以下步骤在公用网络上启用日志流式处理终结点:
启用日志流公共终结点后,可以从公用网络访问托管组件日志,就像访问普通实例一样。
保护流向日志流式处理公共终结点的流量
托管组件的日志流式处理使用 Azure RBAC 对组件的连接进行身份验证。 因此,只有具有适当角色的用户才能访问日志。
若在公开托管组件的公共终结点时确保托管组件的安全性,请使用网络安全组筛选发到服务的网络流量来保护终结点。 有关详细信息,请参阅教程:在 Azure 门户中使用网络安全组筛选网络流量。 网络安全组包含安全规则,这些规则可允许或拒绝多种 Azure 资源的入站和出站网络流量。 可以为每项规则指定源和目标、端口以及协议。
注意
如果在启用日志流公共终结点后,无法通过 Internet 访问虚拟网络注入实例中的托管组件日志,请检查网络安全组,查看是否允许此类入站流量。
下表显示了我们推荐的基本规则示例。 可将 nslookup
等命令与 <service-name>.private.azuremicroservices.io
终结点结合使用来获取服务的目标 IP 地址。
优先级 | 名称 | 端口 | 协议 | 源 | 目标 | 操作 |
---|---|---|---|---|---|---|
100 | 规则名称 | 80 | TCP | Internet | 服务 IP 地址 | Allow |
110 | 规则名称 | 443 | TCP | Internet | 服务 IP 地址 | Allow |