Definición del modelo de ThingWorx en Composer > Sistema > Registros > OpenTelemetry para el registro de ThingWorx Platform > Estrategia de recuperación de registros personalizada para consultar registros de orígenes externos
Estrategia de recuperación de registros personalizada para consultar registros de orígenes externos
La observabilidad de los registros puede lograrse a través de diferentes aplicaciones de proveedores de registros empresariales de terceros disponibles en el mercado. Estas aplicaciones tienen varias maneras de insertar y recuperar registros.
Con OpenTelemetry, los registros se insertan en las aplicaciones de proveedor de registro.
El propósito principal de esta estrategia de recuperación de registros es recuperar registros de origen de terceros y mostrarlos en la página Composer > Supervisión > Registros.
Como parte de la implementación general, en ThingWorx se proporciona lo siguiente:
Cosa de estrategia por defecto DefaultLogRetrievalStrategyThing que permite recuperar los registros de fichero de ThingWorx y Sumo Logic en función de la configuración.
SDK de extensión para desarrollar una estrategia personalizada de recuperación de registros.
DefaultLogRetrievalStrategyThing es un objeto del sistema. Solo se puede actualizar su configuración. Se supone que los usuarios no deben utilizar esta plantilla DefaultLogRetrievalStrategyThing para implementar estrategias personalizadas de recuperación de registros.
La recuperación de registros se gestiona mediante el servicio RetrieveLogs disponible con DefaultLogRetrievalStrategyThing. La recuperación de registros se basa en lo siguiente:
Si el registro de ficheros está desactivado (DisableFileLogging se define en true) y OpenTelemetry está activado (EnableOpenTelemetryForLogging se define en true), solo los registros se recuperan de la lógica sumo.
Para los demás casos, los registros se recuperarán de los ficheros.
En el caso de una implementación personalizada para la recuperación de registros, el servicio RetrieveLogs se puede implementar de las dos maneras siguientes.
A través de Composer mediante el servicio JavaScript
a. Cree una cosa en Composer con la plantilla base como LogRetrievalStrategy.
b. Vaya a Servicios y sustituya el servicio RetriveLogs.
c. Proporcione el código de JavaScript para recuperar registros del software de registro de terceros.
* 
Normalmente, para comunicarse con terceros se utilizan funciones de cargador de contenido o similares.
Mediante la creación de una extensión en ThingWorx mediante el SDK de extensión
a. Crear una extensión en Eclipse con el SDK más reciente (>=9.6.0).
b. Crear una plantilla de cosa (clase Java) con la plantilla base como LogRetrievalStrategy.
La clase debe extender la clase estrategia de recuperación de registros.
c. Sustituir el método java RetrieveLogs e implementar el código personalizado para recuperar registros del software de registro de terceros.
d. (Opcional) Actualizar metadata.xml de la extensión y crear una cosa. También se puede crear una cosa más tarde en Composer después de importar la extensión.
e. Crear la extensión e importarla a ThingWorx.
En ambos casos, una vez que se haya creado una cosa, esta se debe definir como una cosa LogRetrievalStrategy en el subsistema de registro.
En este tutorial no se tratan los aspectos básicos de la creación de extensiones de ThingWorx. Se supone lo siguiente:
El usuario sabe cómo crear una extensión ThingWorx.
El usuario dispone del SDK de extensión, v.9.6.0 o posterior, que incluye la plantilla de cosa LogRetrievalStrategy.
El usuario sabe cómo crear e importar una extensión en ThingWorx Platform.
Implementación de una estrategia de recuperación del registro personalizada
1. Para crear una estrategia de recuperación de registros personalizada en Java, cree una plantilla de cosa de estrategia. Esta plantilla de cosa actúa como código base para un algoritmo basado en Java. La definición de clase para la plantilla de cosa es la siguiente:
@ThingworxBaseTemplateDefinition(name = "LogRetrievalStrategy")
public class CustomLogRetrievalStrategy extends LogRetrievalStrategy{
2. Implementación y sustitución del método 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. Cree una cosa de estrategia en el fichero metadata.xml de la extensión.
<Things>
<Thing
enabled="true"
name="CustomLogRetrievalStrategyThing"
published="true"
thingTemplate="CustomLogRetrievalStrategy">
</Thing>
</Things>
4. Empaquete y cree una extensión.
5. Importe la extensión a través de ThingWorx Composer.
6. Cree una cosa a partir de la plantilla de cosa CustomLogRetrievalStrategy.
7. Vaya a la página Configuración > LoggingSubsystem.
8. Seleccione una cosa creada en el paso 6 como Estrategia de recuperación de registros.
9. Vaya a Composer > Supervisión > Registro de aplicación y verifique si los registros se recuperan del origen externo.
¿Fue esto útil?