Правило IoT AWS - временная метка для Elasticsearch - PullRequest
0 голосов
/ 27 ноября 2018

Имеют несколько устройств IoT (ESP32), которые публикуют объект JSON в things/THING_NAME/log для общей отладки (для расширения в другие разделы со значениями в будущем).

Вот правило IoT, котороетакие работы.

{
  "sql": "SELECT *, parse_time(\"yyyy-mm-dd'T'hh:mm:ss\", timestamp()) AS timestamp, topic(2) AS deviceId FROM 'things/+/stdout'",
  "ruleDisabled": false,
  "awsIotSqlVersion": "2016-03-23",
  "actions": [
    {
      "elasticsearch": {
        "roleArn": "arn:aws:iam::xxx:role/iot-es-action-role",
        "endpoint": "https://xxxx.eu-west-1.es.amazonaws.com",
        "index": "devices",
        "type": "device",
        "id": "${newuuid()}"
      }
    }
  ]
}

Я не уверен, как установить @timestamp внутри Elasticsearch, чтобы разрешить поиск по времени.

Возможно, я все об этом ошибаюсь, но этопочти работает!

1 Ответ

0 голосов
/ 30 ноября 2018

@timestamp - это просто соглашение, поскольку префикс @ является префиксом по умолчанию для полей, сгенерированных Logstash.Поскольку вы не используете Logstash в качестве посредника между IoT и Elasticsearch, у вас нет сопоставления по умолчанию для @ timestamp.

Но в основном это просто имя, поэтому называйте его как хотите, единственноеважно то, что вы объявляете его как поле метки времени в разделе сопоставлений индекса Elasticsearch.

Если по какой-то причине вам все еще нужно, чтобы он назывался @timestamp, вы можете либо SELECT сделать это с этим префиксом прямо в разделе AS (может быть проблема с ограничениями IoT для sql, но необязательно):

SELECT *, parse_time(\"yyyy-mm-dd'T'hh:mm:ss\", timestamp()) AS @timestamp, topic(2) AS deviceId FROM 'things/+/stdout'

Или вы используете функциональность copy_to , когда объявляете, что сопоставляете:

PUT devices/device
{
    "mappings": {
        "properties": {
            "timestamp": {
                "type": "date",
                "copy_to": "@timestamp" 
            },
            "@timestamp": {
                "type": "date",
            }
        }
    }
}
...