Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Konfiguration von Amazon-ECS-Protokollen für hohen Durchsatz
Für Szenarien mit hohem Protokolldurchsatz empfehlen wir, den awsfirelens Protokolltreiber mit FireLens und zu verwenden. Fluent Bit Fluent Bitist ein leichter Protokollprozessor, der effizient mit Ressourcen umgeht und Millionen von Protokolldatensätzen verarbeiten kann. Um eine optimale Leistung im großen Maßstab zu erreichen, ist jedoch eine Anpassung der Konfiguration erforderlich.
In diesem Abschnitt werden fortgeschrittene Fluent Bit Optimierungstechniken für den Umgang mit hohem Protokolldurchsatz bei gleichzeitiger Wahrung der Systemstabilität und Vermeidung von Datenverlusten behandelt.
Hinweise zur Verwendung von benutzerdefinierten Konfigurationsdateien mit FireLens finden Sie unterEine benutzerdefinierte Konfigurationsdatei verwenden. Weitere Beispiele finden Sie unter Amazon FireLens ECS-Beispiele
Anmerkung
Einige Konfigurationsoptionen in diesem Abschnitt, wie z. B. workers undthreaded, sind AWS für Fluent Bit Version 3 oder höher erforderlich. Informationen zu verfügbaren Versionen finden Sie unter AWS Fluent Bit-Versionen
Chunks verstehen
Fluent Bitverarbeitet Daten in Einheiten, die als Chunks bezeichnet werden. Wenn ein INPUT-Plugin Daten empfängt, erstellt die Engine einen Block, der im Speicher oder im Dateisystem gespeichert wird, bevor er an OUTPUT-Ziele gesendet wird.
Das Pufferverhalten hängt von der storage.type Einstellung in Ihren INPUT-Abschnitten ab. Fluent BitVerwendet standardmäßig die Speicherpufferung. Bei Hochdurchsatz- oder Produktionsszenarien bietet die Dateisystempufferung eine bessere Stabilität.
Weitere Informationen finden Sie in der Fluent Bit Dokumentation unter Chunks
Speicherpufferung (Standard)
Fluent BitVerwendet standardmäßig Speicherpufferung ()storage.type memory. Mit dem Mem_Buf_Limit Parameter können Sie die Speichernutzung pro INPUT-Plugin einschränken.
Das folgende Beispiel zeigt eine speichergepufferte Eingabekonfiguration:
[INPUT] Name tcp Tag ApplicationLogs Port 5170 storage.type memory Mem_Buf_Limit 5MB
Wichtig
Wenn Mem_Buf_Limit der Wert für ein Plugin überschritten wird, wird die Eingabe Fluent
Bit unterbrochen und neue Datensätze gehen verloren. Dies kann zu Gegendruck führen und Ihre Anwendung verlangsamen. Die folgende Warnung wird in den Fluent Bit Protokollen angezeigt:
[input] tcp.1 paused (mem buf overlimit)
Die Speicherpufferung eignet sich für einfache Anwendungsfälle mit geringem bis moderatem Protokolldurchsatz. Verwenden Sie für Szenarien mit hohem Durchsatz oder Produktionsszenarien, in denen Datenverlust ein Problem darstellt, stattdessen die Dateisystempufferung.
Weitere Informationen finden Sie unter Buffering and Memory in der Fluent Bit Dokumentation und Memory
Pufferung von Dateisystemen
Für Szenarien mit hohem Durchsatz empfehlen wir die Verwendung der Dateisystempufferung. Weitere Informationen zur Fluent Bit Verwaltung von Pufferung und Speicherung finden Sie in der Dokumentation unter Pufferung und
Die Pufferung von Dateisystemen bietet die folgenden Vorteile:
-
Größere Pufferkapazität — Festplattenspeicher ist in der Regel umfangreicher als Arbeitsspeicher.
-
Persistenz — Gepufferte Daten Fluent Bit überstehen Neustarts.
-
Graduelle Verschlechterung — Bei Ausgabeausfällen sammeln sich Daten auf der Festplatte an, anstatt zu einer Speichererschöpfung zu führen.
Um die Dateisystempufferung zu aktivieren, stellen Sie eine benutzerdefinierte Konfigurationsdatei bereit. Fluent Bit Das folgende Beispiel zeigt die empfohlene Konfiguration:
[SERVICE] # Flush logs every 1 second Flush 1 # Wait 120 seconds during shutdown to flush remaining logs Grace 120 # Directory for filesystem buffering storage.path /var/log/flb-storage/ # Limit chunks stored 'up' in memory (reduce for memory-constrained environments) storage.max_chunks_up 32 # Flush backlog chunks to destinations during shutdown (prevents log loss) storage.backlog.flush_on_shutdown On [INPUT] Name forward unix_path /var/run/fluent.sock # Run input in separate thread to prevent blocking threaded true # Enable filesystem buffering for persistence storage.type filesystem [OUTPUT] Name cloudwatch_logs Match * regionus-west-2log_group_name/aws/ecs/my-applog_stream_name $(ecs_task_id) # Use multiple workers for parallel processing workers 2 # Retry failed flushes up to 15 times retry_limit 15 # Maximum disk space for buffered data for this output storage.total_limit_size 10G
Die wichtigsten Konfigurationsparameter:
storage.path-
Das Verzeichnis, in dem gepufferte Chunks auf der Festplatte Fluent Bit gespeichert werden.
storage.backlog.flush_on_shutdown-
Wenn diese Option aktiviert ist, wird Fluent Bit versucht, beim Herunterfahren alle Backlog-Dateisystem-Chunks an ihre Ziele zu leeren. Dies trägt dazu bei, die Datenzustellung zu gewährleisten, bevor sie Fluent Bit unterbrochen wird, kann jedoch die Zeit für das Herunterfahren verlängern.
storage.max_chunks_up-
Die Anzahl der Chunks, die im Speicher verbleiben. Die Standardeinstellung ist 128 Chunks, was mehr als 500 MB Speicher beanspruchen kann, da jeder Chunk bis zu 4—5 MB belegen kann. In Umgebungen mit eingeschränktem Speicher sollten Sie diesen Wert verringern. Wenn Sie beispielsweise 50 MB für die Pufferung zur Verfügung haben, legen Sie diesen Wert auf 8—10 Blöcke fest.
storage.type filesystem-
Aktiviert den Dateisystemspeicher für das Eingabe-Plugin. Wird trotz des Namens Fluent Bit verwendet,
mmapum Chunks sowohl dem Arbeitsspeicher als auch der Festplatte zuzuordnen, wodurch Persistenz ohne Leistungseinbußen gewährleistet wird. storage.total_limit_size-
Der maximale Festplattenspeicher für gepufferte Daten für ein bestimmtes OUTPUT-Plugin. Wenn dieses Limit erreicht ist, werden die ältesten Datensätze für diese Ausgabe gelöscht. Weitere Informationen zur Größenbestimmung finden Sie unterstorage.total_limit_size verstehen.
threaded true-
Führt die Eingabe in einem eigenen Thread aus, getrennt von Fluent Bit der Hauptereignisschleife. Dadurch wird verhindert, dass langsame Eingaben die gesamte Pipeline blockieren.
Weitere Informationen finden Sie unter Dateisystem-Pufferung
storage.total_limit_size verstehen
Der storage.total_limit_size Parameter jedes OUTPUT-Plug-ins steuert den maximalen Speicherplatz für gepufferte Daten für diese Ausgabe. Wenn dieses Limit erreicht ist, werden die ältesten Datensätze für diese Ausgabe gelöscht, um Platz für neue Daten zu schaffen. Wenn der Festplattenspeicher vollständig erschöpft ist, können Datensätze Fluent Bit nicht in die Warteschlange gestellt werden und sie gehen verloren.
Verwenden Sie die folgende Formel, um den entsprechenden Wert auf der storage.total_limit_size Grundlage Ihrer Protokollrate und des gewünschten Wiederherstellungsfensters zu berechnen:
If log rate is in KB/s, convert to MB/s first: log_rate (MB/s) = log_rate (KB/s) / 1000 storage.total_limit_size (GB) = log_rate (MB/s) × duration (hours) × 3600 (seconds/hour) / 1000 (MB to GB)
Die folgende Tabelle zeigt Beispielberechnungen für gängige Protokollraten und Wiederherstellungsfenster:
| Protokollierungsrate | 1 Stunde | 6 Stunden | 12 Stunden | 24 Stunden |
|---|---|---|---|---|
| 0,25 MB/s | 0,9 GB | 5,4 GB | 10,8 GB | 21,6 GB |
| 0,5 MB/s | 1,8 GB | 10,8 GB | 21,6 GB | 43,2 GB |
| 1 MB/s | 3,6 GB | 21,6 GB | 43,2 GB | 86,4 GB |
| 5 MB/s | 18 GB | 108 GB | 216 GB | 432 GB |
| 10 MB/s | 36 GB | 216 GB | 432 GB | 864 GB |
Um den Spitzendurchsatz zu beobachten und geeignete Puffergrößen auszuwählen, verwenden Sie die Messdurchsatzprobe. FireLens
Verwenden Sie die Formel, die Beispielberechnungen und das Benchmarking, um eine geeignete Lösung auszuwählen, die bei einem storage.total_limit_size Ausfall die Startbahn für eine optimale Wiederherstellung bietet.
Speicheranforderungen für Amazon ECS-Aufgaben
Summieren Sie alle storage.total_limit_size Werte der OUTPUT-Abschnitte und fügen Sie Puffer für Overhead hinzu. Diese Summe bestimmt den Speicherplatz, der in Ihrer Amazon ECS-Aufgabendefinition benötigt wird. Zum Beispiel 3 Ausgänge × jeweils 10 GB = 30 GB + Puffer (5—10 GB) = insgesamt 35—40 GB erforderlich. Wenn die Summe den verfügbaren Speicherplatz übersteigt, Fluent Bit können Datensätze möglicherweise nicht in die Warteschlange gestellt werden und sie gehen verloren.
Die folgenden Speicheroptionen sind verfügbar:
- Bind-Mounts (kurzlebiger Speicher)
-
-
Für AWS Fargate ist die Standardeinstellung 20 GB flüchtiger Speicher (max. 200 GB). Konfigurieren Sie die Verwendung
ephemeralStoragein der Aufgabendefinition. Weitere Informationen finden Sie unter EphemeralStorage im AWS CloudFormation -Benutzerhandbuch. -
Für EC2 ist die Standardeinstellung 30 GB, wenn das Amazon ECS-optimierte AMI verwendet wird (gemeinsam vom Betriebssystem und Docker genutzt). Erhöhen Sie den Wert, indem Sie die Größe des Root-Volumes ändern.
-
- Amazon-EBS-Volumes
-
-
Bietet hochverfügbaren, langlebigen und leistungsstarken Blockspeicher.
-
Erfordert die Volume-Konfiguration und das Verweisen auf
storage.path(Standard:/var/log/flb-storage/)mountPointin der Aufgabendefinition. -
Weitere Informationen finden Sie unter Die Volume-Konfiguration auf die Startzeit in einer Amazon-ECS-Aufgabendefinition verschieben.
-
- Amazon EFS-Volumes
-
-
Bietet einfachen, skalierbaren Dateispeicher.
-
Erfordert die Volume-Konfiguration und das Verweisen auf
storage.path(Standard:/var/log/flb-storage/)mountPointin der Aufgabendefinition. -
Weitere Informationen finden Sie unter Ein Amazon-EFS-Dateisystems in einer Amazon-ECS-Aufgabendefinition angeben.
-
Weitere Hinweise zu Datenvolumen finden Sie unterSpeicheroptionen für Amazon-ECS-Aufgaben.
Optimieren Sie die Ausgabekonfiguration
Netzwerkprobleme, Dienstausfälle und Drosselung von Zielen können die Übermittlung von Protokollen verhindern. Die richtige Ausgangskonfiguration gewährleistet Ausfallsicherheit ohne Datenverlust.
Wenn ein Output-Flush fehlschlägt, Fluent Bit kann der Vorgang erneut versucht werden. Die folgenden Parameter steuern das Verhalten bei Wiederholungsversuchen:
retry_limit-
Die maximale Anzahl von Wiederholungen nach dem ersten Versuch vor dem Löschen von Datensätzen. Der Standardwert ist 1.
retry_limit 3Bedeutet beispielsweise insgesamt 4 Versuche (1 erster Versuch + 3 Wiederholungen). Für Produktionsumgebungen empfehlen wir 15 oder mehr, was einen Ausfall von mehreren Minuten mit exponentiellem Backoff abdeckt.Auf
no_limitsoderFalsefür unendliche Wiederholungsversuche setzen:-
Bei der Speicherpufferung führen unendliche Wiederholungen dazu, dass das Eingabe-Plugin pausiert, wenn die Speichergrenzen erreicht sind.
-
Bei der Dateisystempufferung werden die ältesten Datensätze gelöscht, wenn sie erreicht sind.
storage.total_limit_size
Wichtig
Wenn alle Wiederholungsversuche ausgeschöpft sind (1 anfänglich +
retry_limitWiederholungen), werden die Datensätze gelöscht. AWS Plugins mitauto_retry_requests true(Standard) bieten vor Fluent Bit dem Wiederholungsmechanismus eine zusätzliche Wiederholungsebene. Weitere Informationen finden Sie in der Dokumentation unter Konfigurieren von Wiederholungen. Fluent Bit retry_limit 3Mit den Standardeinstellungen bietet (,scheduler.base 5scheduler.cap 2000,net.connect_timeout 10s) beispielsweise etwa 70 Sekunden Wartezeit im Scheduler (10 s + 20 s + 40 s), 40 Sekunden Timeouts für Netzwerkverbindungen (4 Versuche × 10 s) sowie AWS Plugin-Wiederholungen — insgesamt etwa 2—10 Minuten, abhängig von den Netzwerkbedingungen und den TCP-Timeouts des Betriebssystems. -
scheduler.base-
Die Basissekunden zwischen Wiederholungen (Standard: 5). Wir empfehlen 10 Sekunden.
scheduler.cap-
Die maximale Anzahl von Sekunden zwischen Wiederholungen (Standard: 2000). Wir empfehlen 60 Sekunden.
Bei der Wartezeit zwischen Wiederholungen wird ein exponentieller Backoff mit Jitter verwendet:
wait_time = random(base, min(base × 2^retry_number, cap))
Zum Beispiel mit und: scheduler.base 10 scheduler.cap 60
-
Erster Versuch: zufällige Wartezeit zwischen 10 und 20 Sekunden
-
Zweiter Wiederholungsversuch: zufällige Wartezeit zwischen 10—40 Sekunden
-
Dritter Wiederholungsversuch und später: zufällige Wartezeit zwischen 10—60 Sekunden (begrenzt)
Weitere Informationen finden Sie in der Dokumentation unter Wartezeit für Wiederholungsversuche konfigurieren und Netzwerk
workers-
Die Anzahl der Threads für die parallel Ausgangsverarbeitung. Mehrere Worker ermöglichen gleichzeitige Löschvorgänge, wodurch der Durchsatz bei der Verarbeitung vieler Blöcke verbessert wird.
auto_retry_requests-
Eine AWS Plugin-spezifische Einstellung, die vor dem integrierten Wiederholungsmechanismus eine zusätzliche Wiederholungsebene bietet. Fluent Bit Der Standardwert ist
true. Wenn diese Option aktiviert ist, wiederholt das AWS Ausgabe-Plug-In intern fehlgeschlagene Anfragen erneut, bevor die Anfrage als fehlgeschlagener Flush betrachtet wird und von der Konfiguration abhängt.retry_limit
Der Grace Parameter in [SERVICE] diesem Abschnitt legt fest, wie lange es dauert, bis die gepufferten Fluent Bit Daten geleert werden, wenn das System heruntergefahren wird. Der Grace Zeitraum muss mit dem des Containers abgestimmt werden. stopTimeout Stellen Sie sicher, dass der Grace Zeitraum stopTimeout überschritten wird, Fluent Bit damit der Spülvorgang vor dem Empfang SIGKILL abgeschlossen werden kann. Wenn der Wert beispielsweise 120 Sekunden Grace beträgt, stellen Sie ihn stopTimeout auf 150 Sekunden ein.
Das folgende Beispiel zeigt eine vollständige Fluent Bit Konfiguration mit allen empfohlenen Einstellungen für Szenarien mit hohem Durchsatz:
[SERVICE] # Flush logs every 1 second Flush 1 # Wait 120 seconds during shutdown to flush remaining logs Grace 120 # Directory for filesystem buffering storage.path /var/log/flb-storage/ # Limit chunks stored 'up' in memory (reduce for memory-constrained environments) storage.max_chunks_up 32 # Flush backlog chunks to destinations during shutdown (prevents log loss) storage.backlog.flush_on_shutdown On # Minimum seconds between retries scheduler.base 10 # Maximum seconds between retries (exponential backoff cap) scheduler.cap 60 [INPUT] Name forward unix_path /var/run/fluent.sock # Run input in separate thread to prevent blocking threaded true # Enable filesystem buffering for persistence storage.type filesystem [OUTPUT] Name cloudwatch_logs Match * regionus-west-2log_group_name/aws/ecs/my-applog_stream_name $(ecs_task_id) # Use multiple workers for parallel processing workers 2 # Retry failed flushes up to 15 times retry_limit 15 # Maximum disk space for buffered data for this output storage.total_limit_size 10G
Datenverlustszenarien verstehen
Bei längeren Ausfällen oder Problemen mit Ausgabezielen können Datensätze verloren gehen. Bei den Konfigurationsempfehlungen in diesem Handbuch handelt es sich um Methoden zur Minimierung von Datenverlusten, es kann jedoch nicht garantiert werden, dass bei längeren Ausfällen kein Datenverlust auftritt. Das Verständnis dieser Szenarien hilft Ihnen bei der KonfigurationFluent Bit, um die Ausfallsicherheit zu maximieren.
Datensätze können auf zwei Arten verloren gehen: Die ältesten Datensätze werden gelöscht, wenn der Speicher voll ist, oder die neuesten Datensätze werden zurückgewiesen, wenn das System keine weiteren Daten akzeptieren kann.
Die ältesten Datensätze wurden gelöscht
Die ältesten gepufferten Datensätze werden gelöscht, wenn die Wiederholungsversuche erschöpft sind oder wenn sie storage.total_limit_size voll sind und Platz für neue Daten geschaffen werden muss.
- Das Limit für Wiederholungsversuche wurde überschritten
-
Tritt auf, nachdem AWS das Plugin erneut versucht hat (wenn
auto_retry_requests true) plus einem ersten Fluent Bit Versuch plusretry_limitWiederholungen. Um dies zu vermeiden, legen Sieretry_limit no_limitspro OUTPUT-Plugin eine unendliche Anzahl von Wiederholungsversuchen fest:[OUTPUT] Name cloudwatch_logs Match ApplicationLogs retry_limit no_limits auto_retry_requests trueWichtig
Unendliche Wiederholungsversuche verhindern, dass Datensätze gelöscht werden, weil die Wiederholungsversuche erschöpft sind, können aber dazu führen, dass sie voll werden.
storage.total_limit_size - Speicherlimit erreicht (Dateisystem-Pufferung)
-
Tritt auf, wenn das Ausgabeziel länger nicht verfügbar ist, als Ihr konfigurierter Puffer speichern
storage.total_limit_sizekann. Ein Puffer von 10 GB bei einer MB/s Protokollrate von 1 bietet beispielsweise eine Pufferung von etwa 2,7 Stunden. Um dies zu vermeiden, erhöhen Sie die Anzahlstorage.total_limit_sizepro OUTPUT-Plugin und stellen Sie ausreichend Amazon ECS-Aufgabenspeicher bereit:[OUTPUT] Name cloudwatch_logs Match ApplicationLogs storage.total_limit_size 10G
Die neuesten Datensätze wurden zurückgewiesen
Die neuesten Datensätze werden gelöscht, wenn der Festplattenspeicher erschöpft ist oder wenn die Eingabe aufgrund von unterbrochen wird. Mem_Buf_Limit
- Festplattenspeicher erschöpft (Dateisystem-Pufferung)
-
Tritt auf, wenn der Festplattenspeicher vollständig erschöpft ist. Fluent Bitkann neue Datensätze nicht in die Warteschlange stellen und sie gehen verloren. Um dies zu vermeiden, summieren Sie alle
storage.total_limit_sizeWerte und stellen Sie einen angemessenen Amazon ECS-Aufgabenspeicher bereit. Weitere Informationen finden Sie unter Speicheranforderungen für Amazon ECS-Aufgaben. - Speicherlimit erreicht (Speicherpufferung)
-
Tritt auf, wenn das Ausgabeziel nicht verfügbar ist und der Speicherpuffer voll ist. Pausierte Eingabe-Plugins akzeptieren keine neuen Datensätze mehr. Zur Minderung, zur Erhöhung der Widerstandsfähigkeit oder
storage.type filesystemzur Erhöhung der Widerstandsfähigkeit verwenden.Mem_Buf_Limit
Bewährte Methoden zur Minimierung von Datenverlusten
Beachten Sie die folgenden bewährten Methoden zur Minimierung von Datenverlusten:
-
Dateisystem-Pufferung verwenden — Diese Option sorgt
storage.type filesystemfür eine bessere Ausfallsicherheit bei Ausfällen. -
Speicher angemessen dimensionieren — Die Berechnung
storage.total_limit_sizebasiert auf der Protokollrate und dem gewünschten Wiederherstellungsfenster. -
Stellen Sie eine angemessene Festplatte bereit — Stellen Sie sicher, dass die Amazon ECS-Aufgabe über ausreichend kurzlebigen Speicher, Amazon EBS oder Amazon EFS verfügt.
-
Wiederholungsverhalten konfigurieren — Ausgewogen zwischen
retry_limit(löscht Datensätze nach anstrengenden Wiederholungsversuchen) undno_limits(Wiederholungen auf unbestimmte Zeit, können aber Speicherplatz füllen).
Verwenden Sie aus Gründen der Zuverlässigkeit die Protokollierung für mehrere Ziele
Durch das Senden von Protokollen an mehrere Ziele werden einzelne Fehlerquellen vermieden. Wenn CloudWatch Logs beispielsweise ausfällt, erreichen die Protokolle immer noch Amazon S3.
Die Protokollierung mehrerer Ziele bietet die folgenden Vorteile. Das Amazon S3 S3-Ausgabe-Plugin unterstützt auch Komprimierungsoptionen wie Gzip und Parquet-Format, wodurch die Speicherkosten gesenkt werden können. Weitere Informationen finden Sie in der Fluent Bit Dokumentation unter S3-Komprimierung
Die Protokollierung mehrerer Ziele kann die folgenden Vorteile bieten:
-
Redundanz — Wenn ein Ziel ausfällt, erreichen die Protokolle immer noch das andere.
-
Wiederherstellung — Rekonstruieren Sie Lücken in einem System vom anderen.
-
Haltbarkeit — Archivieren Sie Protokolle zur langfristigen Aufbewahrung in Amazon S3.
-
Kostenoptimierung — Bewahren Sie aktuelle Protokolle in einem schnellen Abfrageservice wie CloudWatch Logs mit kürzerer Aufbewahrung auf und archivieren Sie gleichzeitig alle Protokolle zur langfristigen Aufbewahrung auf kostengünstigerem Amazon S3 S3-Speicher.
Die folgende Fluent Bit Konfiguration sendet CloudWatch Protokolle sowohl an Logs als auch an Amazon S3:
[OUTPUT] Name cloudwatch_logs Match * regionus-west-2log_group_name/aws/ecs/my-applog_stream_name $(ecs_task_id) workers 2 retry_limit 15 [OUTPUT] Name s3 Match * bucketmy-logs-bucketregionus-west-2total_file_size 100M s3_key_format /fluent-bit-logs/$(ecs_task_id)/%Y%m%d/%H/%M/$UUID upload_timeout 10m # Maximum disk space for buffered data for this output storage.total_limit_size 5G
Beide Ausgaben verwenden dasselbe Match * Muster, sodass alle Datensätze unabhängig voneinander an beide Ziele gesendet werden. Während eines Ausfalls eines Ziels fließen die Protokolle weiter zum anderen, während sich fehlgeschlagene Leerungen im Dateisystempuffer ansammeln, sodass sie es später erneut versuchen können.
Verwenden Sie die dateibasierte Protokollierung mit dem Tail-Input-Plugin
Für Szenarien mit hohem Durchsatz, in denen der Verlust von Protokollen ein kritisches Problem darstellt, können Sie einen alternativen Ansatz verwenden: Lassen Sie Ihre Anwendung Protokolle in Dateien auf der Festplatte schreiben und konfigurieren Sie sie so, dass sie mithilfe des Fluent Bit tail Eingabe-Plug-ins gelesen werden. Bei diesem Ansatz wird die Treiberschicht für die Docker-Protokollierung vollständig umgangen.
Die dateibasierte Protokollierung mit dem Tail-Plugin bietet die folgenden Vorteile:
-
Offset-Tracking — Das Tail-Plugin kann Datei-Offsets in einer Datenbankdatei speichern (mit der
DBOption) und sorgt so für Stabilität bei Neustarts. Fluent Bit Dies trägt dazu bei, den Verlust von Protokollen bei Container-Neustarts zu verhindern. -
Pufferung auf Eingabeebene — Sie können die Speicherpuffergrenzen direkt im Eingabe-Plugin konfigurieren
Mem_Buf_Limit, sodass Sie die Speichernutzung genauer steuern können. -
Vermeidet Docker-Overhead — Protokolle werden direkt von Datei zu Datei übertragen, Fluent Bit ohne die Protokollpuffer von Docker zu durchlaufen.
Um diesen Ansatz zu verwenden, muss Ihre Anwendung Protokolle statt in Dateien schreiben. stdout Sowohl der Anwendungscontainer als auch der Fluent
Bit Container mounten ein gemeinsam genutztes Volume, auf dem die Protokolldateien gespeichert werden.
Das folgende Beispiel zeigt eine Konfiguration mit Tail-Eingaben mit bewährten Methoden:
[INPUT] Name tail # File path or glob pattern to tail Path/var/log/app.log# Database file for storing file offsets (enables resuming after restart) DB /var/log/flb_tail.db # when true, controls that only fluent-bit will access the database (improves performance) DB.locking true # Skip long lines instead of skipping the entire file Skip_Long_Lines On # How often (in seconds) to check for new files matching the glob pattern Refresh_Interval 10 # Extra seconds to monitor a file after rotation to account for pending flush Rotate_Wait 30 # Maximum size of the buffer for a single line Buffer_Max_Size 10MB # Initial allocation size for reading file data Buffer_Chunk_Size 1MB # Maximum memory buffer size (tail pauses when full) Mem_Buf_Limit 75MB
Beachten Sie bei der Verwendung des Tail-Input-Plug-ins Folgendes:
-
Implementieren Sie die Protokollrotation für Ihre Anwendungsprotokolle, um eine Überlastung der Festplatte zu verhindern. Überwachen Sie die zugrunde liegenden Volumenmetriken, um die Leistung zu messen.
-
Erwägen Sie Einstellungen wie
Ignore_OlderRead_from_Head, und mehrzeilige Parser, die auf Ihrem Protokollformat basieren.
Weitere Informationen finden Sie in der Dokumentation unter Tail
Loggen Sie sich direkt ein bei FireLens
Wenn der awsfirelens-Protokolltreiber in einer Aufgabendefinition angegeben wird, injiziert der Amazon ECS Container-Agent die folgenden Umgebungsvariablen in den Container:
FLUENT_HOST-
Die IP-Adresse, die dem FireLens Container zugewiesen ist.
Anmerkung
Wenn Sie EC2 im
bridgeNetzwerkmodus verwenden, kann dieFLUENT_HOSTUmgebungsvariable in Ihrem Anwendungscontainer nach einem Neustart des FireLens Log-Router-Containers (des Containers mit demfirelensConfigurationObjekt in seiner Containerdefinition) ungenau werden. Das liegt daran, dassFLUENT_HOSTeine dynamische IP-Adresse ist, die sich nach einem Neustart ändern kann. Die direkte Protokollierung vom Anwendungs-Container zurFLUENT_HOSTIP-Adresse kann nach einer Adressänderung fehlschlagen. Weitere Informationen zum Neustart einzelner Container finden Sie unter Einzelne Container in Amazon-ECS-Aufgaben mit Richtlinien für den Container-Neustart neu starten. FLUENT_PORT-
Der Port, über den das Fluent Forward-Protokoll kommuniziert.
Sie können diese Umgebungsvariablen verwenden, um sich direkt von Ihrem Anwendungscode aus mit dem Fluent Forward-Protokoll Fluent
Bit beim Log Router anzumelden, anstatt in diesen zu schreiben. stdout Bei diesem Ansatz wird die Treiberschicht für die Docker-Protokollierung umgangen, was die folgenden Vorteile bietet:
-
Geringere Latenz — Protokolle werden direkt an die Protokollierungsinfrastruktur von Docker weitergeleitet, Fluent Bit ohne sie zu passieren.
-
Strukturierte Protokollierung — Senden Sie strukturierte Protokolldaten nativ ohne zusätzlichen Aufwand für die JSON-Codierung.
-
Bessere Kontrolle — Ihre Anwendung kann ihre eigene Pufferungs- und Fehlerbehandlungslogik implementieren.
Die folgenden Fluent-Logger-Bibliotheken unterstützen das Fluent Forward-Protokoll und können verwendet werden, um Protokolle direkt an zu senden: Fluent Bit
-
Go – fluent-logger-golang
-
Python – fluent-logger-python
-
Java – fluent-logger-java
-
Node.js – fluent-logger-node
-
Ruby – fluent-logger-ruby
Konfigurieren Sie das Docker-Pufferlimit
Wenn Sie eine Aufgabendefinition erstellen, können Sie die Anzahl der Protokollzeilen angeben, die im Speicher gepuffert werden, indem Sie den Wert in angeben. log-driver-buffer-limit Dies steuert den Puffer zwischen Docker und. Fluent Bit Weitere Informationen finden Sie unter Fluentd-Protokollierungstreiber
Verwenden Sie diese Option bei hohem Durchsatz, da Docker möglicherweise der Pufferspeicher ausgeht und Puffermeldungen verworfen werden, damit neue Nachrichten hinzugefügt werden können.
Beachten Sie bei der Verwendung dieser Option Folgendes:
-
Diese Option wird in EC2 und Fargate mit Plattformversion
1.4.0oder höher unterstützt. -
Die Option ist nur gültig, wenn
logDriveraufawsfirelensgesetzt ist. -
Das Standard-Pufferlimit ist
1048576Protokollzeilen. -
Das Pufferlimit muss größer oder gleich
0und kleiner als536870912-Protokollzeilen sein. -
Die maximale Menge an Arbeitsspeicher, die für diesen Puffer verwendet wird, ist die Summe der Größe jeder Protokollzeile und der Größe des Puffers. Wenn die Protokollzeilen der Anwendung beispielsweise im Durchschnitt
2KiB betragen, würde ein Pufferlimit von 4096 höchstens8MiB verbrauchen. Die Gesamtmenge des auf Aufgabenebene zugewiesenen Arbeitsspeichers muss zusätzlich zum Arbeitsspeicher-Puffer des Protokolltreibers größer sein als die für alle Container zugewiesene Menge an Arbeitsspeicher.
Die folgende Aufgabendefinition zeigt, wie die Konfiguration erfolgt: log-driver-buffer-limit
{ "containerDefinitions": [ { "name": "my_service_log_router", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:3", "cpu": 0, "memoryReservation": 51, "essential": true, "firelensConfiguration": { "type": "fluentbit" } }, { "essential": true, "image": "public.ecr.aws/docker/library/httpd:latest", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream", "log-driver-buffer-limit": "52428800" } }, "dependsOn": [ { "containerName": "my_service_log_router", "condition": "START" } ], "memoryReservation": 100 } ] }