Observabilité dans ThingWorx > Prise en charge d'OpenTelemetry pour la journalisation dans ThingWorx Platform > Stratégie de récupération personnalisée des journaux externes
Stratégie de récupération personnalisée des journaux externes
Vue d'ensemble
Dans ThingWorx Platform, l'observabilité des journaux est prise en charge par diverses applications de journalisation tierces. Ces applications fournissent différentes méthodes pour la transmission et la récupération des journaux. Vous pouvez utiliser une stratégie de récupération personnalisée pour afficher les journaux transmis à ces applications de journalisation tierces. OpenTelemetry transmet les journaux à ces applications, et ThingWorx Platform les récupère ensuite pour les afficher. Ces journaux sont consultables dans Composer > Surveillance > Journaux.
ThingWorx Platform met à disposition ce qui suit :
DefaultLogRetrievalStrategyThing : récupère les journaux des fichiers journaux de ThingWorx ou de Sumo Logic en fonction de la configuration.
* 
DefaultLogRetrievalStrategyThing est un objet système. Vous pouvez mettre à jour sa configuration, mais vous ne pouvez pas l'utiliser comme modèle pour des stratégies de récupération personnalisées des journaux.
Kit Extension SDK : permet le développement d'une stratégie personnalisée de récupération des journaux.
Service RetrieveLogs
Le service RetrieveLogs disponible avec DefaultLogRetrievalStrategyThing gère la récupération des journaux.
La récupération des journaux est déterminée par les éléments suivants :
Si la journalisation en fichiers est désactivée (DisableFileLogging défini sur true), et qu'OpenTelemetry est activé (EnableOpenTelemetryForLogging défini sur true), les journaux sont récupérés depuis Sumo Logic.
Dans tous les autres cas, les journaux sont récupérés depuis les fichiers journaux ThingWorx.
Vous pouvez implémenter le service RetrieveLogs de l'une des manières suivantes :
Via Composer avec un service JavaScript
a. Créez un objet dans Composer à l'aide du modèle de base LogRetrievalStrategy.
b. Cliquez sur Services et remplacez le service RetriveLogs.
c. Entrez le code JavaScript permettant de récupérer les journaux depuis l'application fournisseur de journalisation externe.
Utilisez les fonctions du chargeur de contenu ou des fonctions similaires pour communiquer avec les systèmes tiers.
En créant une extension à l'aide du kit Extension SDK
a. Créez une extension dans Eclipse à l'aide de la dernière version du SDK.
b. Créez un modèle d'objet (classe Java) avec le modèle de base LogRetrievalStrategy.
Votre classe doit étendre la classe LogRetrievalStrategy.
c. Remplacez la méthode Java de récupération des journaux et implémentez votre code personnalisé pour récupérer les journaux depuis l'application fournisseur de journalisation externe.
d. Vous pouvez mettre à jour le fichier metadata.xml de l'extension et créer un objet. Mais vous pouvez aussi créer l'objet ultérieurement dans Composer, après l'importation de l'extension.
e. Générez l'extension et importez-la dans ThingWorx Composer.
Dans les deux cas, après avoir créé l'objet, définissez-le en tant qu'objet LogRetrievalStrategy dans le sous-système de journalisation.
Prérequis
Avant de vous lancer, vous devez :
savoir comment générer une extension ThingWorx Platform ;
disposer du kit Extension SDK (version 9.6.0 ou ultérieure), qui inclut le modèle d'objet LogRetrievalStrategy ;
savoir comment créer et importer une extension dans ThingWorx Platform.
Implémentation d'une stratégie de récupération personnalisée des journaux
Pour créer une stratégie de récupération personnalisée des journaux en Java, procédez comme suit :
1. Créez un modèle d'objet de stratégie. Ce modèle d'objet servira de base de code pour l'algorithme en Java. La définition de classe pour le modèle d'objet est la suivante :
@ThingworxBaseTemplateDefinition(name = "LogRetrievalStrategy")
public class CustomLogRetrievalStrategy extends LogRetrievalStrategy{
2. Implémentez et remplacez la méthode 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. Créez un objet de stratégie dans le fichier metadata.xml de votre extension.
<Things>
<Thing
enabled="true"
name="CustomLogRetrievalStrategyThing"
published="true"
thingTemplate="CustomLogRetrievalStrategy">
</Thing>
</Things>
4. Packagez et générez une extension. Pour plus d'informations, consultez la rubrique Option B : création de packages et déploiement de solutions en tant qu'extensions.
5. Importez l'extension dans ThingWorx Composer.
6. Créez un objet à partir du modèle d'objet CustomLogRetrievalStrategy.
7. Cliquez sur LoggingSubsystem > Configuration.
8. Sélectionnez l'objet créé à l'étape 6 en tant que Stratégie de récupération du journal.
9. Cliquez sur Composer > Surveillance > ApplicationLog et vérifiez si les journaux sont récupérés à partir de la source externe.
Rubriques connexes
Est-ce que cela a été utile ?