Я пытаюсь создать сопоставление в 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>
@type elasticsearch
logstash_format "#{ENV['LOGSTASH_FORMAT']}"
scheme "#{ENV['SCHEME']}"
host "#{ENV['HOST']}"
port "#{ENV['PORT']}"
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 (), чтобы не добавлять новые документы (с автоматически назначаемыми типами данных в сопоставлении), а именно создавать собственное сопоставление с собственными типами данных?