Обновите записи Монго с помощью fluentd - PullRequest
0 голосов
/ 01 мая 2019

Нам нужно сохранить журналы нашего приложения nodejs как записи на MongoDB.Большинство записей мы должны создать, но есть записи, которые нужно только обновить.

Мы хотим использовать Fluentd.Я вижу, что есть возможность вставить журнал в Монго, но я не смог найти способ обновить существующие записи.

Есть ли способ добиться этого?

Вот мой текущий td-agent.conf (он все еще находится в стадии разработки):

<match mongo.*>
  @type mongo
  host localhost
  port 27017
  database my-db

  # Set 'tag_mapped' if you want to use tag mapped mode.
  tag_mapped

  # If the tag is "mongo.foo", then the prefix "mongo." is removed.
  # The inserted collection name is "foo".
  remove_tag_prefix mongo.

  # This configuration is used if the tag is not found. The default is 'untagged'.
  collection misc
</match>

1 Ответ

1 голос
/ 05 мая 2019

Глядя на документацию и код для плагина fluentd mongo, похоже, что он не поддерживает операцию обновления / вставки.

В настоящее время выполняется только операция insert_many.

get_collection(database, collection, @collection_options).insert_many(records)

https://github.com/fluent/fluent-plugin-mongo/blob/master/lib/fluent/plugin/out_mongo.rb#L265

Одним из вариантов может быть создание запроса функции или запроса извлечения для этого репо с помощью операции update_many (или массовая загрузка), но для этого требуется отправлять поля обновления в каждую вставку документа.


Обновление - Есть ли альтернативный инструмент?.

Я могу вспомнить logstash , но даже у него открыты несколько запросов функций для поддержки обновления / переноса в MongoDB.

https://github.com/logstash-plugins/logstash-output-mongodb/issues/16

Когда вы проверяете вышеуказанные комментарии к комментариям, вы советуете, что для хранения журналов вы обычно не хотите выполнять операцию обновления.

https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying

Я бы сказал, сначала пересмотрите ваш дизайн обновления журналов, в противном случае создайте пользовательское приложение (Java, NodeJS, Python или .NET Core), которое может выполнять операцию обновления (заменить fluentd или перейти от fluentd к пользовательскому приложению к mongodb).

...