Verstehen der Agentenkonfigurationsdatei

Der Protokollierungsagent verwendet eine Fluent Bit-basierte Konfigurationsdatei, um zu bestimmen, wie eingehende Daten verarbeitet werden, bevor sie weitergeleitet werden.

Wenn Sie die Konfigurationsdatei des Agenten konfigurieren, beachten Sie die folgenden Informationen:

  • Das Schema ist in mehrere Abschnitte unterteilt.
  • Sie können Fluent Bit-Befehle verwenden, um die Konfigurationsdatei zu vereinfachen und besser lesbar zu machen.
  • Sie können Konfigurationsvariablen freigeben, indem Sie Shell-Umgebungsvariablen setzen oder den Befehl @SET verwenden.

Sections (Abschnitte)

Das Schema für eine Fluent Bit-Konfiguration ist in mehrere Abschnitte unterteilt.

  • Ein Abschnitt wird durch einen Namen in Klammern definiert.
  • Es gibt vier Arten von Abschnitten, die Sie konfigurieren können: Service, Input, Filter, und Output.
  • Ein Abschnitt kann 1 oder mehrere Einträge enthalten.
  • Ein Eintrag wird durch eine Textzeile definiert, die einen Schlüssel und einen Wert enthält. Der Schlüssel muss eingerückt sein und einen Wert enthalten, der mit dem Zeilenumbruch endet. Erwägen Sie eine Einrückung von vier Leerzeichen.

Das folgende Diagramm zeigt die Reihenfolge, in der die Abschnitte angewendet werden:

Reihenfolge der
bei der Verarbeitung von Fluent Bit*Reihenfolge der Abschnitte bei der Verarbeitung von Fluent

Abschnitt SERVICE

Sie können den Abschnitt SERVICE konfigurieren, um globale Eigenschaften des Dienstes zu definieren.

In der folgenden Tabelle sind einige Schlüssel aufgeführt, die Sie in einem SERVICE-Abschnitt definieren können:

Dienstleistung kyes
Schlüssel Beschreibung Standardwert
flush Legen Sie die Zeit in seconds.nanoseconds fest, um die Datensätze, die von Eingabe-Plug-ins aufgenommen werden, durch die Ausgabe-Plug-ins zu spülen. 5
log_file Der absolute Pfad für andere Protokolldateien. Standardmäßig werden die Protokolle an die Standardfehlerschnittstelle (stderr) weitergeleitet.
log_level Legen Sie die Ausführlichkeitsstufe der Protokollierung fest. Gültige Werte sind: off, error, warn, info, debug und trace. Beachten Sie, dass die Werte akkumuliert werden. Wenn zum Beispiel debug eingestellt ist, schließt es error, warning, info und debug ein. info
parsers_file Pfad für die Konfigurationsdatei eines Parsers. Innerhalb eines Abschnitts können mehrere Parsers_File Einträge definiert werden.

Weitere Informationen über die unterstützten zusätzlichen Schlüssel finden Sie unter Eigenschaften des Dienstabschnitts.

Ein Beispiel für einen SERVICE-Abschnitt könnte folgendermaßen aussehen:

[SERVICE]
      Flush                   1
      Log_Level               info
      Daemon                  off
      Parsers_File            parsers.conf
      plug-ins_File           plug-ins.conf
      HTTP_Server             On
      HTTP_Listen             0.0.0.0
      HTTP_Port               8081
      Health_Check            On
      HC_Errors_Count         1
      HC_Retry_Failure_Count  1
      HC_Period               30
      storage.path            /fluent-bit/cache
      storage.max_chunks_up   192
      storage.metrics         On

INPUT-Bereich

Sie können INPUT Abschnitte konfigurieren, um die Quellen zu definieren, aus denen Fluent Bit Daten sammeln kann.

In der folgenden Tabelle sind die Tasten aufgeführt, die Sie für einen INPUT-Abschnitt konfigurieren können:

Eingabetasten
Schlüssel Beschreibung Status
Name Name des Eingabe-Plug-ins. Bestimmt, welches Eingabe-Plug-in von Fluent Bit geladen werden soll. Erforderlich
Tag Tag, der mit allen von diesem Plug-in stammenden Datensätzen verknüpft ist. Erforderlich für alle Plug-ins mit Ausnahme des Input Forward Plug-ins, das dynamische Tags bereitstellt.
Log_Level Legen Sie die Ausführlichkeitsstufe der Protokollierung fest. Gültige Werte sind: off, error, warn, info, debug und trace. Beachten Sie, dass die Werte akkumuliert werden. Wenn zum Beispiel debug eingestellt ist, schließt es error, warning, info und debug ein. Ist der Wert nicht festgelegt, wird der Wert des SERVICE-Abschnitts Log_Level als Standardwert verwendet. Optionale
Path Legen Sie den Speicherort fest, an dem die Protokolldateien gelesen werden.

Für Kubernetes-Protokolle sammelt IBM Cloud Logs Protokollierungsagent standardmäßig nur Protokolle aus dem /var/log/containers/*.log-Verzeichnis. Wenn Sie Protokolle aus allen Unterverzeichnissen unter /var/log sammeln möchten, müssen Sie /var/log/**/*.log zum Parameter Path hinzufügen.

Optionale

Weitere Informationen über die INPUT Plug-ins finden Sie unter Eingabe-Plug-ins.

Jedes INPUT-Plug-in hat seine eigenen Konfigurationsschlüssel zusätzlich zu den in der Tabelle aufgeführten.

Ein Beispiel für einen INPUT-Abschnitt könnte beispielsweise folgendermaßen aussehen:

[INPUT]
    # Comment
    Name tail
    Tag  kube.*
    log_level info

Abschnitt FILTER

Sie können FILTER Abschnitte so konfigurieren, dass die Daten, die sich auf ein FILTER Plug-in beziehen, umgewandelt werden, bevor sie an Ihr Ziel gesendet werden.

In der folgenden Tabelle sind die Tasten aufgeführt, die Sie für einen FILTER-Abschnitt konfigurieren können:

Filterschlüssel
Schlüssel Beschreibung Status
Name Name des Filter-Plug-ins. Bestimmt, welches Filter-Plug-in von Fluent Bit geladen werden soll. Erforderlich
Match Ein Muster, das zum Abgleich mit den Tags verwendet wird, die für eingehende Datensätze definiert sind. Bei Match wird zwischen Groß- und Kleinschreibung unterschieden. Sie können das Sternchen * als Platzhalter verwenden. erforderlich [*]
Match_Regex Ein regulärer Ausdruck, der zum Abgleich mit den Tags verwendet wird, die in den eingehenden Datensätzen definiert sind. Verwenden Sie diese Option, um die vollständige Regex-Syntax zu verwenden. erforderlich [*]
Log_Level Legen Sie die Ausführlichkeitsstufe der Protokollierung fest. Gültige Werte sind: off, error, warn, info, debug und trace. Beachten Sie, dass die Werte akkumuliert werden. Wenn zum Beispiel debug eingestellt ist, schließt es error, warning, info und debug ein. Ist der Wert nicht festgelegt, wird der Wert des SERVICE-Abschnitts Log_Level als Standardwert verwendet. Optionale

[*] Sie können die Match Taste, die Match_Regex Taste oder beide konfigurieren. Sie müssen immer eine konfigurieren. Wenn Sie beide konfigurieren, hat Match_Regex Vorrang.

Ein Beispiel für einen FILTER-Abschnitt kann beispielsweise folgendermaßen aussehen:

[FILTER]
    Name  kubernetes
    Match kube.*
    log_level info

OUTPUT-Bereich

Sie können OUTPUT Abschnitte konfigurieren, um die Ziele zu definieren, an die Fluent Bit die Daten nach einer Tag-Übereinstimmung senden soll.

Fluent Bit kann bis zu 256 OUTPUT Plug-ins leiten.

In der folgenden Tabelle sind die Tasten aufgeführt, die Sie für einen OUTPUT-Abschnitt konfigurieren können:

Ausgangsschlüssel
Schlüssel Beschreibung Status
Name Name des Ausgabe-Plug-ins. Bestimmt, welches Ausgabe-Plug-in von Fluent Bit geladen werden soll. Erforderlich
Match Ein Muster, das zum Abgleich mit den Tags verwendet wird, die in den eingehenden Datensätzen definiert sind. Bei Match wird zwischen Groß- und Kleinschreibung unterschieden. Sie können das Sternchen * als Platzhalter verwenden. erforderlich [*]
Match_Regex Ein regulärer Ausdruck, der zum Abgleich mit den Tags verwendet wird, die in den eingehenden Datensätzen definiert sind. Verwenden Sie diese Option, um die vollständige Regex-Syntax zu verwenden. erforderlich [*]
Log_Level Legen Sie die Ausführlichkeitsstufe der Protokollierung fest. Gültige Werte sind: off, error, warn, info, debug und trace. Beachten Sie, dass die Werte akkumuliert werden. Wenn zum Beispiel debug eingestellt ist, schließt es error, warning, info und debug ein. Ist der Wert nicht festgelegt, wird der Wert des SERVICE-Abschnitts Log_Level als Standardwert verwendet. Optionale

[*] Sie können die Match Taste, die Match_Regex Taste oder beide konfigurieren. Sie müssen immer eine konfigurieren. Wenn Sie beide konfigurieren, hat Match_Regex Vorrang.

Der OUTPUT-Abschnitt des logger-icl-output-plugin sieht zum Beispiel wie folgt aus:

    [OUTPUT]
        Name logger-icl-output-plugin
        Id icl-output-plugin
        Match *
        Retry_Limit 8

        # Connection
        Target_Host REPLACE_INGESTER_HOST
        Target_Port REPLACE_INGESTER_PORT
        Target_Path /logs/v1/singles

        # Authentication
        Authentication_Mode REPLACE_IAM_AUTH_MODE
        IAM_Environment REPLACE_IAM_ENVIRONMENT
        REPLACE_TRUSTED_PROFILE_ID
        CR_Token_Mount_Path /var/run/secrets/tokens/vault-token

        # Logging
        Logging_Level info

        # Buffer storage
        storage.total_limit_size 5G

Die logger-icl-output-plugin verwendet die in Fluent Bit eingebaute Gesundheitsprüfung. Der Pod gilt als ungesund, wenn das Plug-in mindestens einen Fehler auslöst oder wenn die Grenzen für Wiederholungsversuche in einem Zeitraum von 30 Sekunden ausgeschöpft sind.

Variablen

In Fluent Bit können Sie Umgebungsvariablen verwenden, um den Wert eines Schlüssels zu setzen, der in der Fluent Bit Konfigurationsdatei definiert ist.

Bei den Variablen wird zwischen Groß- und Kleinschreibung unterschieden.

Verwenden Sie das folgende Format zur Darstellung von Variablen:

${MY_VARIABLE}

Um eine Umgebungsvariable zu definieren, können Sie die Bash-Syntax verwenden.

Um Umgebungsvariablen zu definieren, können Sie eine der folgenden Optionen wählen:

  • Öffnen Sie ein Terminal und setzen Sie Umgebungsvariablen mit dem Befehl export.

    Zum Beispiel können Sie eine wie folgt definieren: $ export MY_VARIABLE=stdout.

    Wenn Fluent Bit startet, sucht der Konfigurationsleser nach einer Umgebungsvariablen mit dem Namen MY_VARIABLE.

  • Wenn Fluent Bit unter systemd mit den offiziellen Paketen läuft, setzen Sie Umgebungsvariablen in einer der folgenden Dateien: /etc/default/fluent-bit (Debian-basiertes System) oder /etc/sysconfig/fluent-bit (andere Systeme).

Öffnen Sie zum Beispiel ein Terminal und setzen Sie die Umgebungsvariable: $ export MY_OUTPUT=stderr Erstellen Sie dann die folgende Konfigurationsdatei:

[INPUT]
    Name              tail
    Tag               kube.*

[OUTPUT]
    Name  ${MY_OUTPUT}
    Match kube.*

Der Schlüssel Name, der mit der Umgebungsvariablen ${MY_OUTPUT} definiert ist, wird auf stderr gesetzt.

Befehle

Sie können Fluent Bit-Befehle verwenden, um die Konfigurationsdatei zu vereinfachen und besser lesbar zu machen.

In der folgenden Tabelle sind die Befehle aufgeführt, die Sie verwenden können:

Unterstützte Befehle
Befehl Beschreibung Beispiel
@INCLUDE Eine Konfigurationsdatei einbinden. @INCLUDE <FILE>
@SET Setzen Sie eine Konfigurationsvariable. @SET KEY=VAL

INCLUDE-Befehl

Um komplizierte, lange Konfigurationsdateien zu vermeiden, können Sie die Hauptkonfigurationsdatei von Fluent Bit in mehrere Dateien aufteilen, indem Sie den Befehl @INCLUDE verwenden. Mit dem Befehl @INCLUDE können Sie externe Dateien einbinden.

Sie können zusätzliche Konfigurationsdateien einbinden, indem Sie Einträge hinzufügen, die dem folgenden Format entsprechen:

@INCLUDE <FILE>

Beachten Sie die folgenden Informationen, wenn Sie den Befehl @INCLUDE verwenden:

  • Sie können den Befehl @INCLUDE auf der oberen linken Ebene der Konfigurationszeile verwenden.
  • Sie können den Befehl @INCLUDE nicht innerhalb eines Abschnitts einfügen.
  • Sie können das Platzhalterzeichen (*) verwenden, um mehrere Dateien einzuschließen. Zum Beispiel können Sie verwenden: @INCLUDE input_*.conf.
  • Wenn Sie mehrere Dateien mit Hilfe des Platzhalters (*) einschließen, werden die Dateien, die mit dem Platzhalterzeichen übereinstimmen, unsortiert eingeschlossen. Wenn Sie die Reihenfolge zwischen den Dateien beibehalten wollen, müssen die Dateien ausdrücklich in der gewünschten Reihenfolge eingefügt werden.
  • Alle Pfade, die Sie definieren, werden als relativ aus der Stammkonfigurationsdatei gelesen.

Beispiel:

@INCLUDE somefile.conf

SET-Befehl

Sie können den Befehl @SET verwenden, um Konfigurationsvariablen in die Fluent Bit-Konfiguration zu integrieren.

  • Sie können den Befehl @SET auf der Stammebene jeder Zeile verwenden.
  • Sie können den Befehl @SET nicht innerhalb eines Abschnitts verwenden.

Sie können zum Beispiel die folgenden Variablen setzen und sie zur Konfiguration verschiedener Schlüssel verwenden:

@SET my_input=abc
@SET my_output=def

[SERVICE]
    Flush 1

[INPUT]
    Name ${my_input}

[OUTPUT]
    Name ${my_output}