2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SORACOM Funnel の `timestamp` を Elasticsearch で自動mappingする方法

Posted at

TL;DR

これを Elasticsearch に流し込んでおくことで、 SORACOM Funnel から出力される timestamp メタデータを Elasticsearch 上で Timestamp として認識できます

$ curl -X PUT -H "Content-Type: application/json" -d @- <<EOT https://$ES_HOST/_template/my_map_tpl
{
  "template": "YOUR_INDEX_NAME*",
  "mappings": {
    "YOUR_TYPE_NAME": {
      "properties": {
        "timestamp": {
          "type": "date",
          "format": "epoch_millis"
        }
      }
    }
  }
}
EOT

SORACOM Funnel とは?

ざくっと言ってしまうと funnel.soracom.io にデータを送信すると、SORACOM上で指定したクラウドサービスへデータを転送してくれるサービスです
下記のように funnel.soracom.io にデータを渡すと...

$ echo '{"my_data":1}' | curl -H "Content-Type: application/json" -d - funnel.soracom.io 

クラウド側では下記の通りのJSONを受け取ることができます

{
    "operatorid": "ソラコムのアカウントID",
    "timestamp": "funnelがデータを受け取った日時(unix time)",
    "destination" : {
        "resourceUrl": "送信先クラウドサービスのURL",
        "service": "(aws-iot|kinesis|firehose|eventhubs|pubsub)",
        "provider":"(aws|azure|google)"
    },
    "credentialId": "ソラコムの認証情報のID",
    "payloads": {
        "my_data": 1 //実際のデータ
    },
    "sourceProtocol": "(tcp|udp|http|unspecified)",
    "imsi": "送信元のSIMのIMSI"
}

どんなクラウドサービスに送れるのか等の概要はSORACOM Funnelの概要を見てください

SORACOM Funnel の timestamp

SORACOM Funnel ではタイムスタンプを SORACOM側 で付与してくれます。送信側で付ける必要がありません
この timestamp ですがフォーマットは epoch millis です。即ち、millisecondsまでくっついた UNIX time になります

※余談: current millisなんてサイトがあるんですね

Elasticsearch で自動認識させる方法

SORACOM Funnel から Elasticsearch へは直接データを流すことができませんので、AWS IoT や AWS Lambda のようなものを経由する必要があります
たとえば デバイス ⇒ SORACOM Funnel ⇒ AWS IoT ⇒ Amazon Elasticsearch Service という構成があります

Elasticsearchは残念なことにUNIX timeっぽい数値を Number型 として認識してしまい、Date型として自動mappingされません
ただし、Elasticsearch自体は milliseconds付きのUNIX time(epoch time)をサポートしてますので Elasticsearchの自動マッピングの一部を上書きする方法 を使ってmappingすることができます

マッピングテンプレートは下記のとおりです。 YOUR_INDEX_NAME*YOUR_TYPE_NAME を環境に合わせれば動きます

epoch_millis_mapping.json
{
  "template": "YOUR_INDEX_NAME*",
  "mappings": {
    "YOUR_TYPE_NAME": {
      "properties": {
        "timestamp": {
          "type": "date",
          "format": "epoch_millis"
        }
      }
    }
  }
}

あとがき

ひさびさにちゃんと書いた

EoT

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?