Roku ログ収集は、US1-FED Datadog サイトではご利用いただけません。
Datadog の dd-sdk-roku
ロギングライブラリを使って、Roku チャンネルから Datadog にログを送信し、以下の機能を活用します。
- Datadog に JSON 形式でネイティブに記録する。
- 送信される各ログに
context
およびカスタム属性を追加する。 - 実際のクライアント IP アドレスとユーザーエージェントを記録する。
- 自動一括ポストによってネットワークの利用を最適化する。
セットアップ
ROPM
を使用して依存関係をプロジェクトに追加するか、最新の zip アーカイブをダウンロードし、プロジェクトに解凍します。
ropm install datadog-roku
Datadog UI で新しい RUM アプリケーションを作成したときに生成された Datadog クライアントトークンとアプリケーション ID でライブラリを初期化します (詳細は Roku RUM 収集の概要参照)。セキュリティ上の理由から、クライアントトークンを使用する必要があります。Datadog API キーは、Roku チャンネルのパッケージでクライアント側に公開されるため、dd-sdk-roku
ライブラリの構成に使用できません。
クライアントトークンのセットアップについて、詳しくはクライアントトークンに関するドキュメントを参照してください。
sub RunUserInterface(args as dynamic)
screen = CreateObject("roSGScreen")
scene = screen.CreateScene("MyScene")
screen.show()
datadogroku_initialize({
clientToken: "<CLIENT_TOKEN>",
applicationId: "<APPLICATION_ID>"
site: "us1",
env: "<ENV_NAME>",
sessionSampleRate: 100, ' the percentage (integer) of sessions to track
launchArgs: args
})
' complete your channel setup here
end sub
sub RunUserInterface(args as dynamic)
screen = CreateObject("roSGScreen")
scene = screen.CreateScene("MyScene")
screen.show()
datadogroku_initialize({
clientToken: "<CLIENT_TOKEN>",
applicationId: "<APPLICATION_ID>"
site: "eu1",
env: "<ENV_NAME>",
sessionSampleRate: 100, ' the percentage (integer) of sessions to track
launchArgs: args
})
' complete your channel setup here
end sub
sub RunUserInterface(args as dynamic)
screen = CreateObject("roSGScreen")
scene = screen.CreateScene("MyScene")
screen.show()
datadogroku_initialize({
clientToken: "<CLIENT_TOKEN>",
applicationId: "<APPLICATION_ID>"
site: "us3",
env: "<ENV_NAME>",
sessionSampleRate: 100, ' the percentage (integer) of sessions to track
launchArgs: args
})
' complete your channel setup here
end sub
sub RunUserInterface(args as dynamic)
screen = CreateObject("roSGScreen")
scene = screen.CreateScene("MyScene")
screen.show()
datadogroku_initialize({
clientToken: "<CLIENT_TOKEN>",
applicationId: "<APPLICATION_ID>"
site: "us5",
env: "<ENV_NAME>",
sessionSampleRate: 100, ' the percentage (integer) of sessions to track
launchArgs: args
})
' complete your channel setup here
end sub
sub RunUserInterface(args as dynamic)
screen = CreateObject("roSGScreen")
scene = screen.CreateScene("MyScene")
screen.show()
datadogroku_initialize({
clientToken: "<CLIENT_TOKEN>",
applicationId: "<APPLICATION_ID>"
site: "ap1",
env: "<ENV_NAME>",
sessionSampleRate: 100, ' the percentage (integer) of sessions to track
launchArgs: args
})
' complete your channel setup here
end sub
(オプション) アプリケーションを書くときに、グローバルノードで datadogVerbosity
属性を設定することで、開発ログを有効にすることができます。ライブラリの内部メッセージで、指定されたレベルと同等以上の優先度を持つメッセージはすべて、Roku デバイスの telnet 出力にログされます。
' 0 = none; 1 = error; 2 = warning; 3 = info; 4 = verbose;
m.globalNode.addFields({ datadogVerbosity: 2 })
次のいずれかの関数で、カスタムログエントリを Datadog に直接送信します。
msg = "A log message"
m.global.datadogLogsAgent.callfunc("logOk", msg, {})
m.global.datadogLogsAgent.callfunc("logDebug", msg, {})
m.global.datadogLogsAgent.callfunc("logInfo", msg, {})
m.global.datadogLogsAgent.callfunc("logNotice", msg, {})
m.global.datadogLogsAgent.callfunc("logWarn", msg, {})
m.global.datadogLogsAgent.callfunc("logError", msg, {})
m.global.datadogLogsAgent.callfunc("logCritical", msg, {})
m.global.datadogLogsAgent.callfunc("logAlert", msg, {})
m.global.datadogLogsAgent.callfunc("logEmergency", msg, {})
(オプション) 発信されたログに属性を追加するために、ログメッセージと一緒に連想配列を提供します。AssocArray の各エントリーは、属性として追加されます。
m.global.datadogLogsAgent.callfunc(
"logInfo",
"Video started",
{ video_id: 42, video_type: "advert"}
)
バッチコレクション
すべてのログは、最初にローカルデバイスにバッチで格納されます。各バッチはインテークの仕様に従います。ネットワークが利用可能であれば、バッチはすぐに送信されます。チャンネル開設中ににネットワークが利用できない場合、またはデータのアップロードが失敗した場合、バッチは正常に送信されるまで保持されます。
SDK がディスク容量を使いすぎないように、ディスク上のデータは古くなりすぎると自動的に破棄されます。
注: データが Datadog にアップロードされる前に、チャンネルのキャッシュディレクトリに平文で保存され、このデータは他のアプリケーションでは読めないことを意味します。なお、OS はいつでもデータを退避させることができるため、稀にデータ損失が発生する可能性があります。
その他の参考資料