linux运维基础[日志管理]——————日志管理rsyslog、日志定向采集、日志远程管理、日志格式设定

文章目录

  • 1.什么是日志?
  • 2.搭建实验环境
  • 3.系统日志管理
  • 4.日志的定向采集
  • 5.日志的远程同步
    • 5.1 设定客户端
    • 5.2 设定服务端
    • 5.3 测试
  • 6. 日志采集格式的设定
    • 6.1 传统格式
    • 6.2 设定格式

1.什么是日志?

电脑的日志相当于我们平常写的日记,日志里面记录的是服务器的状态

日志的存在可以使管理员提前知道服务器的各种状态,如果服务器出现什么问题可以提前处理。

那么问题来了,公司的服务器很多,难道管理员一个一个查看服务器的状态吗?实际上并不是这样的,为了提高工作效率,我们可以把所有服务器的日志集中在一起管理,放在一台主机上管理,将其他服务器的日志都传到这台管理日志的主机上,这样就方便多了。

2.搭建实验环境

我们需要两台服务器:

  • 一台作为管理日志服务器。server,设定IP:123.0.0.1/24
  • 一台作为客户端被管理。client,设定IP:123.0.0.2/24

服务端:

[root@server ~]# ip a
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:00:05:0a brd ff:ff:ff:ff:ff:ff
    inet 123.0.0.1/24 brd 123.0.0.255 scope global eth0 
    # ip设定成功
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe00:50a/64 scope link 
       valid_lft forever preferred_lft forever

客户端:

[root@client ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 123.0.0.2  netmask 255.255.255.0  broadcast 123.0.0.255 
        # ip设定成功
        inet6 fe80::5054:ff:fe00:50b  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:00:05:0b  txqueuelen 1000  (Ethernet)
        RX packets 131  bytes 17998 (17.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 200  bytes 24159 (23.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

接下来两台服务器添加解析:

首先在服务器端设定:

[root@server ~]# vim /etc/hosts # 编辑解析文件
[root@server ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

123.0.0.1 server.example.com # 写入自己的域名与IP
123.0.0.2 client.example.com # 写入客户的域名与IP
[root@server ~]# scp /etc/hosts [email protected]:/etc/ # 将此文件远程发送给client用户
[email protected]'s password: 
hosts                                         100%  217     0.2KB/s   00:00    
[root@server ~]# ping client.example.com # 现在就可以解析域名了
PING client.example.com (123.0.0.2) 56(84) bytes of data.
64 bytes from client.example.com (123.0.0.2): icmp_seq=1 ttl=64 time=0.209 ms
64 bytes from client.example.com (123.0.0.2): icmp_seq=2 ttl=64 time=0.418 ms
^C
--- client.example.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.209/0.313/0.418/0.105 ms

直接在客户端进行测试:

[root@client ~]# ping server.example.com # 客户端也可以解析服务器域名
PING server.example.com (123.0.0.1) 56(84) bytes of data.
64 bytes from server.example.com (123.0.0.1): icmp_seq=1 ttl=64 time=0.237 ms
64 bytes from server.example.com (123.0.0.1): icmp_seq=2 ttl=64 time=0.391 ms
^C
--- server.example.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.237/0.314/0.391/0.077 ms

3.系统日志管理

rsyslog:此服务是用来采集系统日志的,它自己不产生日志,只是起到采集日志的作用

对日志进行分析,首先第一步要规整日志。

  • /etc/rsyslog.conf 是rsyslog服务的总配置文件
  • /etc/rsyslog.d 该目录是单独配置的rsyslog配置文件

也就是说在/etc/rsyslog.d中设定怎样对客户端服务,/etc/rsyslog.conf怎样管理好rsyslog服务本身。

[root@server ~]# whereis rsyslog
rsyslog: /usr/lib64/rsyslog /etc/rsyslog.conf /etc/rsyslog.d

rsyslog的日志的采集保存在以下几个路径

/var/log/messages 服务信息日志
/var/log/secure 系统登陆日志
/var/log/cron 定时任务日志
/var/log/maillog 邮件日志
/var/log/boot.log 系统启动日志

在后续我们可以添加自己的日志文件,来进行测试。

日志采集保存在/var/log/file(文件名)中:

可以收集的日志的类型有:

日志类型 日志内容
auth 用户认证时产生的日志
authpriv ssh、ftp等登录信息的验证信息
daemon 一些守护进程产生的日志
ftp FTP产生的日志
lpr 打印相关活动
mark (syslog)-rsyslog 服务内部的信息,时间标识
news 网络新闻传输协议(nntp)产生的消息。
syslog 系统日志
security
uucp Unix-to-Unix Copy 两个unix之间的相关通信
console 针对系统控制台的消息。
cron 系统执行定时任务产生的日志。
kern 系统内核日志
local0~local7 自定义程序使用
mail 邮件日志
user 用户进程

日志的级别分为:

日志等级 说明
7 emerg 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。
6 alert 需要立即修复的告警。
5 crit 危险情况,例如硬盘错误,可能会阻碍程序的部分功能。
4 error/err 一般错误消息。
3 warning/warn 警告。
2 notice 不是错误,但是可能需要处理。
1 info 通用性消息,一般用来提供有用信息。
0 debug 调试程序产生的信息。
none 没有优先级,不记录任何日志消息。

4.日志的定向采集

将什么类型、什么级别的日志放在哪个路径下,这就叫日志的定向采集

这样做也有利于日志的管理和查看,因此应该设计采集规则

在服务器自己收集日志测试:

1)建立一个自己的日志收集文件:

[root@server ~]# touch /var/log/song 
[root@server ~]# ll /var/log/song # 成功建立自己的日志收集文件
-rw-r--r-- 1 root root 0 Aug  6 23:30 /var/log/song

2)在日志采集文件里面设置将任意类型、任何级别的日志都存放在/var/log/song文件中,如果/var/log/song文件不存在会自动生成。

 vim /etc/rsyslog.conf
 46 #### RULES #### # 这里就可以开始写收集日志规则了
 47 
 48 # Log all kernel messages to the console.
 49 # Logging much else clutters up the screen.
 50 #kern.*                                                 /dev/console
 51 
 52 # Log anything (except mail) of level info or higher.
 53 # Don't log private authentication messages!
 54 *.info;mail.none;authpriv.none;cron.none                /var/log/messages
 55 *.*                                                     /var/log/song
 # 任何类型.任何等级											# 都收集在此文件中

3)重新启动rsyslog服务,让他重新读取自己的配置文件。

[root@server ~]# systemctl restart rsyslog.service  # 重启服务
[root@server ~]# systemctl status rsyslog.service 
rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled)
   Active: active (running) since Thu 2020-08-06 23:36:09 EDT; 10s ago
 Main PID: 2334 (rsyslogd)
   CGroup: /system.slice/rsyslog.service
           └─2334 /usr/sbin/rsyslogd -n

Aug 06 23:36:09 server.example.com systemd[1]: Starting System Logging Servi....
Aug 06 23:36:09 server.example.com systemd[1]: Started System Logging Service.
Hint: Some lines were ellipsized, use -l to show in full.

4)测试,我们重新开启httpd服务,查看/var/log/song日志内容:

[root@server ~]# systemctl restart httpd # 重启apache服务
[root@server ~]# cat /var/log/song 
Aug  6 23:36:09 server rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="2334" x-info="http://www.rsyslog.com"] start
Aug  6 23:36:09 server rsyslogd-2307: warning: ~ action is deprecated, consider using the 'stop' statement instead [try http://www.rsyslog.com/e/2307 ]
Aug  6 23:36:09 server systemd: Stopping System Logging Service...
Aug  6 23:36:09 server systemd: Starting System Logging Service...
Aug  6 23:36:09 server systemd: Started System Logging Service.
Aug  6 23:38:35 server systemd: Starting The Apache HTTP Server...
Aug  6 23:38:35 server systemd: Started The Apache HTTP Server. # 日志中含有httpd服务的启动信息

由此可见,将任意类型、任何级别的日志定向采集到了/var/log/song之中

5)总结:实际在企业当中,我们要将日志分类管理,可以参考第三项系统日志管理里面的类型和级别,将 *.*改为日志类型.日志级别,然后存放在指定的文件当中即可。

5.日志的远程同步

一台服务器管理多台服务器日志的实验如下:

5.1 设定客户端

首先在客户端进行设定:

1) 在/etc/rsyslog.conf这个文件中写入 123.0.0.1(服务端的IP),要将指定的日志发送给这个IP。

[root@client ~]# vim /etc/rsyslog.conf

# 首先在14-20行中确定你要使用那种传输方式UDP还是TCP,这里我选择UDP
14 # Provides UDP syslog reception
15 $ModLoad imudp # 去掉注释就可以了
16 $UDPServerRun 514
17 
18 # Provides TCP syslog reception
19 #$ModLoad imtcp
20 #$InputTCPServerRun 514

# 在RULES下添加发送的IP。
46 #### RULES ####
47 
48 # Log all kernel messages to the console.
49 # Logging much else clutters up the screen.
50 #kern.*                                                 /dev/console
51 
52 # Log anything (except mail) of level info or higher.
53 # Don't log private authentication messages!
54 *.info;mail.none;authpriv.none;cron.none                /var/log/messages
55 *.*     @123.0.0.1
# 所有类型.所有级别的日志,都发送给123.0.0.1

这里注意:

  • 使用UDP:@123.0.0.1
  • 使用TCP:@@123.0.0.1

2)重启客户端的rsyslog服务:

[root@client ~]# systemctl restart rsyslog.service 

客户端准备成功。

5.2 设定服务端

1)在接收方server主机中先 vim /etc/rsyslog.conf

[root@server ~]# vim /etc/rsyslog.conf

# 在14-20行中确定你要使用那种传输方式UDP还是TCP,这里我选择UDP
14 # Provides UDP syslog reception
15 $ModLoad imudp # 去掉注释就可以了
16 $UDPServerRun 514
17 
18 # Provides TCP syslog reception
19 #$ModLoad imtcp
20 #$InputTCPServerRun 514

2) 重启服务

[root@server ~]# systemctl restart rsyslog.service

3)关闭防火墙:是为了让客户端发送的日志可以不被防火墙挡在外面。

[root@server ~]# systemctl stop firewalld.service  # 关闭防火墙
[root@server ~]# systemctl disable firewalld.service # 开机不能自启动防火墙
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'

5.3 测试

1)在客户端和服务端都清空日志

服务端:

[root@server ~]# > /var/log/messages # 输入为空,即是清空
[root@server ~]# cat /var/log/messages # 查看为空

客户端:

[root@client ~]# > /var/log/messages
[root@client ~]# cat /var/log/messages

2)在日志客户端的shell当中产生测试日志:

[root@client ~]# logger test # 生成测试日志
[root@client ~]# cat /var/log/messages # 查看测试日志
Aug  7 00:03:19 client root: test

3)在服务端查看日志:

[root@server ~]# cat /var/log/messages
Aug  7 00:03:19 client root: test
# 是client发送的日志

可见两台主机实现远程同步了。

注意:在服务端可以查看接口配置是否正确开启 :

[root@server ~]# netstat -antlupe | grep rsyslog 
# 514端口为任何网段开启,作为rsyslog的服务端口,使用的UDP传输方式
udp        0      0 0.0.0.0:514             0.0.0.0:*                           0          49292      2606/rsyslogd       
udp6       0      0 :::514                  :::*                                0          49293      2606/rsyslogd 

6. 日志采集格式的设定

此实验是在实现远程同步的基础上进行的。

6.1 传统格式

首先查看一般格式的日志:

[root@server ~]# cat /var/log/messages
Aug  7 00:10:01 server systemd: Starting Session 14 of user root.
Aug  7 00:10:01 server systemd: Started Session 14 of user root.
Aug  7 00:09:10 client rc.local: /etc/rc.d/rc.local: connect: Connection timed out
Aug  7 00:09:10 client rc.local: /etc/rc.d/rc.local: line 18: /dev/tcp/content.example.com/80: Connection timed out
Aug  7 00:10:01 client systemd: Starting Session 14 of user root.
Aug  7 00:10:01 client systemd: Started Session 14 of user root.
# 时间			谁		记录目标	   内容

那么我们希望可以用一下的方式管理:

知道日志的生成时间、日志发送方的ip地址、日志的服务目标、日志的内容,这样在管理服务器的时候就方便多了。

6.2 设定格式

1)在服务端进行日志采集格式的设置

[root@server ~]# vim /etc/rsyslog.conf 

#在RULES写入收集规则SONG
46 #### RULES ####
47 $template SONG,"%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"
48 # Log all kernel messages to the console.
49 # Logging much else clutters up the screen.
50 *.* 		/var/log/song;SONG
# 使用SONG格式收集日志在/var/log/song中。

23 #### GLOBAL DIRECTIVES ####
24 
25 # Where to place auxiliary files
26 $WorkDirectory /var/lib/rsyslog
27 
28 # Use default timestamp format
29 $ActionFileDefaultTemplate SONG
# 修改系统默认日志采集格式为SONG

也就是:

显示日志的生成时间 %timegenerated%
显示发送方主机的ip %FROMHOST-IP%
日志记录目标 %syslogtag%
日志内容 %msg%
换行 \n

2)重启服务,查看/var/log/song文件:

[root@server ~]# systemctl restart rsyslog.service 
[root@server ~]# cat /var/log/song
# 时间 			IP		记录目标		日志内容
Aug  7 00:29:57 127.0.0.1 systemd: Stopping The Apache HTTP Server...
Aug  7 00:29:58 127.0.0.1 systemd: Starting The Apache HTTP Server...
Aug  7 00:29:58 127.0.0.1 systemd: Started The Apache HTTP Server.

3)客户端的格式还是由自己的配置决定,单是发送到服务端就会变为刚才设定的格式:

客户端:

[root@client ~]# > /var/log/messages
[root@client ~]# logger test
[root@client ~]# cat /var/log/messages
Aug  7 00:42:42 client root: test

服务端:

[root@server ~]# cat /var/log/messages 
Aug  7 00:44:59 123.0.0.2 root:  test
# 格式已经修改成功

这样就非常方便管理了。

你可能感兴趣的:(linux,linux,运维,centos)