Linux 日志存储文件输入无法读取文件
几个小时来我一直在为这件事挠头,我有点沮丧。我是logstash的新手,所以我可能做错了什么,但在做了几个小时的工作后,我不知道是什么。我使用配置了代理和服务器 我设置了两个系统,一个代理和一个服务器。代理读取文件,过滤它们,然后将它们发送到服务器上的redis实例。服务器从redis获取传入条目,并在elasticsearch(使用嵌入式)中为它们编制索引 这是我的问题,我可以使用下面这样一个简单的配置,输入服务器,然后所有内容都发送到服务器,很好Linux 日志存储文件输入无法读取文件,linux,file,chef-infra,logstash,Linux,File,Chef Infra,Logstash,几个小时来我一直在为这件事挠头,我有点沮丧。我是logstash的新手,所以我可能做错了什么,但在做了几个小时的工作后,我不知道是什么。我使用配置了代理和服务器 我设置了两个系统,一个代理和一个服务器。代理读取文件,过滤它们,然后将它们发送到服务器上的redis实例。服务器从redis获取传入条目,并在elasticsearch(使用嵌入式)中为它们编制索引 这是我的问题,我可以使用下面这样一个简单的配置,输入服务器,然后所有内容都发送到服务器,很好 input { stdin { } } ou
input { stdin { } }
output {
redis {
host => "192.168.33.11"
data_type => "list"
key => "logstash"
codec => json
}
stdout { codec => rubydebug }
}
我的服务器上运行的logstash(在vagrant中)正确地提取了所有内容,它们被索引,我可以在Kibana中看到它们
代理是另一回事。在我的代理上,从3个配置文件开始,input\u file\u nginx.conf
,output\u stdout.conf
,output\u redis.conf
。我发现日志无法到达我的服务器上的redis,所以我尝试缩小它的范围。当我在我的代理上查看日志时,我感到非常困惑。据我所知,没有人读到任何东西。或者我的输出_stdout.conf
出错了
这是我的输入文件\u nginx.conf
input {
file {
path => "/home/silkstart/logs/*.log"
type => "nginx"
}
}
output {
stdout {
codec => rubydebug
}
}
作为参考,其中的两个文件是nginx.silkstart.80.access.log
和nginx.silkstart.80.error.log
,它们都具有644
权限,因此应该是可读的
和我的output\u stdout.conf
input {
file {
path => "/home/silkstart/logs/*.log"
type => "nginx"
}
}
output {
stdout {
codec => rubydebug
}
}
这些都是使用一些ERB的logstash_config
生成的
我的实例几乎一字不差地来自agent.rb
示例
logstash_service name do
action [:enable]
method "runit"
end
下面是生成的配置
#!/bin/sh
cd //opt/logstash/agent
exec 2>&1
# Need to set LOGSTASH_HOME and HOME so sincedb will work
LOGSTASH_HOME="/opt/logstash/agent"
GC_OPTS=""
JAVA_OPTS="-server -Xms198M -Xmx596M -Djava.io.tmpdir=$LOGSTASH_HOME/tmp/ "
LOGSTASH_OPTS="agent -f $LOGSTASH_HOME/etc/conf.d"
LOGSTASH_OPTS="$LOGSTASH_OPTS --pluginpath $LOGSTASH_HOME/lib"
LOGSTASH_OPTS="$LOGSTASH_OPTS -vv"
LOGSTASH_OPTS="$LOGSTASH_OPTS -l $LOGSTASH_HOME/log/logstash.log"
export LOGSTASH_OPTS="$LOGSTASH_OPTS -w 1"
HOME=$LOGSTASH_HOME exec chpst -u logstash:logstash $LOGSTASH_HOME/bin/logstash $LOGSTASH_OPTS
这与我的服务器配置非常相似,它可以正常工作
#!/bin/sh
ulimit -Hn 65550
ulimit -Sn 65550
cd //opt/logstash/server
exec 2>&1
# Need to set LOGSTASH_HOME and HOME so sincedb will work
LOGSTASH_HOME="/opt/logstash/server"
GC_OPTS=""
JAVA_OPTS="-server -Xms1024M -Xmx218M -Djava.io.tmpdir=$LOGSTASH_HOME/tmp/ "
LOGSTASH_OPTS="agent -f $LOGSTASH_HOME/etc/conf.d"
LOGSTASH_OPTS="$LOGSTASH_OPTS --pluginpath $LOGSTASH_HOME/lib"
LOGSTASH_OPTS="$LOGSTASH_OPTS -l $LOGSTASH_HOME/log/logstash.log"
export LOGSTASH_OPTS="$LOGSTASH_OPTS -w 1"
HOME=$LOGSTASH_HOME exec chpst -u logstash:logstash $LOGSTASH_HOME/bin/logstash $LOGSTASH_OPTS
我能看到的唯一区别是
ulimit -Hn 65550
ulimit -Sn 65550
但我不明白为什么这会阻止它工作。这将增加文件描述符的数量,但是默认的4096应该足够了
当我向服务器发出一些请求以确保日志中有新的内容,并且我检查了运行日志时,它只会指向我粘贴了at的内容的/opt/logstash/agent/log/logstash.log
要真正解决问题,如果我sudosulogstash
并从命令行运行bin/logstash-f etc/conf.d
,一切都会正常工作
任何帮助都将不胜感激。我设法解决了这个问题。对于其他面临类似问题的人,您需要检查您对尝试访问的文件的权限 如果您正在访问通过组权限访问的文件,那么您可能会遇到与我相同的问题 仔细看这条线
exec chpst-u logstash:logstash
这告诉我们,我们希望以用户logstash的身份运行一个程序,并具有组权限logstash。在我的例子中,我想使用的组是另一个组。chpst的文件指出
如果组由以冒号分隔的组名列表组成,chpst将设置所有列出组的组ID
因此,如果我想以user1
的身份运行程序,同时使用group1
和group2
,则该命令将变为
exec chpst-u user1:group1:group2
我希望这能帮助其他遇到与我相同问题的人。这个问题似乎有关联