如何让logstash读取kannel日志

如何让logstash读取kannel日志

我使用 apt 存储库在 ubuntu 12.04 上安装了logstash。但logstash 没有读取任何文档。在logstash日志中有以下内容:

{:timestamp=>"2014-08-01T22:06:09.722000+0000", :message=>"failed to open /var/log/kannel/smsbox.log: Permission denied - /var/log/kannel/smsbox.log", :level=>:warn}

我已经检查了该文件的权限:

$ ls -lh /var/log/kannel/smsbox.log
-rw-r----- 1 kannel adm 42M Aug  2 00:14 /var/log/kannel/smsbox.log

所以我将logstash用户添加到adm组中,usermod -a -G root logstash但这没有帮助。我什至已经将其添加到 root 但它仍然不起作用。我已经无计可施了。

答案1

就内核而言,进程以用户和一个或多个组的身份运行。一旦该过程开始,它就不会获取更多的组。进程从调用它的进程继承其用户和组。

用户属于组的概念由用户管理工具管理,登录程序将组成员身份授予它启动的进程。因此,当您将用户添加到组时,这只在随后启动的登录会话中生效,而不会在已经进行的会话中生效。

守护进程不经历交互式登录过程,并且通常作为一个特定用户和组启动。通常,该组甚至不是从帐户数据库中读取的,而是硬编码在守护程序的启动脚本中的用户名旁边。因此,将logstash用户添加到adm组中不会对您有帮助;您需要做的是更改logstash启动脚本以将logstashadm作为附加组运行。怎么做取决于启动脚本是如何编写的。无论如何,这都需要重新启动logstash 服务。

或者,您可以更改日志文件的访问控制列表以允许logstash进程使用它。例如,允许用户logstash读取 kannel 日志文件:

setfacl -m u:logstash:r /var/log/kannel/smsbox.log

也许还有

setfacl -m u:logstash:rx /var/log/kannel

请注意,这可能只是一个临时解决方案,因为轮换日志可能会重新初始化其权限。对于这种方法,您可能需要更改(重新)创建日志文件的程序的配置。

¹两个用户(真实且有效),但真实的 UID 与此答案无关。

相关内容