ElasticSearch:如何配置logging.yml

时间:2015-02-24 12:40:44

标签: logging elasticsearch zip

我在Ubuntu机器上安装了ElasticSearch 1.4.1。

其日志位于默认位置:

/var/log/elasticsearch/

当我运行ElasticSearch时,一段时间后日志文件会增长,并且很难处理它们。

日志已处于旋转文件模式。意思是,每天都有一个新的日志文件。

我想配置要压缩的日志(例如= file.log.zip ,目前他们不是)。

我也知道我可以在 logging.yml 文件中执行此操作,但我不知道该怎么做。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:25)

经过一番挖掘(也在ElasticSearch源代码中),我找到了答案。 :)

通常,当您使用像ElasticSearch这样的软件并希望它在生产中使用时,您会认为像日志这样的基本功能都在处理。 可悲的是,在当前版本(1.4及之前版本)中并非如此。

ElasticSearch使用log4j作为其日志记录机制。

log4j正在执行以下操作:

  1. 将日志添加到日志文件
  2. 当日志文件大于CONFIGURED_VALUE
  3. 时,将其旋转

    如果ElasticSearch中使用频繁,则日志堆积起来并最终填满整个存储空间。

    答案是添加以下内容:

    1. 压缩旧的旋转日志文件
    2. 确保总日志文件不会超过CONFIGURED_VALUE
    3. 答案是,还有另一个名为log4j-extensions的API,它扩展了log4j功能并压缩了旋转的日志文件。

      可悲的是,它只适用于下一版本1.5或分支,适用于从源代码编译ElasticSearch的疯狂人员。 (见log4j rollingPolicy support)。

      但是,有一个更简单的解决方案:

      使用LOGOTATE处理您的日志。

      如果ElasticSearch在Linux操作系统上运行,您可以使用 logrotate 守护程序。 (参见什么是日志轮转Understanding logrotate utility

      您需要执行以下操作:

      1. 重置日志配置
      2. 创建用于处理日志文件的新文件
      3. 重置日志配置

        sudo vi /etc/elasticsearch/logging.yml
        

        logging.yml

        中更改以下内容
        # Mark the dailyRollingFile Appender
        #  file:
        #    type: dailyRollingFile
        #    file: ${path.logs}/${cluster.name}.log
        #    datePattern: "'.'yyyy-MM-dd"
        #    layout:
        #      type: pattern
        #      conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"
        
        # Add the file Appender
        file:
          type: file
          file: ${path.logs}/${cluster.name}.log
          datePattern: "'.'yyyy-MM-dd"
          layout:
            type: pattern
            conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"
        

        创建用于处理日志文件的新文件

        sudo vi /etc/logrotate.d/elasticsearch
        

        将以下内容添加到logrotate文件中:

        /var/log/elasticsearch/*.log {
            daily
            rotate 100
            size 50M
            copytruncate
            compress
            delaycompress
            missingok
            notifempty
            create 644 elasticsearch elasticsearch
        }
        

        之后重启ElasticSearch

        sudo service elasticsearch stop
        sudo service elasticsearch start
        

        这样您就可以将日志文件总存储量限制为5GB(旋转100 * 50M)。

        显然,您可以根据需要进行配置。

答案 1 :(得分:7)

我会稍微不同意你的回答。首先,我建议不要使用zip,如果你使用gzip,你仍然可以从命令行读取文件而不先提取它们。其次,虽然logrotation是一个方便的工具,但log4j应该能够原生地处理它自己的日志轮换。以下配置应该很好用:

 file:
    type: org.apache.log4j.rolling.RollingFileAppender
    file: ${path.logs}/${cluster.name}.log
    rollingPolicy: org.apache.log4j.rolling.TimeBasedRollingPolicy
    rollingPolicy.FileNamePattern: ${path.logs}/${cluster.name}.log.%d{yyyy-MM-dd}.gz
    layout:
      type: pattern
      conversionPattern: "%d{ISO8601}[%-5p][%-25c] %m%n"