6. 付録¶
6.1. 基準時刻¶
基準時刻は計測の開始時刻を表す情報です。Agentは、基準時刻を適宜取得し、intdashに送信します。
注釈
「計測」とは、特定のエッジから送信された時系列データのまとまりを指します。詳細については別途iSCPv1に関する資料を参照してください。
基準時刻には、以下の2つがあります。
- EdgeRTCによる基準時刻
Agentを実行しているシステムのリアルタイムクロック(RTC)による基準時刻です。
- NTPによる基準時刻
NTPサーバーと同期した時計による基準時刻です。NTP基準時刻を使用するには、Statusプラグインが有効になっている必要があります。
Statusプラグインを有効にするには、マネージャー設定ファイルの
loggers
にStatusプラグインの設定を書き込みます。 設定ファイルのひな型/opt/vm2m/etc/manager.conf
を参照してください(details.plugin
がstatus
となっている設定がStatusプラグインの設定です)。(インストール直後の設定ファイル
/etc/opt/intdash/manager.conf
ではStatusプラグインは有効になっています。)
基準時刻の種類 |
基準時刻が決定するタイミング |
基準時刻をintdashに送信するタイミング |
---|---|---|
EdgeRTC |
Agent起動時 |
データ送信開始時 |
NTP |
StatusプラグインがNTPサーバーと疎通した時点以降 |
一定周期(起動後10分間は1分間隔、そのあとは10分間隔) |
6.2. 送信側でのフィルタリング¶
デバイスコネクターを通じてマネージャーに集められた時系列データは、マネージャーでのフィルタリングによって、RealtimeやBulkなどの各クライアントに振り分けられてintdashサーバーに送信されます。
フィルターを使用することで、データの送信方法を柔軟に切り替えることができます。
6.2.1. 送信側でのフィルタリングの流れ¶
マネージャーは、それぞれの時系列データに対して、各クライアントを使って送信する(パス)か、もしくは送信しない(ドロップ)かを決定します。
特に設定がない場合は、時系列データはRealtimeクライアント経由でintdashサーバーに送信されます。
Realtimeクライアント用のフィルターで「ドロップ」となったためRealtimeクライアントで送信されなかったデータは、Bulkクライアントによりintdashサーバーに送信されます。
Bulkクライアント用のフィルターでも「ドロップ」となったデータはintdashサーバーに送信されません。
いずれの場合も、時系列データはマネージャーによりRAWデータとしてダンプされます。
Realtimeクライアント |
Bulkクライアント |
データの取り扱われ方 |
---|---|---|
パス |
- |
intdashサーバーへリアルタイムに送信される。intdashサーバーに過去のデータとしても保存される。 |
ドロップ |
パス |
一定周期の一括伝送でintdashサーバーへ送信される。intdashサーバーに過去のデータとしても保存される。 |
ドロップ |
ドロップ |
intdashサーバーへリアルタイムに送信されない。intdashサーバーには過去のデータとしても保存されない。 RAWデータ としてエッジ側のローカルストレージに保存される。 |
6.2.2. フィルターの構成¶
フィルタリングは、複数のフィルターにより行います。複数のフィルターは順次評価され、各時系列データがどのクライアントを使って送信されるべきかを判定します。
たとえば、以下のようなフィルター構成の場合、以下のようになります。
データXはどのフィルターにも相当しないためRealtimeクライアントにて送信されます。
データYは1番目のフィルターによりRealtimeクライアントからドロップするため、Bulkクライアントにて送信されます。
データZは1番目のフィルターによりRealtimeクライアントからドロップし、4番目のフィルターによりBulkクライアントからもドロップするため、送信されません。
6.2.3. フィルターの共通設定¶
フィルターに関する設定は、設定ファイルの manager.filters[]
に記載します。
filtersフィールドの配列に格納されたオブジェクトの中身は以下のようになります。
キー |
型 |
説明 |
---|---|---|
|
string |
フィルターの種類 の各フィルターの表を参照してください。 |
|
string |
フィルターを適用するチャンネルを設定します。設定できるのは"-1"、"0"~"255"です。"-1"の場合、全チャンネルが対象となります。 |
|
string |
フィルターを適用するクライアントを設定します。( |
|
object[] |
フィルターの設定です。フィルターの種類 の各フィルターの説明を参照してください。 |
target
には、以下いずれかを指定します。
realtime
: Realtimeクライアントが送るデータにフィルターを適用しますguaranteed
: Bulkクライアントが送るデータにフィルターを適用しますboth
: RealtimeクライアントとBulkクライアント両方のデータにフィルターを適用します
6.2.4. フィルターの種類¶
フィルターには以下の種類があります。
特定のデータタイプのデータのみに適用できるフィルターと、全てのデータタイプに適用できるフィルターがあります。
フィルター名 |
フィルターを適用できるデータタイプ |
説明 |
---|---|---|
CAN、NMEA、Motion JPEG、String、Float、Int、Bytesのみ |
サンプリングフィルター。データを間引きます。 |
|
CANのみ |
許可リスト型のCAN IDフィルター。指定されたCAN IDのデータをパスします。 |
|
CANのみ |
ブロックリスト型のCAN IDフィルター。指定されたCAN IDのデータをドロップします。 |
|
Any |
ブロックリスト型のチャンネルフィルター。指定されたチャンネルのデータをドロップします。 |
|
Any |
データ複製フィルター。RealtimeクライアントとBulkクライアントに同じデータを複製します。 |
6.2.4.1. samplingフィルター¶
チャンネルにサンプリングフィルターを設定すると、サンプリング間隔として指定された時間範囲内で各データIDのデータポイントが1つずつになるようにデータが間引きされます。
各サンプリング区間においては、データポイントは以下のように処理されます。
各データIDの最初のデータポイントはパスします。
同じデータIDの2つ目以降のデータポイントは破棄されます。
MotionJPEGのようにデータIDによる区別がない場合は、最初のデータポイントがパスします。
以下は、3種類の異なる頻度を持つCANデータ(ID 1、2、3)が、samplingフィルターによって間引きされる様子を示した図です。 各サンプリング区間においては、ID 1を持つデータのうち最初のデータポイントがフィルターをパスしています。同様に、各サンプリング区間において、ID 2を持つデータのうち最初のもの、ID 3を持つデータのうち最初のものがフィルターをパスしています。
samplingフィルターのsettingオブジェクトの内容
key |
value |
---|---|
rate |
サンプリング間隔[msec] |
例(Realtimeのチャンネル1を、1000[msec]の時間範囲を設定してサンプリング):
{
"manager": {
...
"filters": [{
"name": "sampling",
"channel": "1",
"target": "realtime",
"setting": [{"key": "rate", "value": "1000"}]
}]
},
...
}
6.2.4.2. can_idフィルター¶
特定のCAN IDのデータをパスし、それ以外のデータをドロップする、許可リスト型のフィルターです。
設定されたCAN IDのデータのみパスします。
複数のCAN IDを設定できます。
設定されていないCAN IDはドロップします。
拡張CAN IDを設定する場合は、
0x80000000
のように先頭ビットを立てた数値で入力してください。
can_idフィルターのsettingオブジェクトの内容
key |
value |
---|---|
id |
通過させるCAN ID |
例(Realtimeのチャンネル2のデータのうち、CAN ID 0x00000010と0x00000020だけパスする):
{
"manager": {
...
"filters": [{
"name": "can_id",
"channel": "2",
"target": "realtime",
"setting": [
{"key": "id", "value": "16"},
{"key": "id", "value": "32"}
]
}]
},
...
}
6.2.4.3. can_maskフィルター¶
特定のCAN IDのデータをドロップする、ブロックリスト型のフィルターです。
設定されたCAN IDをドロップします
複数のCAN IDを設定できます。
設定されていないCAN IDはパスします。
拡張CAN IDを設定する場合は、
0x80000000
のように先頭ビットを立てた数値で入力してください。
フィルターのsettingオブジェクトの内容
key |
value |
---|---|
id |
ドロップするCAN ID |
例(Bulkのチャンネル1の拡張CAN ID 0x00000010をドロップする):
{
"manager": {
...
"filters": [{
"name": "can_mask",
"channel": "1",
"target": "guaranteed",
"setting": [
{"key": "id", "value": "2147483664"}
]
}]
},
...
}
2147483664
は、0x00000010の先頭ビットを立てて、十進表記したものです。
6.2.4.4. channelフィルター¶
特定のchannelをドロップするブロックリスト型のフィルターです。
設定されたchannelのデータをドロップします
フィルターのsettingオブジェクトの内容
不要
例(Realtimeのチャンネル1をドロップする):
{
"manager": {
...
"filters": [{
"name": "channel",
"channel": "1",
"target": "realtime",
"setting": []
}]
},
...
}
6.2.4.5. duplicateフィルター¶
データを複製します。
データを複製し、RealtimeとBulkに同じデータを送信します
フィルターのsettingオブジェクトの内容
不要
例(Realtimeのチャンネル1のデータをコピーしてBulkにも送る):
{
"manager": {
...
"filters": [{
"name": "channel",
"channel": "1",
"target": "realtime",
"setting": []
}]
},
...
}
6.3. RAWデータ¶
デバイスコネクターからAgentに入力された全データを、RAWデータとしてダンプファイルに保存することができます。
6.3.1. RAWデータの保存と自動削除¶
RAWデータを保存するかは設定可能です。デフォルトでは保存する設定になっています。
RAWデータを保存し続けるとディスクが一杯になる可能性があるため、自動的にRAWデータを削除する設定があります。
{
"manager": {
"rawdir": "/var/lib/intdash/raw",
"raw_autodelete": true,
"raw_autodelete_th": 85,
...
},
...
}
raw_autodelete
をtrueに設定すると、RAWデータを保存するパーティションが一定の割合に達した場合にRAWデータを自動削除します。
自動削除は、RAWデータ保存ディレクトリ rawdir
が存在するパーティションのディスク使用率が raw_autodelete_th
よりも小さくなるまで、古いRAWデータから順に削除します。
6.3.2. RAWデータの保存先とファイル構成¶
RAWデータ保存ディレクトリに、計測ごとのディレクトリが作成され、その中にダンプファイルが保存されます。
+ /opt/vm2m/var/lib/intdash
+ raw
+ 1562549837.123456789 # (1)
- 001_000.raw # (2)
- 002_000.raw # (3)
+ 1562549837.999999999
- 001_000.raw
- 001_001.raw
番号 |
説明 |
---|---|
(1) |
計測ディレクトリ |
(2) |
チャンネル1のデバイスコネクターが送信したデータのダンプ |
(3) |
チャンネル2のデバイスコネクターが送信したデータのダンプ |
6.3.2.1. 計測ディレクトリ¶
計測ディレクトリは計測ごとに新規作成されます。ディレクトリ名は、計測のEdgeRTC基準時刻をUnix時間でナノ秒まで表記したものです。(例: ディレクトリ名 1562549837.123456789 は、基準時刻 2019/7/8 1:37:17.123456789 UTC を意味します。)
6.3.2.2. ダンプファイル¶
ダンプファイルは、デバイスコネクターごとのデータのダンプファイルです。ファイル名は以下のようになります。
XXX_NNN.raw
XXX : デバイスコネクターのチャンネル番号(10進数:000-255)
NNN : カウンター番号(10進数:000-999)
ダンプファイルのサイズが512MB以上になると、次のカウンター番号で新しいファイルが作られます。
6.3.2.3. ダンプファイルのフォーマット¶
ダンプファイルは Agentとデバイスコネクターの間で使われるFIFOのデータフォーマット (logger-msg) のデータをそのままファイルにダンプしたものです。
サンプル(NMEA)
6.3.3. RAWデータを解析するためのツール¶
Agentをインストールすると、RAWデータを解析するためのツールもインストールされます。
使用例 :
/opt/vm2m/bin/rawutil -P hexdump /opt/vm2m/var/lib/intdash/raw/1562551394.826226991/000_000.raw
ツールの詳しい使用方法については、 rawutil
のヘルプを参照してください。
/opt/vm2m/bin/rawutil -h
6.4. 再送データ¶
RealtimeクライアントまたはBulkクライアントによって送信が試みられ、intdashサーバーに正しく送信できなかったデータは、再送データとして保持されます。 再送データとして保持された時系列データは、Resendクライアントによる再送処理によって順次再送されます。
6.4.1. ディスクの空き容量が少なくなった場合の自動停止¶
ディスクの使用量が閾値を超えた場合、Agentは自動停止します。Agentは以下のいずれかの条件を満たすときに自動停止します。([]は設定ファイルのキーを表します。)
[manager.required_space]
< 再送データ保存先パーティションの使用率(%)[manager.required_space_raw]
<[manager.rawdir]
のパーティションの使用率(%)
6.4.2. 保存先とファイル構成¶
再送データ保存ディレクトリ以下に、計測ディレクトリが作成され、その中に再送セクションファイルを保存されます。
+ /opt/vm2m/var/lib/intdash
+ meas
+ <SERVER_NAME> # (1)
+ CCCCCCCCC_TTTTTTTTTT.NNNNNNNNN # (2)
- .meas.<MEAS_UUID> # (3)
- .meta # (4)
- SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT # (5)
- SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT
+ <SERVER_NAME>
+ CCCCCCCCC_TTTTTTTTTT.NNNNNNNNN
- .meas.<MEAS_UUID>
- .meta
- SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT
- SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT
番号 |
説明 |
---|---|
(1) |
サーバーディレクトリ |
(2) |
計測ディレクトリ |
(3) |
計測UUID |
(4) |
計測メタ情報 |
(5) |
再送セクション |
6.4.2.1. サーバーディレクトリ¶
サーバーディレクトリには、このサーバーへ送信する計測のデータが保存されます。 ディレクトリ名は、送信対象サーバーの名前です。
6.4.2.2. 計測ディレクトリ¶
計測ディレクトリは、計測ごとに新規作成されます。 ディレクトリ名は、下記のとおりです。
CCCCCCCCC_TTTTTTTTTT.NNNNNNNNN
CCCCCCCCC
: 計測回数TTTTTTTTTT.NNNNNNNNN
: 計測のEdgeRTC基準時間(ナノ秒までのUnix Timestamp)
6.4.2.3. 計測UUIDファイル¶
計測UUIDファイルは、計測UUIDをファイル名に含む空のファイルです。ユーザーが計測を見つけやすくするために作成されます。ファイル名は、 .meas.<計測UUID先頭8桁>
です。
6.4.2.4. 計測メタ情報ファイル¶
計測メタ情報ファイルには、計測に関する以下の情報が保存されています。
シリアルナンバー(最後のセクションのシリアル番号)
ユニットカウント(総ユニット数)
再送セクションファイル数
再送ファイルサイズ(総再送ファイルサイズ)
計測UUIDフラグ(計測UUIDを取得したか)
終了フラグ(計測終了をサーバーに通知したか)
計測タグフラグ(計測タグをサーバーに通知したか)
計測カウント(このターミナルで作成された計測のカウンター番号)
EdgeRTC基準時刻
計測時間
ファイル名は、 .meta
です。
6.4.2.5. 再送セクションファイル¶
再送セクションファイルは、intdashのSectionのUnitのみをダンプしたファイルです。
ファイル名は、 SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT
です。
S : セクションのシリアルナンバー
T : EdgeRTCからの相対時間(秒)
N : EdgeRTCからの相対時間(ナノ秒)
F : フラグ(B:基準時刻を含んでいる、なし:左記以外)
EXT : 拡張子(bin: 再送データ、store: ストア送信データ、store.bin: ストア送信の再送データ)
例:
0000000000_0000000013.517448529B.bin
0000000001_0000000014.002924135.bin
0000000002_0000000015.000175599.store
0000000003_0000000016.002819513.store.bin
6.5. Agentとデバイスコネクターの間で使われるFIFOのデータフォーマット (logger-msg)¶
重要
本章で説明するのはlogger-msgフォーマットです。 intdash Edge Agent 2で使用される新しいフォーマット(iscp-v2-compat)については、「intdash Edge Agent 2デベロッパーガイド」を参照してください。
AgentのFIFOが読み取るデータのフォーマットは、共通ヘッダー部分と、データタイプごとの固有部分から構成されます。
共通ヘッダー部分については、 共通ヘッダー を参照してください。
データタイプごとの固有部分については、 データタイプごとの固有部分 を参照してください。
以下は、プリミティブ文字列型の「Hello」という文字列のデータの例です。
重要
Agentとデバイスコネクターの間のFIFOで使われるデータフォーマットやデータタイプと、iSCPv1のデータフォーマットやデータタイプは異なります。
6.5.1. 共通ヘッダー¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| Type | Length |
+---------------+---------------+---------------+---------------+
| Time Sec |
+---------------+---------------+---------------+---------------+
| Time Nano |
+---------------+---------------+---------------+---------------+
| DataType | SeqNo | Data |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値の範囲 |
説明 |
---|---|---|---|---|---|
Type |
1 |
— |
なし |
1 |
メッセージの種類(1で固定) |
Length |
3 |
LE |
なし |
10-16777216 |
Time Sec以降のサイズ(Time Secを含む) |
Time Sec |
4 |
LE |
なし |
0-4294967295 |
システムの単調増加する時間(秒) 1 |
Time Nano |
4 |
LE |
なし |
0-999999999 |
システムの単調増加する時間(ナノ秒) |
DataType |
1 |
— |
なし |
— |
FIFOのデータタイプコード(下記、データタイプの表を参照) |
SeqNo |
1 |
— |
なし |
0-255 |
シーケンシャル番号(0固定でもデータ送信可能)(アップストリームを行う際、Agentはこのフィールドをデバイスコネクターから受け取りますが、intdashサーバーには送りません。また、ダウンストリームの際にAgentからデバイスコネクターが受け取るデータでは、このフィールドは常に0になります。) |
Data |
0-16777208 |
— |
— |
— |
データ(FIFOのデータタイプ毎の項を参照してください) |
- 1
POSIXを使用できるプログラミング言語では、
clock_gettime()
関数にCLOCK_MONOTONIC_RAW
を指定することで取得できます。
データタイプ
6.5.2. データタイプごとの固有部分¶
6.5.2.1. Status(データタイプ: 0x03)¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| StatusId | Reserved | Size |
+---------------+---------------+---------------+---------------+
| Data |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
StatusId |
1 |
— |
なし |
0x90 |
ステータスの種類(0x90で固定) |
Size |
2 |
LE |
なし |
0-32767 |
データサイズ |
Data |
0-32767 |
— |
— |
— |
JSON文字列 |
6.5.2.2. Basetime(データタイプ: 0x19)¶
ダウンストリームを行うAgentにおいて、デバイスコネクターの設定で receive_basetime
が true
になっていると、Agentからデバイスコネクターに基準時刻のデータが渡されます。
その際に使用されるデータフォーマットです。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| Source | Reserved |
+---------------+---------------+---------------+---------------+
| Sec |
+---------------+---------------+---------------+---------------+
| Nano Sec |
+---------------+---------------+---------------+---------------+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
Source |
1 |
— |
U |
Source(下記Sourceを参照) |
時刻のソース |
Sec |
4 |
LE |
U |
0-4294967295 |
計測開始時の時刻のUNIXエポック経過秒 |
Nano sec |
4 |
LE |
U |
0-999999999 |
計測開始時の時刻のUNIXエポック経過ナノ秒 |
Source |
時刻のソース |
---|---|
1 |
EdgeRTCから取得した時刻 |
2 |
NTPから取得した時刻 |
3 |
GPSから取得した時刻 |
255 |
手動設定された時刻 |
6.5.2.3. NMEA(データタイプ: 0x10)¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| Size |
+---------------+---------------+---------------+---------------+
| String |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
Size |
4 |
LE |
なし |
0-4294967295 |
データサイズ |
Data |
0-4294967295 |
— |
— |
— |
NMEA文字列 |
6.5.2.4. CAN/CAN-FD(データタイプ: 0x11)¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID |
+---------------+---------------+---------------+---------------+
| DLC | Data |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
ID |
4 |
LE |
なし |
0-4294967295 |
CAN ID(拡張CANの場合は先頭ビットを立てる) |
DLC |
1 |
— |
なし |
0-255 |
データサイズ |
Data |
0-255 |
— |
— |
— |
データ |
6.5.2.5. JPEG(データタイプ: 0x12)¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| JPEG |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
JPEG |
0-16777216 |
— |
— |
— |
JPEG (ISO/IEC 10918-1, Annex B) のバイナリデータ |
6.5.2.6. H.264(データタイプ: 0x1C)¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| NALType | NALUnits |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
NALType |
1 |
— |
— |
— |
NALType(下記NALTypeを参照) |
NALUnits |
— |
— |
— |
— |
NALUnits |
NALType
NALType |
NALUnitsに格納するデータ |
---|---|
0x00 |
|
0x01 |
non-IDR slice (nal_unit_type == 1)であるNAL Unitsの1フレーム分の連結 |
0x08 |
H.264のデコードに必要なNAL Units 4 の連結。NALType 0x00 の都度、先行して1つ生成するものとする。 |
- 2
nal_unit_type
が1-5 (Coded slice) の時、同一のnal_unit_type
のNAL unitについて、slice_header
のfirst_mb_in_slice
が0であるものから、次に0であるものの前までのNAL units- 3
“ITU-T Rec. H.264 | ISO/IEC 14496-10 Advanced Video Coding” における “Byte stream format (Annex B)” に従い、次のように連結すること: start code prefix + NAL unit + start code prefix + NAL unit ... start code prefix + NAL unit
- 4
H.264のデコードに必要なNAL unitsはSPS(
nal_unit_type == 7
)、PPS(nal_unit_type == 8
)のNAL units
6.5.2.7. String(データタイプ: 0x1D) プリミティブ文字列型¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID Length | ID |
+---------------+---------------+---------------+-----------//--+
| Data |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
ID Length |
1 |
— |
— |
0-255 |
IDの長さ |
ID |
0-255 |
— |
— |
0-16777215 |
UTF-8エンコードしたID |
Data |
— |
— |
— |
— |
文字列 |
6.5.2.8. Float(データタイプ: 0x01E)プリミティブFloat64型¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID Length | ID |
+---------------+---------------+---------------+-----------//--+
| Data |
+---------------+---------------+---------------+---------------+
| |
+---------------+---------------+---------------+---------------+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
ID Length |
1 |
— |
— |
0-255 |
IDの長さ |
ID |
0-255 |
— |
— |
0-16777215 |
UTF-8エンコードしたID |
Data |
8 |
LE |
— |
— |
倍精度浮動小数点数を格納したバイト列(IEEE 754に準拠) |
6.5.2.9. Int(データタイプ: 0x1F)プリミティブInt64型¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID Length | ID |
+---------------+---------------+---------------+-----------//--+
| Data |
+---------------+---------------+---------------+---------------+
| |
+---------------+---------------+---------------+---------------+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
ID Length |
1 |
— |
— |
0-255 |
IDの長さ |
ID |
0-255 |
— |
— |
0-16777215 |
UTF-8エンコードしたID |
Data |
8 |
LE |
あり |
— |
Int64 |
6.5.2.10. Bytes(データタイプ: 0x20)プリミティブバイト配列型¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID Length | ID |
+---------------+---------------+---------------+-----------//--+
| Data |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
ID Length |
1 |
— |
— |
0-255 |
IDの長さ |
ID |
0-255 |
— |
— |
0-16777215 |
UTF-8エンコードしたID |
Data |
— |
— |
— |
— |
バイナリデータ |
6.5.2.11. PCM(データタイプ: 0x22)¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| FormatID | Channels |
+---------------+---------------+---------------+---------------+
| SampleRate |
+---------------+---------------+---------------+---------------+
| BitsPerSample | Data |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
FormatID |
2 |
LE |
なし |
0-65535 |
WAVE 5 で定義されたフォーマットID |
Channels |
2 |
LE |
なし |
0-65535 |
格納される音声のチャンネル数 |
SampleRate |
4 |
LE |
なし |
0-4294967295 |
サンプリング周波数 [Hz] |
BitsPerSample |
2 |
LE |
なし |
0-65535 |
ビットレート [bit/sample] |
Data |
— |
— |
— |
— |
WAVE 5 に準拠する波形情報 |
6.5.2.12. Generic(データタイプ: 0x7F)¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID |
+---------------+---------------+---------------+---------------+
| Data |
+---------------+---------------+---------------+-----------//--+
フィールド名 |
バイト長 |
エンディアン |
符号 |
値 |
説明 |
---|---|---|---|---|---|
ID |
4 |
LE |
なし |
0-4294967295 |
数値ID |
Data |
0-65531 |
— |
— |
— |
任意のデータ |
6.6. Agentの全設定¶
Agentの設定ファイルの全項目について解説します。
設定ファイルは以下のような構成になっています。各項目に設定すべき内容については以下の節を参照してください。
注釈
設定ファイル内の「logger」はデバイスコネクターを指します。
キー |
型 |
説明 |
---|---|---|
manager |
object |
|
clients |
object[] |
|
loggers |
object[] |
例
{
"manager": {
...
},
"clients": [{
...
}],
"loggers": [{
...
}]
}
6.6.1. 環境変数を使って設定を置き換える¶
設定ファイル内の文字列型の設定値は、環境変数により与えることができます。環境変数で設定を与えることにより、設定ファイルを書き換えなくても、起動時に柔軟に設定内容を変更することができます。
例えば、 clients.my_secret
の値を環境変数で与えるためには、設定ファイル内に以下のように変数を書き込みます。以下の例では $SECRET
という変数を書き込んであります。
{
...
"clients": [
{
...
"my_secret": "$SECRET",
}],
...
}
その上で、上記の変数名にプリフィックス INTDASH_EDGE_
を付けた環境変数を設定します。この例では、 INTDASH_EDGE_SECRET
に値を設定します。
これらの準備をした上で、この設定ファイルを使ってintdash-edge-managerを起動すると、設定ファイル内の $SECRET
が環境変数 INTDASH_EDGE_SECRET
の値に展開され、使用されます。
注釈
環境変数を使って設定を置き換えることができるのは、文字列型の値のみです。
6.6.2. マネージャーに関する設定¶
マネージャーに関する設定は、設定ファイルの manager
フィールドにオブジェクトで設定します。設定できる項目は以下の通りです。
キー |
型 |
デフォルト値 |
説明 |
---|---|---|---|
|
string[] |
|
起動時に作成するディレクトリのパス |
|
string |
|
基準時刻情報を保存するファイルのパス |
|
string |
|
StatusプラグインがNTP基準時刻の取得に使用するNTPサーバー名のデフォルト値。ここに記載した値は |
|
string |
|
再送データを保存するディレクトリのパス |
|
string |
|
RAWデータを保存するディレクトリのパス |
|
bool |
|
RAWデータの自動削除 |
|
number |
|
RAWデータを自動削除する閾値[%] |
|
number |
|
Agentが計測停止の閾値[%]。再送データを保存するパーティションの空き容量率がこの値より大きくなった場合に計測を自動停止します。設定を100にすると、自動停止しません。 |
|
number |
|
Agentが計測停止の閾値[%]。RAWを保存するパーティションの空き容量率がこの値より大きくなった場合に計測を自動停止します。設定を100にすると、自動停止しません。 |
|
string |
|
Managerのステータスを記録するファイルのパス |
|
string |
|
Processのステータスを記録するファイルのパス |
|
string |
|
WWANのステータスを記録するファイルのパス |
|
string |
|
デバイスコネクターのステータスを記録するファイルのパスのフォーマット。 1つ目のフォーマット指定子(デフォルト値の例では |
|
string |
|
Systemのステータスを記録するファイルのパス |
|
object[] |
|
フィルターの設定。詳細については 送信側でのフィルタリング を参照してください。 |
6.6.3. クライアントに関する設定¶
クライアントに関する設定は、設定ファイルの clients
フィールドで行います。使用するクライアントに関する設定(オブジェクト)の配列として設定します。使用しないクライアントに関する設定のオブジェクトは不要です。設定できる項目は以下の通りです。
キー |
型 |
デフォルト値 |
説明 |
---|---|---|---|
|
string |
|
使用する通信ライブラリの名前( |
|
string |
|
クライアントの動作モード( |
|
number |
|
サーバーにデータを永続化するか(0: 永続化しない、1: 永続化する)。この設定は、type が |
|
string |
|
intdashに接続するEdgeのUUID |
|
string |
|
intdashに接続時に使用するクライアントシークレット |
|
string |
|
接続情報を保存するファイルのパスです。このファイルへの書き込み権限が必要です。 |
|
string |
|
intdashに接続時に使用するエッジトークン |
|
string[] |
|
サーバーへ送信するデータの宛先EdgeのUUID。typeが |
|
string |
|
ここで指定されたUUID宛てのデータのみをサーバーから受信します。 ただし、 指定された文字列をUUIDとして解析できない場合(デフォルトの この設定は、typeが |
|
string |
|
サーバーから受信するデータの送信元EdgeのUUID。typeがcontrolの場合に使用されます。2つのEdgeからのデータを受信する場合は、本設定ではなく |
|
string[] |
|
サーバーから受信するデータの送信元EdgeのUUID。2つのUUIDまで指定可能。typeがcontrolの場合に使用されます。 |
|
object[] |
|
サーバーから受信するデータのフィルター。フィルターの内容はctlr_flts.channel、ctlr_flts.dtype、ctlr_flts.idsを参照。 |
|
number |
|
サーバーから受信するデータのチャンネル。typeがcontrolの場合に使用されます。 |
|
number |
|
サーバーから受信するデータのiSCPデータタイプコード。typeがcontrolの場合に使用されます。 |
|
number[]またはstring[] (CAN、GenericのデータIDはnumberなので、number[]で指定してください。String、Float、Int、BytesのデータIDはstringなので、string[]で指定してください。) |
|
サーバーから受信するデータのID(オプショナル)。typeがcontrolの場合に使用されます。 CANの場合は、設定値を空の配列 |
|
number |
|
フラッシュ間隔[msec]。typeがrealtimeの場合に使用されます。 |
|
number |
|
再送周期[msec]。typeがresendの場合に使用されます。 |
|
bool |
|
Realtimeクライアントが再送データを作成するかの設定。typeがrealtimeの場合に使用されます。 |
|
number |
|
フラッシュ間隔[msec]。typeがbulkの場合に使用されます。 |
|
number |
|
フラッシュ間隔[unit数]。typeがbulkの場合に使用されます。 |
|
number |
|
送信間隔[msec]。typeがbulkの場合に使用されます。 |
|
number |
|
同時再送数。protocolがmod_httpの場合に使用されます。 |
|
string |
|
エッジが使用するintdashサーバーのホスト名+ドメイン名(FQDN)(例: |
|
string |
|
サーバーのリソースへのパス。(protocolが |
|
string |
|
SSL接続のセキュリティー設定( |
|
number |
|
エッジが使用するintdashサーバーの接続ポート。 |
|
string |
|
サーバー証明書のファイルパス(オプショナル)。 |
|
string |
|
クライアント証明書を使用する場合の証明書(オプショナル)。 |
|
string |
|
クライアント証明書を使用する場合の秘密鍵(オプショナル)。 |
|
string |
|
エッジが使用するプロジェクトのUUID。プロジェクトを指定しない場合は、Global Projectが使用されます。 |
|
string |
|
ユーザーエージェント(オプショナル)。 |
6.6.4. デバイスコネクターに関する設定¶
デバイスコネクターに関する設定は、設定ファイルの loggers
フィールドの配列にオブジェクトで設定します。設定できる項目は以下の通りです。
キー |
型 |
デフォルト値 |
説明 |
---|---|---|---|
|
string |
|
自動起動するデバイスコネクターのフルパス。 |
|
string |
|
自動起動するデバイスコネクターに2番目の起動引数として渡される文字列。1番目は |
|
string |
|
使用するプラグイン名( |
|
string |
|
使用するプラグインの実行ファイルが保存されているディレクトリ。 |
|
string |
|
プラグインに設定するJSONオブジェクト。設定内容はプラグインにより異なります。 |
|
string |
|
StatusプラグインがNTP基準時刻の取得に使用するNTPサーバー名。 |
|
bool |
|
プラグインを使用する場合に、デバイスコネクターの自動起動を行うかの設定。 |
|
number |
|
デバイスコネクターに設定するチャンネル(0-255)。 |
|
number |
|
ダウンストリーム時にデバイスコネクターに送信するデータのチャンネル(0-255)。 |
|
bool |
|
ダウンストリーム時にデバイスコネクターに基準時刻のデータが送信されるかの設定。 |
|
string |
|
通信に使用するFIFOのファイルパス。1つ目のフォーマット指定子(デフォルト値の例では |
|
string |
|
通信に使用するFIFOのファイルパス。1つ目のフォーマット指定子に(デフォルト値の例では |
|
number |
|
このチャンネルのデータをRAWデータとして保存するか(0:保存する、0以外:保存しない)。 |
6.7. Agentのログ¶
Agentは標準出力にログメッセージを出力します。
標準出力をリダイレクトすることによって、ログメッセージの保存先をファイルにすることができます。
例えば、以下のようにしてAgentを起動すると、ログメッセージは、 /var/run/intdash/intdash.log
に出力されます。
( ${CONF_PATH}
は、使用する設定ファイルのフルパスです。)
/opt/vm2m/sbin/intdash-edge-manager -C ${CONF_PATH} >/var/run/intdash/intdash.log 2>&1
6.7.1. ログメッセージのフォーマット¶
ログメッセージは、以下の例のようなフォーマットで出力されます。
01/13 01:51:49 intdash-edge-manager(1532): INFO : procedure(): CREATED
01/13 01:51:49 intdash-edge-manager(1532): INFO : start(): Manager thread STARTING
01/13 01:51:49 intdash-edge-manager(1532): INFO : procedure(): STARTED
01/13 01:51:49 intdash-edge-manager(1532): INFO : base_proc(): Manager thread STARTED
01/13 01:51:49 intdash-edge-manager(1532): INFO : proc(): Basetime (RTC monotonic) : 58469.155277440
01/13 01:51:49 intdash-edge-manager(1532): INFO : proc(): Basetime (RTC realtime) : 1610502709.225218700
01/13 01:51:49 intdash-edge-manager(1532): INFO : start(): RawDataHandler thread STARTING
01/13 01:51:49 intdash-edge-manager(1532): INFO : start(): DataSaver thread STARTING
^ ^ ^ ^
(1) (2) (3) (4)
番号 |
説明 |
---|---|
(1) |
発生日時 |
(2) |
モジュール名(プロセス番号) |
(3) |
プリフィックス( |
(4) |
関数名とログの内容 |
6.7.2. Agentアプリケーションに関するログメッセージ¶
Agentアプリケーションに関するログメッセージのうち、主なものは以下の通りです。
6.7.2.1. デバイスコネクターと接続するためのFIFOの作成¶
INFO : procDataReader(): DeviceProcess create pipe : /opt/vm2m/var/run/intdash/logger_000.tx
ログメッセージ内のパスは、intdash-edge-managerにより作成されたFIFOのパスです。
6.7.2.2. FIFOのオープン¶
INFO : procDataReader(): DeviceProcess open pipe : /opt/vm2m/var/run/intdash/logger_000.tx
ログメッセージ内のパスは、intdash-edge-managerによりオープンされたFIFOのパスです。
6.7.2.3. FIFOのクローズ¶
INFO : procDataReader(): close pipe:/opt/vm2m/var/run/intdash/logger_004.tx
ログメッセージ内のパスは、intdash-edge-managerによりクローズされたFIFOのパスです。
6.7.3. WebSocketでのリアルタイム送信に関するログメッセージ¶
WebSocketでのリアルタイム送信に関するログメッセージのうち、主なものは以下の通りです。
6.7.3.1. サーバーとのコネクション確立¶
INFO : callbackPacketEstablish(): REALTIME Upstream request succeed
6.7.3.2. 1つのセクションのデータを送信¶
1つのセクションのデータを送信したことを表すメッセージです。 この時点では、サーバー側での処理は完了していません。
INFO : callbackSndSectionEnd(): REALTIME 46 units and 1 basetimes with ID:2
^ ^ ^
(1) (2) (3)
番号 |
説明 |
---|---|
(1) |
セクションに含まれるユニットの数(基準時刻以外) |
(2) |
セクションに含まれる基準時刻ユニットの数 |
(3) |
セクションに与えられた通し番号 |
6.7.3.3. 1つのセクションの送信が完了¶
サーバー側で1つのセクションの処理が完了したことを表すメッセージです。 サーバーからACKを受信すると、このメッセージが出力されます。
INFO : callbackRcvPacket(): REALTIME(c4a0e287) ACK 2 (45/45 units)
^ ^ ^ ^
(1) (2)(3)(4)
番号 |
説明 |
---|---|
(1) |
計測ID |
(2) |
セクションに与えられた通し番号 |
(3) |
このセクションのユニット数 |
(4) |
この計測で送信した総ユニット数 |
6.7.3.4. 1つのセクションのデータを再送用にファイルとして保存¶
INFO : saveSection(): Store 2 units to /opt/vm2m/var/lib/intdash/meas/<SERVER_NAME>/<MEASUREMENT>/<SECTION>.bin
^ ^
(1) (2)
番号 |
説明 |
---|---|
(1) |
セクションに含まれるユニット数 |
(2) |
再送セクションファイルの保存先パス |
6.7.3.5. サーバーとのコネクションのクローズ¶
INFO : callbackPacketEstablish(): REALTIME Upstream closed