Udostępnij za pośrednictwem


Przesyłanie strumieniowe dzienników składników zarządzanych usługi Azure Spring Apps w czasie rzeczywistym

Uwaga

Plany Podstawowa, Standardowa i Enterprise zostaną wycofane od połowy marca 2025 r. z 3-letnim okresem emerytalnym. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.

Zużycie standardowe i dedykowany plan zostaną wycofane od 30 września 2024 r. z całkowitym zamknięciem po sześciu miesiącach. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie Standardowa i dedykowanego planu do usługi Azure Container Apps.

Ten artykuł dotyczy:❌ Podstawowa/Standardowa ✔️ Enterprise

W tym artykule opisano sposób używania interfejsu wiersza polecenia platformy Azure do uzyskiwania dzienników składników zarządzanych w czasie rzeczywistym na potrzeby rozwiązywania problemów. Możesz również użyć ustawień diagnostycznych do analizowania danych diagnostycznych w usłudze Azure Spring Apps. Aby uzyskać więcej informacji, zobacz Analizowanie dzienników i metryk przy użyciu ustawień diagnostycznych. Aby uzyskać więcej informacji na temat dzienników przesyłania strumieniowego, zobacz Stream Spring Apps application console logs in real time (Dzienniki konsoli aplikacji Usługi Azure Spring Apps w czasie rzeczywistym) i Stream Azure Spring Apps job logs in real time (Dzienniki zadań usługi Azure Spring Apps w czasie rzeczywistym).

Wymagania wstępne

  • Interfejs wiersza polecenia platformy Azure z rozszerzeniem Azure Spring Apps w wersji 1.24.0 lub nowszej. Rozszerzenie można zainstalować przy użyciu następującego polecenia: az extension add --name spring.

Obsługiwane składniki zarządzane

Poniższa tabela zawiera listę składników zarządzanych, które są obecnie obsługiwane, wraz z ich podskładniki:

Składnik zarządzany Składniki podrzędne
Usługa konfiguracji aplikacji application-configuration-service
flux-source-controller (Obsługiwane w wersji ACS Gen2)
Spring Cloud Gateway spring-cloud-gateway
spring-cloud-gateway-operator
Spring Cloud Config Server config-server

Aby wyświetlić listę wszystkich podskładników, możesz użyć następującego polecenia:

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

Przypisywanie roli platformy Azure

Aby przesyłać strumieniowo dzienniki składników zarządzanych, musisz mieć przypisane odpowiednie role platformy Azure. W poniższej tabeli wymieniono wymagane role i operacje, dla których te role mają przyznane uprawnienia:

Składnik zarządzany Wymagana rola Operacje
Usługa konfiguracji aplikacji Rola czytelnika dziennika usługi konfiguracji aplikacji usługi Azure Spring Apps Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action
Spring Cloud Gateway Rola czytelnika dzienników usługi Spring Cloud Gateway w usłudze Azure Spring Apps Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action
Spring Cloud Config Server Rola czytelnika dzienników serwera Spring Spring Cloud Spring Apps Spring Cloud Microsoft.AppPlatform/Spring/configService/logstream/action

Aby przypisać rolę platformy Azure przy użyciu witryny Azure Portal, wykonaj następujące kroki:

  1. Otwórz portal Azure Portal.

  2. Otwórz wystąpienie usługi Azure Spring Apps.

  3. W okienku nawigacji wybierz pozycję Kontrola dostępu (zarządzanie dostępem i tożsamościami).

  4. Na stronie Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Dodaj, a następnie wybierz pozycję Dodaj przypisanie roli.

    Zrzut ekranu witryny Azure Portal przedstawiający stronę Kontrola dostępu (zarządzanie dostępem i tożsamościami) z wyróżnioną opcją Dodaj przypisanie roli.

  5. Na stronie Dodawanie przypisania roli na liście Nazwa wyszukaj i wybierz rolę docelową, a następnie wybierz pozycję Dalej.

    Zrzut ekranu witryny Azure Portal przedstawiający stronę Dodawanie przypisania roli z wyróżnioną nazwą roli Czytelnik dziennika usługi konfiguracji aplikacji.

  6. Wybierz pozycję Członkowie , a następnie wyszukaj i wybierz swoją nazwę użytkownika.

  7. Wybierz Przejrzyj + przypisz.

Wyświetlanie listy wszystkich wystąpień w składniku

Użyj następującego polecenia, aby wyświetlić listę wszystkich wystąpień w składniku:

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

Aby na przykład wyświetlić listę wszystkich wystąpień usługi flux-source-controller w wersji ACS Gen2, użyj następującego polecenia:

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

Wyświetlanie dzienników końcowych

Ta sekcja zawiera przykłady użycia interfejsu wiersza polecenia platformy Azure do tworzenia dzienników końcowych.

Wyświetlanie dzienników końcowych dla określonego wystąpienia

Aby wyświetlić dzienniki ogona dla określonego wystąpienia, użyj az spring component logs polecenia z argumentem -i/--instance , jak pokazano w następnej sekcji.

Wyświetlanie dzienników końcowych dla wystąpienia usługi application-configuration-service

Użyj następującego polecenia, aby wyświetlić dzienniki końcowe dla application-configuration-serviceelementu :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name application-configuration-service \
    --instance <instance-name>

W przypadku usługi ACS Gen2 polecenie zwraca dzienniki podobne do następującego przykładu:

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

Wyświetlanie dzienników końcowych dla wystąpienia flux-source-controller

Użyj następującego polecenia, aby wyświetlić dzienniki końcowe dla flux-source-controllerelementu :

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

Polecenie zwraca dzienniki podobne do następującego przykładu:

...
{"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"}
...

Wyświetlanie dzienników końcowych dla wystąpienia bramy spring-cloud-gateway

Użyj następującego polecenia, aby wyświetlić dzienniki końcowe dla spring-cloud-gatewayelementu :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name spring-cloud-gateway \
    --instance <instance-name>

Polecenie zwraca dzienniki podobne do następującego przykładu:

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

Wyświetlanie dzienników końcowych dla wystąpienia operatora spring-cloud-gateway

Użyj następującego polecenia, aby wyświetlić dzienniki końcowe dla spring-cloud-gateway-operatorelementu :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name spring-cloud-gateway-operator \
    --instance <instance-name>

Polecenie zwraca dzienniki podobne do następującego przykładu:

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

Wyświetlanie dzienników końcowych dla wystąpienia serwera konfiguracji

Użyj następującego polecenia, aby wyświetlić dzienniki końcowe dla config-serverelementu :

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name config-server \
    --instance <instance-name>

Polecenie zwraca dzienniki podobne do następującego przykładu:

...
{"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)"}
...

Wyświetlanie dzienników końcowych dla wszystkich wystąpień w jednym poleceniu

Aby wyświetlić dzienniki końcowe dla wszystkich wystąpień, użyj argumentu --all-instances , jak pokazano w poniższym poleceniu. Nazwa wystąpienia jest prefiksem każdego wiersza dziennika. Jeśli istnieje wiele wystąpień, dzienniki są drukowane w partii dla każdego wystąpienia, więc dzienniki jednego wystąpienia nie są przeplatane dziennikami innego wystąpienia.

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --all-instances

Ciągłe przesyłanie strumieniowe nowych dzienników

Domyślnie az spring component logs drukuje tylko istniejące dzienniki przesyłane strumieniowo do konsoli, a następnie kończy działanie. Jeśli chcesz przesyłać strumieniowo nowe dzienniki, dodaj -f/--follow argument .

Gdy używasz -f/--follow opcji do tworzenia natychmiastowych dzienników, usługa przesyłania strumieniowego dzienników usługi Azure Spring Apps wysyła dzienniki pulsu do klienta co minutę, chyba że składnik stale zapisuje dzienniki. Komunikaty dziennika pulsu używają następującego formatu: 2023-12-18 09:12:17.745: No log from server.

Przesyłanie strumieniowe dzienników dla określonego wystąpienia

Użyj następującego polecenia, aby przesyłać strumieniowo dzienniki dla określonego wystąpienia:

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

Przesyłanie strumieniowe dzienników dla wszystkich wystąpień

Użyj następującego polecenia, aby przesłać strumieniowo dzienniki dla wszystkich wystąpień:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --all-instances \
    --follow

Podczas przesyłania strumieniowego dzienników dla wielu wystąpień w składniku dzienniki jednego wystąpienia są przeplatane z dziennikami innych.

Przesyłanie strumieniowe dzienników w wystąpieniu iniekcji sieci wirtualnej

W przypadku wystąpienia usługi Azure Spring Apps wdrożonego w niestandardowej sieci wirtualnej można domyślnie uzyskiwać dostęp do przesyłania strumieniowego dzienników z sieci prywatnej. Aby uzyskać więcej informacji, zobacz Wdrażanie usługi Azure Spring Apps w sieci wirtualnej

Usługa Azure Spring Apps umożliwia również dostęp do dzienników składników zarządzanych w czasie rzeczywistym z sieci publicznej.

Uwaga

Włączenie punktu końcowego przesyłania strumieniowego dziennika w sieci publicznej powoduje dodanie publicznego przychodzącego adresu IP do sieci wirtualnej. Pamiętaj, aby zachować ostrożność, jeśli jest to dla Ciebie problemem.

Wykonaj następujące kroki, aby włączyć punkt końcowy przesyłania strumieniowego dziennika w sieci publicznej:

  1. Wybierz wystąpienie usługi Azure Spring Apps wdrożone w sieci wirtualnej, a następnie wybierz pozycję Sieć w menu nawigacji.

  2. Wybierz kartę Wstrzykiwanie sieci wirtualnej.

  3. Przełącz stan zasobów płaszczyzny danych w sieci publicznej, aby włączyć punkt końcowy przesyłania strumieniowego dziennika w sieci publicznej. Ten proces trwa kilka minut.

    Zrzut ekranu witryny Azure Portal przedstawiający stronę Sieć z wybraną kartą Wstrzykiwanie sieci wirtualnej i wyróżnioną sekcją Rozwiązywanie problemów.

Po włączeniu publicznego punktu końcowego strumienia dziennika można uzyskać dostęp do dzienników składników zarządzanych z sieci publicznej tak samo jak w przypadku normalnego wystąpienia.

Zabezpieczanie ruchu do publicznego punktu końcowego przesyłania strumieniowego dziennika

Przesyłanie strumieniowe dzienników dla składników zarządzanych używa kontroli dostępu opartej na rolach platformy Azure do uwierzytelniania połączeń ze składnikami. W związku z tym tylko użytkownicy, którzy mają odpowiednie role, mogą uzyskiwać dostęp do dzienników.

Aby zapewnić bezpieczeństwo składników zarządzanych po ujawnieniu publicznego punktu końcowego dla nich, należy zabezpieczyć punkt końcowy, filtrując ruch sieciowy do usługi za pomocą sieciowej grupy zabezpieczeń. Aby uzyskać więcej informacji, zobacz Samouczek: filtrowanie ruchu sieciowego za pomocą sieciowej grupy zabezpieczeń przy użyciu witryny Azure Portal. Sieciowa grupa zabezpieczeń zawiera reguły zabezpieczeń, które zezwalają na lub blokują przychodzący ruch sieciowy lub wychodzący ruch sieciowy dla kilku typów zasobów platformy Azure. Dla każdej reguły można określić źródło i obiekt docelowy, port i protokół.

Uwaga

Jeśli nie możesz uzyskać dostępu do dzienników składników zarządzanych w wystąpieniu iniekcji sieci wirtualnej z Internetu po włączeniu publicznego punktu końcowego strumienia dziennika, sprawdź sieciową grupę zabezpieczeń, aby sprawdzić, czy dozwolony jest taki ruch przychodzący.

W poniższej tabeli przedstawiono przykład podstawowej reguły, którą zalecamy. Aby uzyskać docelowy adres IP usługi, możesz użyć poleceń, takich jak nslookup w przypadku punktu końcowego <service-name>.private.azuremicroservices.io .

Priorytet Nazwa Port Protokół Element źródłowy Element docelowy Akcja
100 Nazwa reguły 80 TCP Internet Adres IP usługi Zezwalaj
110 Nazwa reguły 443 TCP Internet Adres IP usługi Zezwalaj

Następne kroki