采集系统上云(Linux系统中有很多日志类型分析系统产生的文件介绍(二))

优采云 发布时间: 2022-01-27 16:17

  采集系统上云(Linux系统中有很多日志类型分析系统产生的文件介绍(二))

  提供服务的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、将info级别以上aaa服务器的所有系统服务日志同步发送给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生成的新日志如下:

  

  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服务器上的监控日志:

  

  (3)客户端为了生成日志,访问aaa的Nginx服务。

  

  (4)回到bbb服务器看看aaa服务器上是否有生成Nginx访问日志(如果没有生成新的日志,客户端可以在排除配置错误的前提下刷新几次):

  

  可见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服务器上的监控日志:

  

  (3)客户端访问aaa的Nginx服务是为了生成日志(刷新几次)。

  

  (4)回到bbb服务器看看有没有关于aaa服务器的httpd访问日志。

  

  行!没问题,采集 来了。. .

  ————————— 本文到此结束,感谢您的阅读——————

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线