Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Cosa
Uno dei modi migliori per individuare i problemi nell'ambiente di runtime dell'API è registrare i messaggi. Puoi collegare e configurare una policy MessageLogging alla tua API per registrare messaggi personalizzati su un disco locale (solo Edge for Private Cloud) o su syslog.
Esempi
Syslog
<MessageLogging name="LogToSyslog">
<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>514</Port>
<Protocol>TCP</Protocol>
<FormatMessage>true</FormatMessage>
<DateFormat>yyyy-MM-dd'T'HH:mm:ss.SSSZ</DateFormat>
</Syslog>
<logLevel>ALERT</logLevel>
</MessageLogging>Un utilizzo comune del tipo di policy MessageLogging è la registrazione in un account syslog. Se configurato per syslog, un proxy API inoltrerà i messaggi di log da Apigee Edge a un server syslog remoto. Devi già avere un server syslog disponibile. In caso contrario, sono disponibili servizi di gestione dei log pubblici, come Splunk, Sumo Logic e Loggly. Consulta la sezione Configurazione di servizi di gestione dei log di terze parti.
Ad esempio, supponiamo che tu debba registrare informazioni su ogni messaggio di richiesta che la tua
API riceve dalle app consumer. Il valore 3f509b58 rappresenta una coppia chiave-valore
specifica del servizio Loggly. Se hai un account Loggly, sostituisci la chiave Loggly. Il messaggio di log generato verrà compilato con quattro valori: l'organizzazione, il proxy API e il nome dell'ambiente associato alla transazione, insieme al valore di un parametro di query nel messaggio di richiesta.
Se hai un deployment di Edge for Private Cloud, puoi anche scrivere messaggi di log in un file.
Syslog su TLS/SSL
<MessageLogging name="LogToSyslog">
<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>
<DateFormat>yyMMdd-HH:mm:ss.SSS</DateFormat>
</Syslog>
<logLevel>WARN</logLevel>
</MessageLogging>Puoi inviare messaggi a provider di registrazione dei messaggi di terze parti tramite TLS/SSL aggiungendo il blocco
<SSLInfo>.
Rotazione dei file: dimensioni
<MessageLogging name="LogPolicy">
<File>
<Message>This is a test message. Message id : {request.header.messageid}</Message>
<FileName>test.log</FileName>
<FileRotationOptions rotateFileOnStartup="true">
<FileRotationType>SIZE</FileRotationType>
<MaxFileSizeInMB>10</MaxFileSizeInMB>
<MaxFilesToRetain>10</MaxFilesToRetain>
</FileRotationOptions>
</File>
<logLevel>ERROR</logLevel>
</MessageLogging>Rotazione dei file in base alle dimensioni.
Rotazione dei file: ora
<MessageLogging name="LogPolicy">
<File>
<Message>This is a test message. Message id : {request.header.messageid}</Message>
<FileName>test.log</FileName>
<FileRotationOptions rotateFileOnStartup="true">
<FileRotationType>TIME</FileRotationType>
<RotationFrequency unit="minute">10</RotationFrequency>
<MaxFilesToRetain>10</MaxFilesToRetain>
</FileRotationOptions>
</File>
<logLevel>ERROR</logLevel>
</MessageLogging>Rotazione dei file in base al tempo.
Rotazione dei file: tempo e dimensioni
<MessageLogging name="LogPolicy">
<File>
<Message>This is a test message. Message id : {request.header.messageid}</Message>
<FileName>test.log</FileName>
<FileRotationOptions rotateFileOnStartup="true">
<FileRotationType>TIME_SIZE</FileRotationType>
<MaxFileSizeInMB>10</MaxFileSizeInMB>
<MaxFilesToRetain>10</MaxFilesToRetain>
<RotationFrequency unit="minute">10</RotationFrequency>
</FileRotationOptions>
</File>
<logLevel>ERROR</logLevel>
</MessageLogging>Rotazione dei file in base a tempo e dimensioni.
Stream-enabled
<MessageLogging name="LogPolicy"> <File> .... .... </File> <BufferMessage>true</BufferMessage> </MessageLogging>
Registrazione dei messaggi abilitata per lo streaming
Riferimento elemento
Utilizza i seguenti elementi per configurare il tipo di policy MessageLogging.
| Nome campo | Descrizione del campo | |
|---|---|---|
|
Destinazione del file locale. La registrazione dei file è supportata solo nelle implementazioni di Edge per Private Cloud. Per informazioni su dove vengono archiviati i file, consulta Posizione dei file di log in Edge for Private Cloud. |
Message |
Crea il messaggio da inviare al file di log combinando testo e variabili per acquisire le informazioni che ti interessano. Vedi gli esempi. |
FileName |
Il nome base del file di log.
Non specificare un percorso del file. Ad esempio, questo elemento FileName specifica un percorso file e
non è valido:
<FileName>/opt/apigee/var/log/messages/mylog.log</FileName> Questo codice specifica solo un nome file ed è valido: <FileName>mylog.log</FileName> Per informazioni sulla posizione di archiviazione del file, consulta Posizione del file di log in Edge for Private Cloud. |
|
FileRotationOptions |
||
rotateFileOnStartup |
Attributo. Valori validi: Se è impostato su true, il file di log viene ruotato ogni volta che il motore di messaggistica viene riavviato. |
|
FileRotationType |
Specifica il criterio di rotazione (size o
time) di un file di log. |
|
MaxFileSizeInMB |
(Selezionando size come tipo di rotazione)
Specifica le dimensioni di un file di log che attivano lo spostamento dei messaggi di log in un file separato. Quando il file di log raggiunge le dimensioni specificate, il server rinomina il
file di log corrente. |
|
RotationFrequency |
(Selezionando time come tipo di rotazione)
Specifica il tempo in minuti che attiva lo spostamento dei messaggi di log in un file separato
sul server. Al termine dell'intervallo specificato, il file di log corrente viene rinominato. |
|
MaxFilesToRetain |
Specifica il numero massimo di file da conservare nel contesto delle impostazioni di rotazione. Il valore predefinito è 8. Se specifichi zero (0), i file di log vengono conservati a tempo indeterminato, ma sono soggetti alle impostazioni di rotazione dei file, anche se nessuno dei file viene eliminato o rinominato. Pertanto, per evitare futuri errori di disco pieno, imposta questo valore su un valore maggiore di zero o implementa un sistema regolare e automatizzato di eliminazione o archiviazione dei file di log conservati meno recenti. |
|
BufferMessage |
Se lo streaming HTTP è abilitato per il proxy, i messaggi di richiesta/risposta non vengono memorizzati nel buffer. Se vuoi registrare i contenuti che richiedono l'analisi del messaggio di flusso, imposta BufferMessage su true. Per un esempio, consulta la scheda di esempio "Stream-enabled". Valore predefinito: false |
|
|
Una destinazione syslog. Per inviare syslog a Splunk, Sumo Logic o Loggly, vedi Configurazione di servizi di gestione dei log di terze parti. |
Message |
Crea il messaggio da inviare a syslog, combinando testo e variabili per acquisire le informazioni che ti interessano. Vedi gli esempi. Nota:le variabili di risposta non saranno disponibili in PostClientFlow dopo un flusso di errori. Utilizza le variabili del messaggio per registrare le informazioni sulla risposta sia in caso di errore che di esito positivo. Vedi anche Note sull'utilizzo. |
Host |
Il nome host o l'indirizzo IP del server a cui deve essere inviato il syslog. Se non includi questo elemento, il valore predefinito è localhost. | |
Port |
Porta su cui è in esecuzione syslog. Se non includi questo elemento, il valore predefinito è 514. | |
Protocol |
TCP o UDP (impostazione predefinita). Sebbene UDP sia più efficiente, il protocollo TCP garantisce la consegna del log dei messaggi al server syslog. Per l'invio di messaggi syslog tramite TLS/SSL, è supportato solo TCP. | |
FormatMessage |
Facoltativo, ma Questo elemento consente di controllare il formato dei contenuti generati da Apigee anteposti al messaggio. Se impostato su true, il messaggio syslog è preceduto da un numero fisso di caratteri, che ti consente di filtrare queste informazioni dai messaggi. Ecco un esempio per il formato fisso:
Le informazioni generate da Apigee includono:
Se è impostato su false (valore predefinito), al messaggio non vengono anteposti questi caratteri fissi. |
|
PayloadOnly |
Questo elemento imposta il formato dei messaggi generati da Apigee in modo che contengano solo il corpo del messaggio syslog, senza i caratteri anteposti specificati da FormatMessage. Se non includi questo elemento o lo lasci vuoto, il valore predefinito è Vedi FormatMessage. |
|
DateFormat |
Facoltativo. Una stringa di modello di formattazione da utilizzare per formattare il timestamp di ogni messaggio di log.
Per impostazione predefinita, Apigee utilizza |
|
SSLInfo |
Consente di registrare i messaggi tramite SSL/TLS. Utilizza con
l'elemento secondario Se non includi questo elemento o lo lasci vuoto, il valore predefinito è false (nessun TLS/SSL). <SSLInfo>
<Enabled>true</Enabled>
</SSLInfo>Puoi configurare il tag <SSLInfo> come in un TargetEndpoint, inclusa l'attivazione di TLS/SSL bidirezionale, come descritto in Riferimento alla configurazione del proxy API. È supportato solo il protocollo TCP. |
|
logLevel |
Facoltativo. Valori validi: Imposta un livello specifico di informazioni da includere nel log dei messaggi. Se utilizzi l'elemento |
|
Schemi
Note sull'utilizzo
Quando colleghi una policy MessageLogging a un flusso di proxy API, valuta la possibilità di inserirla nella risposta ProxyEndpoint, in un flusso speciale chiamato PostClientFlow. PostClientFlow viene eseguito dopo l'invio della risposta al client richiedente, il che garantisce che tutte le metriche siano disponibili per la registrazione. Per informazioni dettagliate sull'utilizzo di PostClientFlow, consulta Riferimento per la configurazione dei proxy API.
PostClientFlow è speciale in due modi:
- È stato eseguito solo nell'ambito del flusso di risposta.
- È l'unico flusso eseguito dopo che il proxy entra nello stato di errore.
Poiché viene eseguito indipendentemente dall'esito positivo o negativo del proxy, puoi inserire i criteri MessageLogging in PostClientFlow e avere la garanzia che vengano sempre eseguiti.
L'immagine di Trace seguente mostra una policy MessageLogging in esecuzione come parte di PostClientFlow, dopo l'esecuzione di DefaultFaultRule:

In questo esempio, il criterio Verifica chiave API ha causato l'errore a causa di una chiave non valida.
Di seguito è riportata la definizione di ProxyEndpoint che include PostClientFlow:
<ProxyEndpoint name="default">
...
<PostClientFlow>
<Response>
<Step>
<Name>Message-Logging-1</Name>
</Step>
</Response>
</PostClientFlow>
...
</ProxyEndpoint>Edge registra i messaggi come testo semplice e puoi configurare la registrazione in modo da includere variabili, ad esempio la data e l'ora in cui è stata ricevuta la richiesta o la risposta, l'identità dell'utente nella richiesta, l'indirizzo IP di origine da cui è stata inviata la richiesta e così via. I log edge inviano messaggi in modo asincrono, il che significa che non viene introdotta alcuna latenza che potrebbe essere causata da callout di blocco alla tua API.
Il criterio MessageLogging scrive i messaggi registrati in memoria in un buffer. Il logger dei messaggi legge i messaggi dal buffer e li scrive nella destinazione che configuri. Ogni destinazione ha il proprio buffer.
Gli utenti potrebbero riscontrare ritardi nella ricezione dei messaggi di log inviati a un nuovo endpoint syslog. Ciò è dovuto a un comportamento di "avvio a freddo" previsto nella norma. Quando viene configurata una nuova destinazione di logging, oltre alle destinazioni di logging esistenti, il processore di messaggi (MP) potrebbe mettere in coda 1000 messaggi di log in memoria prima di inviarli. Ciò può comportare un ritardo iniziale negli ambienti con traffico ridotto. Questo ritardo iniziale non è osservabile per i tipici workload di produzione, poiché i messaggi dovrebbero accumularsi rapidamente. Una volta raggiunto il limite, i messaggi di log verranno recapitati come previsto. L'esecuzione di un riavvio controllato del processore di messaggi può anche attivare il recapito dei messaggi in coda man mano che vengono svuotati dalla coda.
Se la frequenza di scrittura nel buffer aumenta oltre la frequenza di lettura, il buffer si riempie e la registrazione non riesce. In questo caso, nel file di log potresti trovare un messaggio contenente quanto segue:
Log message size exceeded. Increase the max message size setting
Se riscontri questo problema in Edge for Private Cloud 4.15.07 e versioni precedenti, individua il file
message-logging.properties e utilizza questa soluzione:
Aumenta la proprietà max.log.message.size.in.kb (valore predefinito = 128 KB) nel file
message-logging.properties.
Per Edge for Private Cloud 4.16.01 e versioni successive, imposta la proprietà conf/message-logging.properties+max.
log.message.size.in.kb nel file /opt/apigee/customer/application/message-processor.properties e riavvia il Message Processor. Tieni presente che questa proprietà è inizialmente commentata per impostazione predefinita.
Nota:le variabili del messaggio di risposta in Edge non sono disponibili nel flusso di errori. Queste variabili non sono disponibili in PostClientFlow se il flusso precedente era il flusso di errori. Se vuoi registrare le informazioni di risposta da PostClientFlow, utilizza l'oggetto message. Puoi utilizzare questo oggetto per ottenere intestazioni e altre informazioni dalla risposta, indipendentemente dal fatto che si sia verificato un errore. Per ulteriori informazioni ed esempi, consulta la sezione Variabili dei messaggi.
Controllo del timestamp del messaggio di log in Edge for Private Cloud
Per impostazione predefinita, il timestamp in tutti i messaggi di log ha il formato:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
È possibile eseguire l'override di questo valore predefinito a livello di sistema per le destinazioni syslog utilizzando l'elemento
DateFormat. Il comportamento di questo modello è descritto nella
documentazione della classe SimpleDateFormat di Java. In base a questa definizione, yyyy verrà sostituito
con un anno a 4 cifre, MM con un numero di mese a 2 cifre e così via.
Il formato precedente potrebbe generare una stringa di questo tipo:
2022-09-28T22:38:11.721+0000
Puoi utilizzare la proprietà conf_system_apigee.syslogger.dateFormat in Edge Message Processor per controllare il formato. Ad esempio, modificando il formato del messaggio in:
yy/MM/dd'T'HH:mm:ss.SSSZ
..sostituendo i trattini con le barre e abbreviando l'anno a due cifre, registra un timestamp nel formato:
22/09/28T22:38:11.721+0000
Per modificare il formato:
- Apri il file message-processor.properties in un editor. Se il file non esiste, crealo:
> vi /opt/apigee/customer/application/message-processor.properties - Imposta le proprietà come preferisci:
conf_system_apigee.syslogger.dateFormat=yy/MM/dd'T'HH:mm:ss.SSSZ - Salva le modifiche.
- Assicurati che il file delle proprietà appartenga all'utente "apigee":
> chown apigee:apigee /opt/apigee/customer/application/message-processor.properties - Riavvia il processore di messaggi Edge:
> /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Percorso del file di log in Edge for Private Cloud
Edge for Private Cloud 4.16.01 e versioni successive
Per impostazione predefinita, i log dei messaggi del cloud privato si trovano nella seguente directory sui nodi Message Processor:
/opt/apigee/var/log/edge-message-processor/messagelogging/org_name/environment/api_proxy_name/revision/logging_policy_name/
Puoi modificare la posizione predefinita dei log modificando le proprietà nel file message-logging.properties sui Message Processor:
- bin_setenv_data_dir -
Imposta il percorso principale per l'archiviazione dei file di log. Ad esempio,
bin_setenv_data_dir=/opt/apigee/var/log - conf_message-logging_log.root.dir: se
imposti questo valore su un percorso relativo, ad esempio
conf/message-logging.properties+log.root.dir=custom/folder/, the path is appended to the bin_setenv_data_dir location.
Se lo imposti su un percorso assoluto, ad esempioconf/message-logging.properties+log.root.dir=/opt/apigee/var/log/messages, i log dei messaggi vengono archiviati in/opt/apigee/var/log/messages/messagelog/. Un percorso assoluto ha la precedenza subin_setenv_data_dir.
Tieni presente che devi fare riferimento alla proprietà come conf/message-logging.properties+log.root.dir perché è commentata per impostazione predefinita. Per saperne di più, consulta Impostazione di un token attualmente commentato.
Se vuoi archiviare i file di log in una struttura di file piatta in modo che tutti i file di log vengano inseriti nella stessa directory, imposta conf/message-logging.properties+enable.flat.directory.structure su true nel file message-logging.properties. I messaggi vengono archiviati nella directory specificata dalle proprietà precedenti e i nomi dei file hanno il formato {org}_{environment}_{api_proxy_name}_{revision}_{logging_policy_name}_{filename}.
Per impostare queste proprietà:
- Apri il file message-processor.properties in un editor. Se il file non esiste, crealo:
> vi /opt/apigee/customer/application/message-processor.properties - Imposta le proprietà come preferisci:
conf/message-logging.properties+log.root.dir=/opt/apigee/var/log/messages - Salva le modifiche.
- Assicurati che il file delle proprietà appartenga all'utente "apigee":
> chown apigee:apigee /opt/apigee/customer/application/message-processor.properties - Riavvia il componente Edge:
> /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Edge for Private Cloud 4.15.07 e versioni precedenti
Per impostazione predefinita, i log dei messaggi si trovano nel seguente percorso sui processori dei messaggi:
/opt/apigee4/var/log/apigee/message-processor/messagelog/{org}/{environment}/{api_proxy_name}/{revision}/{logging_policy_name}/
Puoi modificare la posizione predefinita dei log modificando le seguenti proprietà nel file message-logging.properties sui processori di messaggi:
- data.dir: imposta il percorso radice per l'archiviazione dei file di log. Ad esempio, data.dir=/opt/apigee4/var/log
- log.root.dir: se imposti questo valore su un percorso relativo, ad esempio log.root.dir=custom/folder/, il percorso viene aggiunto alla posizione data.dir.
Ad esempio, la combinazione delle due proprietà imposterebbe la directory di logging su /opt/apigee4/var/log/custom/folder/messagelog/ (nota che /messagelog viene aggiunto automaticamente).
Se lo imposti su un percorso assoluto, ad esempio log.root.dir=/opt/apigee4/var/log/messages, i log dei messaggi verranno archiviati in /opt/apigee4/var/log/messages/messagelog/. Un percorso assoluto in log.root.dir ha la precedenza su data.dir.
Se vuoi archiviare i file di log in una struttura di file piatta in modo che tutti i file di log vengano inseriti nella stessa directory, imposta la proprietà enable.flat.directory.structure su true nel file message-logging.properties sui processori di messaggi. I messaggi vengono archiviati nella directory specificata dalle proprietà precedenti e i nomi dei file hanno il formato {org}_{environment}_{api_proxy_name}_{revision}_{logging_policy_name}_{filename}.
Valori predefiniti per le variabili nel modello di messaggio
I valori predefiniti possono essere specificati separatamente per ogni variabile nel modello di messaggio. Ad esempio,
se la variabile request.header.id non può essere risolta, il suo valore viene sostituito
con il valore unknown.
<Message>This is a test message. id = {request.header.id:unknown}</Message>È possibile specificare un valore predefinito comune per tutte le variabili non risolte impostando l'attributo
defaultVariableValue sull'elemento Message:
<Message defaultVariableValue="unknown">This is a test message. id = {request.header.id}</Message>Configurazione di servizi di gestione dei log di terze parti
Il criterio MessageLogging consente di inviare messaggi syslog a servizi di gestione dei log di terze parti, come Splunk, Sumo Logic e Loggly. Se vuoi inviare syslog a uno di questi servizi, consulta la documentazione del servizio per configurare host, porta e protocollo del servizio, quindi imposta l'elemento Syslog in questo criterio di conseguenza.
Consulta la seguente documentazione per la configurazione della gestione dei log di terze parti:
- Splunk (seleziona la versione del prodotto)
Vedi anche questo post della community Apigee: Log messages into Splunk -
Sumo
Logic
- Consulta anche questo post della community Apigee: Configurazione della registrazione con Sumo Logic, quale host devo utilizzare?
- Per un esempio completo che utilizza Sumo Logic come servizio di logging, consulta il seguente post della community Apigee. La soluzione utilizza un'unica norma JavaScript per effettuare richieste HTTP POST al raccoglitore di origini HTTP di Sumo Logic: Logging in Sumo Logic utilizzando JavaScript e HTTP
- Loggly
Quando utilizzi Loggly,<FormatMessage>true</FormatMessage>è obbligatorio nelle norme come elemento secondario dell'elemento<Syslog>.
Per ulteriori informazioni sulla registrazione dei messaggi in Loggly, consulta anche questo post della community Apigee: Registrare i messaggi in Loggly
Messaggi di errore
Questa sezione descrive i codici e i messaggi di errore restituiti, nonché le variabili di errore impostate da Edge quando questo criterio attiva un errore. È importante sapere se stai sviluppando regole di errore per per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito.
| Codice di errore | Stato HTTP | Causa |
|---|---|---|
steps.messagelogging.StepDefinitionExecutionFailed |
500 | Vedi stringa errore. |
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
| Nome errore | Causa | Correggi |
|---|---|---|
InvalidProtocol |
Il deployment del criterio MessageLogging può non riuscire con questo errore se il protocollo
specificato all'interno dell'elemento <Protocol> non è valido. I protocolli validi sono TCP e UDP.
Per l'invio di messaggi syslog su TLS/SSL, è supportato solo TCP. |
build |
InvalidPort |
Il deployment del criterio MessageLogging può non riuscire con questo errore se il numero di porta
non è specificato nell'elemento <Port> o se non è valido. Il numero di porta deve essere
un numero intero maggiore di zero. |
build |
Variabili di errore
Queste variabili vengono impostate quando si verifica un errore di runtime. Per ulteriori informazioni, vedi Cosa devi sapere sugli errori relativi alle norme.
| Variabili | Dove | Esempio |
|---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come elencato nella precedente tabella Errori di runtime. Il nome dell'errore è l'ultima parte del codice di errore. | fault.name Matches "StepDefinitionExecutionFailed" |
messagelogging.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | messagelogging.ML-LogMessages.failed = true |
Esempio di risposta di errore
{
"fault":{
"detail":{
"errorcode":"steps.messagelogging.StepDefinitionExecutionFailed"
},
"faultstring":"Execution failed"
}
}Esempio di regola di errore
<FaultRule name="MessageLogging">
<Step>
<Name>ML-LogMessages</Name>
<Condition>(fault.name Matches "StepDefinitionExecutionFailed") </Condition>
</Step>
<Condition>(messagelogging.ML-LogMessages.failed = true) </Condition>
</FaultRule>Variabili di flusso
Le seguenti variabili vengono compilate in caso di errore della policy.
messagelogging.failedmessagelogging.{stepdefinition-name}.failed
Argomenti correlati
- Variabili esposte da Edge: riferimento alle variabili