gpt4 book ai didi

symfony - 使用 ElasticsearchHandler 尝试将独白日志保存到 Elasticsearch 时出现映射问题

转载 作者:行者123 更新时间:2023-11-29 02:56:54 26 4
gpt4 key购买 nike

我正在尝试开始使用 monolog 将我的日志发送到 Elasticsearch 中。 (我正在使用 Symfony2)。

我设置了这样的独白:

monolog:
handlers:
elasticsearch:
elasticsearch:
host: %logger_elastic_host%
port: %logger_elastic_port%
type: elasticsearch
level: info

它只工作了几分钟就出现了这个错误消息( fatal error ,我删除了无用的东西):

create: /monolog/logs/AVQKYsGRPmEhlo7mDfrN caused MapperParsingException[failed to parse [context.stack.args]]; nested: ElasticsearchIllegalArgumentException[unknown property [class]];

我一直在和我的同事一起研究如何解决这个问题。我们发现的是:

  • Elasticsearch 接收第一批日志并自动构建映射
  • 我们发送带有另一个映射或与之前发送的略有不同的新日志,但它中断了。
  • 在这种情况下,它在此处中断:context.stack.args。

问题是上下文总是非常不同。

我们想要的是:

  1. 有人在使用 Monolog 登录 Elasticsearch

  2. 你们是如何设法避免这个问题的。 (我们如何设法避免它)?

谢谢你们。

最佳答案

这是因为 ES 从第一个文档创建了一个映射。如果之后插入的任何文档具有相同的属性但具有其他类型/格式,则 ES 将抛出错误。

一个解决方案是创建一个自定义的独白格式化程序并注册它:

配置文件:

elasticsearch:
type: elasticsearch
elasticsearch:
host: elasticsearch
ignore_error: true
formatter: my_elasticsearch_formatter

此行将使 Monolog\Handler\ElasticSearchHandler 忽略 Ruflin 的 Elastica 包中的任何其他错误:

ignore_error: true

然后用这个名字注册一个服务:my_elasticsearch_formatter:

    <service id="my_elasticsearch_formatter" class="AppBundle\Services\MyFormatter">
<argument type="string">monolog</argument>
<argument type="string">logs</argument>
</service>

第一个参数是索引名称,第二个参数是类型。

格式化类:

<?php

namespace AppBundle\Services;

use function json_encode;
use Monolog\Formatter\ElasticaFormatter;
use function var_dump;

class MyFormatter extends ElasticaFormatter
{
/**
* @param string $index
* @param string $type
*/
public function __construct($index, $type)
{
parent::__construct($index, $type);
}

/**
* @param array $record
* @return array|\Elastica\Document|mixed|string
*/
public function format(array $record)
{
$record['context'] = json_encode($record['context']);

return parent::format($record);
}
}

此解决方案的缺点是它将对上下文进行 json_encode。您将无法通过 ES 中上下文的内部属性进行过滤,但至少您不会丢失有关日志的重要信息。

关于symfony - 使用 ElasticsearchHandler 尝试将独白日志保存到 Elasticsearch 时出现映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36573407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com