追記|Kafka|kafka-dump-logs.sh: Kafka-logsのログ解析方法

このツールは、ログ ファイルを解析し、その内容をコンソールにダンプするのに役立ちます。これは、一見破損したログ セグメントをデバッグするのに役立ちます。

Kafka のさまざまなログ ファイル ( 、など) は、kafka-dump-logs.shスクリプトを使用して解析できます。.timeindex.index.log

公式の Kafka ドキュメントでは、次のようにkafka-dump-log説明います。

ダンプ ログ ツール

このkafka-dump-logツールを使用して、クラスター メタデータ ディレクトリのログ セグメントとスナップショットをデバッグできます。ツールは提供されたファイルをスキャンし、メタデータ レコードをデコードします。たとえば、次のコマンドは、最初のログ セグメントのレコードをデコードして出力します。

  > bin/kafka-dump-log.sh --cluster-metadata-decoder --files metadata_log_dir/__cluster_metadata-0/00000000000000000000.log

このコマンドは、クラスター メタデータ スナップショットの recrod をデコードして出力します。

  > bin/kafka-dump-log.sh --cluster-metadata-decoder --files metadata_log_dir/__cluster_metadata-0/00000000000000000100-0000000001.checkpoint

kafka-dump-logs.shパラメータは次のとおりです。

オプション 説明
--deep-iteration 設定されている場合、浅い反復ではなく深い反復を使用します。print-data-log が有効な場合、自動的に設定されます。
--files <String: file1, file2, ...> 必須: ダンプするデータとインデックス ログ ファイルのコンマ区切りリスト。
--help 使用情報を印刷します。
--index-sanity-check 設定されている場合、コンテンツを出力せずにインデックスの健全性をチェックするだけです。これは、インデックスの再構築が必要かどうかを判断するためにブローカの起動時に実行されるチェックと同じです。
--key-decoder-class [String] 設定されている場合、キーを逆シリアル化するために使用されます。このクラスは、kafka.serializer を実装する必要があります。デコーダーの特性。カスタム jar は kafka/libs ディレクトリで利用できるはずです。(デフォルト: kafka.serializer.StringDecoder)
--max-message-size <Integer: size> 最大メッセージのサイズ。(デフォルト: 5242880)
--offsets-decoder 設定されている場合、ログ データは __consumer_offsets トピックからのオフセット データとして解析されます。
--print-data-log 設定されている場合、データ ログのダンプ時にメッセージの内容を出力します。デコーダ オプションが指定されている場合は、自動的に設定されます。
--transaction-log-decoder 設定されている場合、ログ データは __transaction_state トピックからのトランザクション メタデータとして解析されます。
--value-decoder-class [String] 設定されている場合、メッセージの逆シリアル化に使用されます。このクラスは、kafka シリアライザーを実装する必要があります。デコーダーの特性。カスタム jar は kafka/libs ディレクトリで利用できるはずです。(デフォルト: kafka.serializer.StringDecoder)
--verify-index-only 設定されている場合、その内容を印刷せずにインデックス ログを確認するだけです。
--version Kafka のバージョンを表示します。

Kafka ログをバッチでダンプするシェル スクリプト (/home/myself/src-logsはログ ディレクトリ、/home/myself/dump-logsは結果ディレクトリ):

#!/bin/bash

# 指定遍历的目录
dir="/home/myself/src-logs"

# 如果目录不存在或不是目录,则输出错误信息并退出
if [ ! -d "$dir" ]; then
  echo "Error: $dir is not a directory"
  exit 1
fi

# 遍历目录找到所有后缀为 .log 的文件,并执行给定的命令
for file in "$dir"/*.log; do
  if [ -f "$file" ]; then
    sh /opt/kafka/bin/kafka-dump-log.sh --files "$file" --print-data-log > "/home/myself/dump-logs/${file##*/}"
  fi
done

おすすめ

転載: blog.csdn.net/Changxing_J/article/details/130330236