C Producer は、Simple Log Service が IoT (Internet of Things) および組み込みデバイス向けに提供するログ収集ライブラリです。ハードウェアリソースが限られたデバイス上でログを収集し、デバッグ用にデバイス上にログコンテンツのコピーを保持し、収集したデータをクエリと分析のために Simple Log Service に送信します。
C Producer はデバイス上で実行され、収集したログデータをネットワーク経経由で Simple Log Service に送信します。以下の図は、IoT デバイス向けのログデータ収集ソリューションを示しています。

組み込み開発の要件
IoT または組み込みエンジニアには、深い開発スキルが必要です。大規模なデバイスフリートを運用する場合、ブラックボックスデバイスを管理、監視、診断する能力も同様に重要です。組み込み開発には、主に以下のログ要件があります。
データ収集:世界中に分散した数百万から数千万のデバイスからリアルタイムでデータを収集する方法。
デバッグ:開発中のオンラインデータ収集とリアルタイムデバッグの両方に単一のソリューションを使用する方法。
オンライン診断:オンラインデバイスがエラーを報告した際に、迅速にデバイスを特定し、エラーを引き起こしたコンテキストを表示する方法。
モニタリング:現在オンラインのデバイス数、それらの動作状態や地理的な場所の分布状況。障害のあるデバイスに対するリアルタイムアラートの取得方法。
リアルタイムデータ分析:デバイスが生成するデータをリアルタイムコンピューティングやビッグデータウェアハウスに接続し、ユーザーペルソナを構築する方法。

IoT 分野における主な課題
IoT の採用は急速に拡大しており、スマートルーター、TV ドングル、Tmall Genie、ロボット掃除機など、より多くのデバイスが日常生活に登場しています。これらのデバイスはスマートテクノロジーの利便性をもたらしますが、従来のソフトウェアの組み込み開発モデルはうまく適用できず、従来のデバイスロギングソリューションでは要件を満たすことができません。
従来のソフトウェアで機能する方法は、IoT 分野ではほとんど機能しません。主な課題は、IoT デバイスの以下の特性に起因します。
デバイス数が膨大:従来の O&M (運用保守) では、10,000 台のサーバーを管理する企業はすでに大規模と見なされます。IoT デバイスの場合、100,000 台のオンラインデバイスは低いしきい値にすぎません。
広範な分布:ハードウェアが一度デプロイされると、多くの場合、国全体、あるいは世界中に分散します。
ブラックボックス:デバイスへのログインやデバッグが困難で、ほとんどの場合、その状態は不明です。
限られたリソース:コストを抑制するため、IoT デバイスは合計 32 MB のメモリなど、限られたハードウェアで出荷されます。PC で機能する方法は、ここではしばしば失敗します。
C Producer
C Producer は、Simple Log Service クライアントである Logtail の軽量版です。C Producer は Logtail の安定性、高性能、低リソース消費を継承していますが、リアルタイム構成管理メカニズムは提供していません。
1つのアプリケーションで複数のプロデューサーを作成でき、各プロデューサーには複数のクライアントを含めることができます。各クライアントは、独自の送信先アドレス、ログレベル、ローカルデバッグスイッチ、キャッシュサイズ、カスタム ID、およびトピックを持ちます。
C Producer の特徴
C Producer は、IoT および組み込みデバイスでのログ収集のために、以下の特徴を提供します。
マルチテナンシー:Metric、DebugLog、ErrorLog など、複数の種類のログを異なる優先度で処理できます。また、複数のクライアントを構成でき、各クライアントは独自の収集優先度、送信先プロジェクト、および LogStore を持ちます。C Producer は、最も優先度の高いクライアントのログを最初に送信します。
コンテキストクエリ:同じクライアントからのログは同じコンテキストに属するため、特定のログの前後のログを表示できます。
同時送信と再開可能なアップロード:キャッシュの上限を設定できます。上限に達すると、ログの書き込みは失敗します。
高同時実行クライアント書き込み:送信スレッドプールは設定可能で、毎秒数十万のログの書き込みをサポートします。サーバークラスおよび制約のあるハードウェアの両方で測定されたスループットとリソース使用量については、「パフォーマンス テスト」をご参照ください。
ダイレクトネットワーク送信:クライアントログはディスクに書き込まれません。データが生成された後、ネットワーク経由で直接サーバーに送信されます。
コンピューティングと I/O の分離:C Producer はクライアント上で非同期にログを書き込むため、ログの書き込みがワーカースレッドをブロックすることはありません。
低リソース消費:Raspberry Pi のような低性能ハードウェアでは、毎秒 100 ログを生成しても、リソースへの影響はほとんどありません。
C Producer は、IoT デバイス専用の以下の特徴も提供します。
ローカルデバッグ:C Producer は、ローテーション、ログ数、ローテーションサイズの設定で、ログコンテンツをローカルデバイスに書き込みます。ローカルデバッグを有効にすると、ネットワーク接続が利用できない場合でも、デバイス上でアプリケーションをテストできます。
きめ細かいリソース制御:データの種類やログごとに、個別のキャッシュ制限と集計方法を設定できます。
圧縮ログキャッシング:C Producer は、送信に失敗したデータをキャッシュする前に圧縮し、デバイスのメモリ使用量を削減します。

C Producer はログ収集の実装の詳細を処理します。アプリケーションに収集ロジックを実装する必要はなく、ログ収集がビジネスの通常の運用に影響を与えることもありません。

ダウンロードと統合
C Producer ライブラリは GitHub からダウンロードしてください。
詳細なインストール方法と統合手順については、リポジトリ内の README ファイルをご参照ください。

C Producer と Simple Log Service の連携
C Producer と Alibaba Cloud Simple Log Service は、IoT デバイス向けのエンドツーエンドのロギングソリューションを形成します。C Producer はデバイスでログを収集して Simple Log Service に送信し、そこでログは消費、クエリ、分析、可視化に利用できるようになります。このソリューションは、以下の特性を提供します。
大規模:Simple Log Service は、数億のクライアントからのリアルタイム書き込みをサポートし、データ量は PB/日 に達します。
高速収集:データは書き込まれるとすぐに消費でき、数秒以内にサーバー上で表示可能になります。
高速クエリ:5つの条件を持つ複雑なクエリが、1秒以内に数十億のデータレコードを処理します。
高速分析:5次元集約と GroupBy を用いた複雑な分析が、1秒以内に数億のデータレコードを集約します。
広範な統合:Simple Log Service は Alibaba Cloud サービスと統合し、さまざまなオープンソースフォーマットのストレージ、コンピューティング、可視化システムと連携します。
Simple Log Service は、収集されたデバイスログに対して以下の機能を提供します。
LogHub:リアルタイムのログ収集と消費。
Search/Analytics:クエリとリアルタイム分析。
相互接続:Grafana および JDBC/SQL92。
可視化:ダッシュボードとレポート機能。

Simple Log Service のその他の収集ソリューション
Simple Log Service クライアントである Logtail は、数百万台の X86 サーバーで実行されています。技術的背景については、Logtail に関する次の記事をご参照ください:、。Simple Log Service は、他にも以下の収集ソリューションを提供しています。
モバイル SDK:Android および iOS プラットフォームでデータを収集し、すでに1日あたり数千万の DAU (デイリーアクティブユーザー) にサービスを提供しています。
Web トラッキング (JS):署名を必要としない軽量な収集方法です。
X86 サーバーには Logtail を、Android および iOS アプリケーションにはモバイル SDK を、IoT および組み込みデバイスには C Producer を使用してください。

他の組み込み収集ソリューションとの比較
次の表は、C Producer と他の組み込み収集ソリューションを比較したものです。
| カテゴリ | 比較項目 | C Producer | 他の組み込みソリューション |
| プログラミング | プラットフォーム | モバイルおよび組み込み | 主にモバイル |
| プログラミング | コンテキスト | サポート | 非サポート |
| プログラミング | 複数のログタイプ | サポート | 非サポート (1つのログタイプ) |
| プログラミング | カスタムフォーマット | サポート | 非サポート (限られたフィールドセットを提供) |
| プログラミング | 優先度 | サポート | 非サポート |
| プログラミング | 環境パラメーター | 設定可能 | 設定可能 |
| 安定性 | 並行性 | 高 | 平均 |
| 安定性 | 圧縮アルゴリズム | LZ4 (効率とパフォーマンスのバランス) + GZIP | 最適化済み |
| 安定性 | 低リソース消費 | 最適化済み | 平均 |
| 伝送 | 再開可能なアップロード | サポート | デフォルトでは非サポート、カスタム開発が必要 |
| 伝送 | アクセスポイント | 8 (中国) + 8 (グローバル) | 杭州 |
| デバッグ | ローカルログ | サポート | 手動でサポート |
| デバッグ | パラメーター設定 | サポート | 非サポート |
| 適時性 | サーバー側の可視性 | 1秒 (99.9%)、3秒 (最大) | 1〜2時間 |
| カスタム処理 | 統合方法 | 15以上の統合方法 | カスタマイズされたリアルタイムおよびオフラインソリューション |
パフォーマンス テスト
C Producer は2つの環境でテストされました。X86 の結果はサーバークラスのハードウェアの参考として、Raspberry Pi の結果はリソースに制約のあるデバイスの参考として使用してください。
環境構成
高性能シナリオ:従来の X86 サーバー。
低性能シナリオ:低電力環境の Raspberry Pi。
次の図は、両方の環境の構成を示しています。

C Producer 構成
ARM (Raspberry Pi)
キャッシュ:10 MB
集計時間:3秒 (集計時間、集計データパケットサイズ、または集計ログ数に達するとすぐに、C Producer は集計データをパッケージ化して送信します)
集計データパケットサイズ:1 MB
集計ログ数:1000
送信スレッド:1
カスタムタグ:5
X86
キャッシュ:10 MB
集計時間:3秒 (集計時間、集計データパケットサイズ、または集計ログ数に達するとすぐに、C Producer は集計データをパッケージ化して送信します)
集計データパケットサイズ:3 MB
集計ログ数:4096
送信スレッド:4
カスタムタグ:5
__source__: 192.0.2.1
__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テスト結果
X86 プラットフォームでの結果
C Producer は 90 MB/s の送信速度に達します。毎秒 200,000 ログをアップロードし、CPU の 70% と 140 MB のメモリを使用します。
毎秒 200 ログの場合、データ送信はサーバーの CPU にほとんど影響を与えず、0.01% 未満に低下します。
クライアントスレッドが1つのデータを送信する、つまり1つのログを書き込むのに、平均で 1.2 マイクロ秒かかります。

Raspberry Pi プラットフォームでの結果
Raspberry Pi でのテストでは、CPU 周波数はわずか 600 MHz であるため、パフォーマンスはサーバーの約 1/10 です。デバイスは最大で毎秒 20,000 ログを送信します。
毎秒 20 ログの場合、データ送信は Raspberry Pi の CPU にほとんど影響を与えず、0.01% 未満に低下します。
クライアントスレッドが1つのデータを送信する、つまり1つのログを書き込むのに、平均で約 12 マイクロ秒かかります。Raspberry Pi は USB 経由で PC に接続され、PC のネットワークを共有します。
