收集系统其它服务日志,在客户端上操作,以nginx 服务的日志为例

先修改配置文件 /etc/rsyslog.conf,内容如下:

#grep -v "^$" /etc/rsyslog.conf | grep -v "^#"

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad immark  # provides --MARK-- message capability
$ModLoad imklog
$ModLoad imfile
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template myFormat,"%timestamp% %fromhost-ip% %msg%\n"
$ActionFileDefaultTemplate myFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
*.info;mail.none;authpriv.none;cron.none                @@10.4.66.122
$InputFilePollInterval 1
$InputFileName /var/log/nginx/access.log
$InputFileTag nginx-info:
$InputFileStateFile state-nginx-info
$InputRunFileMonitor

在配置文件开始的位置添加了几个装载的模块,后面添加了一些配置内容,中间取消了一些系统日志的发送

$InputFilePollInterval  1                                      检查日志文件间隔(秒)

$InputFileName  /var/log/nginx/access.log    要监控的日志文件路径 

$InputFileTag  nginx-info:             定义文件标签 ,注意最后是冒号:

$InputFileStateFile  state-nginx-info       定义状态文件

$InputRunFileMonitor       激活读取,可以设置多组日志读取,每组结束时设置本参数

修改完成后,重启客户端的rsyslog服务

#service rsyslog restart

访问一下nginx,验证一下,在接收端上查看一下日志

wKioL1jeAXPgdMDAAACNo-jMm10821.png-wh_50



如果rsyslog想要吧日志发送给logstash有两种方法,第一种是让系统日志落地后转发,另外一个方法是用logstash监听接收日志的端口直接转发,下面介绍两种方法:

第一种日志落地转发,在logstash配置文件内写入如下内容:

input {
    file {
        path => "/data/log/10.4.66.121/10.4.66.121_2017.log"
    }
}
output {
    elasticsearch {
        hosts => ["10.4.66.105:9200"]
        index => "nginx-access-log-%{+YYYY.MM.dd.HH}"
                }
}

通过以上配置文件内容可以将日志落地后转发到logstash服务器

第二种方法,监听接收端口直接转发,首先需要暂停rsyslog服务,防止端口冲突

input  {
   syslog  {
     port  =>"514"
            }
}
output {
    elasticsearch {
        hosts => ["10.4.66.105:9200"]
        index => "nginx-access-log-%{+YYYY.MM.dd.HH}"
    }
}

通过以上配置文件内容可以监听514端口收到的日志,直接转发到logstash