ThingWorx Beobachtbarkeit > OpenTelemetry-Unterstützung für die Protokollierung in ThingWorx Platform > Benutzerdefinierte Protokollabruf-Strategie für externe Protokolle
Benutzerdefinierte Protokollabruf-Strategie für externe Protokolle
Übersicht
In ThingWorx Platform wird die Protokollbeobachtbarkeit durch verschiedene Protokollierungsanwendungen von Drittanbietern unterstützt. Diese Anwendungen bieten mehrere Methoden, Protokolle per Push zu senden und abzurufen. Sie können eine benutzerdefinierte Protokollabruf-Strategie verwenden, um Protokolle aus Protokollierungsanwendungen von Drittanbietern anzuzeigen. OpenTelemetry sendet Protokolle per Push an diese Anwendungen, und ThingWorx Platform ruft sie zur Anzeige ab. Sie können diese Protokolle unter Composer > Überwachung > Protokolle anzeigen.
ThingWorx Platform bietet Folgendes:
DefaultLogRetrievalStrategyThing – Ruft basierend auf der Konfiguration Protokolle aus ThingWorx Dateiprotokollen oder Sumo Logic ab.
* 
DefaultLogRetrievalStrategyThing ist ein Systemobjekt. Sie können seine Konfiguration aktualisieren, es jedoch nicht als Vorlage für benutzerdefinierte Protokollabruf-Strategien verwenden.
Extension SDK – Ermöglicht die Entwicklung einer benutzerdefinierten Protokollabruf-Strategie.
Dienst "RetrieveLogs"
Der mit dem DefaultLogRetrievalStrategyThing verfügbare Dienst RetrieveLogs verarbeitet den Protokollabruf.
Der Protokollabruf wird durch Folgendes bestimmt:
Wenn die Dateiprotokollierung deaktiviert ist (DisableFileLogging ist auf true festgelegt) und OpenTelemetry aktiviert ist (EnableOpenTelemetryForLogging ist auf true festgelegt), werden nur Protokolle aus Sumo Logic abgerufen.
In allen anderen Fällen werden Protokolle aus ThingWorx Dateiprotokollen abgerufen.
Sie können den Dienst RetrieveLogs auf eine der folgenden Arten implementieren:
Über Composer mithilfe eines JavaScript-Dienstes
a. Erstellen Sie in Composer ein Ding mithilfe der Basisvorlage LogRetrievalStrategy.
b. Klicken Sie auf Dienste, und überschreiben Sie den Dienst RetriveLogs.
c. Geben Sie JavaScript-Code ein, um Protokolle von der externen Protokollierungsanbieter-Anwendung abzurufen.
Verwenden Sie den Content Loader oder ähnliche Funktionen, um mit Drittanbietersystemen zu kommunizieren.
Durch Erstellen einer Erweiterung mit dem Extension SDK
a. Erstellen Sie eine Erweiterung in Eclipse mit der neuesten SDK-Version.
b. Erstellen Sie eine Dingvorlage (Java-Klasse) mit der Basisvorlage LogRetrievalStrategy.
Ihre Klasse sollte die Klasse LogRetrievalStrategy erweitern.
c. Überschreiben Sie die Java-Methode "Retrieve Log", und implementieren Sie Ihren benutzerdefinierten Code, um Protokolle aus der externen Protokollierungsanbieter-Anwendung abzurufen.
d. Sie können die Datei metadata.xml der Erweiterung aktualisieren und ein Ding erstellen. Sie können das Ding auch später in Composer erstellen, nachdem Sie die Erweiterung importiert haben.
e. Erstellen Sie die Erweiterung, und importieren Sie sie in ThingWorx Composer.
Legen Sie in beiden Fällen das Ding nach dem Erstellen als LogRetrievalStrategy-Ding im Protokollierungsuntersystem fest.
Voraussetzungen
Stellen Sie Folgendes sicher, bevor Sie beginnen:
Sie verstehen, wie eine ThingWorx Platform Erweiterung erstellt wird.
Sie verfügen über das Extension SDK (Version 9.6.0 oder höher), das die Dingvorlage LogRetrievalStrategy enthält.
Sie wissen, wie eine Erweiterung erstellt und in ThingWorx Platform importiert wird.
Benutzerdefinierte Protokollabruf-Strategie implementieren
Gehen Sie wie folgt vor, um eine benutzerdefinierte Protokollabruf-Strategie in Java zu erstellen:
1. Erstellen Sie eine Strategie-Dingvorlage. Diese Dingvorlage dient als Codebasis für den Java-basierten Algorithmus. Die Klassendefinition für die Dingvorlage lautet wie folgt:
@ThingworxBaseTemplateDefinition(name = "LogRetrievalStrategy")
public class CustomLogRetrievalStrategy extends LogRetrievalStrategy{
2. Implementieren und überschreiben Sie die Methode 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. Erstellen Sie ein Strategie-Ding in der Datei metadata.xml Ihrer Erweiterung.
<Things>
<Thing
enabled="true"
name="CustomLogRetrievalStrategyThing"
published="true"
thingTemplate="CustomLogRetrievalStrategy">
</Thing>
</Things>
4. Erstellen Sie ein Paket und erstellen Sie eine Erweiterung. Weitere Informationen finden Sie unter Pfad B: Lösungen als Erweiterungen verpacken und bereitstellen.
5. Importieren Sie die Erweiterung in ThingWorx Composer.
6. Erstellen Sie ein Ding aus der Dingvorlage CustomLogRetrievalStrategy.
7. Klicken Sie auf LoggingSubsystem > Konfiguration.
8. Wählen Sie das in Schritt 6 erstellte Ding als Protokollabruf-Strategie aus.
9. Klicken Sie auf Composer > Überwachung > ApplicationLog, und verifizieren Sie, ob die Protokolle aus der externen Quelle abgerufen werden.
Zugehörige Themen
War dies hilfreich?