【问题标题】:Logstash creates enormous local log files and (although it sends then to Elasticsearch)Logstash 创建巨大的本地日志文件(尽管它随后发送到 Elasticsearch)
【发布时间】:2015-10-26 11:09:25
【问题描述】:

问题

我有一台装有 logstash 的机器,还有另一台 Elasticsearch-Kibana 机器,它在第一台机器上存储从 logstash 写入的日志。自然,我不希望在源机器上保留任何日志,并且只在 Elasticsearch 集群上处理日志记录。

不幸的是,logstash 在第一台机器上创建了巨大的日志文件(不应该保留任何东西):

配置

我在源机上/etc/logstash下只有一个文件,据我所见,配置没有指定本地输出:

input {
        tcp {
                port => 5959
                codec => json
        }
        udp {
                port => 5959
        }
}
filter{
    json{
        source => "message"
    }
}
filter{
        if [@message] == "Incoming Event" {
            mutate{
                    add_field => {
                              "location" =>  "%{@fields[location]}"
                        }
                }
        }
}
output {
        elasticsearch {
                # The host in which elasticsearch and Kibana live
                host => "some.internal.aws.ip" 
        }
}

如何通过配置阻止logstash写入本地日志?我知道我可以对它们进行 cron-del,但我认为预防不太容易出错。

【问题讨论】:

  • 你的logstash是否启用了详细或调试?禁用这些会减少音量。为了完全消除它们,我会编辑您的启动脚本,但拥有它们是个好主意...
  • 这些定义在哪里?
  • logstash 有 --debug 和 --verbose 命令行选项。它们可能出现在您的启动脚本中,或您的启动脚本(sysconfig 等)读取的配置文件中。

标签: configuration logstash elastic-stack local-files


【解决方案1】:

我遇到了与您在 CentOS 7 机器上运行时相同的问题。除了 elasticsearch 之外没有任何输出,但 logstash 仍将所有传入消息输出到 logstash.log 和 logstash.stdout

在对实际的 ruby​​ 代码进行一些研究后,发现默认的日志记录模式非常冗长。

然而,有一个名为--quiet 的标志(据我所知似乎没有记录)解决了这个问题。

在配置文件(centos 上的/etc/sysconfig/logstash)或直接在init.d 脚本中将标志添加到LS_OPTS 变量,如下所示:

# Arguments to pass to logstash agent
LS_OPTS="--quiet"

【讨论】:

  • 在 Windows 上这似乎位于此处:"\logstash\config\startup.options"
【解决方案2】:

此输出可能是由您的输出配置文件之一中包含以下内容引起的:

stdout { codec => rubydebug }

从我的30-output.conflogstash 中删除后,不再那么冗长了

This thread 引导我找到答案。

【讨论】:

    【解决方案3】:

    logrotate 解决方案

    不幸的是,我在/etc/init.d/logstash 中没有找到任何--verbose 或--debug 标志。因此,我试图弄清楚为什么 logrotate 没有归档文件。

    /etc/logrotate.d/logstash 是:

    /var/log/logstash/*.log {
            daily
            rotate 7
            copytruncate
            compress
            delaycompress
            missingok
            notifempty
    }
    

    但是当我尝试运行它时,我得到了:

    $ logrotate --force logrotate.d/logstash --verbose
    Ignoring logrotate.d/logstash because of bad file mode.
    

    quick search came to the rescue:

    sudo chmod 0644 logrotate.d/logstash
    

    我已将频率从 daily 更改为 hourly,现在一切正常。

    这应该不是公认的答案。如果有人有更好的解决方案可以防止logstash首先写入这些冗余日志,我很乐意接受。

    【讨论】:

      【解决方案4】:

      如果您使用的是 docker 镜像,logstash 会附带一个名为 logstash (logstash.conf) 的默认管道。该管道将​​所有内容记录到标准输出。您必须覆盖它以避免大量日志

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多