我正在尝试使用连接到 Node.js 的 Fluentd 在 Elasticsearch 中创建映射。
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() 函数来更改配置,而不是添加新文档(在映射中自动分配数据类型),而是使用自己的数据类型创建自己的映射?
有可能是elasticsearch插件没有创建或修改索引,只是简单地写入索引,所以我使用了http插件: