Datenparser
Datenparser transformieren und analysieren externe Daten und geben NetCrunch-Zählermetriken und Statusobjekte zurück
Datenparser ermöglichen die Umwandlung externer Daten in das NetCrunch JSON-Format, das Zähler und Statusobjekte beschreibt. Es gibt mehrere Sensoren, die den Datenparser verwenden können, um diese Daten von externen Quellen abzurufen.
Sensoren mit Datenparsern
Datendatei
Dieser Sensor kann Daten aus verschiedenen Quellen abrufen, z.B.
- Windows-Datei
- HTTP (Datei oder Seite)
- FTP / S
- SSH (SFTP oder Bash)
Generischer Agent
Der Generische Agent-Sensor ermöglicht den Empfang von Daten von einer externen Quelle (Agent). Daten können als JSON (natives NetCrunch-Format) und in jedem anderen Format, das mit NetCrunch Data Parser transformiert werden kann, gesendet werden.
REST HTTP
Er kann beliebige HTTP-Anfragen senden, einschließlich benutzerdefinierter Anfragen, und ermöglicht das einfache Hinzufügen von URL-Abfrageparametern. Außerdem können benutzerdefinierte Header und Cookies für die Anfrage festgelegt werden. In Kombination mit dem Datenparser können Daten von externen Quellen abgerufen werden.
XPath / DOM Daten Parser
Sie können für jede von ihnen eine Liste von Zählern und Statusobjekten und Pfaden definieren. Sie können XPath verwenden oder wenn Sie mit dem CSS-Selektor vertrauter sind, können Sie ihn auch verwenden. Da CSS-Selektoren nur DOM-Knoten auswählen sollen, haben wir die Syntax erweitert durch hinzufügen eines Attributnamens nach dem Zeichen '|' .
Beispiel
<doc>
<amount>10.2</amount>
<user name="John" age="123"/>
</doc>
Selektoren
- Um Menge zu erhalten, können Sie den XPath-Selektor verwenden
//doc/amountoder DOM Selektordoc > amount - Um das Alter von John zu erhalten, können Sie auswählen
//doc/user[@name='John']/@ageoder durch erweiterten DOM-Selektordoc > user[name='John'] | age
JSONPath
JSONPath ähnelt XPath und verfügt über ähnliche Funktionen. Für einfache Pfade können Sie einfache gepunktete Pfade verwenden.
Beispiel
{
"main" : {
"temperature" : 10.2,
"humidity" : 66
}
}
Dies ist ein einfaches Beispiel, aber sehr ähnlich den tatsächlichen Daten, die von einer der Public Weather API bereitgestellt werden.
- Temperatur kann einfach ausgewählt werden
main.temperature - Für Luftfeuchtigkeit können wir JSONPath verwenden
$..humidity
Data Parser Skript (Javascript)
Javascript ist eine gute Lösung, um die Daten zu parsen, da Sie reguläre Ausdrücke und die gesamte Leistungsfähigkeit des Javascript-Engines (V8), die den neuesten ECMAScript-Sprachstandard implementiert, verwenden können.
Ihr Skript wird im strikten Modus in einer separaten Sandbox-NodeJS-Engine ausgeführt und wird beendet, wenn das Zeitlimit überschritten wird. Zusätzlich zur regulären Laufzeit (Sie können keine externen Module laden), haben wir die meisten wünschenswerten Dienstprogramme zum Analysieren von JSON-, XML- und HTML-Datenformaten bereitgestellt.
Testkonsole
Der Data Parser Editor ist eine kleine Entwicklungsumgebung, die das Testen von Skripten durch Ausführung in der eigentlichen NetCrunch Scripting Engine ermöglicht. Sie können Testdaten bereitstellen, und Sie können das Konsolenobjekt zum Protokollieren von Nachrichten für die Testkonsole verwenden.
Skriptparameter und Ergebnis
Ihr Skript erhält zwei Parameter:
- Daten - es enthält Eingabedaten. Es kann ein Pufferobjekt sein. Dies hängt vom Datentyp ab, den Sie von der Quelle erwarten.
- Ergebnis - Skript-Ergebnisobjekt, das die Bereitstellung einer Liste von Zählern und Statusobjekten vereinfacht.
Zähler
Zählermetrik stellt numerische Werte dar, die von NetCrunch beobachtet wurden. Dies ist einer der grundlegenden Bausteine von NetCrunch. Der Zählerpfad beschreibt:
- Objekt - Wenn leer gelassen, wird die Sensoridentifikation als Objekt verwendet. Es beschreibt das gemessene Subjekt. Im Programmierbegriff beschreibt es eher die Klasse des gemessenen Subjekts. Zum Beispiel Prozess, Disk
- Counter - Der Name der Metrik. Zum Beispiel Temperatur, % Auslastung%.
- Instanz - identifiziert die Instanz des Objekts. Es ist optional. So kann es Datenträger-ID, Prozessname usw. sein
Zählerpfadformat
<Object>/<Counter>.<Instance>
Beispiele
Process/% Processor Utilization.NCServer.exe
WebSite/Current Visitors
Statusobjekte
Statusobjekt beschreibt den Zustand des überwachten Objekts. Es kann einfach eine Zeichenfolge oder es können komplexere Daten sein. Im Gegensatz zu Zählern gibt es keine besonderen Anforderungen an den Statusobjektnamen.
Bekannte Statuswerte
- unbekannt
- OK
- Warnung
- Error
Komplexes Statusobjekt
"Disk C:" : {
"value" : "ok",
"message" : "Working fine",
"retain" : 5,
"critical": true,
"data" : {
"type" : "SDD",
"upTimeSec" : 123431
}
}
Das Statusobjekt kann Felder enthalten wie:
-
Wert- ein Statuswert, der eine beliebige Zeichenfolge sein kann. Wenn jedoch einer der Standardwerte verwendet wird, kann NetCrunch den Wert für die Berechnungsalarmbedingungen verwenden. Das Feld ist erforderlich, um das Statusobjekt zu erkennen, andernfalls wird das gesamte Objekt als Textstring bedroht. Standardwerte sind: ok, Fehler, Warnung, deaktiviert, unbekannt,
-
Name - ein Name für das Objekt, das es nicht sein muss oder einmalig * (optional) *
- Nachricht - dies kann eine Nachricht sein, die den Status beschreibt (zum Beispiel eine Fehlermeldung) (optional)
- Empfangen - Zeit, wenn der Status gelesen wurde (optional)
- Behalten - wie lange der Status gültig ist, wenn kein neuer Status empfangen wurde. Nach dieser Zeit wird der Status unbekannt
- Klasse - Statusklasse. Wenn der angegebene Statusverlauf in der Datenbank gespeichert wird. Die Klasse hilft der Benutzeroberfläche, die mit dem Status verknüpften Daten zu verstehen und entsprechend anzuzeigen.
- Daten - benutzerdefinierte Daten. Es kann ein beliebiges JSON-Objekt sein, außer wenn die Klasse auf eine der bekannten Klassen verweist, muss sie dem Klassendatenformat entsprechen.
Bereitstellung des Ergebnisses
Alle Ergebnisfunktionen können verkettet werden
result.counter('Value', 10).counter('Value 2', 20);
result.counter(path,value)
Fügen Sie dem Sensorergebnis einen Zählerwert hinzu.
result.counter('% Utilization', 23.5);
result.counter(obj)
Sie können mehrere Leistungsindikatoren als einzelnes Objekt hinzufügen.
result.counter( {
"Temperature" : 33,
"Humidity" : 65
});
result.status(name,value[,message])
Setzen Sie einfach den Status des Objekts:
result.status('Door 1', 'closed' ).status('Door 2', 'opened');
result.status(obj)
Setzen Sie ein komplexes Statusobjekt.
result.status('Light 1', {
value : 'ok',
data : {
color: 'red'
switchedOn : "2018-03-11T22:20:59.903Z"
}
result.error(message)
Sie können das Statusobjekt '@parser' festlegen, das den Sensorstatus ändert, da sein Status als kritisch markiert ist. Wenn die Daten nicht Ihren Erwartungen entsprechen, können Sie den Fehler an den Sensor weitergeben.
result.error('Missing section')
result.warning(message)
Verwenden Sie es in dem Fall, wenn Sie den Sensorstatus in "Warnung" ändern möchten.
Beispiele
Wir gehen davon aus, dass Sie mit ES6 vertraut sind. Sie können ältere Syntax verwenden, da Javascript abwärtskompatibel ist.
Einfach
Eines der einfachsten Formate ist nur eine Reihe von Werten ohne Namen, getrennt durch ein Komma.
Testdaten
10.2, 30, 100
Skript
data.split(',').forEach((value,ix) => result.counter(`Value ${ix}`, value));
Parsen von XML / HTML Daten
Da natives Javascript keinen XML-Parser bietet, haben wir einen hinzugefügt. Sie können den XPath- und CSS-Selektor verwenden, um Elemente oder Attribute auszuwählen.
Einfaches XML-Dokument
NetCrunch enthält den DOM-Parser. Sie können es auf einer niedrigen Ebene verwenden (lesen Sie bitte xmldom.js im Internet), indem Sie den DOMParser-Konstruktor verwenden oder indem Sie die von uns für Sie bereitgestellte DOM-Klasse verwenden.
DOM
doc.nodes(xpath)
gibt alle Elemente zurück, die mit XPath übereinstimmen.
Beispiel
<doc>
<value name="Temp">10.2</value>
<value name="Fan Speed">100.2</value>
</doc>
Skript
const doc = new DOM(data);
doc
.nodes('//value')
.map(e => ([e.getAttribute('name'), e.firstChild.data ])
.forEach(([name,value]) => result.counter(name, value));
Das obige Skript gibt alle Werte mit Eigennamen als Zähler zurück.
doc.selectByXPath(path)
gibt Werte von Elementen zurück, die mit dem Pfad übereinstimmen.
doc.valueByXPath(path)
gibt unabhängig von Zahlenübereinstimmungselementen einen einzelnen (ersten) Wert zurück;
valueByCSS(path)
Konvertiert den CSS-Selektor in XPath und ruft valueByXPath auf, um einen einzelnen Wert abzurufen; Fügen Sie den Attributnamen nach dem Trennzeichen | hinzu, um den Attributwert auszuwählen.
Beispielsweise:
val[name='Temperature'] | value
Ermöglicht Ihnen, einfach den Wert aus dem folgenden Element auszuwählen:
<val name="Temperature" value="23.5"></val>
cssToXPath(selector)
Diese Funktion konvertiert den CSS-Selektor in XPath. Sie können den Attributnamen nach dem Trennzeichen | anhängen, um den Attributwert auszuwählen.
Beispielsweise:
val[device='Fan'] | rpm
Der Dom-Parser kann auch zum Parsen von HTML-Dokumenten verwendet werden, auch wenn sie nicht mit XML konform sind.
Daten
<doc>
<value1>13.10</value1>
<value2>345</value2>
</doc>
Skript
const doc = new DOM(data);
result
.counter('Values/Value 1', doc.valueByXPath('//value1'))
.counter('Values/Value 2', doc.valueByXPath('//value2'));
CSS-Selektoren
Sie können auch bekannte CSS-Selektoren mit doc.selectByCSS verwenden
doc.selectByCSS('value1')
Parsen von JSON-Daten
Javascript hat einen eingebauten Parser für JSON-Daten und konvertiert es native Javascript-Objekte. Ihr Skript kann zwei Methoden verwenden, um auf Attribute von Objekten zuzugreifen.
selectProperty(obj,path)
Wählen Sie die Eigenschaft nach einem gepunkteten Pfad aus.
selectByJSONPath(obj,path)
Wählen Sie das Eigenschaftenelement nach JSONPath aus.
Beispiel
Lassen Sie uns versuchen, Daten zu analysieren, die den von API-Diensten bereitgestellten Daten sehr ähnlich sind.
Daten
{
"main" : {
"Temperature" : 22,
"Humidity" : 66
}
}
Skript
const doc = JSON.parse(data);
result
.counter('Temperature', selectProperty(doc, 'main.Temperature'))
.counter('Humidity', selectByJSONPath(doc, '$..Humidity'));