Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Zasada MessageLogging Apigee Edge zezwala programistom interfejsów API interfejsu API na rejestrowanie niestandardowych komunikatów w pliku Syslog lub na dysku (tylko Edge dla Private Cloud). Wszystkie ważne informacje związane z żądaniem do interfejsu API, takie jak parametry wejściowe, ładunek żądania, kod odpowiedzi, komunikaty o błędach (jeśli występują) itd., można rejestrować w celu późniejszego wglądu lub debugowania. Chociaż zasada do logowania korzysta z procesu w tle, korzystanie z niej podlega pewnym ograniczeniom.
Antywzór
Zasada MessageLogging pozwala efektywnie uzyskiwać więcej informacji o żądaniach do interfejsu API i debugować wszelkie problemy związane z tymi żądaniami. Jednak używanie tej samej zasady MessageLogging więcej niż raz lub używanie wielu danych logu MessageLogging we fragmentach w tym samym serwerze proxy interfejsu API w przepływach innych niż PostClientFlow może mieć negatywne konsekwencje. Dzieje się tak, ponieważ Apigee Edge otwiera połączenie z zewnętrznym serwerem Syslog na potrzeby zasady MessageLogging. Jeśli zasada korzysta z protokołu TLS przez TCP, nawiązanie połączenia TLS wiąże się z dodatkowym nakładem pracy.
Wyjaśnimy to za pomocą przykładowego serwera proxy interfejsu API.
proxy interfejsu API
W poniższym przykładzie zasada MessageLogging o nazwie „LogRequestInfo” została umieszczona w przepływie żądania, a druga zasada MessageLogging o nazwie „LogResponseInfo” została dodana do przepływu odpowiedzi. Oba są w trybie PreFlow ProxyEndpoint. Zasada LogRequestInfo jest wykonywana w tle natychmiast po otrzymaniu żądania przez serwer proxy interfejsu API, a zasada LogResponseInfo jest realizowana po otrzymaniu odpowiedzi z serwera docelowego, ale przed zwróceniem odpowiedzi na klienta API przez serwer proxy. Spowoduje to wykorzystanie dodatkowych zasobów systemowych, ponieważ może być nawiązywane 2 połączenia TLS.
Oprócz tego istnieje zasada MessageLogging o nazwie „LogErrorInfo”, która jest wykonywana tylko w przypadku wystąpienia błędu podczas wykonywania serwera proxy interfejsu API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ProxyEndpoint name="default"> ... <FaultRules> <FaultRule name="fault-logging"> <Step> <Name>LogErrorInfo</Name> </Step> </FaultRule> </FaultRules> <PreFlow name="PreFlow"> <Request> <Step> <Name>LogRequestInfo</Name> </Step> </Request> </PreFlow> <PreFlow name="PreFlow"> <Response> <Step> <Name>LogResponseInfo</Name> </Step> </Response> </PreFlow> ... </ProxyEndpoint>
Zasady logowania wiadomości
W poniższych przykładowych konfiguracjach zasad dane są logowane na serwerach logów innych firm przy użyciu protokołu TLS przez TCP. Jeśli w tym samym serwerze proxy interfejsu API jest używana więcej niż 1 z tych zasad, nakład pracy związany z nawiązywaniem połączeń TLS i zarządzaniem nimi zajmowałby dodatkową pamięć systemową i cykle procesora, co prowadziłoby do problemów z wydajnością na dużą skalę.
Zasada LogRequestInfo
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MessageLogging name="LogRequestInfo"> <Syslog> <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {request.queryparam.w}.</Message> <Host>logs-01.loggly.com</Host> <Port>6514</Port> <Protocol>TCP</Protocol> <FormatMessage>true</FormatMessage> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </Syslog> <logLevel>INFO</logLevel> </MessageLogging>
Zasada LogResponseInfo
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MessageLogging name="LogResponseInfo"> <Syslog> <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Status: {response.status.code}, Response {response.content}.</Message> <Host>logs-01.loggly.com</Host> <Port>6514</Port> <Protocol>TCP</Protocol> <FormatMessage>true</FormatMessage> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </Syslog> <logLevel>INFO</logLevel> </MessageLogging>
Zasada LogErrorInfo
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MessageLogging name="LogErrorInfo"> <Syslog> <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Fault name: {fault.name}.</Message> <Host>logs-01.loggly.com</Host> <Port>6514</Port> <Protocol>TCP</Protocol> <FormatMessage>true</FormatMessage> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </Syslog> <logLevel>ERROR</logLevel> </MessageLogging>
Wpływ
- Zwiększenie obciążenia sieci spowodowane wielokrotnym nawiązywaniem połączeń z serwerami logów podczas przepływu serwera proxy interfejsu API.
- Jeśli serwer syslog działa wolno lub nie jest w stanie obsłużyć dużej ilości danych z powodu wielu wywołań syslog, spowoduje to ciśnienie wsteczne na procesor wiadomości, co spowoduje powolne przetwarzanie żądań i potencjalnie wysokie opóźnienie lub błędy 504 limitu czasu bramy.
- Zwiększona liczba równoczesnych deskryptorów plików otwieranych przez procesor wiadomości w konfiguracjach chmury prywatnej, w której używane jest logowanie plików.
Jeśli zasada MessageLogging znajduje się w przepływach innych niż przepływ klienta PostClient, istnieje możliwość, że informacje nie zostaną zarejestrowane, ponieważ zasada MessageLogging nie zostanie wykonana, jeśli przed wykonaniem tej zasady wystąpi jakiś błąd.
W poprzednim przykładzie ProxyEndpoint informacje nie będą rejestrowane w tych sytuacjach:
- Jeśli któraś z zasad umieszczona przed zasadą LogRequestInfo w przepływie żądania nie powiedzie się.
lub - Jeśli na serwerze docelowym wystąpi błąd (HTTP 4XX, 5XX). W takiej sytuacji, jeśli odpowiedź z odpowiedzią nie zostanie zwrócona, zasada LogResponseInfo nie zostanie wykonana.
W obu przypadkach zasada LogErrorInfo zostanie wykonana i będzie rejestrować tylko informacje związane z błędem.
- Jeśli któraś z zasad umieszczona przed zasadą LogRequestInfo w przepływie żądania nie powiedzie się.
Sprawdzona metoda
- Użyj zasady wyodrębniania danych lub zasady JavaScript, aby ustawić wszystkie zmienne przepływu, które mają być logowane, i udostępnij je na potrzeby zasady MessageLogging.
- Użyj pojedynczej zasady MessageLogging, aby rejestrować wszystkie wymagane dane w ramach PostClientFlow, która jest wykonywana bezwarunkowo.
- Użyj protokołu UDP, gdzie gwarantowane dostarczanie wiadomości do serwera Syslog nie jest wymagane, a protokół TLS/SSL nie jest wymagany.
Zasada MessageLogging została zaprojektowana tak, aby oddzielać ją od rzeczywistych funkcji interfejsu API, w tym obsługi błędów. Dlatego wywołanie go w PostClientFlow, który jest poza przetwarzaniem żądań/odpowiedzi, oznacza, że będzie zawsze logował dane niezależnie od tego, czy interfejs API zawiedził czy nie.
Oto przykład wywoływania zasady MessageLogging w PostClientFlow:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> ... <PostClientFlow> <Request/> <Response> <Step> <Name>LogInfo</Name> </Step> </Response> </PostClientFlow> ...
Oto przykład zasady MessageLogging (LogInfo), która rejestruje wszystkie dane:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MessageLogging name="LogInfo"> <Syslog> <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {woeid} Status: {weather.response.code}, Response {weather.response}, Fault: {fault.name:None}.</Message> <Host>logs-01.loggly.com</Host> <Port>6514</Port> <Protocol>TCP</Protocol> <FormatMessage>true</FormatMessage> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </Syslog> <logLevel>INFO</logLevel> </MessageLogging>
Ponieważ po przeprowadzeniu procesu błędów zmienne odpowiedzi są niedostępne w PostClientFlow, ważne jest wyraźne ustawienie zmiennych woeid
i weather.response*
za pomocą zasad ExtractVariables lub zasad JavaScript.
Więcej informacji
- Zasady dotyczące JavaScriptu
- Zasada ExtractVariables
- Uruchomienie kodu po przetworzeniu przez serwer proxy, w tym po wystąpieniu błędów, za pomocą metody PostClientFlow