Definizione del modello ThingWorx in Composer > Sistema > Log > OpenTelemetry per la registrazione in ThingWorx Platform > Strategia di recupero log personalizzata per l'interrogazione di log da origini esterne
Strategia di recupero log personalizzata per l'interrogazione di log da origini esterne
È possibile ottenere l'osservabilità dei log attraverso diverse applicazioni di provider di registrazione aziendali di terze parti disponibili sul mercato. Queste applicazioni adottano più approcci per eseguire il push e recuperare i log.
Con OpenTelemetry, i log vengono inseriti nelle applicazioni del provider di registrazione.
Lo scopo principale di questa strategia consiste nel recuperare i log dall'origine di terze parti e visualizzarli nella pagina Composer > Monitoraggio > Log.
L'implementazione di ThingWorx prevede quanto segue:
Oggetto strategia DefaultLogRetrievalStrategyThing di default, che recupera i log dai log dei file ThingWorx e da SumoLogic in base alla configurazione.
Extension SDK per sviluppare una strategia personalizzata per il recupero del log.
DefaultLogRetrievalStrategyThing è un oggetto di sistema. È possibile solo aggiornarne la configurazione. Il modello DefaultLogRetrievalStrategyThing non può essere utilizzato dagli utenti per l'implementazione di strategie personalizzate di recupero dei log.
Il recupero del log viene gestito dal servizio RetrieveLogs, disponibile con DefaultLogRetrievalStrategyThing. Il recupero dei log si basa sugli elementi seguenti:
Se la registrazione dei file è disattivata (DisableFileLogging è impostato su true) e OpenTelemetry è attivato (EnableOpenTelemetryForLogging è impostato su true), i log vengono recuperati da SumoLogic.
Per tutti gli altri casi, i log vengono recuperati dai file.
In caso di implementazione personalizzata per il recupero dei log, è possibile implementare il servizio RetrieveLogs nei due modi descritti di seguito.
Tramite Composer, con il servizio JavaScript
a. Creare un oggetto in Composer utilizzando il modello di base LogRetrievalStrategy.
b. Passare a Servizi e sostituire il servizio RetriveLogs.
c. Fornire il codice JavaScript per recuperare i log da software di registrazione di terze parti.
* 
In genere, per comunicare con terze parti vengono utilizzate funzioni di caricamento di contenuto o funzioni simili.
Creando un'estensione in ThingWorx utilizzando Extension SDK
a. Creare un'estensione in Eclipse utilizzando l'SDK più recente (>=9.6.0)
b. Creare un modello di oggetto (classe java) con il modello di base LogRetrievalStrategy.
La classe deve estendere la classe Strategia di recupero log.
c. Sostituire il metodo Java di recupero dei log e implementare il codice personalizzato per recuperare i log dal software di registrazione di terze parti.
d. (Facoltativo) Aggiornare il file metadata.xml dell'estensione e creare un oggetto. È possibile anche creare l'oggetto in Composer successivamente, dopo l'importazione dell'estensione.
e. Creare l'estensione e importarla in ThingWorx.
In entrambi i casi, una volta che si dispone di un oggetto, è necessario impostarlo come oggetto LogRetrievalStrategy nel sottosistema Registrazione.
Questo tutorial non fornisce le nozioni di base per la creazione delle estensioni ThingWorx. Si presuppone che l'utente:
Conosca la procedura di creazione di un'estensione ThingWorx.
Disponga di Extension SDK, versione 9.6.0 o successiva, che include un modello di oggetto LogRetrievalStrategy.
Conosca la procedura di creazione e importazione di un'estensione in ThingWorx Platform.
Implementazione di una strategia di recupero log personalizzata
1. Per creare una strategia di recupero log personalizzata in Java, è necessario prima creare un modello di oggetto 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 sovrascrivere il metodo di recupero dei log.
@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.
5. Importare l'estensione tramite ThingWorx Composer.
6. Creare un oggetto dal ThingTemplate CustomLogRetrievalStrategy.
7. Passare alla pagina LoggingSubsystem > Configurazione.
8. Selezionare un oggetto creato al passo 6 come Strategia di recupero log.
9. Passare a Composer > Monitoraggio > ApplicationLog e verificare se i log vengono recuperati dall'origine esterna.
È stato utile?