文章目录
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 root@123.0.0.2:/etc/ # 将此文件远程发送给client用户
root@123.0.0.2'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 | 自定义程序使用 |
| 邮件日志 | |
| 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
# 格式已经修改成功
这样就非常方便管理了。
1422




被折叠的 条评论
为什么被折叠?



