アップストリームによる送信

intdashサーバーにリアルタイムデータを送信する経路(ストリーム)をアップストリームと呼びます。 アップストリームによる送信を行うには以下の準備が必要です。 本章ではこれらについて説明します。 接続先サーバーと認証情報 は設定済みとします。

  • アップストリームの設定を作成する

  • デバイスコネクターの設定を作成する

  • (必要な場合のみ)フィルターを設定する(フィルターを使用すると、条件に一致したデータポイントの行先のアップストリームを変更することができます)

../_images/config-upstream.svg

図 10 リアルタイムデータをサーバーに送信する

以上の設定を行ったうえで intdash-agentctl run コマンドを実行すると、ストリーマーが起動され、サーバーへのリアルタイム送信が開始されます。 ストリーマーの起動から終了までの一連の時系列データが1つの計測となります。

送信中に通信が切断された場合や帯域が不十分だった場合、送信できなかったデータはローカルストレージに蓄積され、通信が回復したときにREST APIで送信されます。これを遅延アップロードと呼びます。

アップストリーム

intdash Edge Agent 2では、設定の異なる複数のアップストリームを設定し、同時に使用することができます。 センサーデバイスからデバイスコネクターを使って取得されたデータは、指定されたアップストリームを使ってサーバーに送信されます。

各アップストリームについては、通信が切断された場合に遅延アップロードをするか、信頼性のある接続を使用するか、サーバーでのデータ永続化するか、などの設定が可能です。

アップストリームの設定はIDにより管理されます。 デバイスコネクターやフィルター設定において、行先のストリームを指定する際には、このIDで指定します。

アップストリームを作成するには以下のコマンドを実行します。

$ intdash-agentctl config upstream --create <config_in_yaml_format>

例:

$ intdash-agentctl config upstream --create '
    id: recoverable
    enabled: true
    recover: true
    persist: true
    qos: unreliable
    flush_policy: interval
    flush_interval: 5
  '

作成済みのアップストリームの設定を変更するには、IDと、変更したい設定を与えます。

$ intdash-agentctl config upstream --modify <id> <config_in_yaml_format>

設定できるパラメーターについては、以下を参照してください。

キー

説明

id

string

アップストリームを識別するための文字列。 deferred は予約されているため使用できません。

enabled

bool

アップストリームの有効(true)/無効(false)

recover

bool

送信ができなかった場合の遅延アップロードの有効(true)/無効(false)。 true にすると、リアルタイム送信できなかった場合に、遅延アップロードが行われます。 ただし、 persistfalse の場合、遅延アップロードは行われません。

persist

bool

サーバーでのデータ永続化の有効(true)/無効(false)

qos

string

partial: iSCPのQoSとしてPARTIALを指定します。

unreliable: iSCPのQoSとしてUNRELIABLEを指定します。

flush_policy

string

interval - リアルタイム送信を一定周期でフラッシュします。

immediately - リアルタイム送信をデータポイントごとにフラッシュします。

flush_interval

string

リアルタイム送信をフラッシュする間隔(ミリ秒)。flush_policyがintervalの場合のみ使用されます。

注釈

アップストリーム設定の一覧表示、削除などのコマンドについては、 intdash-agentctl config upstream/downstream を参照してください。

デバイスコネクター

intdash Edge Agent 2では、複数のデバイスコネクターを設定し、同時に使用することができます。 センサーデバイスからデバイスコネクターを使って取得されたデータは、指定されたアップストリームを使ってサーバーに送信されます。

各デバイスコネクター設定では、intdash Edge Agent 2との通信に使用するFIFOのパス、そのデバイスコネクターから得られたデータの行先のアップストリーム、データ名称などを設定します。 デバイスコネクターの設定はIDにより管理されます。

アップストリーム用デバイスコネクターの設定を作成するには以下のコマンドを実行します。

$ intdash-agentctl config device-connector upstream  --create <config_in_yaml_format>

例:

$ intdash-agentctl config device-connector upstream --create '
    id: up
    data_name_prefix: v1/1
    dest_ids:
      - recoverable
    format: iscp-v2-compat
    ipc:
      type: fifo
      path: /var/run/intdash/uplink-hello1.fifo
    launch:
      cmd: device-connector-intdash
      args:
      - --config
      - /home/agent-volume-a/dc-hello-world-1.yaml
  '

作成済みのデバイスコネクターの設定を変更するには、IDと、変更したい設定を与えます。

$ intdash-agentctl config device-connector upstream --modify <id> <config_in_yaml_format>

config_in_yaml_format で設定できるパラメーターは以下のとおりです。

キー

説明

id

string

デバイスコネクター設定の識別子

enabled

bool

デバイスコネクター設定の有効(true)/無効(false)

data_name_prefix

string

iSCPのデータ名称のプリフィックスとして使用する文字列。受信側でiSCP v1を使用する場合は、決められたルールに沿って data_name_prefix を与える必要があります。詳細は 付与されるデータID を参照してください。

dest_ids

[string]

データは、ここで指定したIDのアップストリームを使ってサーバーに送られます。複数のIDを指定した場合、データポイントは複製され、それぞれのアップストリームからサーバーに送られます。 ただし、フィルターを設定すると、行先のアップストリームを変更することができます。 フィルター(必要な場合のみ) を参照してください。

format

string

デバイスコネクターが送信するデータのフォーマット

iscp-v2-compat : iSCPv2と同等のFIFOデータフォーマット

logger-msg : 旧intdash Edge AgentのFIFOデータフォーマット

ipc.type

string

intdash Edge Agent 2とデバイスコネクターのデータ通信方法(現在 fifo のみに対応しているため、 fifo を指定してください。)

ipc.path

string

intdash Edge Agent 2がデバイスコネクターからデータを受信するFIFOのパス

launch.cmd

string

intdash Edge Agent 2が起動したらそれに連動してデバイスコネクターも起動させたい場合は、デバイスコネクターの実行ファイルのパスを指定します。付属デバイスコネクターを使用する場合は、 device-connector-intdash とします。

この設定を使ってデバイスコネクターを起動した場合、intdash Edge Agent 2を終了すると、デバイスコネクターも終了します。

launch.args

[string]

デバイスコネクター起動時の引数。付属デバイスコネクターを使用するために launch.cmddevice-connector-intdash とした場合は、第1引数を --config 、第2引数をパイプライン設定ファイルのパスとします。

- --config
- <path-to-pipeline-configuration.yaml>

launch.environment

[string]

デバイスコネクター起動時に追加する環境変数( VARIABLE=VALUE の形式で記載します)

重要

付属デバイスコネクターを使用する場合は、センサーデバイスからデータを取得し、所定のフォーマットに従ってFIFOにデータを書き込むまでの流れを定義したパイプライン設定ファイルが必要です。

パイプライン設定ファイルについては、 付属デバイスコネクターの使用 を参照してください。

注釈

デバイスコネクター設定の一覧表示、削除などのコマンドについては、 intdash-agentctl config device-connector を参照してください。

遅延アップロード用の行先(deferred)

persist: true 」かつ「 recover: true 」のアップストリームでは、リアルタイム送信ができなかった場合は遅延アップロードが行われます。しかし、リアルタイム送信を試みることなく最初から遅延アップロードしたい場合は、疑似的な行先ストリームとして deferred を指定します。

deferred は設定のための名称で、実際にはdeferredというストリームがintdash Edge Agent 2とサーバーとの間に作成されるわけではありません。

注釈

deferred というストリームIDは予約されており、ユーザーが作成するストリームにこの名前を付けることはできません。 また、 intdash-agentctl config device-connector upstreamdeferred の設定を変更したり削除したりすることはできません。

遅延アップロードの優先度や、遅延アップロード用のデータに使用するストレージに関しては、 遅延アップロード を参照してください。

フィルター(必要な場合のみ)

どのアップストリームを使ってサーバーにデータを送信するか(行先のアップストリーム)はデバイスコネクターの設定で指定しましたが、デバイスコネクターとアップストリームの間にフィルターを挟むことにより、データの行先を他のストリームに変更することができます。

フィルターには条件を設定します。条件に一致するデータだけを別のアップストリームに送ることができます。これにより、一部のデータだけをリアルタイム送信し、その他のデータはリアルタイム送信せずに遅延アップロードするといった設定が可能です。

フィルターの設定方法については、 フィルタリング/サンプリング を参照してください。

../_images/config-upstream-filter.svg

図 11 フィルター(アップストリームの場合)

注釈

デバイスコネクターの設定やフィルターの設定では、存在しないストリームIDを指定することができます。

最終的に、存在しないIDを行先としているデータポイントは破棄されるため、存在しないストリームIDを一時的な行先として使用すると便利な場合があります。 以下の例では、デバイスコネクターの設定の dest_ids において、存在しないアップストリーム stream_x を行先として指定しています。そのうえで、フィルタリングの段階で、フィルター条件に一致したデータポイントの行先を変更しています。 フィルタリングの段階を完了してもなお stream_x を行先としているデータポイントは、破棄されます。

../_images/config-upstream-nonexisting-stream.svg

図 12 存在しないアップストリームIDの使用

送信の開始/終了

アップストリームの設定とデバイスコネクターの設定を行ったうえで、 intdash-agentctl run を実行すると、intdashサーバーへの接続が行われます。

この状態で、デバイスコネクターからFIFOにデータポイントを書き込むことで、そのデータポイントは、intdash Edge Agent 2からintdashサーバーに送信されます。

リアルタイムデータの送受信を終了する場合は、 intdash-agentctl run を実行したターミナルでCtrl+Cを押してください。

recover: true 」のアップストリームにおいてデータの欠損が発生した場合や、行先ストリームとして deferred が指定されていた場合は、遅延アップロードが行われます。 リアルタイムデータの送受信を終了しても、intdash-agentdが起動している間は、遅延アップロードが継続されます。

基準時刻について

intdashにおいて、基準時刻とは、計測を開始した時刻を指します。 intdash Edge Agent 2が送信する基準時刻には以下の2つがあります。

  • EdgeRTC による基準時刻

    • intdash Edge Agent 2を実行しているシステムの時計による基準時刻です。計測開始時は必ずEdgeRTCで基準時刻が作成されます。 その後、基準時刻は一定間隔でサーバーに送信されます。

  • NTPによる基準時刻

    • NTPサーバーから取得した時計による基準時刻です。NTPサーバーとの通信ができたらNTP基準時刻が作成されます。 その後、基準時刻は一定間隔でサーバーに送信されます。