Rabbit Note

技術的な事柄をメモしていきます.

Fluentd で相対時刻しかないデータを処理する方法

複数データをまとめて送信するノードが絶対時刻を持っていない場合に,Fluentd で適切に処理する方法を紹介します.

はじめに

前回,ESP32 の ULP で複数回計測を行って,まとめて CPU で処理する方法を紹介しました.この方法を使って Fluentd にデータを送る場合,1 つ問題があります.

ESP32 の消費電力をなるべく抑えることを考えると,ESP32 では測定時点の時刻を把握できない形となります.この状況で普通に Fluentd に複数データを送りつけると,Fluentd はデータ受信時の時刻を全てのデータの計測時刻として扱ってしまいます

その解決方法を紹介します.

解決方法

この問題は,次の流れで解決することができます.

  1. データの送信時,計測時刻と送信時刻の差(オフセット)を,データとして含める.
  2. サーバ側でデータを受信する際,受信時刻と前項のデータから,計測時刻を算出.
  3. Fluentd に算出した時刻をデータの計測時刻として扱うように指示

順に詳細を説明していきます.

時刻オフセットの設定

Fluentd に送る JSON に時刻オフセット情報を入れます.以降では,下記のように self_time というパラメータに設定する前提で話を進めます.オフセットは,30 秒前の測定データに対しては 30 を設定するものとします.

計測時刻の算出

record_transformer Filter Plugin を使って,オフセット時間から絶対時間を算出します.
設定としては下記のようにします.

Fluentd に対する時刻の指示

前項と同じく,record_transformer Filter Plugin を使います.追加する設定としては,「renew_time_key self_time」だけで OK.

以上です.

Pocket

,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です