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:
Otwórz portal Azure Portal.
Otwórz wystąpienie usługi Azure Spring Apps.
W okienku nawigacji wybierz pozycję Kontrola dostępu (zarządzanie dostępem i tożsamościami).
Na stronie Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Dodaj, a następnie wybierz pozycję Dodaj przypisanie roli.
Na stronie Dodawanie przypisania roli na liście Nazwa wyszukaj i wybierz rolę docelową, a następnie wybierz pozycję Dalej.
Wybierz pozycję Członkowie , a następnie wyszukaj i wybierz swoją nazwę użytkownika.
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-service
elementu :
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-controller
elementu :
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-gateway
elementu :
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-operator
elementu :
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-server
elementu :
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:
Wybierz wystąpienie usługi Azure Spring Apps wdrożone w sieci wirtualnej, a następnie wybierz pozycję Sieć w menu nawigacji.
Wybierz kartę Wstrzykiwanie sieci wirtualnej.
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.
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 |