[Sitecore][Analytics]Trackingが動作しない際にトラブルシューティングの手順
概要:
Analyticsのtrackingが動作しなくなった際に行ったトラブルシューティングのメモ書きです。
検証環境:
Sitecore 9.2.0
背景:
トラキングを使って、サイト内で50%以上再生されたビデオのデーターを収集するというタスクが渡されました。
開発を始めたところ、ローカールのトラキングが動作していないことに気が付いた。これはそれを解決したメモ書きです。
1.ログを確認
問題があった際に最初に見るところは何と言ってもログです。まず、サイトコアのログ、App_Data\logs、しかし、 関連しそうなエラーがみえたりませんでした。
次はxconnectのログを見ましょう:
local-scxc01.site.com\App_Data\jobs\continuous\AutomationEngine\App_Data\Logs
local-scxc01.site.com\App_Data\jobs\continuous\IndexWorker\App_Data\Logs
local-scxc01.site.com\App_Data\jobs\continuous\ProcessingEngine\App_Data\Logs
これにも全く関連しそうなエラーがみえたりませんでした。
2.設定を確認
トラキングが有効になっていることをshowconfigにて確認、とりあえず、トラキングを動いていること確認したいので、
setting name="Xdb.Enabled" value="true"
setting name="Xdb.Tracking.Enabled" value="true"
site name="website" enableTracking="true"
IndexAnonymousContactData:true
VisitorIdentification tagがすべてのレイアウトにあることを確認
global.asaxにて、セッション終了ロジック有効するには
Sitecore.Web.Application 使用しているを確認:
<%@Application Language=’C#’ Inherits=”Sitecore.Web.Application”%>
3.サービスが走っていることを確認
4.xconnectへの接続もついでに確認
5.Experience Alalytics にてエラーがあるかどうかを確認
6.SolrでxDBインデックスを再構築します
7.Sitecoreセッションをクリアしてみる
デバッグまたはテスト時にセッション(HTTPおよびSitecore)を完全にクリアしてみます。下記のコードでセッションをクリアします。
HttpContext.Current.Session.Abandon();
Sitecore.Analytics.Tracker.Current.EndVisit(true);
Sitecore.Analytics.Tracker.Current.EndTracking();
8.Fiddlerを使って、HTTP/HTTPS リクエストやレスポンス確認
Dashboardにて関連しそうなエアーを探します。また、トラキングクッキーが有効になっていることもついでに確認
この時点で、関連しそうなエアーが見つかりませんでした。😢
さて、引き続き、データベースを見てみよう。
9.データベースのテーブルを確認。
まず、テーブルをクリアします。
ELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard0].xdb_collection.ContactIdentifiers
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard0].xdb_collection.ContactFacets
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard0].xdb_collection.Contacts WHERE ContactId not in
(SELECT ContactId FROM [mysite_local_sitecore_Xdb.Collection.Shard0].xdb_collection.ContactIdentifiers)
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard0].xdb_collection.InteractionFacets
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard0].xdb_collection.InteractionFacets
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard0].xdb_collection.Interactions WHERE InteractionId not in
(SELECT InteractionId FROM [mysite_local_sitecore_Xdb.Collection.Shard0].xdb_collection.InteractionFacets)
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard1].xdb_collection.ContactIdentifiers
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard1].xdb_collection.ContactFacets
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard1].xdb_collection.Contacts WHERE ContactId not in
(SELECT ContactId FROM [mysite_local_sitecore_Xdb.Collection.Shard1].xdb_collection.ContactIdentifiers)
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard1].xdb_collection.InteractionFacets
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard1].xdb_collection.InteractionFacets
DELETE FROM [mysite_local_sitecore_Xdb.Collection.Shard1].xdb_collection.Interactions WHERE InteractionId not in
(SELECT InteractionId FROM [mysite_local_sitecore_Xdb.Collection.Shard1].xdb_collection.InteractionFacets)
次は、サイトにていくつかのページを表示させ、データがトラキングされれば、下記のテーブルにて記録されるはずです。
1._Xdb.Collection.Shard0、_Xdb.Collection.Shard1
2._sitecore_Reporting
3._sitecore_Processing.Pools
ここまでとなって、問題を突き止めていないことでちょっと頭が痛くなりました。😰
Googleで検索をすると、サーバー証明書の再発行してみるという記事をみたので、サーバー証明書を再発行をしてみました。
サーバー証明書を再発行したところ、かの有名なエラーが表示されました!このエラーをみてちょっとだけ、喜んでいました。これでやっと問題解決の手がかりとなります。
ここでサイトコアのログにてエラーが表示され、それを順番に解決したところでトラキングが動作し始めデータも表示されました。
ネットで上記のエラー解決に関する記事がたくさんあります、ここで同じ轍を踏む必要がないので省略します。
一番注意してほしい点といえば、self-signed サーバー証明書を生成してから、Thumbprintがマッチすることを確認しましょう。
下記のPowershell使って、Thumbprintがマッチすることを確認しましょう。
sites = Get-Website | ? { $_.State -eq "Started" } | % { $_.Name }
$results = foreach($binding in (Get-ChildItem IIS:SSLBindings))
{
foreach($siteName in $sites)
{
if($siteName -eq $binding.Sites.Value)
{
[pscustomobject]@{
Site = $siteName
Thumbprint = $binding.Thumbprint
}
write-host ""
}
}
}
write-host $results
もしマッチしていない場合は、Thumbprintの値をを取得し、
また、MMCにて、サーバー証明書とThumbprintを確認しましょう。
マッチしていないところ、サイトコアのconnectionstringもしくは、xconnectのconnectionstringにてマッチさせます。
最後に、私個人として、もし何か問題があった際に、トラブルシューティングの手順として、やはり、ログを最初確認するのは一番です。それに関連しそうな情報を見つからな立った場合は、クライアント側のFront-Endからサーバー側のBack-Endへとリクエストを従って問題を特定するのは普段取っている手順です。 😄