Azure Blob Storage アプリケーションのログの収集
要件
- 汎用 v2 (GPv2) および Blob ストレージ アカウントのみがサポートされています。この統合では、汎用 v1 (GPv1) アカウントはサポートされません。
- Azure サービスと同じ場所でストレージ アカウントを設定します。
- このソリューションでは、ファイル拡張子が .csv、.json、.blob、.log の Blob ストレージからのログ ファイルのみがサポートされています。
機能の概要
- その目的で作成されたストレージ アカウント内のコンテナにログをエクスポートするように Azure サービスを設定します。
- ARM テンプレートは、ストレージ コンテナをパブリッシャとして、イベント ハブ (Sumo 提供の ARM で作成) をサブスクライバとして Event Grid サブスクリプションを作成します。Event Grid は、ブロック Blob 作成イベントをイベント ハブにルーティングします。
- Event Hub は、イベントを TaskProducer Azure 関数にストリーミングし、この関数がタスク (開始および終了バイト、コンテナ名、Blob パスを指定する JSON オブジェクト) を作成して、これらのタスクをサービス バス タスク キューに転送します。
- TaskConsumer Azure 関数はサービス バスが新しいタスクを受信したときにトリガされ、開始バイトから停止バイトまでブロック Blob を読み取り、そのデータを Sumo に送信します。
- セットアップには、エラー処理メカニズムも含まれています。ソリューション ストラテジの詳細については、「Azure Blob Storage」を参照してください。
ステップ 1.Azure ストレージ アカウントを設定する
このステップでは、Azure サービスのモニタリング データをエクスポートするストレージ アカウントを設定します。
この目的で使用するコンテナを含むストレージ アカウントがある場合は、そのリソース グループ、ストレージ アカウント名、およびコンテナ名を書き留めてステップ 2 に進みます。
Azure ストレージ アカウントを設定するには、次の手順を実行します。
- 新しいストレージ アカウントとして汎用 v2 (GPv2) ストレージ アカウントを作成します。手順については、Azure ヘルプの「Create a storage account (ストレージ アカウントを作成する)」を参照してください。
- Azure ポータルで、(前のステップで) 作成したストレージ アカウントに移動します。
- [Blob Service (Blob サービス)] で [Blobs (Blob)] を選択します。
この手順の後半で入力する必要があるため、コンテナ名を書き留めます。- [+ Container (+ コンテナ)] を選択します。
- 名前を入力します。
- [Public Access Level (パブリック アクセス レベル)] に [Private (プライベート)] を選択します。
- [OK] をクリックします。
ステップ 2.HTTP Source を設定する
このステップでは、Azure 関数からログを受信するための HTTP Source を設定します。
- HTTP Source を設定する Hosted Collector を選択します。必要に応じて、「Hosted Collector を設定する」の説明に従って Hosted Collector を新規作成します。
- 「HTTP ログとメトリクス Source」の説明に従って HTTP Source を設定します。次のステップで必要になるため、Source の URL を書き留めます。
ステップ 3.ARM テンプレートを使用して Azure リソースを設定する
このステップでは、Sumo 提供の Azure Resource Manager (ARM) テンプレートを使用して、Event Hub、3 つの Azure 関数、Service Bus キュー、ストレージ アカウントを作成します。
- blobreaderdeploy.json ARM テンプレートをダウンロードします。
- Azure ポータルで [Create a Resource (リソースの作成)] をクリックし、[Template deployment (テンプレートのデプロイ)] を検索して、[Create (作成)] をクリックします。
- [Custom deployment (カスタム デプロイ)] ブレードで、[Build your own template in the editor (エディタで独自のテンプレートを作成)] をクリックします。
- テンプレートの内容をコピーして、エディタ ウィンドウに貼り付けます。
- [Save (保存)] をクリックします。
- [Custom deployment (カスタム デプロイ)] ブレードで、次の手順を実行します。
- リソース グループを新規作成する (推奨) か、既存のリソース グループを選択します。
- [Location (ロケーション)] を選択します。
- 次のパラメータの値を設定します。
- SumoEndpointURL: 上記のステップ 2 で設定した HTTP Source の URL。
- StorageAccountName: 上記のステップ 1 で設定した、Azure サービスからのログを保存するストレージ アカウントの名前。
- StorageAccountResourceGroupName: 上記のステップ 1 で設定したストレージ アカウントのリソース グループの名前。
- フィルタ接頭辞 (省略可能)。特定のコンテナからのログをフィルタリングする場合は、/blobServices/default/containers/<container_name>/ と入力します。なお、変数は自分のコンテナ名に置き換えてください。
- 利用規約に同意するチェック ボックスをオンにして、[Purchase (購入)] をクリックします。
- Azure ポータルの右上にある [Notifications (通知)] でデプロイに成功したことを確認します。
- (省略可能) 同じウィンドウで [Go to resource group (リソース グループに移動)] をクリックすると、次の例に示すようにすべてのリソースが正常に作成されたことを確認できます。
- [Storage accounts (ストレージ アカウント)] に移動して sumobrlogs を検索し、[sumobrlogs<random-string>] を選択します。
- [Table Service (テーブル サービス)] で、次の手順を実行します。
- [Tables (テーブル)] をクリックします。
- [+ Table (+ テーブル)] をクリックします。
- [Name (名前)] に「FileOffsetMap」と入力します。
- [OK] をクリックします。
ステップ 4.ログを Azure サービスから Azure Blob Storage に転送する
このセクションでは、診断ログを設定してログを Azure サービスから Azure Blob Storage に転送する方法について説明します。この手順では、例として Azure Web アプリケーション サービスを使用しています。
- Azure ポータルにログインします。
- [Monitoring (モニタリング)] で [AppServices] > [Your Function App (関数アプリケーション)] > [Diagnostic Logs (診断ログ)] をクリックします。
- [Diagnostic Logs (診断ログ)] ブレードが表示されます。アプリケーションのロギングと Web サーバのロギングのいずれか、またはその両方を有効にして、[Storage Settings (ストレージ設定)] をクリックします。
- 接続文字列をステップ 1 で設定したストレージ アカウントを選択します。
- [Containers (コンテナ)] ブレードで、ステップ 1 で作成したコンテナを選択します。
- [Diagnostic Logs (診断ログ)] ブレードで [Retention Period (Days) (保持期間 (日数))] を指定して [Save (保存)] をクリックし、診断ログの設定を終了します。
複数のストレージ アカウントからの取り込み (省略可能)
複数のストレージ アカウントから Sumo にデータを取り込む場合は、ストレージ アカウントごとに個別に次のタスクを実行します。
- ステップ 1: App Service がストレージ アカウント キーをリストすることの許可 - Azure 関数がストレージ アカウントから読み取りを行えるようにします。
- ステップ 2: Event Grid サブスクリプションの作成 - 上記のステップ 3 で ARM テンプレートによって作成された Event Hub へのすべての Blob 作成イベントをサブスクライブします。
ステップ 1: App Service がストレージ アカウント キーをリストすることの許可
このセクションでは、App Service がストレージ アカウント キーをリストすることを許可する手順について説明します。これにより、Azure 関数がストレージ アカウントから読み取りを行えるようになります。
App Service がストレージ アカウント キーをリストすることを許可するには、次の手順を実行します。
- [Storage Account (ストレージ アカウント)] に移動して、[Access Control(IAM) (アクセス制御 (IAM))] をクリックします。
- ページ上部にある [Add + (追加 +)] をクリックします。
- [Add Permissions (権限の追加)] ウィンドウで、次の値を指定します。
- Role (ロール): [Storage Account Key Operator Service Role (ストレージ アカウント キー operator サービス ロール)] を選択します。
- Assign Access To (アクセス権の割り当て先): [App Service (App Service)] を選択します。
- Subscription (サブスクリプション): 従量制課金。
- Select (選択): ARM テンプレートによって作成された [SUMOBRDLQProcessor<unique_prefix>] および [SUMORTaskConsumer<unique_prefix>] App Service を選択します。
- [Save (保存)] をクリックします。
ステップ 2: Event Grid サブスクリプションを作成する
このセクションでは、上記のステップ 3 で ARM テンプレートによって作成された Event Hub へのすべての Blob 作成イベントをサブスクライブする Event Grid サブスクリプションの作成手順について説明します。
Event Grid サブスクリプションを作成するには、次の手順を実行します。
- Azure ポータルの左側のペインで [All Services (すべてのサービス)] をクリックし、Event Grid サブスクリプションを検索してクリックします。
- [Event subscriptions (イベント サブスクリプション)] ページの上部にある [+Event Subscription (+ イベント サブスクリプション)] をクリックします。
[Create Event Subscription (イベント サブスクリプションの作成)] ダイアログが表示されます。
- [Event Subscription Details (イベント サブスクリプションの詳細)] で、次の値を指定します。
- Name (名前): イベント サブスクリプション名を入力します。
- Event Schema (イベント スキーマ): [Event Grid Schema (Event Grid スキーマ)] を選択します。
- [Topic Details (トピックの詳細)] で、次の値を指定します。
- Topic Type (トピック タイプ): ストレージ アカウントを選択します。
- Subscription (サブスクリプション): [Pay As You Go (従量制課金)] を選択します。
- Resource Group (リソース グループ): Azure サービスによりログがエクスポートされる、ログ取り込み先のストレージ アカウントのリソース グループを選択します。
- Resource (リソース): ログ取り込み先の設定済みのストレージ アカウントを選択します。
- [Event Types (イベント タイプ)] で、次の情報を指定します。
- [Subscribe to all event types (すべてのイベント タイプにサブスクライブ)] ボックスをオフにします。
- [Define Event Types (イベント タイプの定義)] ドロップダウンから [Blob Created (Blob 作成済み)] を選択します。
- [Endpoint Types (エンドポイント タイプ)] で、次の情報を指定します。
- [Endpoint Type (エンドポイント タイプ)]: ドロップダウンから [Event Hubs (Event Hub)] を選択します。
- Endpoint (エンドポイント): [Select an endpoint (エンドポイントの選択)] をクリックします。
[Select Event Hub (Event Hub の選択)] ダイアログが表示されます。
- [Select Event Hub (Event Hub の選択)] で次のパラメータを指定して、[Confirm Selection (選択の確認)] をクリックします。
- Resource Group (リソース グループ): ARM テンプレートで作成されたすべてのリソースが存在する、ステップ 3 で作成したリソース グループを選択します。
- Event Hub Namespace (Event Hub 名前空間): [SUMOBREventHubNamespace<unique string>] を選択します。
- Event Hub: ドロップダウンから [blobreadereventhub] を選択します。
- [Filters (フィルタ)] タブで次のオプションを指定します。
- [Enable subject filtering (件名のフィルタリングを有効にする)] をオンにします。
- コンテナ名でイベントをフィルタリングするには、[Subject Begins With (次で開始する件名)] フィールドに
/blobServices/default/containers/<container_name>/
と入力します。なお、<container_name>
は、ログをエクスポートするコンテナの名前に置き換えてください。
- [Create (作成)] をクリックします。
-
Azure ポータルの右上隅にある [Notifications (通知)] でデプロイに成功したことを確認します。