本节书摘来自华章出版社《构建高可用Linux服务器 第3版》一 书中的第1章,第1.4节,作者:余洪春 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.4 Linux服务器的日志管理

从安全的角度来说,Linux服务器的日志非常重要,它记录了系统每天所发生的各种各样的事情,如果服务器受到攻击,就可以根据它来进行分析。同时,它更是很重要的排障依据,可以通过它来检查错误发生的原因,所以我们必须了解和熟悉其运作机制。

1.4.1 系统日志syslog.conf的配置详解

目前,Linux依旧使用syslog作为日志监控进程,对其进行必要的配置能减少很多麻烦,并且可更有效地从系统日志监控到系统的状态。理解并完善一个syslog的配置,对于系统管理员来说尤为重要。/etc/syslog.conf根据如下的格式定义规则:

facility.level action

设备.优先级 处理方案

facility.level字段也称为seletor(选择条件),选择条件和处理方案之间用空格或tab分隔。#开头的是隔,空白行会自动跳过。下面分别介绍。

(1)facility(设备)

facility定义了日志消息的范围,其可以使用的key如下所示。

auth:由pam_pwdb报告的认证活动。

authpriv:包括特权信息,如用户名在内的认证活动。

cron:与cron和at有关的计划任务信息。

daemon:与inetd守护进程有关的后台进程信息。

kern:内核信息,首先通过klogd传递。

lpr:与打印服务有关的信息。

mail:与电子邮件有关的信息。

mark:syslog的内部功能,用于生成时间戳。

news:来自新闻服务器的信息。

syslog:由syslog生成的信息。

user:由用户程序生成的信息。

uucp:由uucp生成的信息。

local0~local7:与自定义程序一起使用。

另外,*通配符代表除了mark以外的所有功能,还有security为一个旧的key定义,等同于auth,已经不建议使用。

(2)level(优先级)

level定义了消息的紧急程度。按严重程度由高到低顺序排列如下:

emerg:该系统不可用,等同于panic。

alert:需要立即被修改的条件。

crit:危急情况。

err:错误消息,等同于error。

warning:预警信息,等同于warn。

notice:具有重要性的普通条件。

info:提供信息的消息。

debug:不包含函数条件或问题的其他信息。

none:没有重要级,通常用于排错。

另外,*代表所有级别,除了none外,panic、error、warn均为旧的标识符,不建议使用。

在定义level级别的时候,需要注意两点:

优先级是由应用程序在编程的时候决定的,除非修改源码再编译,否则不能改变消息的优先级。

低优先级包含高优先级,例如,为某个应用程序定义info的日志导向,则涵盖notice、warning、err、crit、alert、emerg等消息。

(3)selector(选择条件)

通过小数点符号“.”把facility和level连接在一起则称为selector(选择条件)。

可以使用分号“;”同时定义多个选择条件。也支持如下三个修饰符:

:表示所有日志信息。

=:等于,即仅包含本优先级的日志信息。

!:不等于,本优先级日志信息除外。

(4)action(处理方案)

由前面选择条件定义的日志信息,可执行下面的动作:

file:指定日志文件的绝对路径。

terminal或print:发送到串行或并行设备的标志符,例如/dev/ttyS2 @host表示远程的日志服务器。

username:发送信息到本机的指定用户信息窗口中,但该用户必须已经登录系统。

named pipe:发送到预先使用mkfifo命令创建的FIFO文件的绝对路径中。

1.4.2 Linux下的日志维护技巧

1.系统日志

/var/log/messages不仅是服务器的系统日志,很多时候它也是许多服务的日志,所以它被称为“系统杂货铺”,建议重点关注。大家一般都喜欢用以下命令来看最后10条日志:

tail -n10 /var/log/messages

其实还可以将一段日志保存成文件(Xmanager3.0企业版的shell也有日志录像截取功能),或者直接用vim来处理。我以前配置主从复制的bind服务器时,有时会因为权限的原因报错,这时就可以在一台报错的服务器上用命令tail-f /var/log/messages实时查看服务器的日志变化情况,从而查找错误的蛛丝马迹,事实证明,效果很好,而且将此命令用于LVS+Keepalived的排错效果也不错,其他服务器配置排错依此类推,这个做法也推荐大家掌握。

2.系统安全日志

/var/log/secure记录登入系统存取数据的文件,例如POP3、SSH、Telnet、FTP等都会被记录,我们可以利用此文件找出不安全的登录IP。目前比较流行的SSH防暴力破解工具DenyHosts主要也是读此文件。另外,我写了一个类似原理的shell安全脚本,用于线上服务器,在后面的章节跟大家分享。

3.记录登录者的数据

/var/log/wtmp记录登入者的信息数据,由于此文件已经被编码过(为二进制文件),想用cat等命令直接查看是不行的,必须使用last命令来取出文件的内容,如下所示。

last
命令显示结果如下:

root   pts/2    220.249.72.138 Wed Mar 30 08:33  still logged in

root   pts/2    220.249.72.138Tue Mar 29 09:02 - 15:42 (06:39)

root   pts/2    220.249.72.138Tue Mar 29 07:31 - 09:01 (01:30)

root   pts/2    219.139.223.49Tue Mar 29 00:14 - 00:29 (00:15)

root   pts/2    183.94.4.206Mon Mar 28 20:46 - 21:21 (00:34)

root   pts/2    113.57.224.3Mon Mar 28 11:30 - 12:17 (00:46)

root   pts/4    219.139.223.142Sun Mar 27 15:58 - 18:10 (02:11)

root   pts/3    113.57.224.3Sun Mar 27 14:28 - 18:25 (03:57)

root   pts/3    113.57.224.3Sun Mar 27 09:20 - 11:56 (02:35)

root   pts/3    219.140.210.152Sun Mar 27 01:16 - 01:29 (00:12)

root   pts/2    220.249.72.138Sat Mar 26 08:42 - 18:38 (1+09:55)

root   pts/2    220.249.72.138Thu Mar 24 11:19 - 14:44 (1+03:25)

root   pts/2    220.249.72.138Wed Mar 23 10:26 - 09:13 (22:47)

root   pts/2    220.249.72.138Tue Mar 22 07:22 - 13:38 (06:16)

root   pts/2    119.103.112.43Mon Mar 21 18:08 - 18:38 (00:29)

root   pts/2    119.103.112.43Mon Mar 21 16:26 - 18:07 (01:41)

root   pts/3    119.103.82.129Mon Mar 21 12:22 - 12:25 (00:02)

root   pts/2    119.103.121.252Mon Mar 21 11:59 - 14:11 (02:12)

root   pts/2    119.103.121.252Mon Mar 21 11:50 - 11:53 (00:02)

root   pts/2    119.103.30.213Sun Mar 20 10:03 - 12:42 (02:39)

root   pts/3    58.19.17.3Sat Mar 19 12:22 - 12:22 (00:00)

root   pts/2    220.249.72.138Sat Mar 19 07:07 - 16:05 (08:58)

root   pts/2    219.140.213.209Sat Mar 19 01:39 - 01:55 (00:16)

4.记录系统时间

/var/log/lastlog记录每个使用者最近登入系统的时间。因此当使用者登入时,就会显示其上次签入的时间,你应该注意一下这个时间,若此时间不是你上次签入的时间,表示账号可能被人盗用了。此可执行文件可用/usr/bin/lastlog命令读取(FreeBSD8.1下为/usr/sbin/lastlogin)。使用此命令后的记录如下所示:

lastlog
命令结果显示如下:

用户名      端口   来自       最后登录时间

root       pts/2  220.249.72.138  三 3月 30 08:33:33 +0800 2011

bin                    从未登录过

daemon从未登录过

adm从未登录过

lp从未登录过

sync从未登录过

shutdown从未登录过

halt从未登录过

mail从未登录过

news从未登录过

uucp从未登录过

operator从未登录过

games从未登录过

gopher从未登录过

ftp从未登录过

nobody从未登录过

nscd从未登录过

vcsa从未登录过

pcap从未登录过

rpc从未登录过

apache从未登录过

mailnull从未登录过

smmsp从未登录过

ntp从未登录过

hsqldb从未登录过

xfs从未登录过

rpcuser从未登录过

sshd从未登录过

dbus从未登录过

avahi从未登录过

haldaemon从未登录过

avahi-autoipd从未登录过

gdm从未登录过

longfei从未登录过

ldap从未登录过

www从未登录过

mysql从未登录过
5.服务器的邮件日志

服务器的邮件为/var/log/messages,如果要用专业的日志分析工具来分析,推荐使用Awstats;如果公司的开发对邮件的要求比较低,可以配置最简单的Sendmail或Postfix,通过看邮件日志里的status状态来判断邮件是否正确发送。在配置Nagios服务器时,我也习惯用此日志来判断报警邮件是否发送,如果对自己的shell水平足够有自信,也可以写脚本来收集邮件服务器的返回状态等,但专业的事情,建议还是由专业的Awstats工具来做,特别是邮件负载比较大时(比如,每天几百万条日志或上千万条日志),依靠人力完全不可取。

6.输出iptables日志到一个指定文件中

iptables的man参考页中提到:我们可以使用iptables在Linux内核中建立、维护和检查IP包过滤规则表,iptables自身的三个表可能已经创建,每一个表包含了很多内嵌的链,也可能包含用户自定义的链。iptables默认把日志信息输出到/var/log/messages文件中。不过有些情况下(比如你的Linux服务器是用来做防火墙或NAT路由器的),你可能需要修改日志输出的位置,通过修改或使用新的日志文件,可以帮你创建更好的统计信息,或者帮你分析网络攻击信息。下面向大家介绍如何建立一个新的日志文件/var/log/iptables.log。

输出iptables日志信息到一个指定文件的方法如下所示。

首先打开/etc/syslog.conf文件:

vim /etc/syslog.conf
然后在文件末尾加入下面这行信息:

kern.warning /var/log/iptables.log

最后保存和关闭文件,使用下面的命令重新启动syslogd:

service syslog restart

7.日志文件的专业工具

Linux系统的一些常见服务,比如Apache、Nginx、Squid等,都有自己特定的日志文件,不过由于其格式比较复杂,还是推荐使用专业工具(如Awstats、Webalizer)来分析。

8.用dmesg查看启动消息

dmesg提供了一个简单的方法查看系统启动信息。当Linux启动的时候,内核的信息被存入内核ring缓存当中,dmesg可以显示缓存中的内容。默认情况下,dmesg打印内容到屏幕上,当然,你可以重定向输出到一个文件中。如果硬件损坏,会显示在dmesg日志里,可用命令dmesggrep error来查看相关内容,其实看到的也就是/var/log/dmesg中的内容。

9.关于cron的日志

默认情况下,在crontab中执行的日志写在/var/log下,我们可以先看看/etc/syslog.conf里的配置,通过命令grep cron/etc/syslog.conf来查看,命令结果如下所示:

*.info;mail.none;authpriv.none;cron.none /var/log/messages# Log cron stuffcron.* ```
接着看/var/log/下的cron日志,命令如下所示:ls -lsart /var/log/cron*
命令结果显示如下所示:80 -rw------- 1 root root 72378 03-20 04:02 /var/log/cron.2812 -rw------- 1 root root 819861 03-27 04:02 /var/log/cron.1524 -rw------- 1 root root 525442 03-31 13:59 /var/log/cron
当crond执行任务失败时,crontab的日志会向用户发送一封邮件。如果在服务器上发现一个任务没有正常执行,而crond的邮件发送也失败,那么检查一下mail的日志,看看是否因磁盘空间不够而造成的。为了方便收集crond的日志信息,也可以将cornd错误输出和标准输出日志都指向自定义的日志文件:0 6 * * * root /bin/bash /root/test_file.sh >>/data/log/mylog.log 2>&1
10.用Shell脚本分析日志在维护线上服务器时,并不需要查看每台服务器的日志,可以偏重于我们有需求的服务器,如果不太喜欢用Awstats来分析Nginx负载均衡器的日志,可以编写一段分析日志的Shell脚本,下面分享一下我用Shell编写的分析Nginx日志的脚本,它可以快速得出排名最前的网站和IP等,内容如下所示:

!/bin/bash

if [$# -eq 0 ]; then

  echo "Error: please specify logfile."

  exit 0

else

  LOG=$1

fi

if [! -f$1 ]; then

  echo "Sorry, sir, I can't find this apache log file, pls try again!"

exit 0

fi

echo "Most of the ip:"

echo "-------------------------------------------"

awk '{ print$1 }'$LOG | sort | uniq -c | sort -nr | head -10

echo

echo

echo "Most of the time:"

echo "--------------------------------------------"

awk '{ print$4 }'$LOG | cut -c 14-18 | sort | uniq -c | sort -nr | head -10

echo

echo

echo "Most of the page:"

echo "--------------------------------------------"

awk '{print$11}'$LOG | sed 's/^.\(.cn\)\"/\1/g' | sort | uniq -c | sort -rn | head -10

echo

echo

echo "Most of the time / Most of the ip:"

echo "--------------------------------------------"

awk '{ print$4 }'$LOG | cut -c 14-18 | sort -n | uniq -c | sort -nr | head -10 > timelog

for i in 'awk '{ print$2 }' timelog'

do

  num='grep$i timelog | awk '{ print$1 }''

  echo "$i$num"

  ip='grep$i$LOG | awk '{ print$1}' | sort -n | uniq -c | sort -nr | head -10'

  echo "$ip"

  echo

done

rm -f timelog

可以用此脚本分析文件名为www_tomcat_20110331.log的文件:sh counter_nginx.sh www_tomcat_20110331.log
大家应该跟我一样比较关注脚本运行后的第一项和第二项结果,即访问我们网站次数最多的IP和哪个时间段IP访问次数比较多,如下所示:Most of the ip:-------------------------------------------5440 117.34.91.549 119.97.226.2264 210.164.156.664 173.19.0.2404 109.230.251.352 96.247.52.152 85.91.140.1242 74.168.71.2532 71.98.41.1142 70.61.253.194Most of the time:--------------------------------------------12 15:3111 09:4510 23:5510 21:4510 21:3710 20:2910 19:5410 19:4410 19:3210 19:13

《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理相关推荐

  1. 《构建高可用VMware vSphere 5.X虚拟化架构》——第2章 构建高可用vCenter Server 2.1vCenter Server版本以及运行环境的选择...

    本节书摘来自异步社区<构建高可用VMware vSphere 5.X虚拟化架构>一书中的第2章,第2.1节,作者:何坤源著,更多章节内容可以访问云栖社区"异步社区"公众 ...

  2. 《构建高可用Linux服务器 第3版》—— 2.7 系统维护时应注意的非技术因素

    本节书摘来自华章出版社<构建高可用Linux服务器 第3版>一 书中的第2章,第2.7节,作者:余洪春 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.7 ...

  3. 《构建高可用Linux服务器 第3版》—— 1.2 全面了解Linux服务器

    本节书摘来自华章出版社<构建高可用Linux服务器 第3版>一 书中的第1章,第1.3节,作者:余洪春 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.3 ...

  4. 恭贺《构建高可用Linux服务器》荣获几项殊荣

    恭贺<构建高可用Linux服务器>荣获<程序员>杂志评选的2011十大畅销书,51cto社区2011年最受读者喜欢的原创IT技术图书奖,CSDN社区2011年十大最具技术影响力 ...

  5. 构建高可用linux和鸟哥,构建高可用Linux服务器

    <构建高可用Linux服务器(第3版)>是Linux运维领域公认的经典畅销书,是国内51CTO.IT168等知名网站和多位资深运维专家共同推荐的运维工程师必备的工具书! "酒哥& ...

  6. 《构建高可用Linux服务器》答读者疑问

    一.撰写此书的初衷. 从事系统管理和系统集成方面的工作已有七八年了,在工作期间,我曾经担任了一段时间的红帽RHCE讲师,到东北大学等高校推广红帽Linux及FreeBSD等开源系统.在教学过程中我发现 ...

  7. 《构建高可用Linux服务器》互动网首发

    书名:构建高可用Linux服务器 ISBN:9787111359423 作者:余洪春 定价:79.00元 出版时间:2011年10月 出版社:机械工业出版社 订书页面 编辑推荐: 基于实际生产环境,从 ...

  8. 《构建高可用Linux服务器》第一版勘误表(附脚本下载)

    <构建高可用Linux服务器>因为印刷或自己检查不仔细的原因还是有许多错误的,这个在第二次印刷时会统一改正(脚本下载地址为 http://www.hzbook.com/Books/6021 ...

  9. 《构建高可用Linux服务器》卓越网和互动网上架了

    <构建高可用Linux服务器>卓越网率先上架,购买地址.这里有一个情况也说明下:原先互动网上朋友都只是关注,而并不是预定,这里更正一下,原因是:互动网上架以后必须是自己再去下单才能购买的. ...

最新文章

  1. 博世力士乐液压_[Event Review] Company Visit Bosch Rexroth 博世力士乐液压工厂参观
  2. react-native 查看对象属性
  3. 反汇编基础、OllyDbg简介和界面、基本操作、初级TraceMe练习
  4. Extjs关于alert显示不出—异步问题
  5. java list 删除元素_Java面试题:List如何一边遍历,一边删除?
  6. 生产上完成TopN统计流程
  7. Vim案列掌握vim的基本操作——案例一:vim创建编写txt文件
  8. 鸿蒙手机系统还没有开发,华为鸿蒙手机太难了!引发开发者大吐槽:为何没有自己独特风格?-互联网/电商-文章-小虾米...
  9. java使用itext将图片放到pdf模板的指定位置
  10. awk嵌套awk_与AWK一起喝咖啡
  11. fastreport4打印预览
  12. DEV皮肤(系统默认和自定义皮肤调用)
  13. 分享大二时用python写的银行管理系统(超简单版)内附源码
  14. jpg格式的矢量化arcgis_ArcGIS实践教程(11)图形的批量矢量化
  15. oppo自带计算机版本,OPPO手机助手
  16. 英文c语言笔试题,2010年3月计算机等考二级C语言笔试试题 附答案(国外英文资料).doc...
  17. 教你分辨真假苹果官方售后维修点就是这么简单!!
  18. matlab的omega0是什么,ABO设定中,A具体是怎么标记O的?
  19. Java的图片处理工具类(放缩、切割、水印等)
  20. Android 使用adb查看和修改电池信息

热门文章

  1. ubuntu18.04.4 环境变量设置 export path
  2. 【跨域报错解决方案】Access to XMLHttpRequest at ‘http://xxx.com/xxx‘ from origin ‘null‘ has been blocked by
  3. Linux下批量重命名文件名为数字索引编号(0~N.xxx)的方法
  4. 视频目标检测--Flow-Guided Feature Aggregation for Video Object Detection
  5. “adb不是内部或外部命令,也不是可执行的应用程序”错误原因及解决方法
  6. php自定义控件,小程序自定义组件的实现方法(代码)
  7. php无法引用,PHP错误:“无法通过引用传递参数2”
  8. LocalDateTime、OffsetDateTime、ZonedDateTime互转,这一篇绝对喂饱你
  9. python exec函数_Python3 exec 函数
  10. 8个好用到爆的Python实用技巧,至少不用吃亏半年