方法知ってたら、教えてください!!!
お礼に、ハトマスクあげます。
回避策を中の人に聞けたりすると嬉しいんだけどなぁ。
なんでやるの?
低速なリクエストの診断ができるようになると楽になるんじゃないかなーと。
こんな感じでまとめてくれるっぽい。
あとまぁ、つなげられそうだから、つなげてみたい。(手段が先行するタイプ)
目標
ページビューからSQLまで計測結果がつながればいいかな。こんな感じ。
* ページビュー (取れてる) * 依存(AJAX) (取れてる) * リクエスト (取れてる) * 依存(SQL) (取れてない)
どうやってやるの?
Azure Application Insights Telemetry の相関付け | Microsoft Docs が参考になる。
さっきの構造だと、以下のようになればOK。
type | id | operation_Id | operation_ParentId |
---|---|---|---|
ページビュー | aaa | aaa | |
依存(AJAX) | 111 | aaa | aaa |
リクエスト | 222 | aaa | 111 |
依存(SQL) | 333 | aaa | 222 |
- ページビューのoperation_Idを全てのtypeで利用する
- operation_ParentIdは、呼び出し元のidを使う。
わかっていること
ページビュー -> 依存(AJAX)の所は、Application Insightsのライブラリがいい感じで関連付けてくれていた。(operation_Idも、operation_ParentIdも適切な値が設定されている)
なので、リクエスト -> 依存(SQL)の方もうまくできるに違いない。
とすれば、残りは依存(AJAX)とリクエスト、つまり、フロントエンドとバックエンドをつなげるところだけをなんとかすればいいはず。
調べること
以下の2点の実装方法。
- フロントエンドからoperation_Idと、operation_ParentIdをバックエンドに送る方法
- バックエンドで受け取った値を使って、Applicaton Insightsにデータを送る方法
フロントエンド
実装されているようだ。
// Default true. If false, the SDK will add two headers ('x-ms-request-root-id' and 'x-ms-request-id)
// to all dependency requests (within the same domain) to correlate them with corresponding requests on the server side.
disableCorrelationHeaders: boolean;
API Reference
ただ、デベロッパーツールで確認するとヘッダが追加されてない。検索したらIssueが上がってた。
クロスドメインの場合は動かないらしい。残念。
Java側の方も検索したら以下のIssueが上がってたんだけど...
Headers X-ms-request-id and X-ms-request-root-id are deprecated. Please do not use them for the fresh implementation. They can cause problems with Azure Storage REST API calls.
Also please support Request-Context header for http request and response. It is widely used for app-id propagation.
See http://apmtips.com/blog/2017/10/18/two-types-of-correlation/ and https://docs.microsoft.com/en-us/azure/application-insights/application-insights-correlation
x-ms...は使わないで、Request-Context使ってねってことみたい。ヒェェェェェ。
なんか沼にはまりそう。
バックエンド
フロントエンドから送ってきたデータをOperationIdとして使う場合、カスタムのInitializerクラスを実装して、ApplicationInsights.xmlに設定したWebOperationIdTelemetryInitializerと入れ替えれば良さそう。
実装方法は、WebOperationIdTelemetryInitializer を参考にすれば良い。operation_ParentIdは、setParentIdで設定できる...んじゃないかな?
フロントエンドよりは希望がもてそう。
と、ここで体力と気力が切れたので、調査はおしまいにする。
さぁ、DEAD OR ALIVE Xtreme Venus Vacation やるぞー!!