[Mixpanel] track_links, track_formsのログがたまに記録されない場合の対処方法

Webサイト上のユーザーの行動データを取得するために、Mixpanelというサービスを利用しています。

色々な言語に対応しているのですが、僕はAJAXを使ったサイトの分析を行うために、JavaScriptからMixpanelのAPIを呼び出すことが多いです。

さて、Mixpanelが提供しているAPIのなかにtrack_linkstrack_formsというものがあります。

これらはそれぞれ、「ユーザが特定のリンクをクリックした時にMixpanelにログを送信する」「ユーザーが特定のフォームをSubmitしたときにMixpanelにログを送信する」という役割を持っています。

ログの記録漏れ問題

ある日、Mixpanelの管理画面でログを確認していると、track_linkstrack_formsで送信されてくるはずのログが、きちんと記録されている場合とそうでない場合があることに気づきました。

「おかしいなぁ」と思いドキュメントを確認していると、track_linkstrack_formsの欄に以下のような記述を発見しました。

This function will wait 300ms for the Mixpanel servers to respond to the tracking request. If 300ms pass without a response, the page will be moved immediately without ensuring that the tracking request was successful. This means that your links will never break due to a Mixpanel error. To configure this timeout, please see the documentation for mixpanel.set_config() below.

Javascript – Full API – Mixpanel | Help

簡単にまとめると以下のようになります。

  • track_linkstrack_formsはMixpanelサーバからのレスポンスを300ms待つ
  • 300ms待ってレスポンスが返ってこない場合、リンククリックやFormのSubmitで起きるはずだったページ遷移を実行する
  • この場合、ログ送信が成功したかどうかは保証されない。

Mixpanelサーバの負荷やネットワークの遅延などで、ブラウザとMixpanelサーバとの一連のやり取りに300ms以上かかってしまう場合、ログが記録されない場合がある、ということですね。

Mixpanelのサーバが地理的にどこに設置されているかまでは調べていないのですが、モバイル環境のユーザーがいることなんかも考えると十分起こりえるケースなのかなと思ったりします。

対処方法

引用文にも書いてあるのですが、デフォルト「300ms」というタイムアウト時間は設定で変更できるみたいです。タイムアウト時間をより長い時間に変更することで、ログが記録される確率を上げることができそうです。

設定を変更するには、mixpanelオブジェクトの初期化時にtrack_links_timeoutというパラメータを渡してあげればよいです。ここではタイムアウト時間を「600ms」に変更しています。

すでに、初期化を済ませている場合は以下のように「set_config」メソッドを呼び出せばいいみたいです。

※ ちなみにパラメータ名はtrack_links_timeoutですが、track_formsにも設定値は適用されるみたいです。

まとめ

こんな感じで、「ログがたまに記録されない」という問題が発生した場合、Mixpanelのタイムアウト時間を変更することで対処してみました。

注意点ですが、あまりタイムアウト時間を長くしすぎると、ユーザーがリンクをクリックしたりFormをSubmitしたときの待機時間が長くなってしまい、ユーザーに不快感を与えてしまうことになりかねません。

どれくらいのタイムアウト時間が最適なのかは、色々試行錯誤しながら見ていくしかないのかもしれませんね。

それでは。