モノのインターネット (IoT) が急成長をとげています。 スマートルーター、各種テレビドングル、Tmall Genie、ロボット掃除機などますます多くの IoT デバイスが日常生活に導入され、インテリジェンスの利便性は向上しています。 Gartner の予測によると 2020 年末までのスマホ稼働数は約 200 億台であり、IoT 市場の巨大化を垣間見ることができます。 従来のソフトウェアによる組み込み開発モデルは、IoT 関連の大きな課題に直面しています。 IoT デバイス数は激増、流通範囲が拡大し、ハードウェアのデバッグと制限が複雑になった結果、 従来のデバイスログソリューションでは、完全に要求を満たせなくなってしまいました。
長年にわたる Logtail の開発経験および IoT デバイスの特性をもとに、Log Service チームは IoT デバイス用のログデータ収集ソリューションをカスタマイズしました。それが C Producer Library です。

組み込み開発要件
IoT または組み込み開発エンジニアには、開発に関する深い知識と経験、多数のブラックボックスの管理、監視、および診断を行うスキルが必要となります。 以下は、組み込み開発の主な要件です。
- データ収集:エンジニアは、世界中に分散した数百万台または数千万台のデバイスからリアルタイムでデータを収集します。
- デバッグ:エンジニアは、1 つのソリューションを使用して、オンラインデータ収集と開発時のリアルタイムデバッグの両方の要件を満たします。
- オンライン診断:エンジニアはオンラインデバイスで発生したエラーをすばやく見つけてエラーコンテキストを確認します。
- 監視:現在オンラインのデバイスの数。 作業ステータスの分布。 地理的分布。 エラー発生時におけるデバイスからのリアルタイムアラート送信方法。
- リアルタイムデータ分析:デバイスから生成されたデータをリアルタイムコンピューティングとビッグデータウェアハウスと統合してユーザープロファイルを構築します。

IoT 分野の主要課題
前述の問題解決策を考えると、従来のソフトウェアでは IoT 分野では効果がありません。 主な課題の原因は、IoT デバイスの次の特性です。
- 大量のデバイス:従来の O&M 分野では管理対象のサーバーが 10,000 台であれば大規模とされましたが、 IoT 分野では管理対象のオンラインデバイスが 100,000 台であっても少ないです。
- 広範な分布:デプロイされたハードウェア デバイスは全国または世界中に分布されます。
- ブラックボックス: IoT デバイスは未確認状態の場合がほとんどなので、 ログオンおよびデバッグが困難です。
- リソースの制限:IoT デバイスは、コスト削減のためハードウェアがかなり制限されています (たとえば、メモリの合計サイズは 32 MB のみ)。 その結果、従来の PC へのログ収集方法は IoT 分野では機能しません。
C Producer Library:Log Service によってカスタマイズされたログデータ収集ソリューション
Log Service のクライアントである Logtail は数百万台の x86 にデプロイされます。 詳細については、Logtail テクノロジーの共有の『』および『』をご参照ください。 また、Log Serviceは以下のような収集ソリューションを提供します。
- モバイル SDK:数千万人のアクティブユーザー (DSO) を持つ Android または iOS プラットフォームから毎日データを収集します。
- Web Tracking (JS):Baidu Tongji やGoogle アナリティクスと同様に、署名なしで軽量の収集モードを使用しています。
IoT 分野では、長年にわたる Logtail の開発経験と、CPU、メモリ、ディスク、ネットワーク、アプリケーションモードに関する IoT デバイスの特性を踏まえ、IoT デバイス向けのログデータ収集ソリューション「C Producer Library」を開発しました。

C Producer Library の特長
軽量の Logtailと同様に、C Producer Library も少ないリソース消費で優れた安定性と性能を提供します。 Logtail にはリアルタイムの設定管理機能はありませんが、C-Producer Library には Logtail の機能の 70% が含まれています。
- 複数のテナント:C Producer Library は、優先順位に応じてさまざまな種類のログ (メトリック、デバッグログ、ErrorLog など) を処理できます。 複数のクライアントを設定できます。各クライアントは収集の優先度とターゲット プロジェクトまたはログストアを使用して個別に構成できます。
- コンテキストクエリ:同じクライアントから生成されたログは同じコンテキストにあり、ログの前後に関連するログを表示できます。
- 同時送信と再開可能アップロード:キャッシュの上限を設定できます。 上限を超えるとログの書き込みが失敗します。
さらに、C Producer Library には IoT デバイス固有の次の機能が含まれます。
- ローカルデバッグ:ログはローカルデバイスにエクスポートできます。 回転、ログ数量、回転サイズを設定できます。
- きめ細かなリソース制御:異なるキャッシュの上限と集約モードは、異なるタイプのデータまたはログに対して設定できます。
- ログのキャッシュの圧縮:送信に失敗したデータのキャッシュを圧縮して、デバイスのメモリ使用量を減らすことができます。

C Producer Library の利 点
IoT デバイスのカスタムソリューションとして、C Producer Library には、次のような明らかな利点があります。

- クライアントでの大量同時書き込み:設定可能な送信スレッド プールを使用して、毎秒数十万のログを書き込むことができます。 詳細については、このページの「パフォーマンステスト」をご参照ください。
- 少ないリソース消費: 毎秒 200,000 ログエントリが書き込まれた場合でも、CPU 占有率は 70% です。 パフォーマンスの低いハードウェア (Raspberry Pi など) で毎秒 100 個のログエントリが生成されても、リソースは影響を受けません。
- クライアントログのディスク上のデータ コピーなし:データは、生成後にネットワークを介してサーバーに直接送信されます。
- I/O ロジックから分離されたクライアントコンピューティング:ログは、作業スレッドをブロックすることなく、非同期に生成されます。
- 複数の優先順位: 異なる優先順位で異なるクライアントを構成して、優先順位の高いログが最初に送信されることを確認できます。
- ローカルデバッグ:ネットワークが使用できない場合にアプリケーションをローカルでテストできるように、ローカルデバッグを設定できます。
前述のシナリオでは、 C Producer Library を使用すると、アプリケーションの開発が簡略化されます。 ログ収集の詳細を考慮したり、ログ収集がビジネスオペレーションに与える影響を心配したりする必要がなくなり、 非常にデータ収集がしやすくなります。
明確にするために、C Producer Library と他の組み込み収集用ソリューションを比較しました。 次の表に、比較結果を示します。
タイプ | C Producer Library | その他のソリューション | |
---|---|---|---|
プログラミング | プラットフォーム | モバイル + 埋め込み | モバイルベース |
コンテキスト | サポートあり | サポートなし | |
複数のログ | サポートあり | サポートなし (1 種類のログ) | |
カスタム形式 | サポートあり | サポートなし (制限付きフィールドに一部提供あり) | |
優先度 | サポートあり | サポートなし | |
環境パラメーター | 設定可能 | 設定可能 | |
安定性 | 並行処理 | 高 | 中 |
圧縮アルゴリズム | LZ4 (効率とパフォーマンスのバランス) + Gzip | 最適化 | |
低いリソース消費 | 最適化 | 媒体 | |
送信 | 再開可能なアップロード | サポートあり | デフォルトでは再開可能なアップロードはサポートされていません。 二次開発が必要です。 |
アクセスポイント | 8 (中国国内) + 8 (中国国外) | 杭州 | |
デバッグ | ローカルログ | サポートあり | 手動モードでサポートあり |
パラメーター設定 | サポートあり | サポートなし | |
リアルタイムパフォーマンス | サーバー側に表示 | 1 秒 (99.9%) から 3 秒 (最大) | 1 ~ 2 時間 |
カスタム処理 | 15 を超える相互接続モード | カスタマイズされたリアルタイムおよびオフラインソリューション |
C Producer Library + Log Service ソリューション
Alibaba Cloud Log Service と統合されたC Producer Library は、IoT デバイス向けログソリューションのフルセットです。
- 大規模
- クライアント上で数億のログエントリのリアルタイムでの書き込みをサポートします。
- ペタバイトのデータの書き込みを 毎日 サポートします。
- 高速
- 高速データ収集:書き込まれた直後にデータを使用できます。
- クイッククエリ:複雑なクエリステートメント (5 つの条件) を使用して、1 秒以内に数十億のデータレコードを処理および照会できます。
- 迅速な分析: 複雑な分析ステートメント (5 次元と GroupBy ステートメントで集約) を使用して、1 秒以内に数億件のデータレコードを集約および分析できます。
- 幅広い相互接続
- 各種 Alibaba Cloud 製品とシームレスに統合します。
- さまざまなオープンソースストレージ、コンピューティング、ビジュアルシステムと互換性があります。

ダウンロードと使用方法
ダウンロード URL:Github
1 つのアプリケーションで複数のプロデューサを作成でき、各プロデューサには複数のクライアントを含めることができます。 各クライアントは、ターゲットアドレス、ログレベル、ローカルデバッグ、キャッシュ サイズ、カスタム識別子、およびトピックを個別に設定できます。
インストール方法と操作手順の詳細については、「README」をご参照ください。

パフォーマンステスト
- 高パフォーマンスのシナリオ:従来の x86 サーバー。
- 低パフォーマンスのシナリオ:Raspberry Pi (低消費電力環境)。
設定は以下のとおりです。

-
ARM (Raspberry Pi)
- キャッシュ:10 MB
- 集約時間:3 秒 (集約時間、集約データのパッケージサイズ、および集約ログ数のいずれかの条件を満しているデータは、パッケージ化されて送信されます)
- 集約データのパッケージサイズ:1 MB
- 集約ログ数:1,000
- 送信スレッド:1
- カスタムタグ:5
-
x86
- キャッシュ:10 MB
- 集約時間:3 秒 (集約時間、集約データのパッケージサイズ、および集約ログ数のいずれかの条件を満しているデータは、パッケージ化されて送信されます)
- 集約データのパッケージサイズ:3 MB
- 集約ログ数:4,096
- 送信スレッド:4
- カスタムタグ:5
- キー値ペア 10 個の合計データ量は約 600 バイトです。
- キー値ペア 9 個の合計データ量は約 350 バイトです。
__source__: 11.164.233.187
__tag__:1: 2
__tag__:5: 6
__tag__:a: b
__tag__:c: d
__tag__:tag_key: tag_value
__topic__: topic_test
_file_: /disk1/workspace/tools/aliyun-log-c-sdk/sample/log_producer_sample.c
_function_: log_producer_post_logs
_level_: LOG_PRODUCER_LEVEL_WARN
_line_: 248
_thread_: 40978304
LogHub: Real-time log collection and consumption
Search/Analytics: Query and real-time analysis
Interconnection: Grafana and JDBC/SQL92
Visualized: dashboard and report functions
テスト結果
x86 プラットフォームでのテスト結果
- C Producer Library は、毎秒最大 90 MB のデータを送信します。 毎秒 200,000 ログ エントリをアップロードしても、わずか CPU の 70% と 140 MB しか消費されません。
- サーバーの送信速度が毎秒 200 エントリの場合、送信データは基本的に CPU に影響を与えません (0.01% 未満に減少します)。
-
クライアントスレッドがデータエントリを送信 (またはログエントリを生成) するための平均所要時間は 1.2 μs です。

Raspberry Pi プラットフォームでのテスト結果
- Raspberry Pi テストでは、CPU 周波数はわずか600 MHzです。 したがって、パフォーマンスはサーバーの約 10% です。 送信速度の最大速度は、毎秒 20,000 ログエントリです。
- Raspberry Pi の送信速度が毎秒 20 エントリである場合、基本的にデータ送信は CPU に影響を与えません (0.01%未満に減少)。
- Raspberry Pi は、PC 共有ネットワークに接続するために USB を使用しています。 クライアントスレッドがデータのエントリを送信 (またはログ エントリを生成) するための平均所要時間は約 12 μs です。
