RUM for Roku は、US1-FED Datadog サイトではご利用いただけません。
概要
まだ SDK をインストールしていない場合は、アプリ内セットアップ手順に従うか、Roku RUM セットアップドキュメントを参照してください。
RUM リソースの追跡
roUrlTransfer
roUrlTransfer
ノードで直接行われたネットワークリクエストは追跡する必要があります。
同期リクエストの場合は、Datadog の datadogroku_DdUrlTransfer
ラッパーを使用して、リソースを自動的に追跡することができます。このラッパーは roUrlTransfer
コンポーネントのほとんどの機能をサポートしていますが、非同期ネットワーク呼び出しに関連するものはサポートしていません。
例えば、GetToString
の呼び出しを行う方法を紹介します。
ddUrlTransfer = datadogroku_DdUrlTransfer(m.global.datadogRumAgent)
ddUrlTransfer.SetUrl(url)
ddUrlTransfer.EnablePeerVerification(false)
ddUrlTransfer.EnableHostVerification(false)
result = ddUrlTransfer.GetToString()
非同期リクエストの場合、自動インスツルメンテーションはサポートされていません。リソースを手動で追跡する必要があります。次のコードスニペットは、リクエストを RUM リソースとして報告する方法を示しています。
sub performRequest()
m.port = CreateObject("roMessagePort")
request = CreateObject("roUrlTransfer")
' setup the node url, headers, ...
timer = CreateObject("roTimespan")
timer.Mark()
request.AsyncGetToString()
while (true)
msg = wait(1000, m.port)
if (msg <> invalid)
msgType = type(msg)
if (msgType = "roUrlEvent")
if (msg.GetInt() = 1) ' transfer complete
durationMs& = timer.TotalMilliseconds()
transferTime# = datadogroku_millisToSec(durationMs&)
httpCode = msg.GetResponseCode()
status = "ok"
if (httpCode < 0)
status = msg.GetFailureReason()
end if
resource = {
url: requestUrl
method: "GET"
transferTime: transferTime#
httpCode: httpCode
status: status
}
m.global.datadogRumAgent.callfunc("addResource", resource)
end if
end if
end if
end while
end sub
リソースのストリーミング
Video
や Audio
ノードを使用してメディアをストリーミングする場合、以下のように受信したすべての roSystemLogEvent
を Datadog に転送することができます。
sysLog = CreateObject("roSystemLog")
sysLog.setMessagePort(m.port)
sysLog.enableType("http.error")
sysLog.enableType("http.complete")
while(true)
msg = wait(0, m.port)
if (type(msg) = "roSystemLogEvent")
m.global.datadogRumAgent.callfunc("addResource", msg.getInfo())
end if
end while
ユーザーセッションの充実
RUM でインスツルメンテーションされたチャンネルは、カスタムイベントを追跡することによって、ユーザーのセッション情報をさらにリッチ化し、収集される属性をより細かく制御することができます。
RUM Roku SDK により自動的に取得されるデフォルトの RUM 属性に加えて、カスタム属性などのコンテキスト情報を RUM イベントに追加し、Datadog 内の可観測性を強化することも可能です。カスタム属性により、コードレベルの情報 (バックエンドサービス、セッションタイムライン、エラーログ、ネットワークの状態など) を利用して、観察されたユーザー行動 (カート内の金額、マーチャントティア、広告キャンペーンなど) をフィルターしてグループ化することができます。
ユーザーを特定する
RUM セッションにユーザー情報を追加すると、次のことが簡単になります。
- 特定のユーザーのジャーニーをたどります。
- エラーの影響を最も受けているユーザーを把握します。
- 最も重要なユーザーのパフォーマンスを監視します。
以下の属性は任意ですが、少なくとも 1 つ提供する必要があります。
属性 | タイプ | 説明 |
---|
id | 文字列 | 一意のユーザー識別子。 |
name | 文字列 | RUM UI にデフォルトで表示されるユーザーフレンドリーな名前。 |
email | 文字列 | ユーザー名が存在しない場合に RUM UI に表示されるユーザーのメール。Gravatar をフェッチするためにも使用されます。 |
ユーザーセッションを特定するには、SDK を初期化した後などに、datadogUserInfo
グローバルフィールドを使用します。
m.global.setField("datadogUserInfo", { id: 42, name: "Abcd Efg", email: "abcd.efg@example.com"})
カスタムグローバル属性の追跡
SDK により自動的に取得されるデフォルトの属性に加えて、カスタム属性などのコンテキスト情報をログと RUM イベントに追加し、Datadog 内の可観測性を強化することも可能です。カスタム属性により、コードレベルの情報 (バックエンドサービス、セッションタイムライン、エラーログ、ネットワークの状態など) を利用して、観察されたユーザー行動 (カート内の金額、マーチャントティア、広告キャンペーンなど) をフィルターしてグループ化することができます。
m.global.setField("datadogContext", { foo: "Some value", bar: 123})
その他の参考資料