TL;DR - 使用 rsyslog 发送特定日志(到 redis 服务器):如何选择要发送的日志?
我想将一组转发到 redis 服务器(并且只有那一套) 的日志,例如 nginx 日志/var/log/nginx/*.log
。为此,我考虑使用 rsyslog设施(在我的示例中为 local7)。但是:
- 我无法仅处理
local7.*
发往 redis 服务器的日志:我收到了系统的所有日志(auth、authpriv、cron、local7 等等) - 我无法处理一个目录的所有日志(例如:
/var/log/nginx/*.log
不起作用但/var/log/nginx/some-access.log
会由rsyslog发送到我的redis服务器。那么如何获取一个目录的所有日志?)
配置有三个正在使用的模块,并通过以下方式将日志从 local7 发送到我的 redis 服务器:
local7.* @redis_ip:port
$ModLoad imuxsock # provides support for local system logging
$ModLoad omhiredis # support for sending to Redis
$ModLoad imfile # For tailing files
另外两段代码是我遇到的两种不同的配置 rsyslog 的方法。
配置 1(常见配置大家建议):
$InputFileName /var/log/nginx/*.log
$InputFileTag nginx
$InputFileFacility local7
$InputRunFileMonitor
配置 2(不同的语法 - 我在 rsyslog 版本 8.16.0 的文档中找到的语法):
input(
type="imfile"
File="/var/log/nginx/*.log"
Tag="nginx:"
Facility="local7"
)
输出到 redis :
action(
name="rsyslog_redis"
type="omhiredis"
mode="queue"
key="rsyslog_redis_key"
template="jsonlines" # use a JSON template defined below
)
- Rsyslog 8.16.0,使用模块 omhiredis 从源代码构建(用于输出到 Redis)
- Debian 8
笔记
例如,如果我简单地删除配置 1 或配置 2 并使用authpriv.* @redis_ip:port
,我仍然会得到所有的日志(所以来自设施syslog、cron、auth、authpriv 等),就好像 authpriv.*authpriv.* @redis_ip:port
对 rsyslog 没有影响一样。
我启动 rsyslog/usr/local/sbin/rsyslog -f /etc/rsyslog.conf
并使用选项 -N1 检查它,结果显示一切正确。
我检查过的问题对我来说没有任何改变:
答案1
由于我终于完成了一些工作,并且可能知道我的错误出在哪里,因此这里是我自己问题的答案:
$ModLoad imuxsock # provides support for local system logging
$ModLoad omhiredis # support for sending to Redis
$ModLoad imfile # For tailing files
if $syslogtag == "nginx:" then {
action(
name="rsyslog_redis"
server="redis_ip"
port="redis_port"
type="omhiredis"
mode="queue"
key="rsyslog_redis" # we need the same key in Logstash's config
template="jsonlines" # use the JSON template defined below
)
}
input(
type="imfile"
File="/var/log/nginx/access.log"
Tag="nginx:"
)
允许我将 nginx access.log 发送到我的 redis 服务器。
我的错误来自于阻塞行动( .. )不受 if 语句的限制。因此,它会发送所有日志。这解释了我在问题中的第一个注释,其中authpriv.* @redis_ip:port
不会改变任何内容。
回答 :action(..) 将会发送日志,即使其中没有定义服务器,因此用 if 语句包围它来选择转发哪些日志。
注意:我没有将模板“jsonlines”添加到配置中,因为可以在互联网上轻松找到它,而且它会占用一些不必要的空间。