Osservabilità di ThingWorx > Supporto di OpenTelemetry per la registrazione in ThingWorx Platform > Strategia di recupero log personalizzata per i log esterni
Strategia di recupero log personalizzata per i log esterni
Panoramica
In ThingWorx Platform, l'osservabilità dei log è supportata tramite varie applicazioni di registrazione di terze parti. Queste applicazioni forniscono più metodi per eseguire il push dei log e recuperarli. È possibile utilizzare una strategia di recupero log personalizzata per visualizzare i log da applicazioni di registrazione di terze parti. OpenTelemetry esegue il push dei log in queste applicazioni e ThingWorx Platform li recupera per la visualizzazione. È possibile visualizzare questi log in Composer > Monitoraggio > Log.
ThingWorx Platform fornisce quanto segue:
DefaultLogRetrievalStrategyThing - Recupera i log dai log dei file di ThingWorx o da Sumo Logic in base alla configurazione.
* 
DefaultLogRetrievalStrategyThing è un oggetto di sistema. È possibile aggiornarne la configurazione, ma non è possibile utilizzarlo come modello per strategie di recupero log personalizzate.
Extension SDK - Consente lo sviluppo di una strategia di recupero log personalizzata.
Servizio RetrieveLogs
Il servizio RetrieveLogs disponibile con DefaultLogRetrievalStrategyThing gestisce l'attività di recupero log.
Il recupero log è determinato dai seguenti fattori:
Se la registrazione dei file è disattivata (DisableFileLogging è impostato su true) e OpenTelemetry è attivato (EnableOpenTelemetryForLogging è impostato su true), i log vengono recuperati da Sumo Logic.
In tutti gli altri casi, i log vengono recuperati dai log dei file di ThingWorx.
È possibile implementare il servizio RetrieveLogs in uno dei seguenti modi:
Tramite Composer utilizzando un servizio JavaScript
a. Creare un oggetto in Composer utilizzando il modello di base LogRetrievalStrategy.
b. Fare clic su Servizi e sostituire il servizio RetriveLogs.
c. Immettere il codice JavaScript per recuperare i log dall'applicazione del provider di registrazione esterna.
Utilizzare il caricatore di contenuto o funzioni simili per comunicare con sistemi di terze parti.
Tramite la creazione di un'estensione utilizzando Extension SDK
a. Creare un'estensione in Eclipse utilizzando la versione dell'SDK più recente.
b. Creare un modello di oggetto (classe Java) con il modello di base LogRetrievalStrategy.
La classe creata deve estendere la classe LogRetrievalStrategy.
c. Sostituire il metodo Java di recupero log e implementare il codice personalizzato per recuperare i log dall'applicazione del provider di registrazione di terze parti.
d. È possibile aggiornare il file metadata.xml dell'estensione e creare un oggetto. In alternativa, è possibile creare l'oggetto in un secondo momento in Composer dopo aver importato l'estensione.
e. Creare l'estensione e importarla in ThingWorx Composer.
In entrambi i casi, dopo aver creato l'oggetto, impostarlo come oggetto LogRetrievalStrategy nel sottosistema Registrazione.
Prerequisiti
Prima di iniziare, è necessario verificare i seguenti prerequisiti:
Comprendere la procedura di creazione di un'estensione ThingWorx Platform.
Disporre di Extension SDK (9.6.0 o versione successiva), che include un modello di oggetto LogRetrievalStrategy.
Conoscere la procedura di creazione e importazione di un'estensione in ThingWorx Platform.
Implementazione di una strategia di recupero log personalizzata
Per creare una strategia di recupero log personalizzata in Java, procedere come segue:
1. Creare un modello di oggetto di tipo strategia. Il modello di oggetto funge da base di codice per un algoritmo basato su Java. La definizione della classe per il modello di oggetto è la seguente:
@ThingworxBaseTemplateDefinition(name = "LogRetrievalStrategy")
public class CustomLogRetrievalStrategy extends LogRetrievalStrategy{
2. Implementare e sostituire il metodo RetrieveLogs.
@ThingworxServiceDefinition(
name = LoggingConstants.RETRIEVE_LOGS_STRATEGY_SERVICE_NAME,
isAllowOverride = true,
description = "Retrieve Logs from the given source",
category = "Queries")
@ThingworxServiceResult(name = "result", description = "Table entries", baseType = "INFOTABLE", aspects = { "dataShape:LogEntry" })
@Override
public InfoTable RetrieveLogs(
@ThingworxServiceParameter(
name = LoggingConstants.MAX_ITEMS,
description = "Maximum number of items to return",
baseType = "NUMBER",
aspects = { "defaultValue:" + RESTAPIConstants.DEFAULT_ITEM_COUNT }) Double maxItems,
@ThingworxServiceParameter(
name = LoggingConstants.START_DATE,
description = "Start time",
baseType = "DATETIME") DateTime startDate,
@ThingworxServiceParameter(
name = LoggingConstants.END_DATE,
description = "End time",
baseType = "DATETIME") DateTime endDate,
@ThingworxServiceParameter(
name = LoggingConstants.FROM_LOG_LEVEL,
description = "From log level",
baseType = "STRING") String fromLogLevel,
@ThingworxServiceParameter(
name = LoggingConstants.TO_LOG_LEVEL,
description = "To log level",
baseType = "STRING") String toLogLevel,
@ThingworxServiceParameter(
name = LoggingConstants.USER,
description = "Log messages for a specific user",
baseType = "USERNAME") String user,
@ThingworxServiceParameter(
name = LoggingConstants.THREAD,
description = "Log messages for a specific thread",
baseType = "STRING") String thread,
@ThingworxServiceParameter(
name = LoggingConstants.PLATFORM_ID,
description = "Log message from a specific instance",
baseType = "STRING") String platformId,
@ThingworxServiceParameter(
name = LoggingConstants.ORIGIN,
description = "Specific class or log source",
baseType = "STRING") String origin,
@ThingworxServiceParameter(
name = LoggingConstants.INSTANCE,
description = "Specific class or log source",
baseType = "STRING") String instance,
@ThingworxServiceParameter(
name = LoggingConstants.SEARCH_EXPRESSION,
description = "Keywords to search content",
baseType = "STRING") String searchExpression,
@ThingworxServiceParameter(
name = LoggingConstants.SORT_FIELD_NAME,
description = "Sort field name",
baseType = "STRING") String sortFieldName,
@ThingworxServiceParameter(
name = LoggingConstants.ASCENDING_SEARCH,
description = "Ascending search indicator (true = ascending, false = descending)",
baseType = "BOOLEAN") Boolean ascendingSearch,
@ThingworxServiceParameter(
name = LoggingConstants.OLDEST_FIRST,
description = "Search/sort from oldest to newest",
baseType = "BOOLEAN") Boolean oldestFirst,
@ThingworxServiceParameter(
name = LoggingConstants.IS_REGEX,
description = "The Search expression should be treated as REGEX",
baseType = "BOOLEAN",
aspects = { "defaultValue:" + false }) Boolean isRegex,
@ThingworxServiceParameter(
name = "logName",
description = "Keywords to search content",
baseType = "STRING",
aspects = { Aspects.ASPECT_ISREQUIRED + ":true", Aspects.ASPECT_SELECTOPTIONS +
":ApplicationLog:ApplicationLog|CommunicationLog:CommunicationLog|" +
"ConfigurationLog:ConfigurationLog|ScriptLog:ScriptLog|SecurityLog:SecurityLog" }) String logName)
throws Exception {

// Create InfoTable to hold results
InfoTable logEntriesTable = new InfoTable();

// Add Field Definitions to InfoTable.
logEntriesTable.addField(new FieldDefinition(LoggingConstants.CONTENT, BaseTypes.STRING));
logEntriesTable.addField(new FieldDefinition(LoggingConstants.USER, BaseTypes.STRING));
logEntriesTable.addField(new FieldDefinition(LoggingConstants.THREAD, BaseTypes.STRING));
logEntriesTable.addField(new FieldDefinition(LoggingConstants.PLATFORM_ID, BaseTypes.STRING));
logEntriesTable.addField(new FieldDefinition(LoggingConstants.ORIGIN, BaseTypes.STRING));
logEntriesTable.addField(new FieldDefinition(LoggingConstants.INSTANCE, BaseTypes.STRING));

// TODO: Custom Log Retrieval Strategy implementation here. Add each log entry as row to logEntriesTable

return logEntriesTable;
3. Creare un oggetto strategia nel file metadata.xml dell'estensione.
<Things>
<Thing
enabled="true"
name="CustomLogRetrievalStrategyThing"
published="true"
thingTemplate="CustomLogRetrievalStrategy">
</Thing>
</Things>
4. Creare il package e quindi l'estensione. Per ulteriori informazioni, vedere Percorso B: creazione di package e distribuzione di soluzioni come estensioni
5. Importare l'estensione in ThingWorx Composer.
6. Creare un oggetto dal modello di oggetto CustomLogRetrievalStrategy.
7. Fare clic su LoggingSubsystem > Configurazione.
8. Selezionare l'oggetto creato al passo 6 come Strategia di recupero log.
9. Fare clic su Composer > Monitoraggio > ApplicationLog e verificare se i log vengono recuperati dall'origine esterna.
Argomenti correlati
È stato utile?