日志分两个,一个是rsyslog 日志服务,一个是日志轮转(就是日志的分离和切割)logrotate

对了日志服务rsyslog 来说,它自带了一个服务叫做logrotate;这两个一般都是一起用;

一个日志文件如果扩大,一定会被分离的;否则文件会打不开;对于系统来讲,记录日志是通过主服务来讲的,就是这个服务:[root@server ~]# /etc/init.d/rsyslog默认这个服务是启动的;如果这个服务关了,系统是不会为我们记录日志的;很多服务和应用都是靠rsyslog这个服务来记录的

rsyslog对应的配置文件是[root@server ~]# vim /etc/rsyslog.conf#这是日志服务的主配置文件

34 #### RULES #### #这是日志规则(第34行是日志规则)

一、处理日志的进程

rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证,计划任务...

不负责处理日志,只记录日志

处理日志:1.少量日志可以使用vim cat tail less more grep awk这些文档处理程序查看和检索

大量日志可以用splunk,logserch #splunk给日志做分期

日志分类:系统日志,进程日志,应用程序(某些应用程序例如httpd,nginx,mysql,可以以自己的方式记录日志)

 

记录日志原因: 拍错,追溯事件,统计流量

日志可以存放在本地

日志可以存放在远程服务器

 

二、常见的日志文件

# ls /var/log/     #默认存放各种日志的地方
# tail /var/log/messages  #系统主日志文件
# tail -f /var/log/messages    #动态查看日志文件的尾部
# tail -f /var/log/secure #认证、安全
# tail /var/log/maillog #跟邮件(sendmail,postfix)相关
# tail /var/log/cron   #crond、at进程产生的日志
# tail /var/log/dmesg  #和系统启动相关-开机后不再记录,可以使用dmesg命令查看活动的日志
# grep -i eth /var/log/dmesg    #只反映出开机过程的信息,开机成功后不会再改变
# dmesg            #查看系统开机后的信息
# tail /var/log/audit/audit.log        #系统审计日志
# tail /var/log/yum.log
# tail /var/log/mysqld.log           #mysql进程自己记录的日志
# tail /var/log/httpd/access_log     #httpd进程自己记录的日志
# tail /var/log/xferlog    #和访问FTP服务器相关
# w #当前登录的用户 /var/log/wtmp
# last #最近登录的用户 /var/log/btmp
# lastlog #所有用户的登录情况 /var/log/lastlog
三、rsyslogd系统
rsyslogd是如何工作的:应用程序或者进程------->设备------->级别--------->动作(规则)
# rpm -qc rsyslog
 
/etc/logrotate.d/syslog    #和日志的轮转(切割)有关
/etc/rsyslog.conf         #rsyslogd的主配置文件
/etc/rsyslog.d/*.conf
/etc/sysconfig/rsyslog

这是主配置文件里面的默认规则

========================================================

==规则:Rules
告诉rsyslogd进程哪个设备(facility),关于哪个级别的信息,以及如何处理,不同的应用程序会选择不同的设备进行日志记录
authpriv.*        /var/log/secure #和安全认证相关的
mail.*          -/var/log/maillog 延迟一段时间再记录 前面横杠代表异物存储,先写在内存里,等不忙的时候在记录在文件里;不带横杠是产生日志马上写到磁盘文件
cron.*         /var/log/cron
mail.info  /var/log/maillog  级别是info 
authpriv.*  * (所有终端,包括debug)  代表日志文件不记录在任何一个文件;在所有终端打印;一般用的不多

authpriv.*@192.168.10.230  @意思是:udp协议传输远程日志服务器 #是把日志放到远程;做日志收集用的,有时候一般不会把日志存在本地里面,一般会把日志放在专门的日志服务器上面记录,这样主要是为了安全以及统一管理,统一分析日志用的;例如apache做网页,可以通过收集网页日志;udp可能会产生,日志服务器因为网络原因收不到日志,从而无法记录日志

authpriv.*意思是:TCP协议传输 #是把日志放到远程;做日志收集用的,有时候一般不会把日志存在本地里面,一般会把日志放在专门的日志服务器上面记录,这样主要是为了安全以及统一管理,统一分析日志用的;例如apache做网页,可以通过收集网页日志;如果网络不好,会导致收集日志的时间是不挨着呢;至于记录到哪?得看rsyslog

authpriv.*  :omrelp:192.168.10.230   :omrelp:意思是:To forward via  RELP, prepend the string ":omrelp:" in front of the hostname.
 
下面详细介绍了每一种日志设备
# man 3 syslog                               
安全登录相关的
安全认证
计划任务
后台进程
关于ftp的
关于内核的
用户自定义设备 支持从0到7;有8个自定义设备
       LOG_LPR                        printer subsystem
邮件系统mail subsystem
自身产生的日志 日志服务自己记录的一个设备             
       LOG_USER (default)
       LOG_UUCP
 
接下来讲日志怎么收集?
一、集中式日志管理
RHEL6:
==日志服务器(开启接收功能)
[root@localhost ~]# vim /etc/rsyslog.conf #下面两行关键字代表开启接收
12# Provides UDP syslog reception
13$ModLoad imudp.so
14$UDPServerRun 514 #开放时候注意,开放udp或者tcp取决于产生日志的服务器到底是一个@还是两个@@
 16 # Provides TCP syslog reception
 17 #$ModLoad imtcp
 18 #$InputTCPServerRun 514

 

例子:先在收集日志开启收集日志功能

[root@server ~]# vim /etc/rsyslog.conf  #是收集日志端
这里开启TCP
 17 $ModLoad imtcp
端口号是514
在开一个自定义设备:
自定义5的info级别 保存在 /var/log/local5.log级别里面
[root@server ~]# service rsyslog restart
 
接下来该把日志给推到远程服务器了;先要在推的里面写规则
[root@agent ~]# vim /etc/rsyslog.conf

50 local5.info        @@192.168.145.128 #这里写info,默认是*,指的是所有级别都可以记录;因为使用的服务不会明确指定出会产生多少级别的日志,什么情况属于什么级别;所以我们会把所有级别产生的日志记录在一个级别里面

[root@agent ~]# service rsyslog restart
[root@agent ~]# logger -p local5.info -t "试试" "内容"    #手工推一个logger
[root@server ~]# cat /var/log/local5.log
Mar  3 11:53:29 agent 试试: 内容
[root@agent ~]# logger -p local5.err -t "试试" "内容"  #试试别的级别
[root@server ~]# cat /var/log/local5.log
Mar  3 11:53:29 agent 试试: 内容
Mar  3 11:54:11 agent 试试: 内容
[root@server ~]# netstat -tunlp |grep :514

远程服务有几个问题需要注意:

服务器端开启远程日志接收,并定义设备、级别以及处理方式

客户端开启远上传日志功能,定义设备、级别,处理方式为网络上传

PS:1.客户端上定义的设备,必须保证服务器端有同样的设备进行接收(包括级别和动作都要一样)

防火墙 selinux 要关掉或者防火墙中允许相应端口传输数据                        

关掉防火墙

当日志存储到一定数量,就无法加载

一、logrotate (轮转,日志切割) #日志轮转就是为了避免大日志文件的产生;使用这个工具可以把预先设定的规则实施到某个日志上,如果那个日志符合那个规则,一般我们就会做分离;切割又叫转存

1. 如果没有日志轮转,日文件会越来越大 #当一个日志文件越来越大的时候会重新分离一个日志文件;日志文件会按照我们事先设定的大小来存放;

2. 将丢弃系统中最旧的日志文件,以节省空间

3. logrotate本身不是系统进程,它是通过计划任务crond每天执行

logrotate:这是日志的一种分离工具,它不是一个服务;因为它不是一个服务,它是以工具的方式存在;所以它需要设置好规则以后,手工去执行的;就像脚本一样;每次手工执行一次它,它都会扫描所有设置它日志的文件,如果符合规则就把它分离出去;所谓的分离日志其实就是改名,在重新创建一个日志文件,新的日志就往空的日志文件里面记录;所以我们需要设置好东西以后来学习后面的计划任务;我们有很多的工具都是手工执行的,通过计划任务来完成;默认情况下这是系统工具自带的一个包;

[root@server ~]# rpm -qa |grep logrotate
logrotate-3.7.8-17.el6.x86_64 #默认是安装了的;跟随主日志服务,由于装了这个包,默认情况下很多日志是可以自动分离的
[root@server ~]# cd /etc/cron.daily/ #这是计划任务目录,所有想每天执行的程序都可以把程序的运行文件放到这个目录里面,脚本也可以,凡是放到这个目录里的可执行文件每天都会执行;当我们装好logrotate-3.7.8-17.el6.x86_64以后,会默认创建一个/etc/cron.daily/logrotate文件
[root@server cron.daily]# rpm -ql logrotate |more#查看包里面包含哪个文件
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/logrotate.d
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.7.8
/usr/share/doc/logrotate-3.7.8/CHANGES
/usr/share/doc/logrotate-3.7.8/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate.status
 
[root@server cron.daily]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1      #规则是写在/etc/logrotate.conf,它是日志的主配置文件
EXITVALUE=$?  #指的是退出值
if [ $EXITVALUE != 0 ]; then  #如果上一条命令没有执行成功
就插一条日志到系统
fi
exit 0        #logrotate不用设置计划任务,默认是已经设置好了

 

我们到单位里面,先看linux版本有没有装logrotate以及装完了之后,它是不是自动的每天执行;需要我们去检查的;如果没有就需要我们自己写这么一个脚本

 

接下来讲logrotate的主配置文件;里面写的规则是什么样的,都包含哪些规则内容

[root@server ~]# vim /etc/logrotate.conf #这是logrotate的主配置文件

配置文件里面主要分为两个部分:

第一部分:默认规则(1到20行)

第二部分:是具体的日志规则(21行到底)

主配置文件

[root@localhost ~]# vim /etc/logrotate.conf (详细信息在man手册里)

=========全局设置==========

weekly  #每隔一个星期检测一次,检测时候分不分离取决于条件;;这里规定是每隔一个星期检查一次,而上面脚本是每隔一天检查一次,具体如何判断?每天执行不意味着每天都要分离,它会有一个最短的周期,周期不到不分离

rotate 4 #保留4份
create #轮转后创建新文件 ,一旦分离为不为它创建一个新的日志文件
dateext    #使用日期作为后缀 分离出来的文件用不用文件日期
#compress #分离的时候是否压缩;默认没有压缩,因为压缩之后还得解压
 
# RPM packages drop log rotation information into this directory  #rpm安装的程序,按照下面目录规则进行轮转;
include /etc/logrotate.d  #包含该目录下的文件;意思是下面21行以后的可以写成文件保存在这个目录里面;里面有很多日志条目的文件
# no packages own wtmp and btmp -- we'll rotate them here  #对于wtmp和btmp这样无主的日志,按照下面配置进行轮转
/var/log/wtmp {  #对该日志文件设置轮转的方法

一月轮转一次

最小达到1M才轮转

:就算到了一个月,如果日志不到1M,也不能轮转

轮转后创建新文件,并设置权限

保留一份
}
/var/log/btmp {
丢失不提示
每月轮转一次
轮转后创建新文件,并设置权限
保留一份
}
日志的规则:
周期满足,分离
周期满足,大小不满足,不分离
周期满足,大小满足,分离
[root@server ~]# /usr/sbin/logrotate /etc/logrotate.conf #手动执行日志分离一次
[root@server ~]# /usr/sbin/logrotate -f /etc/logrotate.conf #手动执行强制日志分离一次;即使不满足分离条件;但是指定了notifempty,日志文件为空不分离
例1:轮转文件/var/log/yum.log
# vim /etc/logrotate.d/yum  原有的设置
/var/log/yum.log {     #yum日志文件
丢失不提示
如果为空,不轮转
    size 30k     #30k
一年轮转一次
:到了一年或者大小达到30k都要轮转
创建新文件
}
# vim /etc/logrotate.d/yum 修改后的设置
/var/log/yum.log {
       missingok
#    notifempty
#    size 30k
#    yearly
 
      daily
      rotate 3
      create 0777 root root
}
测试:
# /usr/sbin/logrotate /etc/logrotate.conf   #手动轮转
# grep 'yum' /var/lib/logrotate.status   #记录所有日志文件最近轮转的时间
"/var/log/yum.log" 2012-11-10
# date 111114002012
# /usr/sbin/logrotate /etc/logrotate.conf
例2:
/var/log/messages {    脚本,在轮转之前先去掉日志的A属性,轮转之后再加上;轮转就是分离
Prerotate #去掉属性
       chattr -a /var/log/abc.log
    endscript
    #notifempty
    daily
create 0600 root root
    missingok
    rotate 5
Postrotate #增加属性
这就是它的只能追加不能修改的属性;只能增加不能修改是无法分离的
    endscript
}
脚本支持两个关键字:一个是prerotate,另外一个是 postrotate
prerotate:分离之前执行命令
postrotate:分离成功之后执行命令
对于日志来讲,处于安全来讲会给它加上一些属性
split:这个命令是用来切日志的;用它可以将大文件切成多个小文件;可以按照要求切,切得速度相当快,如果有50个G的日志,两分钟剧可以切完;比拷贝都快;所谓的切就是创建一个文件,完了把它拷进去
rpm装的包默认有logrotate服务,分离规则是放到里面的;而源码包没有
[root@server ~]# man split
-b:指定大小
例题:把一个大文件切成小文件;文件是一个G的
[root@server tmp]# dd < /dev/zero > dafile.txt bs=100M count=10 #文件变成一个G
10+0 records in
10+0 records out
1048576000 bytes (1.0 GB) copied, 15.3686 s, 68.2 MB/s
[root@server tmp]# sync
[root@server tmp]# ls
dafile.txt  #就有这个文件了
[root@server tmp]# du -m dafile.txt  #查看文件大小
1001 dafile.txt
[root@server tmp]# split -b 1M dafile.txt  #切成1M的大小
split: output file suffixes exhausted
[root@server tmp]# ls #这样就切出来了(里面有很多,这里省略了)
xcp                  xfn  xil  xlj  xoh  xrf  xud  xxb  xzz
xcq                  xfo  xim  xlk  xoi  xrg  xue  xxc  yum.log
[root@server tmp]# du -m xcl
1 xcl

切大文件的时候最好把它放到一个单独的目录里面

 

 

下面是计划任务cron

cron:作用:  计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
[root@server ~]# ps aux |grep cron |grep -v 'grep'
root       1762  0.0  0.1 117336  1240 ?        Ss   22:15   0:00 crond
crond进程每分钟检查一次,以运行相应的任务
crond日志文件/var/log/cron
[root@server ~]# cd /etc/cron #每天的脚本和程序都放到这个目录里面,它就会每天执行
cron.d/       cron.deny     cron.monthly/ cron.weekly/
cron.daily/   cron.hourly/  crontab

每星期执行的放到cron.weekly/

如果想不让某个用户执行计划任务,我们可以把用户名直接写到文件cron.deny里面;这个用户就不能设置计划任务了

或者用[root@server ~]# crontab -e  #创建计划任务

 

 

用crontab不能直接写命令行,不能使用执行引用’’,执行引用可以放脚本中,写脚本名,有执行权限

里面有个关键点,除了星期不取交集,其它时间都取交集;

[root@server ~]# crontab -e

00 02 16 03 07 #这里的07指的是星期天;这里的感觉就是每年的3月16日晚上两点整的时候,而且那天是星期天的时候;其实不是这个意思;意思是每年3月6日两点整和每周日两点整都可以;也就是说整个时间格式当中如果日期一旦写了,日期和前面四个数字取得是或得关系,它是避免出现错误;指的是如果3月16日不是星期天;

00 02 * * * ls  #是每周日晚上两点或3月16日晚上两点
00 02 16 03 *  #所以一般星期几不写
00 02 * * 07 #或者不写日期
00 02 * * 7 ls  #每周日2:00整
00 02 14 2 * ls  #每年2月14号2:00整
如果要写每分钟执行:01 * * * * #这样写是不对的,这样写是每小时第一分钟;要想表示每分钟执行:*/01 * * * *
01 02 * * * #每天两点
计划任务两种定义方法:一种是放到/etc/cron对应的文件里面;另外一种是指定时间格式;用crontab -e执行
[root@localhost ~]# crontab -e #创建计划任务
* * * * * /bin/ls
[root@localhost ~]# crontab -l  #查看计划任务的具体内容
* * * * * /bin/ls
crontab -r删除计划任务
[root@server ~]# tail /var/log/cron #查看日志
我们设计好计划任务之后,它都会产生一个临时文件
例如:
[root@server ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@server ~]# crontab -l
00 02 * * * bash /tmp/abc.sh
如果要修改计划任务有两种方法:第一种:
[root@server ~]# crontab -e #进去直接修改
第二种方法:找到计划任务的保存位置:
[root@server ~]# cd /var/spool/cron/ #关于每个计划任务的目录
[root@server cron]# ls
root  #一个用户一个文件;这个文件里记录的就是用户的计划任务
[root@server cron]# cat root
00 02 * * * bash /tmp/abc.sh

换句话讲。Tab会每隔一段时间来扫描所有用户的文件

 

00 02 * * * ls //每天2:00整

00 02 1 * * ls   //每月1号2:00整

00 02 14 2 * ls //每年2月14号2:00整

00 02 * * 7 ls   //每周日2:00整

00 02 14 2 7 ls //每年2月14号2:00整  或者  每周日2:00整,这两个时间都执行

 

00 02 * * * ls //每天2:00整

*   02 * * * ls //每天2:00中的每一分钟

* * * * * ls //每分钟执行ls

* * 14 2 * ls //2月14号的每分钟

以下是特殊写法:

*/5 * * * * ls //每隔5分钟

00 02 1,5,8 * * ls //每月1,5,8号的2:00整

00 02 1-8 * * ls //每月1到8号的2:00整

切记:计划任务是个服务;如果想执行计划任务,首先先确保这个服务是开着的

[root@server cron]# service crond status #默认是运行的,哪怕最小化安装也是运行的
crond (pid  1759) is running...

如果关闭会导致很多和它关联的服务出问题

 

案例1:备份etc目录,要求:

1. 每天4:00备份/etc目录到/var/back

2. 将备份命令写在脚本中,如/root/back.sh,加执行权限

3. 每天备份的文件名包含当天的日期,如2014-11-09_etc.tar.gz

4. 计划任务执行时,屏幕不产生任何输出 &>/dev/null

5. 只保留最近5天的备份 find /var/back -mtime +5 |xargs rm -rf

 

1. 编写脚本

[root@localhost ~]# vim /root/back.sh
第一种版本
tar -czf /var/back/`date +%F`_etc.tar.gz /etc   
find /var/back -mtime +5 |xargs rm -rf #把5天前的备份找出来并且删掉
 
第二种版本
#!/bin/bash
filename=`date +%F`_etc.tar.gz #定义文件名
back_dir=/var/back  #定义存放的目录
   
# 判断备份文件存放目录是否存在
if [ ! -d $back_dir ];then
不存在就创建这个目录
fi
#备份
tar -czf ${back_dir}/$filename /etc &>/dev/null
#删除修改时间超过5天的文件
cd ${back_dir}
find . -mtime +5 |xargs rm -rf
接下来是把计划任务放到脚本里面去执行
手动测试脚本
[root@localhost ~]# chmod a+x /root/back.sh
[root@localhost ~]# chattr +i /root/back.sh
[root@localhost ~]# /root/back.sh
[root@localhost ~]# ll /var/back/
总计
-rw-r--r-- 1 root root 11984709 09-14 17:59 2014-01-16_etc.tar.gz
[root@localhost ~]# date 01171200
[root@localhost ~]# /root/back.sh
[root@localhost ~]# ll /var/back/
-rw-r--r-- 1 root root 11984709 09-14 17:59 2014-01-16_etc.tar.gz
-rw-r--r-- 1 root root 11984709 09-15 12:00 2014-01-17_etc.tar.gz
配置cron执行脚本
[root@localhost ~]# crontab -e
0 4 * * * /root/back.sh
[root@localhost ~]# crontab -l         
0 4 * * * /root/back.sh
[root@localhost ~]# tail /var/log/cron   #计划任务有没有执行通过日志查看;默认计划任务的日志是在这个位置;这个是由配置文件/etc/rsyslog.conf(第52行)决定的
Sep 20 12:03:01 localhost crond[5873]: (alice) CMD (ls)
Sep 20 12:03:42 localhost crontab[5870]: (root) REPLACE (root)
Sep 20 12:03:42 localhost crontab[5870]: (root) END EDIT (root)
Sep 20 12:03:46 localhost crontab[5880]: (root) LIST (root)
Sep 20 12:04:01 localhost crond[5882]: (alice) CMD (ls)
Sep 20 12:05:01 localhost crond[5895]: (alice) CMD (ls)
Sep 22 04:00:20 localhost crond[5909]: (alice) CMD (ls)
Sep 22 04:00:20 localhost crond[5912]: (root) CMD (/root/back.sh)

计划任务里面最好使用绝对路径

例题,写个计划任务,每分钟创建一个文件

[root@server cron]# crontab -e

*/01 * * * * /bin/touch /tmp/uplooking.fil #第一次是创建,之后每分钟在创建就是修改它的时间

计划任务默认只支持分钟,不支持秒;但是通过设置也可以支持秒

让任务实现秒级执行

一、通过计划任务实现

每隔10秒执行命令date
* * * * * date >/dev/pts/1  #每时每刻都执行
* * * * * sleep 10; date >/dev/pts/1  #等10秒在执行
* * * * * sleep 20; date >/dev/pts/1
* * * * * sleep 30; date >/dev/pts/1
* * * * * sleep 40; date >/dev/pts/1
* * * * * sleep 50; date >/dev/pts/1

 

二、通过程序实现

# vim while01.sh
#!/bin/bash
while :
do
        echo "ok"
        sleep 5
Done

网络配置

一、常见的网络接口

lo  #本地环回接口 ;这个网卡永远代表自己;lo虽说没用,但你还不能把它停了;很多local host解析的就是自己;127开头的IP代表的是自己

eth0  #以太网接口

wlan0 #无线接口

bond0 #bonding接口---------->又叫绑定网卡;多块物理网卡绑定后产生的虚拟接口(有什么意义:不都还是从其中一块网卡走数据么?)

virbr0 #桥接接口虚拟交换机;虚拟机网卡

br0  #桥接接口 虚拟交换机

vnet0  #KVM虚拟交换机接口

网络基础知识:

IP ipv4(32 bit)    ipv6(128 bit)

MAC 48 bit实际数据传输时候依靠MAC48 bit

子网掩码 ipv4(32 bit) 帮助确定我们自己在对方哪个网段

网段

路由查询路由表走路的过程,比如:往一个网段传点东西,先要确定这个网段是否通着,这个网段就叫路由

网关说白了,就是快递

OIS七层模型

TCP/IP四层模型

IP分类

公有地址:

IP分类 缺省掩码

A 1-127

B 128-191

C 192-223

D 224-239 组播地址

E 240-247 保留地址

私有地址:

A:10.0.0.0 - 10.255.255.255

B:  172.16.0.0 - 172.31.255.255

C:  192.168.0.0 - 192.168.255.255

临时:立即生效,重启失效(测试、集群节点间的浮动IP...)

1. 修改主机名

# hostname tianyun.uplooking.com

2. 修改IP

# ifconfig eth0 192.168.2.252/24 up //修改eth0的IP
# ifconfig eth0:0 192.168.2.252/24 up //给eth0增加IP
# ifconfig eth0:1 192.168.2.251/24 up //给eth0增加IP
# ip addr add dev eth0 192.168.2.252/24 //增加新的临时IP
# ip addr add 192.168.3.252/24 dev eth0
# ip addr show eth0

3. 设置网关(默认路由)

# route add default gw 192.168.2.254            添加网关
# route -n
# route del default gw 192.168.2.254
# ip route add default via 192.168.2.254 dev eth0
# ip route
# ip route del default via 192.168.2.254 dev eth0