Как Serilog может отправить настраиваемое поле "_id" в Elasticsearch - PullRequest
0 голосов
/ 25 октября 2019

Мы используем Serilog и недавно установили приемник Serilog.Sinks.Elasticsearch, чтобы иметь возможность регистрировать записи на сервере Elasticsearch нашей компании.

Мы хотим иметь возможность вызывать Elasticsearch с настраиваемым полем "_id", чтобы мы могли обновлять существующие записи дополнительной информацией, когда наши распределенные транзакции проходят через шаблон событий Saga.

Использование настраиваемого поля _id с Elasticsearch очень легко сделать в JavaScript, но Serinog Elasticsearch Sink, похоже, не поддерживает это. Поле _id собрано глубоко в ElasticsearchPayloadReader, без каких-либо опций для его переопределения.

        protected override void AddToPayLoad(string nextLine)
        {
            var indexName = _getIndexForEvent(nextLine, _date);
            var action = default(object);

            if (string.IsNullOrWhiteSpace(_pipelineName))
            {
                action = new { index = new { _index = indexName, _type = _typeName, _id = _count + "_" + Guid.NewGuid() } };
            }
            else
            {
                action = new { index = new { _index = indexName, _type = _typeName, _id = _count + "_" + Guid.NewGuid(), pipeline = _pipelineName } };
            }

            var actionJson = _serialize(action);
            _payload.Add(actionJson);
            _payload.Add(nextLine);
            _count++;
        }

Мы что-то упускаем? Есть ли поддерживаемый способ сделать это?

1 Ответ

0 голосов
/ 29 октября 2019

Текущий приемник Serilog для упругого поиска не поддерживает это. https://github.com/serilog/serilog-sinks-elasticsearch/issues/287

Действительный обходной путь и более стандартное соглашение - передавать Saga Id вместе с другим полем, отличным от поля _id.

...