Добавление документов вasticsearch через API, обнаружение их через kibana. Как? - PullRequest
0 голосов
/ 13 мая 2019

Я обычно вставляю данные (логи) вasticsearch через плагин logstash.Затем я могу выполнить их поиск в kibana.

Однако, если я попытаюсь программно преобразовать данные вasticsearch (чтобы пропустить filebeat и logstash), я не смогу найти данные в kibana.

Это то, что я тестировал:

from elasticsearch import Elasticsearch
es = Elasticsearch(["XXX"], ...)
doc = {
    "@version": 1,
    "@timestamp": datetime.now(),
    "timestamp": datetime.now(),  # Just in case this is needed too
    "message": "test message"
}
res = es.index(
    index="foobar-2019.05.13", doc_type='whatever', id=3, body=doc,
    refresh=True
)
# Doc is indexed by above code, as proved by
# es.search(
#    index="foobar-*", body={"query": {"match_all": {}}}
#)

Я добавил шаблон индекса `foobar- *` `в kibana в« Шаблон индекса -> Создать шаблон индекса ».Затем я могу использовать страницу «обнаружить» для поиска документов в этом индексе.Но документы, найденные кибаной, не найдены, даже если они существуют в эластичном поиске.

Чего мне не хватает?Есть ли какие-либо сопоставления, которые должны быть настроены для индекса?

(примечание: использование версий 6.x)

ОБНОВЛЕНИЕ: пример индексации документа и сопоставление индекса

# Example of doc indexed
{'_index': 'foobar-2019.05.13', '_type': 'doc', '_id': '41', '_score': 1.0,
 '_source': {'author': 'foobar', 'message': 'karsa big and crazy.  icarium crazy.  mappo big.',
             'timestamp': '2019-05-13T15:52:19.857898',
             '@version': 1, '@timestamp': '2019-05-13T15:52:19.857900'}}

# mapping of foobar-2019.05.13'
{
  "mapping": {
    "doc": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "@version": {
          "type": "long"
        },
        "author": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "message": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "timestamp": {
          "type": "date"
        }
      }
    }
  }
}

1 Ответ

1 голос
/ 13 мая 2019

Я обнаружил проблему ... была разница в часовом поясе на 2 часа между хостом, на котором запущен код python, и хостамиasticsearch / kibana.

Итак, поскольку я использовал datetime.now(), я вставлял документыс отметкой времени «часы в будущем», и я искал их «где-то в прошлом».

Если я буду искать их в будущем (или если я буду ждать 2 часа, не обновляя их), они найдены.

Смущающая ошибка на моей стороне.

Исправление для меня было использовать datetime.now(timezone.utc)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...