[PYTHON] Erstellen eines benutzerdefinierten Splunk-Suchbefehls - der erste Schritt

Verwenden Sie das Splunk SDK, um einen benutzerdefinierten Suchbefehl zu erstellen.

Es wird gesagt, dass es ein Dokument gibt, aber es ist schwer zu verstehen, deshalb werde ich das Referenzziel und -verfahren zusammenfassen. Erstellen Sie als ersten Schritt einen benutzerdefinierten Suchbefehl "generatehello" [^ 2], der "Hallo Welt" [^ 1] ausgibt.

[^ 1]: In niedrigen Buchstaben zu Ehren von Kernighan & Ritchie. [^ 2]: Dies ist ein sogenannter Native-Befehl, der das Framework des Splunk SDK verwendet, anstatt das Skript mit run aufzurufen. Informationen zum Erstellen eines Skripts mit dem Befehl run als benutzerdefiniertem Suchbefehl finden Sie unter "Erstellen eines benutzerdefinierten Suchbefehls (Splunk) --Qiita". Ich werde.

: point_up_tone3: Es ist ein bisschen alt, aber der Inhalt ist noch gültig. Splunk offizielles Blog "[Erstellen von benutzerdefinierten Suchbefehlen in Python Teil I - Ein einfacher Generierungsbefehl](https://www.splunk.com/en_us/blog/tips] -und-Tricks / Erstellen-benutzerdefinierter-Suchbefehle-in-Python-Teil-ia-einfach-generieren-Befehl.html) Es basiert auf "[^ 3]. Dieser Artikel verfolgt jedoch einen Bottom-up-Ansatz.

[^ 3]: Im Blog vom April 2014 steht "Teil I", aber es scheint, dass der Blog "Teil II" gelöscht oder nicht veröffentlicht wurde.

Tor

Gibt "Hallo, Welt" in der SPL-Anweisung "| generatehello count = 3" und die Anzahl der im count-Argument angegebenen Ereignisse aus (in diesem Beispiel 3 Ereignisse).

Splunk カスタムサーチコマンド (custom search command) 作成 ― はじめの一歩 ― ゴール

Lassen Sie uns zunächst einen einfachen benutzerdefinierten Suchbefehl erstellen, der keine Argumente akzeptiert.

Bevor du anfängst

Entwicklungsleitfaden"Develop apps | Documentation | Splunk Developer Program"Es ist jedoch oft verwirrend, dies zu lesen, daher werde ich die Begriffe organisieren.

der Begriff einfache Erklärung
App(s) Teil anzeigen(UI)、Add-Ein, gesamte Anwendung, einschließlich benutzerdefinierter Suchbefehle
App in Single, aber Apps(UPS)Wird oft im Plural genannt.
$SPLUNKHOME/etc/apps/Es ist in Einheiten von Verzeichnissen unten angeordnet.
Add-on(s) Teil anzeigen(UI)Ein Teil oder die gesamte App ohne
Custom Search Command Ihr eigenes Programm, das als SPL-Befehl aufgerufen wird. Im Allgemeinen als Teil der App konfiguriert.

In diesem Artikel wird es als "SPLUNKHOME = / opt / splunk" [^ 5] beschrieben.

[^ 5]: Abgesehen davon scheinen einige Dateien als SPLANKHOME = / opt / splunk_home fest codiert zu sein. Da das Installationsziel des verteilten Pakets / opt / splunk ist, können Sie ein wenig stolpern.

Entwicklungsumgebung & Ausführungsumgebung

Vorbereitung

Laden Sie das Splunk SDK herunter, extrahieren Sie es und legen Sie das Entwicklungsverzeichnis fest.

Laden Sie das Splunk SDK herunter

Referenz: Create custom search commands | Documentation | Splunk Developer Program Siehe: Downloads | Splunk Developer Program Siehe: GitHub --splunk / splunk-sdk-python: Splunk-Softwareentwicklungskit für Python Siehe auch: Releases · splunk / splunk-sdk-python · GitHub

Das Dokument beschreibt auch die Installation mit pip [^ 4], aber dieses Mal werde ich die virtuelle Python-Umgebung nicht verwenden und pip nicht installieren. Laden Sie die ZIP- oder TAR.gZ-Datei herunter und verwenden Sie sie.

[^ 4]: cd $ SPLUNKHOME / etc / apps / yourapp / bin; pip install -t. Splunk-sdk und andere Methoden werden geschrieben, aber die im offiziellen Dokument beschriebene offizielle Methode wird in einem anderen Verzeichnis verwendet. Entwicklung und Test in und Einführung in Splunk.

: point_up_tone3: Von "Releases · splunk / splunk-sdk-python · GitHub" bis zum neuesten (derzeit 1.6.12) .zip Laden Sie die Datei oder die .tar.gz-Datei herunter und entpacken Sie sie.

Splunk SDK Herunterladen und entpacken


$ wget https://github.com/splunk/splunk-sdk-python/archive/1.6.12.tar.gz
...
2020-03-17 01:50:38 (3.12 MB/s) - ‘1.6.12.tar.gz’ saved [3876452]

$ ls
1.6.12.tar.gz
$ tar xvfz 1.6.12.tar.gz
splunk-sdk-python-1.6.12/
splunk-sdk-python-1.6.12/.gitattributes
...
splunk-sdk-python-1.6.12/utils/cmdopts.py
$ 

(Es gibt setup.py im extrahierten Verzeichnis, aber ich werde es dieses Mal nicht verwenden.)

Einrichten eines Verzeichnisses für die Entwicklungsarbeit

  1. Nachdem Sie die SDK-Vorlage als Arbeitsverzeichnis "HelloWorld-work /" kopiert haben, cp -rp splunk-sdk-python-1.6.12/examples/searchcommands_template HelloWorld-work
  2. Erstellen Sie ein HelloWorld-work / lib / -Verzeichnis mkdir HelloWorld-work/lib
  3. Kopieren Sie das splunklib-Verzeichnis darunter. cp -rp splunk-sdk-python-1.6.12/splunklib/ HelloWorld-work/lib/

HelloWorld-work Installieren


$ cp -rp splunk-sdk-python-1.6.12/examples/searchcommands_template HelloWorld-work
$ mkdir HelloWorld-work/lib
$ cp -rp splunk-sdk-python-1.6.12/splunklib/ HelloWorld-work/lib/
$

Sie haben jetzt eine Verzeichnisstruktur wie die folgende.

HelloWork-work Verzeichnisbaumstruktur


HelloWorld-work/
|-- bin
|   |-- filter.py  ................ Eventing commands (Siehe unten)Vorlage.
|   |-- generate.py  .............. Generating commands (Siehe unten)Vorlage.
|   |Dieses Mal werden wir diese Datei verwenden.
|   |-- report.py  ................ Reporting commands (Siehe unten)Vorlage.
|   `-- stream.py  ................ Streaming commands (Siehe unten)Vorlage.
|-- default  ......................Das Verzeichnis, in dem die Standardkonfigurationsdatei des Anbieters gespeichert ist.
|   |-- app.conf  .................Richtig beim Einstellen von Splunk.
|   |-- commands-scpv1.conf  ......Löschen Sie diese Datei.
|   |-- commands-scpv2.conf  ......Befiehlt diese Datei beim Konfigurieren von Splunk.Durch conf ersetzen.
|   |Schließlich wird es gelöscht.
|   |-- commands.conf  ............Beim Einrichten von Splunk
|   |Befehl diese Datei-scpv2.Durch conf ersetzen und reparieren.
|   |-- data
|   |   `-- ui
|   |       `-- nav
|   |           `-- default.xml  .. [Aufbau]-[Benutzeroberfläche]-[Navigationsmenü]-[default]
|   |Dies ist die App-Anzeigekonfiguration, die in angezeigt wird.
|   `-- logging.conf  .............Löschen Sie dieses Mal diese Datei.
|-- lib  ..........................Bibliotheksverzeichnis mit der Bezeichnung PYTHONPATH.
|   |Dieser Ort ist nicht festgelegt, wird jedoch in der offiziellen Dokumentation empfohlen.
|   |Wenn Sie ein Paket hinzugefügt haben, das nicht in splunklib in der virtuellen Python-Umgebung enthalten ist
|   |                               site-packages/Sie müssen die Bibliothek unten platzieren.
|   `-- splunklib  ................Gleich wie die SDK-Splunklib. Nennen Sie es mit import splunklib.
|       |-- __init__.py
:       :
:       :
|       `-- six.pyc
`-- metadata
    `-- default.meta  .............Referenz/Schreibberechtigung ist angegeben.

12 directories, 79 files

Diese Verzeichnisstruktur ahmt die Struktur des Verzeichnisses $ SPLUNKHOME / etc / apps / yourapplication / nach. Sie können sich als App registrieren, indem Sie nicht benötigte Dateien löschen und unverändert in $ SPLUNKHOME / etc / apps / kopieren.

: point_up_tone3: Das Konfigurationsdateiverzeichnis enthält "default /" und "local /", das Verzeichnis "default /" ist die Standardeinstellung des Anbieters und der Benutzer ist das Verzeichnis "local /" (oder das Verzeichnis, falls nicht). Es ist eine Regel, nur die Änderungen festzulegen (durch Erstellen). Diesmal ist der Entwickler der Anbieter. Ändern Sie daher die Einstellungsdatei im Verzeichnis "default /" direkt.

Entwicklung von

Bevor wir mit der Erstellung benutzerdefinierter Suchbefehle beginnen, wollen wir uns mit den Typen befassen.

4 Arten von benutzerdefinierten Suchbefehlen

Referenz: Create custom search commands | Documentation | Splunk Developer Program Referenz: Python classes | Documentation | Splunk Developer Program

: point_up_tone3: Es gibt vier Arten von benutzerdefinierten Suchbefehlen.

The core of the search commands module contains four classes:

  • EventingCommand: Defines a search command that applies a transformation to search results as they travel through the events pipeline. Examples of eventing commands include sort, dedup, and cluster.
  • GeneratingCommand: Defines a search command that generates event records based on command arguments. Examples of generating commands include search (at the beginning of the pipeline), inputcsv, input lookup, and metadata.
  • ReportingCommand: Defines a search command that processes search results and generates a reporting data structure. Examples of reporting commands include stats, top, and timechart.
  • StreamingCommand: Defines a search command that applies a transformation to search results as they travel through the processing pipeline. Examples of streaming commands include search, eval, and where.

Die einfache Erklärung lautet wie folgt.

Art einfache Erklärung Ausführungsort Befehlsbeispiel
Eventing commands Ein Befehl, der Eingaben empfängt, verarbeitet und ausgibt Nur Suchkopf sort, dedup, cluster
Generating commands EingangNicht erhalten, Befehl zur Ausgabe Nur Suchkopf (Am Anfang geschrieben)search, inputcsv, input lookup, metadata
Reporting commands Befehl zum Empfangen von Eingaben und Verarbeiten in das Berichtsformat Nur Suchkopf stats, top, timechart
Streaming commands Befehle zum Verarbeiten und Ausgeben in einer verteilten Umgebung Parallel dazu ist auch ein Indexer möglich search, eval, where

Es kann schwierig sein, zwischen Eventing-Befehlen und Streaming-Befehlen zu unterscheiden, mit dem Unterschied, dass Eventing-Befehle nur in Search Head ausgeführt werden können, während Streaming-Befehle auch in Indexer [^ 7] ausgeführt werden können. (Weitere Informationen finden Sie unter "Befehlstypen".)

[^ 7]: Es gibt auch einen Befehl namens "Stateful Streaming-Befehle", der nur von Search Head ausgeführt werden kann ... Was ist los ...

In einem ersten Schritt erstellen wir ** Generieren von Befehlen ** ohne Eingabe.

Befehlsvorlage generieren

Referenz: Templates - Create custom search commands | Documentation | Splunk Developer Program

Für jeden der vier Typen stehen Vorlagen zur Verfügung. Durchsuchen Sie die Vorlage zum Generieren von Befehlen.

Befehlsvorlage generieren --generate.py

Es befindet sich im Splunk SDK-Verzeichnis unter "examples / searchcommands_template / bin / generate.py", aber in dem von Ihnen eingerichteten Arbeitsverzeichnis befindet es sich unter "bin /".

generate.py


     1  #!/usr/bin/env python
     2
     3  import sys
     4  import os
     5
     6  sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
     7  from splunklib.searchcommands import \
     8      dispatch, GeneratingCommand, Configuration, Option, validators
     9
    10  @Configuration()
    11  class %(command.title())Command(GeneratingCommand):
    12      """ %(synopsis)
    13
    14      ##Syntax
    15
    16      %(syntax)
    17
    18      ##Description
    19
    20      %(description)
    21
    22      """
    23      def generate(self):
    24         # Put your event  code here
    25         pass
    26
    27  dispatch(%(command.title())Command, sys.argv, sys.stdin, sys.stdout, __name__)

Vorlage ändern

Kopieren Sie die Vorlage generate.py nach HelloWorld.py und ändern Sie den Befehlsnamen usw.

Ändern Sie "% (command.title ())" in den Zeilen 11 und 27 in "HelloWorld". Sie können einen Editor verwenden, es ist jedoch möglicherweise einfacher, ihn mit sed zu beheben.

sed Fix mit


$ sed -e 's/%(command.title())/HelloWorld/' generate.py > HelloWorld.py
$ diff generate.py HelloWorld.py
11c11
< class %(command.title())Command(GeneratingCommand):
---
> class HelloWorldCommand(GeneratingCommand):
27c27
< dispatch(%(command.title())Command, sys.argv, sys.stdin, sys.stdout, __name__)
---
> dispatch(HelloWorldCommand, sys.argv, sys.stdin, sys.stdout, __name__)
$ 

Modify generate () - gibt nur ein Ereignis zurück

Ändern Sie das Feld "Begrüßung" so, dass nur eine "Hallo Welt" zurückgegeben wird.

Der zurückzugebende Typ ist ein Wörterbuchtyp. Zu diesem Zeitpunkt verwendet Splunk häufig die Zeit als Schlüssel. Stellen Sie die Zeit daher im Feld "_time" ein.

Wie ich oben geschrieben habe, muss generate () vom Typ iterate sein. : point_up_tone3: Es gibt zwei Möglichkeiten, dies zu tun.

  1. Rückgabe mit Rückgabe: Der Rückgabetyp muss eine Liste sein. Wenn Sie mit return zurückkehren und alle Daten verfügbar sind, müssen Sie jeden Wörterbuchtyp auflisten und zurückgeben.
  2. Return by Yield: Gibt jedes Mal einen einzelnen Wörterbuchtyp mit yeild zurück.

Zunächst wird nur ein Eintrag zurückgegeben. Versuchen wir es also mit return. Fügen Sie "import time ()" in Zeile 5 ein, um die Zeit hinzuzufügen, und ändern Sie die Teile in den Zeilen 24 und 25 wie folgt:

     1  #!/usr/bin/env python
     2
     3  import sys
     4  import os
     5  import time      # _Neuer Import zum Einstellen der Zeit
     6
     7  sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
     8  from splunklib.searchcommands import \
     9      dispatch, GeneratingCommand, Configuration, Option, validators
    10
    11  @Configuration()
    12  class HelloWorldCommand(GeneratingCommand):
    13      """ %(synopsis)
    14
    15      ##Syntax
    16
    17      %(syntax)
    18
    19      ##Description
    20
    21      %(description)
    22
    23      """
    24      def generate(self):
    25          return [{"_time": time.time(), "greeting": "hello, world"}] #Beachten Sie, dass es sich um eine Liste handelt
    26
    27
    28  dispatch(HelloWorldCommand, sys.argv, sys.stdin, sys.stdout, __name__)

In der 25. Zeile wird die Zeit in das Feld "_time" eingetragen, "Hallo, Welt" in das Feld "Begrüßung" eingefügt und als Liste zurückgegeben.

Funktionsprüfung

Löschen Sie nicht benötigte Einstellungsdateien

Sie können den Vorgang mit python3 HelloWorld.py __EXCECUTE__ </ dev / null überprüfen. Wenn Sie ihn jedoch so ausführen, wie er ist, tritt ein Fehler auf.

Ein Fehler ist aufgetreten


$ python3 --version
Python 3.6.9
$ python3 HelloWorld.py __EXECUTE__ < /dev/null
Traceback (most recent call last):
  File "HelloWorld.py", line 8, in <module>
    from splunklib.searchcommands import \
  File "../lib/splunklib/searchcommands/__init__.py", line 145, in <module>
    from .environment import *
  File "../lib/splunklib/searchcommands/environment.py", line 120, in <module>
    splunklib_logger, logging_configuration = configure_logging('splunklib')
  File "../lib/splunklib/searchcommands/environment.py", line 103, in configure_logging
    fileConfig(filename, {'SPLUNK_HOME': splunk_home})
  File "/usr/lib/python3.6/logging/config.py", line 84, in fileConfig
    handlers = _install_handlers(cp, formatters)
  File "/usr/lib/python3.6/logging/config.py", line 131, in _install_handlers
    hlist = cp["handlers"]["keys"]
  File "/usr/lib/python3.6/configparser.py", line 959, in __getitem__
    raise KeyError(key)
KeyError: 'handlers'
$

Dies ist ein Fehler beim Lesen der .conf-Datei.

Ich werde die Dateien im Verzeichnis "default /" lesen, aber da ich im Moment nichts festgelegt habe, sind die Vorlagenzeichen noch vorhanden.

In diesem Artikel werden unnötige Dateien einmal gelöscht, vorausgesetzt, wir nehmen die erforderlichen Einstellungen vor. Das Ziel ist diesmal logging.conf. (Schlüsselwörter zur Fehlerbehebung sind "in configure_logging" und "KeyError:" Handler "im obigen Fehler.)

Löschen Sie die Datei logging.conf im Verzeichnis default /. (Wenn Sie es wiederherstellen möchten, kopieren Sie es erneut aus dem SDK-Verzeichnis.)

logging.conf&nbsp;Löschen


$ rm ../default/logging.conf
$ ls ../default/
app.conf  commands-scpv1.conf  commands-scpv2.conf  commands.conf  data
$

Testlauf

Führen Sie den Test in der Entwicklungsumgebung aus.

python3 HelloWorld.py __EXECUTE__ < /dev/null

Es kann mit der Befehlssequenz ausgeführt werden. : point_up_tone3: __EXECUTE__ hat zwei Unterstriche ( _) vor und nach EXECUTE. Selbst wenn es sich um einen Generierungsbefehl handelt, wartet er auf die Standardeingabe [^ 6]. Geben Sie daher / dev / null als Eingabe an.

[^ 6]: Wenn Splunk auf Splunk ausgeführt wird, werden Metainformationen zur Verarbeitung durch die Splunk-Bibliothek ausgefüllt.

Testlauf


$ python3 --version
Python 3.6.9
$ python3 HelloWorld.py __EXECUTE__ < /dev/null

_time,__mv__time,greeting,__mv_greeting
1584528442.0660899,,"hello, world",
$

Die unbekannten Felder "__mv__time" und "__mv_greeting" wurden hinzugefügt, die die Splunk-Bibliothek automatisch hinzufügt. Stellen Sie hier sicher, dass die beabsichtigte "Zeit" und "Begrüßung" ausgegeben werden.

Installation auf Splunk

Lassen Sie es uns auf Splunk installieren (registrieren) und ausführen.

Ändern Sie die Einstellungsdatei

Ändern Sie "app.conf" und "command.conf" im Verzeichnis "default /".

Ändern Sie app.conf

Siehe: app.conf --Splunk-Dokumentation

Die app.conf wie in der Vorlage ist wie folgt.

app.conf


     1  # Splunk app configuration file
     2
     3  [ui]
     4  label = %(app_label)<= Korrigieren Sie dies auf den Namen der App.
     5  is_visible = 1
     6
     7  [launcher]
     8  description = %(app_description)
     9  author = %(app_author)
    10  version = %(app_version)
    11
    12  [package]
    13  id = %(app_id)
    14
    15  [install]
    16  is_configured = 0

Sie können den benutzerdefinierten Suchbefehl allein installieren, er wird jedoch im Systemverzeichnis festgelegt. Setzen Sie den Namen daher auf "label", um ihn als neue App zu registrieren.

Hier ist es "Hallo Welt". Andere Teile müssen geändert werden, haben jedoch keinen Einfluss auf die Ausführung des benutzerdefinierten Suchbefehls. Lassen Sie sie daher unverändert.

*** app.conf.orig       2020-03-18 20:00:07.303785404 +0900
--- app.conf    2020-03-18 20:00:18.943809800 +0900
***************
*** 1,7 ****
  # Splunk app configuration file

  [ui]
! label = %(app_label)
  is_visible = 1

  [launcher]
--- 1,7 ----
  # Splunk app configuration file

  [ui]
! label = Hello World
  is_visible = 1

  [launcher]

Nach der Modifikation&nbsp;app.conf


# Splunk app configuration file

[ui]
label = Hello World
is_visible = 1

[launcher]
description = %(app_description)
author = %(app_author)
version = %(app_version)

[package]
id = %(app_id)

[install]
is_configured = 0

Ändern Sie command.conf

Siehe: command.conf-Splunk-Dokumentation

Es ist command.conf, die den benutzerdefinierten Suchbefehl festlegt.

Im Verzeichnis "default /" befinden sich drei Dateien: "command.conf", "command-scpv1.conf" und "command-scpv2.conf". Es stehen zwei Vorlagen zur Verfügung, da es Versionen des Protokolls v1 und v2 gibt, in denen der benutzerdefinierte Suchbefehl mit Splunk interagiert. Die Vorlage command.conf enthält den Inhalt von v1.

Genau genommen ist es notwendig zu prüfen, welches Protokoll verwendet werden soll, aber ich denke, dass es in Zukunft v2 sein wird. Kopieren Sie also "command-scpv2.conf" in "command.conf" und ändern Sie es.

commands-scpv2.conf&nbsp;Kopie von


$ cp commands-scpv2.conf commands.conf
$ 

commands.conf&nbsp;(v2)&nbsp;Vorlage


     1  # [commands.conf]($SPLUNK_HOME/etc/system/README/commands.conf.spec)
     2  # Configuration for Search Commands Protocol version 2
     3
     4  [%(command.lower()]
     5  filename = %(command.lower()).py
     6  chunked = true

Wenn der von SPL aufgerufene Befehlsname und der Dateiname mit Ausnahme von ".py" identisch sind, muss "Dateiname" nicht festgelegt werden. Diesmal lautet der aufzurufende Befehlsname "generatehello" und der Dateiname "HelloWorld.py". Stellen Sie es also ein.

Wie ich am Anfang geschrieben habe, wird auch Python3 verwendet. Nehmen Sie diese Einstellung vor. : point_up_tone3: Bei Verwendung von Python3

python.version = python3

Einstellen.

Nach dem Umschreiben&nbsp;commands.conf


     1  # [commands.conf]($SPLUNK_HOME/etc/system/README/commands.conf.spec)
     2  # Configuration for Search Commands Protocol version 2
     3
     4  [generatehello]
     5  filename = HelloWorld.py
     6  chunked = true
     7  python.version = python3

In das Splunk-Apps-Verzeichnis kopieren

Ich habe den App-Namen in app.conf geschrieben, daher spielt es keine Rolle, welches Verzeichnis Sie installieren, solange der Verzeichnisname nicht mit den anderen Apps in Splunk übereinstimmt. Nennen wir es hier "helloworld". Löschen Sie nicht benötigte Konfigurationsdateien vor der Installation (Kopie).

: point_up_tone3: Das Installationsverzeichnis befindet sich unter "$ SPLUNKHOME / etc / apps /". Kopieren Sie das gesamte Verzeichnis "HelloWorld-work /". Achten Sie zu diesem Zeitpunkt auf den Eigentümer und die Berechtigungen der Datei. Seien Sie besonders vorsichtig, wenn Sie Splunk als Nicht-Root ausführen.

$ rm HelloWorld-work/default/commands-scpv[12].conf; sudo sh -c "cp -rp HelloWorld-work /opt/splunk/etc/apps/helloworld; chown -R splunk:splunk /opt/splunk/etc/apps/helloworld"
$ ls -ld /opt/splunk/etc/apps/helloworld/{*,}
drwxr-xr-x 6 splunk splunk 4096 Mar 18 07:52 /opt/splunk/etc/apps/helloworld/
drwxr-xr-x 2 splunk splunk 4096 Mar 18 09:33 /opt/splunk/etc/apps/helloworld/bin
drwxr-xr-x 3 splunk splunk 4096 Mar 18 11:43 /opt/splunk/etc/apps/helloworld/default
drwxr-xr-x 3 splunk splunk 4096 Mar 18 07:52 /opt/splunk/etc/apps/helloworld/lib
drwxr-xr-x 2 splunk splunk 4096 Feb 13 23:30 /opt/splunk/etc/apps/helloworld/metadata
$

Überprüfen Sie durch btool

Siehe: Verwenden Sie btool zur Fehlerbehebung bei Konfigurationen - Plunk-Dokumentation

Verwenden Sie btool, um zu überprüfen, ob die Konfigurationsdatei korrekt ist.

$SPLUNKHOME/bin/splunk btool check

Wenn es kein Problem gibt, wird nichts angezeigt, aber wenn etwas schief geht, wird die folgende Anzeige angezeigt. (Beispiel für das versehentliche Ändern von "python.version" in "ython.version")

Wird angezeigt, wenn ein Problem mit der Einstellungsdatei vorliegt


$ sudo su splunk -c "/opt/splunk/bin/splunk btool check"
                Invalid key in stanza [generatehello] in /opt/splunk/etc/apps/helloworld/default/commands.conf, line 7: ython.version  (value:  python3).
$

Mit der Option "--debug" erhalten Sie auch für gute Konfigurationsdateien viele Meldungen.

Aktualisieren Sie Splunk oder starten Sie es neu

Die Einstellungen werden unter http (s) geladen: // _ yourURL_ / debug / refresh, sodass ein Neustart grundsätzlich nicht erforderlich ist. Wenn er jedoch nicht geladen wird, starten Sie Splunk neu.

Benutzerdefinierte Suche Befehlsausführung

SPL-Eingang

Führen Sie es schließlich auf Splunk aus. Wählen Sie "Hallo Welt" aus der App und geben Sie den Befehl in das Suchfenster ein.

|generatehello

コマンド実行 (1)

Es funktionierte.

  1. Wählen Sie App
  2. Stellen Sie sicher, dass die App "Hello World" ist.
  3. Geben Sie | generatehello ein
  4. Ein Ereignis wird angezeigt, die Uhrzeit wird angezeigt, aber "Ereignis" ist leer
  5. "Begrüßung" existiert in "verwandten Feldern"

Die Begrüßung wird nicht als "Ereignis" angezeigt, da die generierten Daten kein "_raw" -Feld enthalten. Wenn Sie links auf den Begrüßungsteil des Menüs klicken, wird "Hallo Welt" ausgegeben.

SplunkHelloWorld-002.png

Wenn Sie es explizit ausgeben möchten, geben Sie das Feld mit "Tabelle" usw. an. Es wird angezeigt.

SplunkHelloWorld-003.png

Fehlerbehebung

Wenn Sie der Meinung sind, dass etwas seltsam ist, sehen Sie sich das Jobprotokoll an.

image.png

image.png

image.png

Das obige Beispiel ist eine Ausnahme, die zum Testen ausgelöst wurde.


Bis hierher für diese Zeit. Wenn Sie den ersten Schritt machen können, ist es einfacher, den nächsten Schritt zu machen.

Zusammenfassung

Nächstes Mal werde ich den Befehl auffrischen und beenden. ⇒ Ich habe folgendes geschrieben: "Erstellung eines benutzerdefinierten Splunk-Suchbefehls Teil 2-Qiita".

Recommended Posts

Erstellen eines benutzerdefinierten Splunk-Suchbefehls - der erste Schritt
Erstellung eines benutzerdefinierten Splunk-Suchbefehls Teil 2
Erstellen eines benutzerdefinierten Suchbefehls für Splunk EventingCommand
[Go] So erstellen Sie einen benutzerdefinierten Fehler für Sentry