Roku ログ収集は、US1-FED Datadog サイトではご利用いただけません。

Roku ログ収集はベータ版です。

Datadog の dd-sdk-roku ロギングライブラリを使って、Roku チャンネルから Datadog にログを送信し、以下の機能を活用します。

  • Datadog に JSON 形式でネイティブに記録する。
  • 送信される各ログに context およびカスタム属性を追加する。
  • 実際のクライアント IP アドレスとユーザーエージェントを記録する。
  • 自動一括ポストによってネットワークの利用を最適化する。

セットアップ

  1. ROPM を使用して依存関係をプロジェクトに追加するか、最新の zip アーカイブをダウンロードし、プロジェクトに解凍します。

    ropm install datadog-roku
    
  2. 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
    

  3. (オプション) アプリケーションを書くときに、グローバルノードで datadogVerbosity 属性を設定することで、開発ログを有効にすることができます。ライブラリの内部メッセージで、指定されたレベルと同等以上の優先度を持つメッセージはすべて、Roku デバイスの telnet 出力にログされます。

    ' 0 = none; 1 = error; 2 = warning; 3 = info; 4 = verbose;
    m.globalNode.addFields({ datadogVerbosity: 2 })
    
  4. 次のいずれかの関数で、カスタムログエントリを 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, {})
    
  5. (オプション) 発信されたログに属性を追加するために、ログメッセージと一緒に連想配列を提供します。AssocArray の各エントリーは、属性として追加されます。

     m.global.datadogLogsAgent.callfunc(
         "logInfo",
         "Video started",
         { video_id: 42, video_type: "advert"}
     )
    

バッチコレクション

すべてのログは、最初にローカルデバイスにバッチで格納されます。各バッチはインテークの仕様に従います。ネットワークが利用可能であれば、バッチはすぐに送信されます。チャンネル開設中ににネットワークが利用できない場合、またはデータのアップロードが失敗した場合、バッチは正常に送信されるまで保持されます。

SDK がディスク容量を使いすぎないように、ディスク上のデータは古くなりすぎると自動的に破棄されます。

: データが Datadog にアップロードされる前に、チャンネルのキャッシュディレクトリに平文で保存され、このデータは他のアプリケーションでは読めないことを意味します。なお、OS はいつでもデータを退避させることができるため、稀にデータ損失が発生する可能性があります。

その他の参考資料