Поделиться через


Потоковая передача журналов управляемых компонентов Azure Spring Apps в режиме реального времени

Примечание.

Azure Spring Apps — это новое название службы Azure Spring Cloud. Старое название будет еще некоторое время встречаться в наших материалах, пока мы не обновим ресурсы, такие как снимки экрана, видео и схемы.

Эта статья относится к:❌ Basic/Standard ✔️ Enterprise

В этой статье описывается, как использовать Azure CLI для получения журналов управляемых компонентов в режиме реального времени для устранения неполадок. Вы также можете использовать параметры диагностика для анализа данных диагностика в Azure Spring Apps. Дополнительные сведения см. в разделе Анализ журналов и метрик на основе параметров диагностики. Дополнительные сведения о журналах потоковой передачи см. в статье "Журналы консоли приложений Stream Spring Apps" в режиме реального времени и журналы заданий Stream Spring Apps в режиме реального времени.

Необходимые компоненты

  • Azure CLI с расширением Azure Spring Apps версии 1.24.0 или более поздней. Расширение можно установить с помощью следующей команды: az extension add --name spring

Поддерживаемые управляемые компоненты

В следующей таблице перечислены управляемые компоненты, которые в настоящее время поддерживаются вместе с их подкомпонентами:

Управляемый компонент Подкомпоненты
Служба конфигурации приложений; application-configuration-service
flux-source-controller (Поддерживается в версии ACS 2-го поколения)
Spring Cloud Gateway 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. В следующей таблице перечислены необходимые роли и операции, для которых эти роли предоставляются разрешения:

Управляемый компонент Требуемая роль Операции
Служба конфигурации приложений; Роль чтения журналов службы конфигурации приложений Azure Spring Apps Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action
Spring Cloud Gateway Роль читателя журналов Шлюза Spring Cloud для Azure Spring Apps Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action
Сервер конфигурации Spring Cloud Роль чтения журналов журнала сервера Конфигурации Azure Spring Apps Spring Cloud Microsoft.AppPlatform/Spring/configService/logstream/action

Чтобы назначить роль Azure с помощью портал Azure, выполните следующие действия.

  1. Откройте портал Azure.

  2. Откройте экземпляр службы Azure Spring Apps.

  3. В области навигации выберите контроль доступа (IAM).

  4. На странице контроль доступа (IAM) выберите "Добавить" и выберите "Добавить назначение роли".

    Снимок экрана: страница портал Azure, на котором показана страница контроль доступа (IAM) с выделенным параметром

  5. На странице добавления назначения ролей в списке "Имя" найдите и выберите целевую роль, а затем нажмите кнопку "Далее".

    Снимок экрана: портал Azure, на котором показана страница

  6. Выберите "Участники" , а затем найдите и выберите имя пользователя.

  7. Выберите Проверить + назначить.

Вывод списка всех экземпляров в компоненте

Используйте следующую команду для перечисления всех экземпляров в компоненте:

az spring component instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --component <component-name>

Например, чтобы перечислить все экземпляры flux-source-controller в версии ACS 2-го поколения, используйте следующую команду:

az spring component instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --component flux-source-controller

Просмотр журналов хвоста

В этом разделе приведены примеры использования Azure CLI для создания журналов хвоста.

Просмотр журналов хвоста для конкретного экземпляра

Чтобы просмотреть журналы хвоста для определенного экземпляра, используйте az spring component logs команду с -i/--instance аргументом, как показано в следующем разделе.

Просмотр журналов хвоста для экземпляра службы 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 2-го поколения команда возвращает журналы, аналогичные следующему примеру:

...
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:

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 отправляет журналы пульса клиенту каждую минуту, если компонент не записывает журналы постоянно. Сообщения журнала Heartbeat используют следующий формат: 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-адрес в виртуальную сеть. Обязательно используйте осторожность, если это забота о вас.

Чтобы включить конечную точку потоковой передачи журналов в общедоступной сети, выполните следующие действия.

  1. Выберите экземпляр службы Azure Spring Apps, развернутый в виртуальной сети, а затем выберите "Сеть " в меню навигации.

  2. Перейдите на вкладку внедрения виртуальной сети.

  3. Переключите состояние ресурсов dataplane в общедоступной сети, чтобы включить конечную точку потоковой передачи журналов в общедоступной сети. Этот процесс займет несколько минут.

    Снимок экрана: портал Azure, на котором показана страница

После включения общедоступной конечной точки потока журналов можно получить доступ к журналам управляемых компонентов из общедоступной сети так же, как и к обычному экземпляру.

Защита трафика в общедоступную конечную точку потоковой передачи журналов

Потоковая передача журналов для управляемых компонентов использует Azure RBAC для проверки подлинности подключений к компонентам. В результате доступ к журналам может получить только пользователи, имеющие соответствующие роли.

Чтобы обеспечить безопасность управляемых компонентов при предоставлении общедоступной конечной точки для них, защитите конечную точку, отфильтровав сетевой трафик к службе с помощью группы безопасности сети. Дополнительные сведения см. в статье Учебник. Фильтрация сетевого трафика с помощью групп безопасности сети, используя портал Azure. В этой группе содержатся правила безопасности, которые разрешают или запрещают исходящий и входящий сетевой трафик нескольких типов ресурсов Azure. Для каждого правила можно указать источник и назначение, порт и протокол.

Примечание.

Если вы не можете получить доступ к журналам управляемых компонентов в экземпляре внедрения виртуальной сети из Интернета после включения общедоступной конечной точки потока журналов, проверка группу безопасности сети, чтобы узнать, разрешен ли такой входящий трафик.

В следующей таблице показан пример базового правила, которое мы рекомендуем. Для получения целевого IP-адреса службы можно использовать такие команды, как nslookup и конечная точка <service-name>.private.azuremicroservices.io .

Приоритет Имя Порт Протокол Источник Назначение Действие
100 Имя правила 80 TCP Интернет IP-адрес службы Разрешить
110 Имя правила 443 TCP Интернет IP-адрес службы Разрешить

Следующие шаги