Observabilidad de ThingWorx > Soporte de OpenTelemetry para el registro en ThingWorx Platform > Estrategia personalizada de recuperación de registros para registros externos
Estrategia personalizada de recuperación de registros para registros externos
Resumen
En ThingWorx Platform, la observabilidad del registro se soporta a través de distintas aplicaciones de registro de terceros. Estas aplicaciones proporcionan múltiples maneras de insertar y recuperar registros. Se puede utilizar una estrategia de recuperación de registros personalizada para mostrar los registros de aplicaciones de registro de terceros. OpenTelemetry inserta registros en estas aplicaciones y ThingWorx Platform los recupera para su visualización. Estos registros se pueden ver en Composer > Supervisión > Registros.
En ThingWorx Platform se proporciona lo siguiente:
DefaultLogRetrievalStrategyThing: permite recuperar registros a partir de registros de ficheros de ThingWorx o de Sumo Logic en función de la configuración.
* 
DefaultLogRetrievalStrategyThing es un objeto del sistema. Su configuración se puede actualizar, pero no se puede utilizar como plantilla para estrategias personalizadas de recuperación de registros.
SDK de extensión: permite el desarrollo de una estrategia de recuperación de registros personalizada.
Servicio RetrieveLogs
El servicio RetrieveLogs disponible con DefaultLogRetrievalStrategyThing controla la recuperación de registros.
La recuperación del registro viene determinada por lo siguiente:
Si el registro de ficheros está desactivado (DisableFileLogging se define en true) y OpenTelemetry está activado (EnableOpenTelemetryForLogging se define en true), los registros se recuperan de Sumo Logic.
En todos los demás casos, los registros se recuperan de los registros de ficheros de ThingWorx.
El servicio RetrieveLogs se puede implementar de una de las siguientes maneras:
A través de Composer mediante el servicio JavaScript
a. Cree una cosa en Composer mediante la plantilla base LogRetrievalStrategy.
b. Pulse en Servicios y sustituya el servicio RetriveLogs.
c. Introduzca código JavaScript para recuperar los registros de la aplicación del proveedor de registros externo.
Utilice el cargador de contenido o funciones similares para comunicarse con los sistemas de terceros.
Mediante la creación de una extensión con el SDK de extensión
a. Cree una extensión en Eclipse con la versión más reciente del SDK.
b. Cree una plantilla de cosa (clase Java) con la plantilla base LogRetrievalStrategy.
La clase debe extender la clase LogRetrievalStrategy.
c. Sustituya el método java RetrieveLogs e implemente el código personalizado para recuperar registros de la aplicación del proveedor de registros externo.
d. Se puede actualizar el fichero metadata.xml de la extensión y crear una cosa. O bien, se puede crear la cosa posteriormente en Composer después de importar la extensión.
e. Genere la extensión e impórtela a ThingWorx Composer.
En ambos casos, después de crear la cosa, se debe definir como la cosa LogRetrievalStrategy en el subsistema de registro.
Requisitos previos
Antes de comenzar, asegúrese de lo siguiente:
Comprende cómo crear una extensión de ThingWorx Platform.
Dispone del SDK de extensión (versión 9.6.0 o posterior) en el que se incluye la plantilla de cosa LogRetrievalStrategy.
Sabe cómo crear e importar una extensión en ThingWorx Platform.
Implementación de una estrategia de recuperación del registro personalizada
Para crear una estrategia personalizada de recuperación de registros en Java, haga lo siguiente:
1. 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. Implemente y sustituya el 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. Para obtener más información, consulte Ruta B: empaquetado e implementación de soluciones como extensiones
5. Importe la extensión en ThingWorx Composer.
6. Cree una cosa a partir de la plantilla de cosa CustomLogRetrievalStrategy.
7. Pulse en LoggingSubsystem > Configuración.
8. Seleccione la cosa creada en el paso 6 como Estrategia de recuperación de registros.
9. Pulse en Composer > Supervisión > ApplicationLog y verifique si los registros se recuperan del origen externo.
Temas relacionados
¿Fue esto útil?