我刚刚设置了一个 Graylog2 服务器,我希望将所有日志从主服务器发送到 graylog 服务器。我已为主服务器启用日志记录,并通过添加到 将日志发送到我的 graylog*.* @logs.example.com:1337
服务器/etc/rsyslog.conf
。
我想要让 Graylog2 收集我的所有 Apache 日志、系统日志(用于 SSH 登录、拒绝的登录)以及我需要监控的任何其他日志。
对于 Apache 日志,我还想要 Rails 日志。我的站点位于/srv/www/
,结构为sitename.com/public_html
和sitename.com/logs
。我的服务器上有很多站点,我想用一种简单的方法来查看所有错误并从中制作出一些漂亮的图表,这就是我想使用 Graylog2 的原因……
日志文件夹中的日志文件是access.log
和error.log
。
Rails 日志将位于sitename.com/public_html/log
。其中包含production.log
。
答案1
这已经很老了,但我想我会写下这个我用于低/中等流量网站的方法(不知道它是否适用于高流量网站):
在 Apache 中,我定义了一种名为 CustomLog 的格式,graylog2_access
将访问日志格式化为 GELF 格式,然后我通过将日志数据通过 nc 传输到 Graylog2 的输入来发送我的日志。
以下是它创建的自定义格式(人类可读):
{
"version": "1.1",
"host": "%V",
"short_message": "%r",
"timestamp": %{%s}t,
"level": 6,
"_user_agent": "%{User-Agent}i",
"_source_ip": "%a",
"_duration_usec": %D,
"_duration_sec": %T,
"_request_size_byte": %O,
"_http_status": %s,
"_http_request_path": "%U",
"_http_request": "%U%q",
"_http_method": "%m",
"_http_referer": "%{Referer}i"
}
对于 Apache 配置,这里有一个复制/粘贴版本:
LogFormat "{ \"version\": \"1.1\", \"host\": \"%V\", \"short_message\": \"%r\", \"timestamp\": %{%s}t, \"level\": 6, \"_user_agent\": \"%{User-Agent}i\", \"_source_ip\": \"%a\", \"_duration_usec\": %D, \"_duration_sec\": %T, \"_request_size_byte\": %O, \"_http_status\": %s, \"_http_request_path\": \"%U\", \"_http_request\": \"%U%q\", \"_http_method\": \"%m\", \"_http_referer\": \"%{Referer}i\" }" graylog2_access
然后在您的主机配置中:
CustomLog "|nc -u graylogserver 12201" graylog2_access
答案2
您还可以使用以下简单命令将日志文件发送到graylog2 服务器:
tail -F -q $yourlogfile | while read -r line ; do echo "<7> $hostnamesendingthelog $line" | nc -w 1 -u $graylogserver 514; done;
我主要将其用于测试目的,以确定我的日志格式是否适合在 graylog2 中轻松查询。对于生产用途,您将需要设置 rsyslog 或 syslog-ng。
您可以跟踪您的 rails 日志文件并看看会发生什么。
答案3
Graylog2 仅接受两种格式的日志:标准 syslog 和 Graylog 扩展日志格式(又名 GELF)。磁盘上的任意日志都需要一些第三方进程来使用日志并将其转换为对您有用的格式。
看一眼Logstash。大多数人认为它是使用 ElasticSearch 索引日志文件的工具,但它还包含一个通用的“日志路由器”,可让您跟踪磁盘上的一堆文件并将它们发送到 Graylog 等日志记录组件。
答案4
您可以使用apache2gelf
脚本从这里。