Я пытаюсь использовать последнюю поддержку наносекунд, предоставляемую ElasticSearch 7.1 (фактически после 7.0). Не знаю, как это сделать правильно.
До версии 7.0 ElasticSearch поддерживал временную метку только для миллисекунд, я использую _bulk API для вставки документов.
#bulk post docs to elastic search
def es_bulk_insert(log_lines, batch_size=1000):
headers = {'Content-Type': 'application/x-ndjson'}
while log_lines:
batch, log_lines = log_lines[:batch_size], log_lines[batch_size:]
batch = '\n'.join([x.es_post_payload for x in batch]) + '\n'
request = AWSRequest(method='POST', url=f'{ES_HOST}/_bulk', data=batch, headers=headers)
SigV4Auth(boto3.Session().get_credentials(), 'es', 'eu-west-1').add_auth(request)
session = URLLib3Session()
r = session.send(request.prepare())
if r.status_code > 299:
raise Exception(f'Received a bad response from Elasticsearch: {r.text}')
Индекс журнала создается за день
#ex:
#log-20190804
#log-20190805
def es_index(self):
current_date = datetime.strftime(datetime.now(), '%Y%m%d')
return f'{self.name}-{current_date}'
Отметка времени в наносекундах «2019-08-07T23: 59: 01.193379911Z» автоматически сопоставляется с типом даты Elasticsearch до версии 7.0.
"timestamp": {
"type": "date"
},
Теперь я хочу сопоставить поле отметки времени с типом date_nanos. С здесь, я думаю, мне нужно создать Индекс ES с правильным отображением, прежде чем я вызову функцию es_bulk_insert () для загрузки документов.
GET https://{es_url}/log-20190823
If not exist (return 404)
PUT https://{es_url}/log-20190823/_mapping
{
"properties": {
"timestamp": {
"type": "date_nanos"
}
}
}
...
call es_bulk_insert()
...
У меня следующие вопросы:
1. Если я не переназначаю старые данные (например, log-20190804), то есть временная метка будет иметь два сопоставления (data vs data_nano), возникнет ли конфликт, когда я буду использовать Kibana для поиска журналы?
2. Я не видел много сообщений об использовании этой новой функции, сильно ли это повлияет на производительность? Кто-нибудь использовал это в продукте?
3. Kibana не поддерживает поиск наносекунд до 7.3 Не уверен, правильно ли можно сортировать по наносекундам, попробую.
Спасибо!