Google Cloud SQL スローログを ELK スタックにエクスポートする

Google Cloud SQL スローログを ELK スタックにエクスポートする

私はある問題に遭遇し、アドバイスを求めることにし、最終的に同じビジネスニーズ (および問題) を抱えている人を見つけました。

概要 - 最近、クライアントの 1 社の SQL サービスをセルフホスト型 MySQL から Google CloudSQL MySQL 5.7 サービスに移行し、クライアントがセルフホスト型 ELK スタック内の MySQL スロー ログにアクセスして表示および分析できるようにする方法を探しています。

以前は、SQL サービスのスロー ログ ファイルにアクセスでき、Elasticsearch でそれらのログを「追跡」、エクスポート、およびインデックス付けできたため、これは問題ではありませんでした。特定の Elasticsearch MySQL スロー ログの単一ドキュメントが以前はどのようになっていたかを示す簡単な例を以下に示します。 https://prnt.sc/sjitys

各文書には以下の内容が含まれていることに注意してください。

Time
User@Host
Query_time
timestamp

クエリの選択/挿入/更新/削除、および lock_time、rows_queried、rows_affected、rows_returned などに基づいてデータを分析する機能。

以下は、クライアントがアクセスできない GCP ログ ビューアで MySQL スロー ログがどのように表示されるかを示した例です。 https://user-images.githubusercontent.com/9348708/80950753-2418bf80-8dff-11ea-9a00-3f5131b5e0f3.png

したがって、私たちの目標は、以前使用したものと同様の方法で、MySQL スロー ログを ELK スタックにストリーミングすることです。

目標を達成するために、Pub/Subエクスポーターを介してGCP MySQLスローログを取得しようとしました(https://cloud.google.com/logging/docs/エクスポート)を作成し、ELK スタックにログをストリーミングします。そのために、次のことを行いました。1. 以下のフィルタを使用してログ シンク(ログ ルーター)を作成しました:resource.type="cloudsql_database" logName="projects/XXX/logs/cloudsql.googleapis.com%2Fmysql-slow.log" そして、Google の Pub/Sub シンク サービスにエクスポートしました。2. Google Computer Engine VM で、pubsubbeat というファイル エクスポート サービス(filebeat の pubsub 入力メソッドに似たサービス)をインストールして構成し、SQL スロー ログを GCP から問題の VM 上のファイルにストリーミングしました。3. VM で GCP によってエクスポートされたログを追跡し、を使用してinclude_lines: [‘textPayload’]GCP によってプルされた各 JSON オブジェクト内の重要な情報のみを含めるように filebeat サービスを構成しました。

注意: GCP MySQL スロー ログは、google-fluentd エージェント経由でアクセスされ、単一のデータ型 LogEntry を使用して表されます。このデータ型は、すべてのログ エントリの特定の共通データを定義し、個々のペイロードを運びます。形式は JSON で、各ログ行は個別の JSON オブジェクトにカプセル化されます。例:https://prnt.sc/sep2zk

差し迫った問題 - Pub/Sub は高可用性と高スループットを実現するためにいくつかのトレードオフを行っており、残念ながらメッセージの順序が乱れることもその 1 つです。つまり、MySQL スロー ログの順序が混在しており、各スロー ログ オブジェクトを「^# Time」文字列で始まるように定義して適切にカプセル化することはできません。代わりに、次の形式になります。https://prnt.sc/seoztj

したがって、GCP から外部のログ分析システム (ELK スタックなど) に複数行のログ ファイル (または MySQL スロー ログを直接) をエクスポートする方法を誰かが共有していただければ、この状況で最適なアプローチをよりよく理解できるため、非常に役立ちます。

答え1

これは正しいです。Pub/Subは配信順序を保証しない. できることは、公開時間。 幾つかあるサンプルPub/Sub ドキュメント内。

あるいは、方程式にデータフロー パイプラインを追加して、データの順序付けを行うこともできます。その後、クライアントのビジネス ニーズに応じてバッチ ジョブを実行できます。この方法では、構成に多くの作業が必要になり、コストも大幅に高くなります。

上記のサンプルをいくつか見て、自分のニーズに合っているかどうかを確認することを強くお勧めします。

関連情報