Serverless App Engine (SAE) では、アプリケーションインスタンスの標準出力 (stdout) と、指定されたディレクトリからのログを ApsaraMQ for Kafka に収集できます。ApsaraMQ for Kafka からのデータは、Elasticsearch データベースなどの他のデータベースに移行できます。このトピックでは、SAE コンソールで ApsaraMQ for Kafka にログを収集するためのシナリオ、手順、および形式について説明します。
始める前に
SAE について
各アプリケーションインスタンスに、少なくとも 0.25 コア CPU と 250 MB の利用可能なリソースが予約されていることを確認してください。
Kafka について
ApsaraMQ for Kafka がアクティブ化され、Topic が作成されていること。SAE は、ApsaraMQ for Kafka 2.X 以降のインスタンスをサポートしています。
ApsaraMQ for Kafka インスタンスが Virtual Private Cloud (VPC) 内に作成され、インターネットにアクセスできない場合は、SAE インスタンスと同じ VPC 内に存在する必要があります。
ApsaraMQ for Kafka インスタンスの IP アドレスホワイトリストが設定されていること:
ApsaraMQ for Kafka インスタンスと SAE インスタンスが同じ VPC 内に存在するが、異なる vSwitch に関連付けられている場合は、SAE インスタンスの vSwitch CIDR ブロックを ApsaraMQ for Kafka インスタンスの IP アドレスホワイトリストに追加します。
Kafka インスタンスと同じ VPC 内のすべてのアクセスを有効にするには、ホワイトリストに 0.0.0.0/0 を追加します。
背景
ファイルログ収集の設定
アプリケーションの作成時にログ収集を設定する
SAE コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。表示されるページで、上部のナビゲーションバーでリージョンを選択し、[名前空間] ドロップダウンリストから名前空間を選択し、[アプリケーションの作成] をクリックします。
[基本情報] セクションで、アプリケーション情報の設定を行い、[次へ: 詳細設定] をクリックします。
[ログ設定] セクションを展開し、[Kafka をアクティブ化] をオンにして、設定については次の表を参照してください。
パラメータ
説明
[Kafka インスタンス]
宛先インスタンスを選択します。
[収集ログタイプ]
ログタイプを選択します。有効な値:
[ファイルログ (コンテナ内のログパス)]: 複数の収集ルールを設定できます。
[コンテナ標準出力ログ]: 設定できる収集ルールは 1 つだけです。このオプションは、vSwitch が推奨ゾーンのいずれかに存在する場合にのみ、[ログタイプ] ドロップダウンリストで使用できます。詳細については、アプリケーションのセキュリティグループと vSwitch を変更する を参照してください。
[ログソース]
ファイルログのみに適用されます。ログファイルが格納されているディレクトリを入力します。ディレクトリには、ログファイルの名前が含まれている必要があります。例: /tmp0/cjsc.log。正規表現がサポートされています。ディレクトリに同じ形式のログファイルが多数含まれている場合は、/xxx/xxx/xxx/*.log の形式でログソースを指定できます。
重要[ログソース] ディレクトリに他の重要なファイルを保存しないでください。ディレクトリ内のファイルが上書きされる可能性があります。
[Kafka Topic 名]
既存の ApsaraMQ for Kafka Topic を選択します。
[アプリケーションの作成] をクリックします。
確認。
アプリケーションをデプロイした後、SAE は、設定されたログ収集ルールに基づいて、指定されたディレクトリにログを収集して配信します。
アプリケーション詳細ページの左側のナビゲーションウィンドウで、 を選択します。[永続ログ] ページで、[Kafka へのログ収集] タブをクリックして、収集されたログを表示します。ログが存在する場合、ログ収集ルールは有効になります。
アプリケーションのデプロイ時にログ収集を設定する
アプリケーションを再デプロイすると、アプリケーションが再起動されます。ビジネスの中断などの予期しないエラーを防ぐために、オフピーク時にアプリケーションをデプロイすることをお勧めします。
アプリケーションを更新するために実行できる手順は、アプリケーション内のインスタンスの数によって異なります。このセクションでは、インスタンス数が 1 以上であるアプリケーションに必要な機能を設定する方法の例を示します。インスタンス数が 0 であるアプリケーションを更新する方法については、アプリケーションの更新 を参照してください。
SAE コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。表示されるページで、上部のナビゲーションバーでリージョンを選択し、[名前空間] ドロップダウンリストから名前空間を選択し、目的のアプリケーション名をクリックします。
アプリケーションの [基本情報] ページで、[アプリケーションのデプロイ] をクリックします。
[ログ設定] セクションを見つけて展開し、[Kafka をアクティブ化] をオンにします。
パラメータ
説明
[Kafka インスタンス]
宛先インスタンスを選択します。
[収集ログタイプ]
ログタイプを選択します。有効な値:
[ファイルログ (コンテナ内のログパス)]: 複数の収集ルールを設定できます。
[コンテナ標準出力ログ]: 設定できる収集ルールは 1 つだけです。このオプションは、vSwitch が推奨ゾーンのいずれかに存在する場合にのみ、[ログタイプ] ドロップダウンリストで使用できます。詳細については、アプリケーションのセキュリティグループと vSwitch を変更する を参照してください。
[ログソース]
ファイルログのみに適用されます。ログファイルが格納されているディレクトリを入力します。ディレクトリには、ログファイルの名前が含まれている必要があります。例: /tmp0/cjsc.log。正規表現がサポートされています。ディレクトリに同じ形式のログファイルが多数含まれている場合は、/xxx/xxx/xxx/*.log の形式でログソースを指定できます。
重要[ログソース] ディレクトリに他の重要なファイルを保存しないでください。ディレクトリ内のファイルが上書きされる可能性があります。
[Kafka Topic 名]
既存の ApsaraMQ for Kafka Topic を選択します。
設定が完了したら、[OK] をクリックします。
重要ログファイルを異なる ApsaraMQ for Kafka トピックに同時に収集することはできません。アプリケーションを段階的リリースモードまたはカナリアリリースモードでデプロイし、設定済みのログソースを保持したままログ収集のトピックを変更した場合、アプリケーションのすべての設定がデプロイされるまで、ログは元のトピックに収集されます。
確認。
アプリケーションをデプロイした後、SAE は、設定されたログ収集ルールに基づいて、指定されたディレクトリにログを収集して配信します。
アプリケーション詳細ページの左側のナビゲーションウィンドウで、 を選択します。[永続ログ] ページで、[Kafka へのログ収集] タブをクリックして、収集されたログを表示します。ログが存在する場合、ログ収集ルールは有効になります。
形式
[Kafka をアクティブ化] を有効にすると、収集されたログは次の形式になります。
{
"file":"/home/admin/apache-tomcat-8.5.42/logs/localhost.2022-03-01.log",
"host":"test-kafka-9527eec8-b2c1-4f03-9178-5dac0fe16d07-*****",
"message":"01-Mar-2022 15:09:36.016 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath",
"topic":"test2"
}パラメータリファレンス:
fileは、収集されたログファイルのパスを示します。hostは、ログを収集するインスタンスの名前を示します。messageは、収集されたログの内容を示します。topicは、収集されたログが配信される ApsaraMQ for Kafka Topic を示します。
複数行ログの収集
Java アプリケーションでは、ログが自動的に 1 行にマージされるとエラーが報告されます。次の例は、Java の例外ログを示しています。
java.lang.RuntimeException: testLog at cn.niutong.controller.TestController.heathc(TestController.java:141) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at ...改行
\nが検出されると、ログデータは新しい行に書き直されます。プログラムでログを JSON 文字列にパッケージ化し、文字列を 1 行としてエクスポートすることをお勧めします。
複数行のログのマージなど、追加の要件がある場合は、技術サポートを受けるために DingTalk グループ 32874633 に参加してください。
よくある質問
Kafka へのログ収集ではワイルドカード文字はサポートされていますか?
はい、アスタリスク (*) をワイルドカード文字として使用して、特定のフォルダ内のすべてのファイルを照合できます。例:
/tmp/logs/*.log。ログが収集されないのはなぜですか?
ネットワークの例外により、ログが収集されない場合があります。問題のトラブルシューティングを行うには、次の手順を実行します。
SAE Webshell にログインします。telnet コマンドを実行して、ネットワーク接続チェックとして ApsaraMQ for Kafka インスタンスのアドレスをクエリします。Webshell の詳細については、Webshell 機能を使用してアプリケーションのヘルスステータスを確認する を参照してください。
ネットワークの状態を確認します。
SAE アプリケーションと ApsaraMQ for Kafka インスタンスが同じ VPC 内に存在するかどうか、および IP アドレスホワイトリストが設定されているかどうかを確認します。
ネットワークが正常に機能している場合は、技術サポートを受けるために DingTalk グループ 32874633 に参加してください。