温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Linux系统日志远程采集

发布时间:2020-06-29 19:38:03 来源:网络 阅读:1015 作者:warrent 栏目:系统运维

一台正常提供服务Linux服务器,每时每刻都在产生着大量的日志信息,若生产环境中,有几十台甚至上百台服务器,那么一台一台的去查看系统的日志是非常麻烦的。

在技术不断更新的今天,有很多可以技术可以对日志进行集中管理,最普遍的操作还是要属ELK日志分析系统了,不过这些日志是如何产生的?是由哪个服务来进行统一管理的呢?这篇文章就围绕着系统日志的服务——rsyslog这个服务来叙述一下。

Linux系统中有很多日志类型,如下是一些系统本身产生的日志文件:

/var/log/boot.log /var/log/cron /var/log/dmesg /var/log/lastlog /var/log/maillog或/var/log/mail/* /var/log/messages /var/log/secure /var/log/wtmp,/var/log/faillog /var/log/httpd/* , /var/log/samba/*

若想详细了解日志文件记录的是什么信息,可以参考这篇博文:Linux中常见日志文件的介绍,里面还包括了7个报错等级的介绍!这里不啰嗦了就。

系统中的日志大多数都是由rsyslog这个服务来管理的,这个服务的主配置文件如下:

[root@aaa ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#" #过滤配置文件中的空行和注释行 $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal $WorkDirectory /var/lib/rsyslog $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf $OmitLocalLogging on $IMJournalStateFile imjournal.state *.info;mail.none;authpriv.none;cron.none /var/log/messages 上面行开头的星号表示所有服务,点号后面的等级表示那些等级记录下来,/var/lo....表示记录到哪里 authpriv.* /var/log/secure #表示authpriv所有等级的信息都记录到secure文件中 mail.* /var/log/maillog #表示mail服务的所有级别信息都记录到/var/log/maillog中 cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log #由上面几行注释可以看出,第一段中的点号前面表示某个服务,点号后面表示哪些报错等级要记录。 #点号前后都可以使用通配符星号来表示,如第一列为“*.*”,则表示所有服务的所有等级 #若为“*.info”,则表示所有服务的info等级及比info更严重的等级都记录起来。

在上面的配置文件中,日志存放的位置是可以改动的,也可以更改哪些日志的等级要记录下来,但是一般不建议改动。

其实,依靠/etc/rsyslog.conf这个配置文件,也是可以将其日志发送到另一台服务器上,然后再另一台服务器上进行统一管理,如果生产环境较小,服务器不多的情况下,可以采用这种情况,但是如果生产环境的服务器数量比较多,则推荐部署ELK日志分析系统。

配置rsyslog服务实例

我这里有两台服务器,主机名分别是aaa和bbb(IP地址分别是192.168.1.1和1.2),现在就来实现以下需求:

  • 1、将aaa服务器的所有系统服务日志的info级别以上的同步发送到bbb服务器上进行统一管理;
  • 2、将编译安装的Nginx的日志发送到bbb服务器上进行管理;
  • 3、将编译安装的apache的日志也发送到bbb服务器上进行管理(由于和默认端口和Nginx的冲突,所以在实现了第二个需求后,就将Nginx服务停止,再启动apache服务);

开始配置:

1、将aaa服务器的所有系统服务日志的info级别以上的同步发送到bbb服务器上进行统一管理

(1)在aaa服务器上进行以下操作:

[root@aaa ~]# vim /etc/rsyslog.conf #编辑日志服务的配置文件 #..............省略部分内容 $ModLoad imudp #将该行开头的注释符号“#”去掉,以便开启udp协议 $UDPServerRun 514 #将该行开头的注释符号“#”去掉,以便开启udp的514端口 # Provides TCP syslog reception $ModLoad imtcp #将该行开头的注释符号“#”去掉,以便开启tcp协议 $InputTCPServerRun 514 #将该行开头的注释符号“#”去掉,以便开启tcp的514端口 #..............省略部分内容 *.info;mail.none;authpriv.none;cron.none /var/log/messages *.info @@192.168.1.2 #星号表示所有服务“*.info”表示info等级及以上的信息 #@@表示使用tcp协议传输,192.168.1.2是指定要发送到哪台服务器 #若使用一个@符号,则表示使用udp协议传输 #..............省略部分内容 #编辑完成后,保存退出即可。 [root@aaa ~]# systemctl restart rsyslog #重启rsyslog服务,以便更改生效

(2)在bbb服务器上进行以下操作:

[root@bbb ~]# vim /etc/rsyslog.conf #编辑日志服务的配置文件,开启udp和tcp的514端口 #..............省略部分内容 $ModLoad imudp #去掉该行开头的“#”注释符号 $UDPServerRun 514 #去掉该行开头的“#”注释符号 # Provides TCP syslog reception $ModLoad imtcp #去掉该行开头的“#”注释符号 $InputTCPServerRun 514 #去掉该行开头的“#”注释符号 #..............省略部分内容 [root@bbb ~]# systemctl restart rsyslog #重启服务,使更改生效 [root@bbb ~]# tailf /var/log/secure #动态监控着本机的日志文件 Sep 19 15:00:32 aaa useradd[5998]: new group: name=lvjianzh, GID=1003 Sep 19 15:00:32 aaa useradd[5998]: new user: name=lvjianzh, UID=1003, GID=1003.... #..............省略部分内容

(3)在aaa服务器上进行以下操作(主要是为了产生日志信息):

[root@aaa ~]# useradd admini [root@aaa ~]# echo '123.com' | passwd --stdin admini 更改用户 admini 的密码 。 passwd:所有的身份验证令牌已经成功更新。

(4)查看bbb产生的新日志如下:

Linux系统日志远程采集

2、将编译安装的Nginx的日志发送到bbb服务器上进行管理;

(1)在aaa服务器上进行以下操作:

[root@aaa ~]# vim /etc/yum.repos.d/epel.repo #写入以下文件,指定阿里镜像站 [epel] name=epel baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ gpgcheck=0 #必须保证系统默认自带的yum文件也存在/etc/yum.repos.d/目录下,写入后保存退出即可。 [root@aaa ~]# yum repolist #最好执行一下该命令 #..............省略部分内容 (7/7): base/7/x86_64/primary_db | 6.0 MB 00:01 源标识 源名称 状态 base/7/x86_64 CentOS-7 - Base 10,097 epel epel 13,384 #上面一行就是我们刚写入的文件生效的,表示没问题 extras/7/x86_64 CentOS-7 - Extras 304 updates/7/x86_64 CentOS-7 - Updates 311 repolist: 24,096 #若命令yum repolist执行后没有显示出上述内容,排除配置文件的错误后,可以执行以下命令 [root@aaa ~]# yum makecache #用来建立元数据缓存的 #..............省略部分内容 元数据缓存已建立 [root@aaa ~]# yum -y install nginx #安装nginx服务 [root@aaa ~]# systemctl start nginx #启动Nginx服务 [root@aaa ~]# netstat -anpt | grep nginx #确定Nginx服务已启动 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6609/nginx: master tcp6 0 0 :::80 :::* LISTEN 6609/nginx: master [root@aaa ~]# ls /var/log/nginx/ #以下是yum安装Nginx后,Nginx两个日志文件的存放位置 access.log error.log #记住Nginx日志的存放路径,一会要用到,若采用的是编译安装,请自行找到Nginx日志存放路径记下来 [root@aaa ~]# vim /etc/rsyslog.conf #编辑rsyslog服务的配置文件 #..............省略部分内容 #在配置文件末尾写入以下内容 $ModLoad imfile $InputFilePollInterval 1 $InputFileName /var/log/nginx/access.log $InputFileTag nginx-info-access; $InputFilestateFile state-nginx-info-accesslog $InputRunFileMonitor $InputFileName /var/log/nginx/error.log $InputFileTag nginx-info-error; $InputFilestateFile state-nginx-info-errorlog $InputRunFileMonitor $InputFilePollInterval 10 if $programname == 'nginx-info-access' then @192.168.1.2:514 if $programname == 'nginx-info-access' then ~ if $programname == 'nginx-info-error' then @192.168.1.2:514 if $programname == 'nginx-info-error' then ~ [root@aaa ~]# systemctl restart rsyslog #重启服务以便生效

关于上面写入的配置项解释如下:

$ModLoad imfile #加载模块 $InputFilePollInterval 1 #间隔多久采集次,默认单位是秒 $InputFileName /var/log/nginx/access.log #指定要采集的日志文件 $InputFileTag nginx-info-access; #给对应的日志打一个标签 $InputFilestateFile state-nginx-info-accesslog #给这个日志命名 $InputRunFileMonitor #启动监控 #以下的配置和上面类似,因为要采集两个日志文件嘛! $InputFileName /var/log/nginx/error.log $InputFileTag nginx-info-error; $InputFilestateFile state-nginx-info-errorlog $InputRunFileMonitor $InputFilePollInterval 10 #以下是指定将采集的日志发送到哪里,同理,一个@符号表示使用的udp协议,两个表示tcp协议 if $programname == 'nginx-info-access' then @192.168.1.2:514 if $programname == 'nginx-info-access' then ~ #这的~,表示本地的意思 if $programname == 'nginx-info-error' then @192.168.1.2:514 if $programname == 'nginx-info-error' then ~

(2)在bbb服务器上进行日志的监控:

Linux系统日志远程采集

(3)客户端访问aaa的Nginx服务,以便产生日志。

Linux系统日志远程采集

(4)再回到bbb服务器上,查看是否有关于aaa服务器的Nginx访问日志产生(如果没有新的日志产生,在排除配置错误的前提下,客户端可以多刷新几次):
Linux系统日志远程采集

可以看出来,Nginx的日志信息简直不要太详细,对么?日志信息中包含了该日志产生的时间?是哪台服务器产生的?标签名是什么?哪个IP地址访问的?访问时间是什么时候?访问的状态码是什么?客户端访问时使用的是什么系统、系统的位数是多少?如(Windows NT 10.0; Win64; x64,表示是64为的win10系统),用的是什么浏览器进行访问的?我这里使用谷歌访问的,它竟然还记录了我客户端谷歌浏览器的版本号。

至此,Nginx的日志文件采集就完成了,那么现在进行apache的日志采集,有了前面的铺垫,这就简单多了,简单改一下配置项就可以了。

3、将编译安装的apache的日志也发送到bbb服务器上进行管理

(1)在aaa服务器上进行以下操作:

[root@aaa ~]# yum -y install httpd #安装apache服务 [root@aaa ~]# systemctl stop nginx #为了避免端口冲突,停止Nginx服务 [root@aaa ~]# systemctl start httpd #启动apache服务 [root@aaa ~]# vim /etc/rsyslog.conf #更改rsyslog配置文件,主要是更改采集日志的路径 #..............省略部分内容 $ModLoad imfile $InputFilePollInterval 1 $InputFileName /var/log/httpd/access_log #主要是改这个 $InputFileTag httpd-info-access; $InputFilestateFile state-httpd-info-accesslog $InputRunFileMonitor $InputFileName /var/log/httpd/error_log #还要改这个 #其余配置项可不改,但是建议改一下,以免看起来日志不太直观。 $InputFileTag httpd-info-error; $InputFilestateFile state-httpd-info-errorlog $InputRunFileMonitor $InputFilePollInterval 10 if $programname == 'httpd-info-access' then @192.168.1.2:514 if $programname == 'httpd-info-access' then ~ if $programname == 'httpd-info-error' then @192.168.1.2:514 if $programname == 'httpd-info-error' then ~ #主要就是将上面配置中的Nginx都换成了httpd。 [root@aaa ~]# systemctl restart rsyslog #重启服务,使更改生效 

(2)在bbb服务器上进行日志的监控:

Linux系统日志远程采集

(3)客户端访问aaa的Nginx服务,以便产生日志(多刷新几次)。

Linux系统日志远程采集

(4)再回到bbb服务器上,查看是否有关于aaa服务器的httpd访问日志产生。

Linux系统日志远程采集

OK!没问题,采集到了。。。

———————— 本文至此结束,感谢阅读 ————————

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI