Создание карт в Elasticsearch с помощью Fluentd - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь создать сопоставление в 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 (), чтобы не добавлять новые документы (с автоматически назначаемыми типами данных в сопоставлении), а именно создавать собственное сопоставление с собственными типами данных?

1 Ответ

0 голосов
/ 18 марта 2020

Возможно, что плагин asticsearch не создает и не создает , а не изменяет индекс, а просто записывает в индекс, поэтому я использовал http Плагин:

<match mapping.doc>
  @type http
  endpoint "#{ENV['SCHEME']}://#{ENV['HOST']}:#{ENV['PORT']}/#{ENV['INDEX_NAME']}"
  http_method put
  headers {"Content-Type":"application/json"}
  open_timeout 2
  <buffer>
    flush_interval "#{ENV['FLUSH_INTERVAL']}"
  </buffer>
</match>
...