Создание маппинга в Elasticsearch при помощи Fluentd
Пытаюсь создать маппинг в Elasticsearch при помощи Fluentd, к которому подключается Node.js.
Пример маппинга Elasticsearch:
PUT http://host:9200/test_mapping
{
"mappings": {
"properties": {
"response_code": {
"type": "text",
"fielddata": true
},
"response_text": {
"type": "text",
"fielddata": true
},
"status": {
"type": "boolean"
},
"ip": {
"type": "ip"
},
"login": {
"type": "text",
"fielddata": true
}
}
}
}
Пример конфигурации Fluentd:
<source>
@type forward
port 24225
</source>
<match mapping.doc>
# Используем плагин Elasticsearch
@type elasticsearch
# Logstash-формат
logstash_format "#{ENV['LOGSTASH_FORMAT']}"
# Схема HTTP
scheme "#{ENV['SCHEME']}"
# Хост
host "#{ENV['HOST']}"
# Порт
port "#{ENV['PORT']}"
# index - новые данные добавляются, существующие данные переиндексируются
write_operation index
# Индекс
index_name "#{ENV['INDEX_NAME']}"
# Частота сбора данных
flush_interval "#{ENV['FLUSH_INTERVAL']}"
</match>
Пример кода на Node.js:
// ...
require('dotenv').config();
const env = process.env;
const loggerfluentd = require('fluent-logger');
loggerfluentd.configure('mapping', {
host: env.FLUENTD_HOST,
port: Number.parseInt(env.FLUENTD_PORT),
timeout: 3.0,
reconnectInterval: 10000 // 10 sec
});
function EmitMapping(data) {
loggerfluentd.emit(env.INDEX_NAME, data);
}
exports.EmitMapping = EmitMapping;
Такая конфигурация не создает маппинг, а просто добавляет новые документы в Elasticsearch.
Возможно ли изменить конфигурацию так, чтобы выполнив функцию EmitMapping() не добавлять новые документы (с автоматически присвоенными типами данных в маппинге), а именно создать свой собственный маппинг со своими типами данных?
Ответы (1 шт):
Автор решения: fedor-sg
→ Ссылка
Есть вероятность, что плагин elasticsearch не создает и не изменяет индекс, а просто пишет в индекс, потому я воспользовался плагином http:
<match mapping.doc>
# Используем плагин HTTP
@type http
# Точка входа
endpoint "#{ENV['SCHEME']}://#{ENV['HOST']}:#{ENV['PORT']}/#{ENV['INDEX_NAME']}"
# HTTP-метод
http_method put
# Заголовки
headers {"Content-Type":"application/json"}
# Тайм-аут открытия соединения в секундах
open_timeout 2
<buffer>
flush_interval "#{ENV['FLUSH_INTERVAL']}"
</buffer>
</match>