linux服务器系统日志如何管理?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux服务器系统日志如何管理?相关的知识,希望对你有一定的参考价值。

参考技术A 养成良好的习惯,每天查看下log的内容,排除一些error和warning。 定期对log进行归档和更新
如有疑问可追问,满意请及时采纳,谢谢
参考技术B 以鄙人的工作经验来说, 比如在移动的系统, 给他们做的是监控日志的行为, 比如日志日志出现了异常的问题, 就立即发送短信报警。当然日常的日志巡检还是有的。
这样才能做好工作啊。
当中涉及linux系统管理,比如shell编程, 和python的编程, php, 如果楼主以后有这样的需求, 可以一起探讨。能帮忙搞定
参考技术C 日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等。

具体你可以参考下百度文库
http://wenku.baidu.com/link?url=_NEprDDDrbZvqEhNN_NuAVV7aQ7L6YuDzvPwg0vq2qKWpR6I9XrO2Pz5C2BZ9zkd0x_52bCA72MLMhHgshPZFA80HsfUXlLYiqHm25bnu5a
参考技术D 一、确定你有所需的信息:

为了能够写出有效的关联规则,日志管理系统必须有足够的上下文数据进行分析。例如,为了确定某个特定的流量或者行为来自哪里,就需要知道源IP地址信息,
这意味着日志管理系统必须先记录下IP地址信息,这样引擎才能够将其解析出来。又例如,如果要写一条日志分析规则对目标设备或者应用发生了某种行为进行告
警,相关的日志数据必须先记录下那些行为才行。

二、外行人用上了工具依然是外行人:

 如果你不准备投入时间和精力在恰当地安装、管理日志管理工具上,那么就不要把钱浪费在日志管理系统上面。日志管理系统必须进行合理的配置,以正确解析您
网络中的事件和日志,这样出来的报表才具有商业和技术价值。另一个“愚蠢”的错误是不去浏览和审查警告控制台,因而错过了关键的安全事件。因此,不要犯只
重视日志管理技术而不重视系统使用的错误。

三、通过预定义需求来精简RFP(请求提案):

  创建RFP(请求提案,需求方案说明书)是一个费时的过程。而一些需求一旦被定义出来,就能在随后的RFP中复用。这在制定日志管理的需求时很常见,
因为日志管理的基本需求(例如日志文件的格式,写入日志文件的数据,等等)都是一样的,可以预先定义出来。使用预定义需求的另一个好处是这确保了在精简
RFP周期的同时保持需求的一致性。

四、使用日志数据描述正在或者已经发生的事情:

 “日志是检查故障的极佳信息源”。因为大部分情况下用户判断导致故障原因的所有所需信息都能够从日志文件中找到。在危机期间,管理人员经常不得不进入被
动模式,往往只能通过直觉、猜测、将不可再分的无关信息拼凑到一起等方式来判断正在或者已经发生的事情。而日志是真实发生事件的记录,日志管理系统允许管
理人员针对故障信息实时地撰写和产生报表,从而真实地告诉响应小组网络中发生了什么。

五、使用范畴可以超越安全本身:

  日志管理系统是一个绝佳的安全设备信息收集和分析工具,不仅可以用这些信息实现安全感知,而且可以利用这些信息实现其他目标。例如,可以将这些信息用于分析(你的)十大业务关系的客户体验。

六、不要局限于静态分析:

  大部分组织需要做的最后一件事是将那些没有整体分析模型的数据填写到另一张大表中,然后利用这张大表来进行事件分析。根据预期或者可接受行为的基线设定的告警不仅要通过分析大表中单条记录的特征来产生,还要通过分析一组记录集的特征来产生。

摘自天下数据!--专业运营香港香港服务器、韩国服务器、美国服务器等等优质海外服务器!本回答被提问者采纳

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、将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产生的新日志如下:

技术图片

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访问日志产生。

技术图片

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

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

以上是关于linux服务器系统日志如何管理?的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统日志怎么查看

:Linux 系统日志管理 日志转储

Linux系统中的日志管理

linux的日志管理

Linux系统的日志管理

Linux中的日志分析及管理