永続化プロバイダとしての InfluxDB の使用
概要
システムで大量の時系列データが処理され、データの永続化/読み込みに関して実装が値ストリームまたはストリームに大きく依存している場合、ThingWorx で
永続化プロバイダとして InfluxDB を使用することをお勧めします。InfluxDB は、時系列データ専用に記述された高性能なデータストアです。同データの高スループットでの取得、圧縮、リアルタイムのクエリーを可能にします。InfluxDB は、DevOps の監視、ログデータ、アプリケーション判定基準、IoT センサーデータ、リアルタイムアナリティクスなど、大量のタイムスタンプ付きデータを処理するあらゆるユースケースでデータストアとして使用されます。データ保持ポリシー (RP) などの機能も提供されます。InfluxDB Enterprise は、時系列データのニーズを満たす高可用性および高スケーラブルなクラスタリングソリューションを提供します。
InfluxDB データ永続化ストレージプロバイダは、プロパティプロバイダに使用される PostgreSQL、MSSQL、または Azure SQL のデフォルトインストールの一部として使用できます。
• InfluxPersistenceProviderPackage
• Influx2PersistenceProviderPackage
ThingWorx は OSS、Enterprise、および Cloud のバージョンをサポートしています。
• InfluxDB OSS 1.x と InfluxDB Enterprise 1.x は InfluxPersistenceProviderPackage を介してサポートされています。InfluxDB Enterprise は InfluxDB 1.x でのみサポートされています。
• InfluxDB OSS 2.x は Influx2PersistenceProviderPackage を介してサポートされています。
• InfluxDB Cloud は Influx2PersistenceProviderPackage を介してのみサポートされています。
サポートされている特定のバージョンについては、
Release Advisor を参照してください。
|
Influx 2.0 へのサポートが 9.3.1 から ThingWorx に追加されています。
|
|
InfluxDB データプロバイダは、現在のところ、値ストリームとストリームのみをサポートしています。データテーブル、Wiki、ブログはサポートされていません。
|
|
データエクスポートは InfluxPersistenceProviderPackage でサポートされており、ThingWorx 9.3.8 以降ではデータエクスポートが Influx2PersistenceProviderPackage でサポートされるようになりました。
|
|
InfluxDB はプロパティプロバイダとしてはサポートされていません。
|
|
ThingWorx 9.3.9 以降および ThingWorx 9.4.0 以降にアップグレードし、InfluxDB OSS 2.0 を使用して Influx2PersistenceProviderPackage を活用するには、InfluxDB v2.6 へのアップグレードの前にエクスポートが必要であるため、InfluxDB OSS v2.6 に移行するために ThingWorx 9.3.8 にアップグレードする必要があります。InfluxDB Cloud の場合、アップグレードの前にエクスポートが必要ではないため、ThingWorx 9.3.9 以降および ThingWorx 9.4.0 以降へのアップグレードの前に ThingWorx 9.3.8 に移行する必要はありません。
|
InfluxDB Enterprise と ThingWorx の開始にあたっての全体像
| 上記の図には InfluxDB Enterprise が含まれています。InfluxDB オープンソースでもアーキテクチャの図は同じですが、1 つのノードでのみ機能します。また、InfluxDB Cloud の場合、データベースは ThingWorx 環境外でホストされ、InfluxData 社によって管理されます。 |
このドキュメンテーションでは、InfluxDB Enterprise の設定に関して以下の用語が使用されます。
• ロードバランサー - InfluxDB Enterprise はロードバランサーとして機能しません。管理者がこれを設定する必要があります。
• クラスタ - InfluxDB Enterprise のクラスタはメタノードとデータノードの 2 つのタイプのノードから成ります。
• データノード - 生の時系列データがすべてここに格納されます。高可用性を確保するためには、レプリケーション係数を 2 以上にする必要があります。
• メタノード - これらのノードは、状態を安定させるという単純なジョブを実行します。ここには、保持ポリシー、ユーザー、データベースなど、状態に関する基本的な情報だけが格納されています。高可用性環境では、少なくとも 3 つのメタノードが必要です。
適切な Influx データベースオプションの選択
PTC のオンプレミス顧客に対して現在使用可能な 2 つの InfluxDB オプションの概要を次に示します。Influx 製品を選択する際には、データベースソフトウェアオプションと基礎となるサポートオプションを慎重に検討する必要があります。正しいデータベースオプションを選択する際の質問は、Influx サポート:
https://www.influxdata.com/contact-sales にお問い合わせください。PTC のお客様は、自身を PTC ThingWorx ユーザーとして識別する必要があります。
• InfluxDB オープンソース OSS (単一ノード)
◦ 単一のノードのみであり、スケーラブルではありません。
◦ 無料
◦ Influx テクニカルサポートの制限により (緊急の場合の Influx のリアルタイムサポートはありません)、運用インスタンスには推奨されません。
◦ PTC のお客様は、データベースのメンテナンスと監視について責任を持つものとします。
◦ PTC では、Influx 推奨事項について最大限の努力を試みますが、一部の状況では、Influx のテクニカルリソースにエスカレートする必要が生じる場合があります。
• InfluxDB Enterprise
ほかのデータベースで現在提供されているものより容量が大きくデータ処理が高速なデータストアを探している場合、InfluxDB Enterprise を利用することによって以下のような利点がもたらされます。
◦ より高速なデータの取得。
◦ ランタイムデータ用に複数のデータリポジトリを持つことができます。たとえば、リレーショナルデータを PostgreSQL に保存したまま、InfluxDB を使用して大量のストリームデータと値ストリームデータを処理できます。ストリームまたは値ストリームを定義する際には、ThingWorx ではデフォルトのランタイムデータストアプロバイダを使用しますが、ユーザーが定義した永続化プロバイダを使用するように設定できます。ほかのデータプロバイダからデータをエクスポートして InfluxDB にインポートすることもできます。ThingWorx ではデータ抽象化が処理されます。
◦ クラウドに適したアーキテクチャ (水平スケール、InfluxDB Enterprise のみ)。
◦ 高可用性を使用できます。
◦ InfluxData の Influx サポートサイトを使用して、Influx の契約で使用可能な Influx テクニカルサポート。
◦ PTC のお客様は、必要に応じ、PTC/Influx コラボレーションのチケットを Influx でオープンすることができます。
◦ PTC のお客様は、データベースのメンテナンスと監視について責任を持つものとします。
• InfluxDB Cloud (ThingWorx 環境外でホストされ、InfluxData 社によって管理される)
InfluxDB Cloud の利点は以下のとおりです。
◦ InfluxDB Cloud は、クラウドネイティブ、マルチテナント、エラスティックスケール、サーバーレスのプラットフォームとして構築されています。
◦ AWS、Google、および Azure の複数のリージョンで可用性、永続性、およびスケーラビリティを提供します。
◦ これは安全で、最新のセキュリティ機能とパッチをすべてインストールして設定することにより保護されています。
◦ InfluxDB Cloud は、クラスタのバランスを自動的に調整し、シャーディングを処理し、組み込みのレプリケーション係数を活用します。
InfluxDB のインストールおよび設定
| Influx データベースをインストールするすべての人が、InfluxDB のすべてのセキュリティ関連ドキュメンテーションを読んで理解している必要があります。ユーザー名と強力なパスワードを含む安全なコンフィギュレーションを使用して InfluxDB をインストールして設定することを強くお勧めします。 |
| InfluxDB のマシンと ThingWorx のマシンのタイムゾーンが異なる場合、データをフェッチする際に問題が生じることがあります。これらの問題を回避するには、以下のいずれかのデプロイメントオプションが推奨されます。 • InfluxDB と ThingWorx を同じホスト/マシンにデプロイします。 • InfluxDB と ThingWorx が異なるホスト/マシンに展開されている場合は、クエリー結果に関連する問題を回避するために、クロックが同期化されている -Duser.timezone Tomcat パラメータと InfluxDB サーバーのタイムゾーンが整合していなければなりません。 |
1. InfluxDB のダウンロードとインストール
◦ InfluxDB 2.0 のダウンロードとインストールのガイドライン:
▪ InfluxDB Enterprise (高可用性): Influx 2.0 では使用できません
◦ InfluxDB 1.x のダウンロードとインストールのガイドライン:
| InfluxDB は Windows ではサポートされていません。以下の手順では UNIX OS を使用しています。 |
ダウンロードリンク:
ダウンロードリンク - データノード:
ダウンロードリンク - メタノード:
2. Influx1 の場合
InfluxDB 内にデータベースを作成します。InfluxDB 内にデータベースを作成するには、
thingworxInfluxDBSetup.sh スクリプトを取得して実行します。スクリプトを実行する場所から InfluxDB コマンドラインインタフェースが使用可能でなければなりません。詳細については、
「Launchinflux」を参照してください。
| thingworxInfluxDBSetup.sh スクリプトは、PTC サポートポータルから入手可能なソフトウェアダウンロードパッケージの install フォルダに含まれています。 |
デフォルトの保持ポリシーでデータベースを作成するコマンドの例を以下に示します。
CREATE DATABASE thingworx with DURATION 365d REPLICATION 1 SHARD DURATION 30d NAME autogen
| 現在、InfluxDB データプロバイダは autogen という名前の保持ポリシーのみをサポートしています。データプロバイダで使用するデータベースを作成する際に、ポリシー名やその他のポリシー (レプリケーション係数など) を指定できます。 |
InfluxDB コマンドラインインタフェースから InfluxDB ユーザーを作成します。ユーザーを作成するコマンドの例を以下に示します。
CREATE USER twadmin WITH PASSWORD 'password' WITH ALL PRIVILEGES
4. ThingWorx Composer で、新しい永続化プロバイダを作成します。
5. 「永続化プロバイダパッケージ」フィールドで、以下のように選択します。
◦ Influx 2.0 より前のバージョンの場合は、 InfluxPersistenceProviderPackage を選択します。
◦ Influx 2.0 バージョンの場合は、Influx2PersistenceProviderPackage を選択します。
6. 「保存」をクリックします。
7. 「コンフィギュレーション」タブをクリックし、必要に応じて接続情報を設定して保存します。以下のテーブルに示すコンフィギュレーションオプションを参考にしてください。
(InfluxDB 永続化プロバイダパッケージを使用して作成された) 永続化プロバイダインスタンスをデフォルトの
永続化プロバイダとして使用している場合、以下のストリームおよび値ストリームキューのコンフィギュレーション設定を編集できます。これらの編集はすべてのストリームと値ストリームに適用されます。特定のストリームまたは値ストリームについてこれらの設定を変更することはできません。
| 値ストリームの永続化プロバイダを (ThingworxPersistenceProvider から InfluxPersistenceProviderPackage などに) 切り替える場合、値ストリームを実装するすべての Thing が RestartThing サービスを呼び出して、新しい永続化プロバイダに書き込まれたエントリを取得する必要があります。Thing が再起動されない場合でもエントリはデータベースに書き込まれますが、Thing が再起動されるまで取得されません。 |
Influx 2.0 の接続情報
名前 | 説明 | デフォルト値 |
---|
接続 URL | 接続の取得元となるデータベースの URL。 | http://localhost:8086 |
トークン | システムにアクセスするためのセキュリティトークン。パスワードの代わりに使用されます(appkey と同様)。 | |
組織名 | 組織の名前 | |
バケット名 | データバケットの名前 (すべてのデータが保存されるスキーマ)。 | |
バケットを自動作成 | true に設定した場合、bucketName で指定されているバケットが作成されます (まだ存在しない場合)。true に設定していない場合、バケットが存在しなければエラーが発生します。 | False |
保持期間 (日数) | データが保持される日数。この期間が経過すると、データは削除されます。デフォルトは 0 で、データは永久に保持されます。 | 0 |
バッチサイズ | これは Influx クライアントによって使用されるバッチサイズです。パフォーマンスを向上させるため、データポイントを常にバッチで送信します。これはストリームバッチサイズには含まれません。バッチサイズのデータポイント数を送信する準備が整った後、データを Influx に送信します。 | この値は使用されておらず、今後のリリースで除去されます。 |
| 1000 |
フラッシュ間隔 | バッチサイズに達していない場合に Influx クライアントがデータをフラッシュする頻度を指定します。値はミリ秒単位で指定します。 | この値は使用されておらず、今後のリリースで除去されます。 |
| 1000 (1 秒に 1 回) |
永続化プロバイダからのデータのフェッチサイズ | クライアント側ですべての行をキャッシュする代わりに、バッチ内でフェッチされる行数。 | 5000 |
接続タイムアウトの時間 | Influx への接続を試行する時間。値は秒単位で指定します。 | 10 |
読み取りタイムアウトの時間 | 1 回のリクエストで Influx からデータを読み取る時間。値は秒単位で指定します。 | 10 |
書き込みのタイムアウトの時間 | Influx へのデータの書き込みを試行する時間。値は秒単位で指定します。 | InfluxDB Cloud の場合、「書き込みのタイムアウトの時間」を 20 秒に設定することをお勧めします。 |
| 10 |
ログレベル | Influx クライアントのログレベル。ログはコンソール出力に送信されます。値を NONE、BASIC、HEADERS、または BODY に指定でき、この順で提供される情報が増えます。 | なし |
Influx 1.8 の接続情報
名前 | 説明 | デフォルト値 |
---|
接続 URL | 接続の取得元となるデータベースの URL。 | http://localhost:8086 |
データベーススキーマ | 接続するときのスキーマ。 | thingworx |
ユーザー名 | データベース接続を取得するときのユーザー名。 | twadmin |
パスワード | データベース接続を取得するときのパスワード。 | 該当なし |
永続化プロバイダからのデータのフェッチサイズ | 永続化プロバイダからのデータのフェッチサイズ。 | 5000 |
接続タイムアウトの時間 | 接続タイムアウトの時間 (秒)。 | 10 |
読み取りタイムアウトの時間 | 読み取りタイムアウトの時間 (秒)。 | 10 |
書き込みのタイムアウトの時間 | 書き込みタイムアウトの時間 (秒)。 | 10 |
Influx 1.8 および 2.0 でのストリーム処理の設定
名前 | 説明 | ベースタイプ | デフォルト値 |
---|
最大キューサイズ | キューに入るストリームエントリの最大数。指定された値に達すると、それ以降のエントリが却下されます。 | Number | 250000 |
ストリームバッファをフラッシュする前の最大待機時間 (ミリ秒) | ストリームバッファをフラッシュするまでシステムが待機するミリ秒数。 | Number | 2000 |
処理スレッド数 | ストリームに割り当てられる処理スレッドの数。 | スレッド数が少ない方が InfluxPersistenceProviderPackage プロバイダのパフォーマンスは高くなります。これは少ない数のチャンネルからのデータを処理するために高度に最適化されています。 現在、これは Influx2PersistenceProviderPackage には当てはまりません。スループットを向上させるためにスレッドの数を増やすことをお勧めします。InfluxDB Cloud の場合、スループットを 80,000 wps にするために、「処理スレッド数」を 10、「最大キューサイズ」を 1000000、および「プロセスブロックの値ストリーム書き込み最大数」 を 25000 に増やすことをお勧めします。 |
| Number | 5 |
ストリームバッファをフラッシュする前の最大アイテム数 | ストリームバッファをフラッシュするまで累積されるアイテムの最大数。 | Number | 1000 |
プロセスブロックの値ストリーム書き込み最大数 | 1 つのブロックで処理されるストリーム書き込みの最大数。 | Number | 2500 |
バッファステータスのスキャン速度 (ミリ秒) | 指定した間隔の値 (ミリ秒) でバッファステータスがチェックされます。 | Number | 5 |
Influx 1.8 および 2.0 での値ストリーム処理の設定
名前 | 説明 | ベースタイプ | デフォルト値 |
---|
最大キューサイズ | キューに入る値ストリームエントリの最大数。指定された値に達すると、それ以降のエントリが却下されます。 | Number | 500000 |
値ストリームバッファをフラッシュする前の最大待機時間 (ミリ秒) | 値ストリームバッファをフラッシュするまでシステムが待機するミリ秒数。 | Number | 10000 |
処理スレッド数 | 値ストリームに割り当てられる処理スレッドの数。 | スレッド数が少ない方が InfluxPersistenceProviderPackage プロバイダのパフォーマンスは高くなります。これは少ない数のチャンネルからのデータを処理するために高度に最適化されています。 現在、これは Influx2PersistenceProviderPackage には当てはまりません。スループットを向上させるためにスレッドの数を増やすことをお勧めします。InfluxDB Cloud の場合、スループットを 80,000 wps にするために、「処理スレッド数」を 10、「最大キューサイズ」を 1000000、および「プロセスブロックの値ストリーム書き込み最大数」 を 25000 に増やすことをお勧めします。 |
| Number | 5 |
値バッファをフラッシュする前の最大アイテム数 | 値ストリームバッファをフラッシュするまで累積されるアイテムの最大数。 | Number | 1000 |
プロセスブロックの値ストリーム書き込み最大数 | 1 つのブロックで処理されるアイテムの最大数。 | Number | 2500 |
バッファステータスのスキャン速度 (ミリ秒) | 指定した間隔の値 (ミリ秒) でバッファステータスがチェックされます。 | Number | 5 |
8. 「一般情報」タブをクリックし、
「アクティブ」チェックボックスをオンにします。
![](../../../../../ThingWorx/images/influxdb_04.png)
9. 「保存」をクリックします。
最良事例
系列の上限
シリーズとは、InfluxDB に記録されるすべての Thing のプロパティの総数のことです。InfluxDB は、10,000 や 100,000 などの少量の Thing や Thing プロパティに大きなデータボリュームを割り当てることによって優れたパフォーマンスを発揮します。InfluxDB では系列の総数がデフォルトで 100 万に制限されています。この上限を増やすことはできますが、系列数がこの上限を超えると InfluxDB のパフォーマンスは低下します。
多数の Thing やプロパティがある場合、データボリュームが最大のものを選択し、それらだけを InfluxDB に割り当てて PostgreSQL または MSSQL の負荷を軽減できます。
あるいは、系列を複数のサーバーに分ける場合、InfluxDB サーバーの各インスタンスを割り当てた、複数の InfluxDB データプロバイダのインスタンスを作成できます。
書き込みの上限
32 コア 60 GB メモリの仮想マシンでの書き込みの上限は 1 秒当り 100,000 回です。この上限を超えると ThingWorx で問題が発生し、データベースへの書き込みなどのリクエストやジョブを処理するリソースが不足する可能性があります。その時点で、InfluxDB はデータベースへの書き込みを続行しますが、ThingWorx は機能停止します。PostgreSQL ではこの問題はありません。これは、PostgreSQL がボトルネックとなり、ThingWorx は内部でタスクを処理するリソースが不足する段階まで達することがないためです。
SSL/セキュア接続
InfluxDB は SSL 接続と HTTPS 接続をサポートします。SSL 接続と HTTPS 接続を有効にすることで、ThingWorx と InfluxDB 間のネットワークがサポートされない場合のセキュリティを向上させることができます。署名に使用したプライベートキーが安全に保管されている場合、自己署名証明書で十分です。
プロパティのベースタイプに関する InfluxDB の既知の制限
値ストリームに記録された後でプロパティのベースタイプを変更することはできません。詳細については、
「Type conflict on insert int value in float field#3460」を参照してください。
プロパティのパージ
PurgeAllPropertyHistory、PurgeSelectedPropertyHistory、および PurgePropertyHistory サービスを使用して、InfluxDB からプロパティをパージできます。startDate および endDate パラメータを使用して、範囲を指定します。
| Influx2PersistenceProviderPackage プロバイダを使用している場合、パージはサポートされていません。PurgePropertyHistory、PurgeAllPropertyHistory、PurgeSelectedPropertyHistory サービスは無効です。 |