linux日志管理

1.日志分类和优先级

1.1日志分类

  • 系统日志: 记录操作系统的运行状态和事件,例如系统启动、关闭、用户登录等
  • 应用程序日志: 由应用程序自动生成的日志信息
  • 网络日志: 由网络设备、服务器或应用程序生成的日志信息,例如路由器日志、防火墙日志等
  • 安全日志: 记录系统或应用程序的安全相关事件,例如登录失败、安全漏洞等
  • 自定义日志: 根据需求创建的特定日志级别的日志

1.2日志的优先级

  • DEBUG(调试): 用于记录详细的调试信息,通常在开发和调试阶段使用
  • INFO(信息): 用于记录程序运行的一般信息,例如应用程序的启动和关闭信息
  • WARNING(警告): 用于记录一些可能会影响程序正常运行但不会导致程序停止的警告信息
  • ERROR(错误): 用于记录程序运行中的错误信息,例如文件读取失败、数据库连接异常等
  • CRITICAL(严重): 用于记录程序运行中的严重错误,可能会导致程序崩溃或数据丢失

1.3ssh日志发到rsyslog,并写到目标

编辑ssh配置文件:

[14:07:37root@localhost ~]# vim /etc/ssh/sshd_config
SyslogFacility loca11  #修改为local1自定义分类
systemctl restart sshd #重启sshd服务

#配置rsyslog
#修改 rsyslog 的配置文件以接收 SSH 日志并将其写入目标文件
#通常,rsyslog 的配置文件位于 /etc/rsyslog.conf 或 /etc/rsyslog.d/ 目录中的某个文件中
[14:29:17root@localhost ~]# vim /etc/rsyslog.conf
local1.*             /var/log/ssh.log #表示把
#rsyslog将任何来自于本地设备并且任何级别的日志消息写入到/var/log/ssh.log文件中

2.要实现将3个主机的SSH日志通过rsyslog服务写入到集中的主机上的rsyslog服务

主机清单:
源主机:
10.0.0.18
10.0.0.28
10.0.0.38
#目标主机:
10.0.0.48

#开启网络日志服务
[root@centos8 ~]#vim /etc/rsyslog.conf
module(load="imudp") # needs to be done just once
input(type="imudp" port="514") #udp

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

源主机
vim /etc/rsyslog.conf
auth,authpriv.* @10.0.0.18:514
auth,authpriv.* @10.0.0.28:514
auth,authpriv.* @10.0.0.38:514 #udp
auth,authpriv.* @10.0.0.18:514 #tcp 

目标主机
vim /etc/rsyslog.conf
*.* /var/log/all-ssh.log
#将所有来自远程主机的SSH日志写入到指定的文件中

3.总结/var/log/目录下常用日志文件作用

/var/log/目录下存储了许多系统和服务的日志文件,这些日志文件记录了系统和各种应用程序的活动情况,对于系统管理和故障排除非常重要

  • auth.log: 记录系统认证信息,如用户登录、su切换用户、sudo命令等,通常用于跟踪系统安全事件
  • boot.log: 记录系统启动过程中的消息和错误
  • cron.log: 记录定时任务的执行情况,包括系统计划任务和用户计划任务
  • dmesg: 记录系统启动过程中的内核消息,包括硬件检测、设备驱动加载等
  • kern.log: 记录内核相关的消息和错误,如内核模块加载、内核崩溃等
  • syslog: 记录系统的一般性消息,包括系统服务的启动和停止、内核消息等
  • messages: 同样记录系统的一般性消息,通常包含与syslog相同的内容
  • auth.log: 记录认证日志,包括用户登录、su切换用户等认证相关信息
  • mail.log: 记录邮件系统的消息,包括邮件传输、投递和错误信息
  • user.log: 记录用户级别的消息,如用户登录、注销和命令执行等

4.总结journalctl命令

常用选项:

  • -u, --unit=UNIT: 指定单元(unit),如服务单元(service unit)或套接字单元(socket unit)
  • -k, --dmesg: 显示内核消息
  • -b, --boot=[ID|±N]: 显示特定引导(boot)中的日志
  • -f, --follow: 实时跟踪日志输出
  • -n, --lines=NUM: 显示最后的几行日志
  • –since=YYYY-MM-DD: 显示指定日期之后的日志
  • –until=YYYY-MM-DD: 显示指定日期之前的日志
  • -p, --priority=LEVEL: 按优先级过滤日志条目
    示例:
[14:50:21root@localhost ~]# journalctl #查看所有日志
-- Logs begin at Thu 2024-01-04 16:24:49 CST, end at Sun 2024-03-17 14:29:11 CST. --
Jan 04 16:24:49 localhost.localdomain kernel: Linux version 4.18.0-348.el8.0.2.x86_64 (mockbu>
Jan 04 16:24:49 localhost.localdomain kernel: Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4>

[14:50:47root@localhost ~]# journalctl -u sshd #查看指定服务日志
-- Logs begin at Thu 2024-01-04 16:24:49 CST, end at Sun 2024-03-17 14:29:11 CST. --
Jan 04 16:24:53 localhost.localdomain systemd[1]: Starting OpenSSH server daemon...
Jan 04 16:24:54 localhost.localdomain sshd[877]: Server listening on 0.0.0.0 port 22.

14:51:22root@localhost ~]# journalctl -k #查看内核消息
-- Logs begin at Thu 2024-01-04 16:24:49 CST, end at Sun 2024-03-17 14:29:11 CST. --
Jan 04 16:24:49 localhost.localdomain kernel: Linux version 4.18.0-348.el8.0.2.x86_64 (mockbu>

[14:51:57root@localhost ~]# journalctl -f #实时跟踪日志
-- Logs begin at Thu 2024-01-04 16:24:49 CST. --
Mar 17 14:08:14 localhost.localdomain systemd-logind[942]: Session 8 logged out. Waiting for processes to exit.
Mar 17 14:08:14 localhost.localdomain systemd-logind[942]: Removed session 8.
Mar 17 14:27:58 localhost.localdomain systemd[1]: Starting dnf makecache...
Mar 17 14:27:58 localhost.localdomain dnf[7706]: Metadata cache refreshed recently.
Mar 17 14:27:58 localhost.localdomain systemd[1]: dnf-makecache.service: Succeeded.
Mar 17 14:27:58 localhost.localdomain systemd[1]: Started dnf makecache.
Mar 17 14:29:11 localhost.localdomain sshd[7709]: Accepted password for root from 10.0.0.1 port 53235 ssh2
Mar 17 14:29:11 localhost.localdomain systemd[1]: Started Session 9 of user root.
Mar 17 14:29:11 localhost.localdomain systemd-logind[942]: New session 9 of user root.
Mar 17 14:29:11 localhost.localdomain sshd[7709]: pam_unix(sshd:session): session opened for user root by (uid=0)

[14:52:30root@localhost ~]# journalctl --since "2024-03-01" #查看指定日期之后的日志
-- Logs begin at Thu 2024-01-04 16:24:49 CST, end at Sun 2024-03-17 14:29:11 CST. --
Mar 17 12:29:07 localhost.localdomain systemd[1]: Starting update of the root trust anchor fo

5.完成将多个主机的nginx日志集中写入到mysql表中

环境准备:
nginx主机:
10.0.0.28

[15:47:24root@localhost ~]# yum -y install nginx
[22:18:59root@localhost ~]# vim /etc/nginx/nginx.conf
http {
    # 将访问日志发送到rsyslog服务器
    access_log syslog:server=10.0.0.58:514,tag=nginx_access;
} #
[22:21:50root@localhost ~]# vim  /etc/rsyslog.d/nginx.conf
$MainMsgQueueTimeoutEnqueue 1000
$MainMsgQueueSize 1000000
$MainMsgQueueDiscardSeverity 0

$ModLoad imfile
$InputFilePollInterval 5
$WorkDirectory /var/spool/rsyslog
$PrivDropToGroup root


$InputFileName /var/log/nginx/access.log
$InputFileTag nginx-access:
$InputFileStateFile stat-nginx-access
$InputFileSeverity info
$InputFilePersistStateInterval 25000
$InputRunFileMonitor

$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-error:
$InputFileStateFile stat-nginx-error
$InputFileSeverity info
$InputFilePersistStateInterval 25000
$InputRunFileMonitor

*.* @10.0.0.38:514
# 将访问日志发送到rsyslog服务器,两种配置选一种
[22:21:50root@localhost ~]# systemctl restart nginx
[22:21:50root@localhost ~]# systemctl restart rsyslog.service

rsyslog主机
10.0.0.38

[22:25:29root@localhost ~]# yum -y install rsyslog-mysql #安装传送mysql的日志文件
[22:16:29root@localhost ~]# vim /etc/rsyslog.d/nginx.conf
# 接收 Nginx 日志
$template NginxLog, "/var/log/nginx/10.0.0.28/nginx-access.log"
if $programname == 'nginx-access' then -?NginxLog
#
[22:23:27root@localhost ~]# vim /etc/rsyslog.conf 
#判断带有nginx-access的日志文件转发到mysql服务器
module(load="imfile")
if $programname == 'nginx-access' then {
    action(type="ommysql"
           server="10.0.0.58"
           serverport="3306"
           db="Syslog"
           uid="rsyslog"
           pwd="123456")
}
#两种写法
input(type="imfile"
      File="/var/log/nginx/10.0.0.28/nginx-access.log"
      Tag="nginx-access"
      Ruleset="writeToMySQL")

ruleset(name="writeToMySQL") {
    action(type="ommysql"
           server="10.0.0.58"
           db="Syslog"
           uid="rsyslog"
           pwd="123456")
}
[22:06:46root@localhost ~]# scp /usr/share/doc/rsyslog/mysql-createDB.sql 10.0.0.58:/data #传送脚本到mysql服务器,脚本会创建数据库和表

mysql主机:
10.0.0.48

#安装mysql
[22:27:30root@localhost ~]# yum -y install mysql-server
[22:28:30root@localhost ~]# mysql
mysql> source /data/mysql-createDB.sql #执行脚本
mysql> CREATE USER 'rsyslog'@'10.0.0.%' IDENTIFIED BY '123456'; #创建账户
mysql> GRANT ALL ON Syslog.* TO 'rsyslog'@'10.0.0.%' ; #赋予权限
#我们去访问nginx查看日志是否同步
mysql> select * from SystemEvents;

查看是否同步
在这里插入图片描述

6.使用logrotate服务切割nginx日志

#打开Logrotate配置文件,通常位于/etc/logrotate.conf或/etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    rotate 90
    missingok
    notifempty
    compress
    delaycompress
    maxsize 3M
    create 0644 nginx nginx
    dateext
    dateformat -%Y-%m-%d
    postrotate
        systemctl reload nginx >/dev/null 2>&1 || true
    endscript
}

daily: 每天切割一次日志
rotate 90: 保留最近90个切割后的日志文件
missingok: 如果日志文件不存在,则忽略错误
notifempty: 如果日志文件为空,则不进行切割
compress: 使用gzip压缩切割后的日志文件
delaycompress: 延迟压缩上一个周期未压缩的日志文件,以便与当前日志文件合并压缩
maxsize 3M: 当日志文件大小超过3M时才进行切割
create 0644 nginx nginx: 新建的日志文件权限为644,属主和属组均为nginx
dateext: 在旧的日志文件名末尾添加日期扩展
dateformat -%Y-%m-%d: 设置日期扩展的格式为年-月-日
postrotate ... endscript: 在切割后执行的脚本,这里是重新加载nginx服务以使其重新打开日志文件

7.总结 LVS的NAT和DR模型工作原理,并完成DR模型实战

7.1 总结 LVS的NAT和DR模型工作原理

7.2 DR模型实战

在这里插入图片描述
环境准备:
wbe服务器1:
10.0.0.18

[16:44:52root@web2 ~]# yum -y install nginx #安装web服务器
[17:12:28root@web2 ~]# vim lvs_dr_rs.sh #查看脚本
vip=172.16.0.10
mask='32'
dev=lo:1

case $1 in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    #这个命令用于设置所有网络接口在 ARP 请求中忽略来自于自己的 ARP 请求。这在 LVS 中是很重要的,因为它可以防止 ARP 报文的无限循环
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    #这个命令用于设置本地回环接口(lo)在 ARP 请求中忽略来自于自己的 ARP 请求
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    #这个命令用于设置所有网络接口在 ARP 响应中的源 IP 地址为绑定在发送报文的接口上的 IP 地址。这可以确保 ARP 响应的正确性
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    #这个命令用于设置本地回环接口(lo)在 ARP 响应中的源 IP 地址为绑定在发送报文的接口上的 IP 地址
    ip addr add $vip/$mask dev $dev
    #创建vip地址
    echo "The RS Server is Ready!"
    ;;
stop)
    ip link set $dev down
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "The RS Server is Canceled!"
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1

环境准备:
wbe服务器2:
10.0.0.28

#执行上面相同命令

环境准备:
router服务器:
10.0.0.38

#增加一块网卡为仅主机模式
[17:28:48root@Router ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=10.0.0.38
PREFIX=24
IPADDR1=172.16.0.200
PREFIX1=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
DNS2=180.76.76.76
#添加第一块网卡地址
[17:28:48root@Router ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
NAME=eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=192.168.10.2
PREFIX=24
#第二块网卡地址
[17:28:22root@localhost ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
[17:28:42root@localhost ~]# sysctl -p 
net.ipv4.ip_forward = 1
#开启路由转发

环境准备:
Client服务器:
192.168.10.3

#仅主机模式
[17:28:48root@Client ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
NAME=eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=192.168.10.2
GATEWAY=192.168.10.3
PREFIX=24
[17:34:15root@Client ~]# while true; do curl 172.16.0.10;sleep 1;done #循环测试完成
10.0.0.18 
10.0.0.28 
10.0.0.18 
10.0.0.28 
10.0.0.18 
10.0.0.28 
10.0.0.18 
10.0.0.28 
10.0.0.18 
10.0.0.28
  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值