日志的用途:

- /var/log/message   大多数系统日志消息记录在此处。有也例外的:如与身份验证,电子邮件处理相关的定期作业任务等
- /var/log/secure       安全和身份验证相关的消息和登录失败的日志文件。 ssh 远程连接产生的日志。
- /var/log/secure       安全和身份验证相关的消息和错误的日志文件
- /var/log/maillog      与邮件服务器相关的消息日志文件
- /var/log/cron           与定期执行任务相关的日志文件
- /var/log/boot.log     与系统启动相关的消息记录

日志的分类

- daemon 后台进程相关 
- kern 内核产生的信息
- lpr 打印系统产生的
- authpriv 安全认证
- cron 定时相关
- mail 邮件相关
- syslog 日志服务本身的
- news 新闻系统
- local0~7 自定义的日志设备
- local0-local7 8 个系统保留的类, 供其它的程序使用或者是用户自定义

日志的级别 : 轻 --> 重

编码   优先级        严重性

 7     debug    信息对开发人员调试应用程序有用,在操作过程中无用
 6     info     正常的操作信息,可以收集报告,测量吞吐量等
 5     notice   注意,正常但重要的事件,
 4     warning  警告,提示如果不采取行动。将会发生错误。比如文件系统使用 90%
 3     err      错误,阻止某个模块或程序的功能不能正常使用
 2     crit     关键的错误,已经影响了整个系统或软件不能正常工作的信息
 1     alert    警报,需要立刻修改的信息
 0     emerg    紧急,内核崩溃等严重信息

日志输入规则

. info     大于等于 info 级别的信息全部记录到某个文件
.=级别      仅记录等于某个级别的日志
	  例:.=info  只记录 info 级别的日志 
.!         级别 除了某个级别意外,记录所有的级别信息
	  例.!err    除了 err 外记录所有
.none      指的是排除某个类别 例: mail.none 所有 mail 类别的日志都不记录

日志服务

  • rhel5 -> 服务名称 syslog -> 配置文件 /etc/syslog.conf

  • rhel6-8 -> 服务名称 rsyslog -> 配置文件 /etc/rsyslog.conf

注释:
#$UDPServerRun 514           #允许 514 端口接收使用 UDP 协议转发过来的日志
#$InputTCPServerRun 514      #允许 514 端口接收使用 TCP 协议转发过来的日志
  
Rocky8 为
#input(type="imudp" port="514")    #允许 514 端口接收使用 UDP 协议转发过来的日志
#input(type="imtcp" port="514")    #允许 514 端口接收使用 TCP 协议转发过来的日志
#kern.* 内核类型的所有级别日志 -->  存放到  -->    /dev/console
*.info;mail.none;authpriv.none;cron.none      /var/log/messages
所有的类别并且级别是 info 以上 除了 mail,authpriv,cron (产生的日志太多,不易于查看) 
  
类别.级别
authpriv.*  认证的信息-->存放-->         /var/log/secure
mail.*      邮件相关的信息--> 存放-->    -/var/log/maillog
cron.*      计划任务相关的信息-->存放-->  /var/log/cron
local7.*    开机时显示的信息-->存放-->    /var/log/boot.log
   
“- ”号: 邮件的信息比较多,先将数据存储到内存,达到一定大小,全部写到硬盘.有利于减少 I/O 进程的开销
数据存储在内存,如果关机不当数据消失

last 查看每个用户的登录次数和持续时间等信息

  • (成功登录系统的用户)
last -f /var/log/wtmp

lastb 查看暴力破解系统的用户

#查看恶意 ip 试图登录次数

lastb | tr -s ' ' | cut -d ' ' -f3 | uniq -c | sort -n

# 清空日志
	> /var/log/btmp

实战1-自定义 ssh 服务的日志类型和存储位置

# 把自定义 local0 类别的日志,保存到 /var/log/sshd.log
[root@client~]$ vim +73 /etc/rsyslog.conf
 - 添加下列内容
	local0.* /var/log/sshd.log

# 设置ssh 服务日志类别为 【local0】
[root@client~]$ vim +32 /etc/ssh/sshd_config

SyslogFacility AUTHPRIV -->  SyslogFacility local0

# 重启 rsyslog 使配置生效,重启 sshd 生成日志
[root@client~]$ systemctl restart rsyslog sshd

# 验证查看日志内容
[root@client~]$ cat /var/log/sshd.log
对应的信息:
时间 主机 服务 进程 ID 相关的信息

实战2-使用 logrotate 进行 ssh 日志分割

#创建一个 sshd 配置文件
[root@centos7 ~]# cat/etc/logrotate.d/sshd 

/var/log/sshd.log {
    missingok
    weekly
    create 0600 root root
    minsize 10M
    rotate 3
}

# 每分钟执行一次该脚本内容,分割一次
[root@centos7 ~]#crontab -e
*/1 * * * * logrotate -vf /etc/logrotate.d/sshd

# 重启该服务
[root@centos7 ~]#systemctl restart rsyslog

# 预演,不实际轮询(切割)
[root@centos7 ~]#logrotate -d /etc/logrotate.d/sshd

# 强制轮询
[root@centos7 ~]# logrotate -vf /etc/logrotate.d/sshd
-v 显示执行命令过程
-f 强制执行

# 查看生成的切割文件
[root@centos7 ~]#ls /var/log/sshd*

# 再次查看日志文件大小,已经为 0
[root@centos7 ~]#ll /var/log/sshd* -h

实战3-配置远程日志服务器-实现日志集中的管理

image20220909002505021.png

  • Server 端配置:
# 关闭 selinux 和防火墙
[root@server ~]#setenforce 0
[root@server ~]#systemctl stop firewalld

[root@server ~]#vim /etc/rsyslog.conf
CentOS7 把下面 2 行的注释去掉
19 $ModLoad imtcp
20 $InputTCPServerRun 514

Rocky8 把下面 2 行的注释去掉
24 #module(load="imtcp") # needs to be done just once
25 #input(type="imtcp" port="514")

注:使用 UDP 协议 速度快 不保证数据的完整,使用 TCP 协议 可靠.完整

# 重新启动 rsyslog
[root@server ~]# stemctl restart rsyslog    

# 查看服务监听的状态:
[root@server ~]# netstat -anlpt| grep 514

  • Client 端配置:
[root@client ~]#vim /etc/rsyslog.conf   #在 90 行之后,插入
*.* @@10.0.0.10:514      #写入服务端的 ip 地址

#重启 rsyslog 服务
[root@clicet ~]#systemctl restart rsyslog.service
  • Server 端查看日志:
# 服务端实时查看日志
[root@server ~]# tail -f /var/log/messages

# 客户端模拟发送日志
[root@client ~]# logger "Hello World"

# 服务器端查看消息
[root@centos7 ~]#tail -f /var/log/messages
  • udp协议:【.@10.0.0.10:514】
  • tcp协议:【.@@10.0.0.10:514】

实战4-利用mysql存储日志信息

  • rsyslog服务器端
[root@rsyslog ~]#yum install rsyslog-mysql

[root@rsyslog ~]#rpm -ql rsyslog-mysql
/usr/lib/.build-id
/usr/lib/.build-id/d7
/usr/lib/.build-id/d7/77fc839aa07e92f0a8858cf3f122996436c7df
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog/mysql-createDB.sql

# 查看sql脚本文件内容
[root@rsyslog ~]# cat /usr/share/doc/rsyslog/mysql-createDB.sql

# 将sql脚本复制到数据库服库上
[root@rsyslog ~]# scp /usr/share/doc/rsyslog/mysql-createDB.sql 10.0.0.11
  • 数据库
# 安装数据库
[root@db ~]# yum install mariadb-server

[root@db ~]# mysql -uroot

# 导入sql文件
[root@db ~]# mysql>source /data/mysql-createDB.sql

# 创建用户
[root@db ~]# mysql>GRANT ALL ON Syslog.* TO 'rsyslog'@'10.0.0.%' IDENTIFIED BY '1';
  • rsyslog服务器端
# 配置rsyslog将日志保存到mysql中
[root@rsyslog ~]# vim /etc/rsyslog.conf

####MODULES####

Rocky8 加下面行
module(load="ommysql") 

CentOS 7,6 加下面行
$ModLoad ommysql


#在RULES语句块加下面行的格式
#facility.priority   :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD 
*.info :ommysql:10.0.0.10,Syslog,rsyslog,1

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


#在日志服务器上生成日志
[root@rsyslog ~]#logger "this is a test log"

#在数据库上查询到上面的测试日志

# 切换到【Syslog】数据库
mysql> use Syslog;

# 列出库中表
mysql> show tables;

# 查看表内容
mysql>SELECT COUNT(*) FROM SystemEvents\G

5 综合-远程日志收集并利用数据库进行存储

image20230909114426322.png

  • CentOS 7.9 - Client
[root@myx01~]$ hostnamectl set-hostname CentOS7.9-Client

[root@client~]$ vim +90 /etc/rsyslog.conf

*.* @@10.0.0.50:514

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

[root@client~]$ logger "hello world"

# 服务端查看
[root@Rocky8-Server~]$ tail  -f -n1 /var/log/messages
Sep  9 12:58:25 client root: hello world
  • Rocky8 - Server
[root@Rocky8-01~]$ hostnamectl set-hostname Rocky8-Server


[root@Rocky8-Server~]$ setenforce 0

[root@Rocky8-Server~]$ systemctl stop firewalld

[root@Rocky8-Server~]$ vim +24 /etc/rsyslog.conf

module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")

[root@Rocky8-Server~]$ systemctl restart rsyslog

[root@Rocky8-Server~]$ ss -ntlp | grep 514
LISTEN 0      25           0.0.0.0:514       0.0.0.0:*    users:(("rsyslogd",pid=2323,fd=4))                      
LISTEN 0      25              [::]:514          [::]:*    users:(("rsyslogd",pid=2323,fd=5))  

[root@Rocky8-Server~]$ yum install -y rsyslog-mysql

[root@Rocky8-Server~]$ rpm -ql rsyslog-mysql
/usr/lib/.build-id
/usr/lib/.build-id/e6
/usr/lib/.build-id/e6/aa0e40c19a2e0524d72780eee3b1698684cbe7
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog/mysql-createDB.sql

[root@Rocky8-Server~]$ cat /usr/share/doc/rsyslog/mysql-createDB.sql

[root@Rocky8-Server~]$ scp /usr/share/doc/rsyslog/mysql-createDB.sql root@10.0.0.51:/root

# 切回数据库查看
[root@Rocky8-db~]$ ls
mysql-createDB.sql

[root@Rocky8-Server~]$ vim /etc/rsyslog.conf

#### MODULES ####
module(load="ommysql")

#### RULES ####
*.info :ommysql:10.0.0.51,Syslog,rsyslog,1

[root@Rocky8-Server~]$ systemctl restart rsyslog
  • Rocky8 - db
[root@Rocky8-02~]$ hostnamectl set-hostname Rocky8-db

[root@Rocky8-db~]$ yum install -y mariadb-server

[root@Rocky8-db~]$ systemctl start mariadb

[root@Rocky8-db~]$ ss -ntlp | grep 3306
LISTEN 0      80                 *:3306            *:*    users:(("mysqld",pid=28464,fd=21)) 

[root@Rocky8-db~]$ mysql
# 导入数据
MariaDB [(none)]> source /root/mysql-createDB.sql
Query OK, 1 row affected (0.000 sec)

Database changed
Query OK, 0 rows affected (0.012 sec)

Query OK, 0 rows affected (0.007 sec)

# 创建 rsyslog 用户,设置网段 10.0.0.% ,密码 1
MariaDB [Syslog]> GRANT ALL ON Syslog.* TO 'rsyslog'@'10.0.0.%' IDENTIFIED BY '1';
Query OK, 0 rows affected (0.001 sec)

  • 测试
[root@client~]$ logger "hello"

[root@Rocky8-db~]$ mysql

# 列出数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| Syslog             |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)

# 切换数据库
MariaDB [(none)]> use Syslog

# 列出表
MariaDB [Syslog]> show tables;
+------------------------+
| Tables_in_Syslog       |
+------------------------+
| SystemEvents           |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.000 sec)

MariaDB [Syslog]> SELECT COUNT(*) FROM SystemEvents; 
+----------+
| COUNT(*) |
+----------+
|       14 |
+----------+
1 row in set (0.000 sec)

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

# Client
[root@client~]$ logger "hello world"

# Server
[root@Rocky8-Server~]$ tail  -f -n1 /var/log/messages
Sep  9 13:22:56 client root: hello world

# db
MariaDB [Syslog]> SELECT COUNT(*) FROM SystemEvents; 
+----------+
| COUNT(*) |
+----------+
|       15 |
+----------+
1 row in set (0.001 sec)

安装图形化工具-LogAnalyzer

  • 添加一台机器 Web 终端
yum -y install httpd php php-mysql php-gd

[root@web~]$ tar xf loganalyzer-3.6.5.tar.gz -C /var/www/html/

[root@web/var/www/html/loganalyzer-3.6.5]$  cp contrib/*.sh /var/www/html/loganalyzer-3.6.5/

[root@web/var/www/html]$ ln -s loganalyzer-3.6.5 log

[root@web/var/www/html/log]$ chmod a+x *.sh

[root@web/var/www/html/log/src]$ touch config.php

[root@web/var/www/html/log/src]$ chmod 666 config.php

[root@web/var/www/html/log/src]$ systemctl enable --now httpd
  • 启动 http 服务 屏幕截图 20230911 204354.png

屏幕截图 20230911 204406.png

屏幕截图 20230911 204414.png

屏幕截图 20230911 204422.png

屏幕截图 20230911 204450.png

屏幕截图 20230911 204457.png

屏幕截图 20230911 204530.png

屏幕截图 20230911 204541.png