Wie behebe ich Amazon-Kinesis-Agent-Probleme auf einem Linux-Computer?

Letzte Aktualisierung: 05.05.2022

Ich versuche Amazon Kinesis Agent auf einem Linux-Computer zu verwenden. Ich stoße jedoch auf ein Problem. Wie kann ich dies beheben?

Kurzbeschreibung

Dieser Artikel behandelt die folgenden Themen:

  • Kinesis Agent sendet doppelte Ereignisse.
  • Kinesis Agent verursacht Schreibdrosseln und fehlgeschlagene Datensätze in meinem Amazon-Kinesis-Stream.
  • Kinesis Agent kann keine Protokolldateien lesen oder streamen.
  • Mein Amazon-Elastic-Computing-Server (Amazon EC2) fällt aufgrund unzureichender Java-Heap-Größe immer wieder aus.
  • Meine Amazon-EC2-CPU-Auslastung ist sehr hoch.

Auflösung

Kinesis Agent sendet doppelte Ereignisse

Wenn du Mal, wenn du Protokolle von Kinesis Agent sendest, Duplikate erhältst, liegt wahrscheinlich eine Dateirotation vor, bei der das Abgleichmuster nicht korrekt qualifiziert ist. Immer wenn du ein Protokoll sendest, überprüft Kinesis Agent den latestUpdateTimestamp jeder Datei, die mit dem Dateimuster übereinstimmt. Standardmäßig wählt Kinesis Agent die zuletzt aktualisierte Datei aus und identifiziert eine aktive Datei, die dem Drehmuster entspricht. Wenn mehrere Dateien gleichzeitig aktualisiert werden, kann Kinesis Agent die aktive Datei nicht ermitteln, die verfolgt werden soll. Daher beginnt Kinesis Agent von Anfang an, die aktualisierten Dateien zu verfolgen, was zu mehreren Duplikaten führt.

Um dieses Problem zu vermeiden, erstelle für jede einzelne Datei unterschiedliche Dateiabläufe und achte darauf, dass dein Dateimuster stattdessen die Rotationen verfolgt.

Hinweis: Wenn du eine Rotation verfolgst, empfiehlt es sich, die Einstellungen zum Erstellen oder Umbenennen von Log-Rotationen zu verwenden, anstatt Copytruncate.

Du kannst beispielsweise einen Dateiablauf verwenden, der diesem ähnlich ist:

"flows": [
        {
            "filePattern": "/tmp/app1.log*",
            "kinesisStream": "yourkinesisstream1"
        },
        {
            "filePattern": "/tmp/app2.log*",
            "kinesisStream": "yourkinesisstream2"
        }
    ]

Kinesis Agent versucht auch erneut alle Datensätze, die bei zeitweiligen Netzwerkproblemen nicht zurückgesendet werden können. Wenn der Kinesis Agent keine serverseitige Bestätigung erhält, versucht er es erneut und erstellt Duplikate. In diesem Beispiel muss die Downstream-Anwendung dedupliziert werden.

Duplikate können auch auftreten, wenn die Checkpoint-Datei getempert oder entfernt wird. Wenn eine Checkpoint-Datei in /var/run/aws-kinesis-agent gespeichert ist, wird die Datei möglicherweise während einer Neuinstallation oder eines Neustarts der Instance bereinigt. Wenn du Kinesis Agent erneut ausführst, schlägt die Anwendung fehl, sobald die Datei gelesen wurde, was zu Duplikaten führt. Behalte daher den Checkpoint im Haupt-Agent-Verzeichnis bei und aktualisiere die Kinesis-Agent-Konfiguration mit einem neuen Speicherort.

Beispiel:

"checkpointFile": "/aws-kinesis-agent-checkpoints/checkpoints"

Kinesis Agent verursacht Schreibdrosseln und fehlgeschlagene Datensätze in meinem Amazon Kinesis-Datenstrom

Standardmäßig versucht Kinesis Agent, die Protokolldateien so schnell wie möglich zu senden, wodurch die Durchsatzschwellen von Kinesis überschritten werden. Fehlgeschlagene Datensätze werden jedoch erneut in die Warteschlange gestellt und ständig wiederholt, um Datenverlust zu verhindern. Wenn die Warteschlange voll ist, beendet Kinesis Agent die Bearbeitung der Datei, was zu Verzögerungen bei der Anwendung führen kann.

Wenn die Warteschlange beispielsweise voll ist, sieht dein Protokoll ungefähr so aus:

com.amazon.kinesis.streaming.agent.Agent [WARN] Agent: Tailing is 745.005859 MB (781195567 bytes) behind.

Hinweis: Die Warteschlangengröße wird durch den Parameter publishQueueCapacity bestimmt (wobei der Standardwert auf „100" festgelegt ist).

Gehe wie folgt vor, um alle fehlgeschlagenen Aufzeichnungen oder Leistungsprobleme in Ihrem Kinesis-Datenstrom zu untersuchen:

  • Überwache die RecordSenderErrors-Metrik in Amazon CloudWatch.
  • Überprüfe deine Kinesis Agent-Protokolle, um zu überprüfen, ob Verzögerungen aufgetreten sind. Der Eintrag provisionedThroughputExceedException ist nur auf der DEBUG-Protokollebene sichtbar. Während dieser Zeit kann die Geschwindigkeit des Sendens von Aufzeichnungen des Kinesis Agents langsamer sein, wenn der größte Teil der CPU zum Analysieren und Transformieren von Daten verwendet wird.
  • Wenn du feststellst, dass Kinesis Agent ins Hintertreffen gerät, solltest du erwägen, deinen Amazon-Kinesis-Lieferstream zu vergrößern.

Kinesis Agent kann keine Protokolldateien lesen oder streamen

Stelle sicher, dass die Amazon-EC2-Instance, auf der dein Kinesis Agent ausgeführt wird, über die erforderlichen Berechtigungen für den Zugriff auf deinen Kinesis-Ziel-Lieferstream verfügt. Wenn Kinesis Agent die Protokolldatei nicht lesen kann, überprüfe, ob der Kinesis Agent über Leserechte für diese Datei verfügt. Für alle Dateien, die diesem Muster entsprechen, muss aws-kinesis-agent-user Leseberechtigung erteilt werden. Für das Verzeichnis, das die Dateien enthält, müssen auch aws-kinesis-agent-user Lese- und Ausführungsberechtigungen erteilt werden. Andernfalls erhältst du einen Zugriff-Verweigert-Fehler oder eine Java-Runtime-Ausnahme.

Mein Amazon EC2-Server fällt aufgrund unzureichender Java-Heap-Größe immer wieder aus

Wenn dein Amazon-EC2-Server aufgrund einer unzureichenden Java-Heap-Größe immer wieder ausfällt, erhöhe die dem Amazon Kinesis Agent zugewiesene Heap-Größe. Um den für den Kinesis Agent verfügbaren Speicher zu konfigurieren, aktualisiere die Datei „start-aws-kinesis-agent“. Erhöhe die Sollwerte für die folgenden Parameter:

  • START_HEAP
  • JAVA_MAX_HEAP

Hinweis: Unter Linux ist der Dateipfad für „start-aws-kinesis-agent“ „/usr/bin/start-aws-kinesis-agent“.

Meine Amazon-EC2-CPU-Auslastung ist sehr hoch

Die CPU-Auslastung kann zu einem Anstieg führen, wenn Kinesis Agent einen suboptimierten Regex-Mustervergleich und eine Protokolltransformation durchführt Wenn du Kinesis Agent bereits konfiguriert hast, versuche, alle Musterübereinstimmungen und Transformationen für reguläre Ausdrücke (Regex) zu entfernen. Prüfe dann, ob du immer noch CPU-Probleme hast.

Wenn du immer noch Probleme mit der CPU hast, solltest du erwägen, die im Speicher gepufferten Threads und Datensätze zu optimieren. Oder aktualisiere einige der Standardparameter in der /etc/aws-kinesis/agent.json Konfigurationseinstellungsdatei. Du kannst auch mehrere Parameter in der Kinesis-Agent-Konfigurationsdatei herabsetzen.

Hier sind die allgemeinen Konfigurationsparameter, die du herabsetzen kannst:

  • sendingThreadsMaxQueueSize: Die WorkQueue-Größe des ThreadPools zum Senden von Daten an das Ziel. Der Standardwert ist 100.
  • maxSendingThreads: Die Anzahl der Threads zum Senden von Daten an das Ziel. Der Mindestwert ist 2. Der Standardwert ist das 12-fache der Anzahl der Kerne für Ihre Maschine.
  • maxSendingThreadsPerCore: Die Anzahl der Threads pro Kern zum Senden von Daten an das Ziel. Der Standardwert ist 12.
Hier sind die Flow-Konfigurationsparameter, die du zu senken versuchen kannst:
  • publishQueueCapacity: Die maximale Anzahl von Puffern von Datensätzen, die in die Warteschlange gestellt werden können, bevor sie an das Ziel gesendet werden. Der Standardwert ist 100.
  • minTimeBetweenFilePollsMillis: Das Zeitintervall, in dem die verfolgte Datei abgefragt wird und die neuen Daten zu analysieren beginnen. Der Standardwert ist 100.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?