Serilog如何将自定义“ _id”字段发送到Elasticsearch

时间:2019-10-25 17:26:30

标签: elasticsearch serilog

我们正在使用Serilog,并且最近安装了Serilog.Sinks.Elasticsearch接收器,以便能够将条目记录到我们公司的Elasticsearch服务器中。

我们希望能够使用自定义的“ _id”字段调用Elasticsearch,以便在分布式事务处理事件类型时,我们可以使用其他信息更新现有条目。

在JavaScript中使用Elasticsearch使用自定义_id字段非常容易,但是Serilog 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 :(得分:0)

当前用于弹性搜索的Serilog接收器不支持此功能。 https://github.com/serilog/serilog-sinks-elasticsearch/issues/287

一种有效的解决方法和更标准的约定是将Saga Id传递为_id字段以外的另一个字段。