日志服务管理

本文详细介绍了rsyslog系统日志服务的管理,包括其特性如数据库支持、输出格式控制、优先级分类,以及如何配置日志记录、自定义服务日志、网络转发和使用logrotate进行日志转储。还涵盖了syslog的概念、分类、优先级以及与cron的关系。
摘要由CSDN通过智能技术生成

日志服务管理

rsyslog系统日志服务管理

rsyslog 特性

  • 支持输出日志到各种数据库,如 MySQL,PostgreSQL,MongoDB ElasticSearch,实现使用第三方服务对日志进行存储和分析;
  • 精细的输出格式控制以及对日志内容的强大过滤能力,可实现过滤记录日志信息中的指定部份;
  • 通过 RELP + TCP 实现数据的可靠传输
  • 支持数据的加密和压缩传输等
  • 多线程
    在这里插入图片描述

系统日志相关概念

facility: 设施,从功能或程序上对日志进行归类

在一台主机上会同时运行多个服务和软件,每个服务或软件都有可能会产生大量的日志, syslog 将日志进行了分类,相同类型的日志放一个文件,这样便于管理。

#syslog 内置分类
LOG_AUTH #auth 安全和认证相关的日志
LOG_AUTHPRIV #authpriv 安全和认证相关的日志,私有
LOG_CRON #cron 系统定时任务 crontab 与 at 产生的相关日志
LOG_DAEMON #daemon 各守护进程产生的日志
LOG_FTP #ftp ftp守护进程产生的日志
LOG_KERN #kern 内核产生的日志
LOG_LOCAL0 -- LOG_LOCAL7 #local0-local7 自定义分类
LOG_LPR #lpr 打印服务日志
LOG_MAIL #mail 邮件服务日志
LOG_NEWS #news 网络新闻服务产生的日志
LOG_SYSLOG #syslog syslogd 服务自己的日志
LOG_USER #user 用户等级
LOG_UUCP #uucp uucp子系统的日志信息
* #通配符,代表所有分类
Priority: 优先级别,从高到低排序

rsyslog 在记录日志的时候,将各种产生日志的事件和行为进行了优先级的排序,使用者可以根据不同环境(测试/生产)和需求,设置不同的级别来记录日志

 #syslog 内置优先级分类,从高到低,如果在记录日志时,设置了优先级,则只会记录设定的优先级和高于设定优先级的日志
LOG_EMERG 			#emerg/panic 紧急,致命错误
LOG_ALERT			#alert 告警,当前状态必须立即进行纠正
LOG_CRIT			#crit 关键状态的警告,例如 硬件故障
LOG_ERR				#err/error 其它错误
LOG_WARNING		 	#warning/warn 警告级别的信息
LOG_NOTICE			#notice 通知级别的信息,
LOG_INFO 			#info 通告级别的信息
LOG_DEBUG 			#debug 调试程序时的信息
* 					#所有级别的日志
none 				#不需要任何日志

syslog 服务组成

#查看所有 rsyslog 包中的文件
[root@ubuntu ~]# dpkg -L rsyslog
/usr/sbin/rsyslogd #主程序
/lib/systemd/system/rsyslog.service #服务脚本
/etc/rsyslog.conf #主配置文件
/etc/rsyslog.d/*.conf #配置文件目录中的配置文件 
/usr/lib/x86_64-linux-gnu/rsyslog/*.so #库文件

rsyslog服务默认加开机启动
在这里插入图片描述

rsyslog 配置文件

配置分为三个部份,分别是模块(MODULES),全局配置(GLOBAL DIRECTIVES),日志记录规则配置(RULES)

cxn@ubuntu2:~$  ls /etc/rsyslog.conf
/etc/rsyslog.conf      --MODULES  --GLOBAL DIRECTIVES
cxn@ubuntu2:~$  ls /etc/rsyslog.d/
20-ufw.conf  21-cloudinit.conf  50-default.conf   --RULES  

target格式:
文件路径:通常在/var/log/,文件路径前的-表示异步写入
用户:将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器
管道: | COMMAND,转发给其它命令处理

实现自定义服务日志

sshd应用将日志写到rsyslog的local6分类,过滤所有级别,写入到/var/log/ssh.log。

#sshd服务日志默认是归属于 AUTH 分类,默认级别是 INFO;更改分类
root@ubuntu2:~# cat  /etc/ssh/sshd_config |grep -i log
# Logging
#SyslogFacility AUTH
SyslogFacility  LOCAL6

#新增ssh服务日志
root@ubuntu2:~# cat /etc/rsyslog.d/sshd.conf
local6.* /var/log/sshd.log

#重启服务后,生成ssh服务日志
root@ubuntu2:~#  systemctl restart rsyslog
root@ubuntu2:~#  systemctl restart sshd
root@ubuntu2:~# ll /var/log/sshd.log
-rw-r----- 1 syslog adm 145 Mar 15 13:32 /var/log/sshd.log

#验证服务
root@ubuntu2:~#  logger -p local6.info "hello sshd"
root@ubuntu2:~# cat /var/log/sshd.log
Mar 15 13:32:53 ubuntu2 sshd[143533]: Server listening on 0.0.0.0 port 22.
Mar 15 13:32:53 ubuntu2 sshd[143533]: Server listening on :: port 22.
Mar 15 13:33:36 ubuntu2 root: hello sshd

实现日志网络转发

将3个主机(要求主机名为ip)的ssh日志,通过rsyslog服务将ssh日志写入到集中的主机上的rsyslog服务,写入到/var/log/all-ssh.log文件

配置 server log 主机,开启 TCP, UDP 相关功能

root@ubuntu2:~# cat  /etc/rsyslog.conf|grep -Ei 'tcp|udp'
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

root@ubuntu2:~# systemctl restart rsyslog

root@ubuntu2:~# ss -tunlp|grep 514
udp   UNCONN 0      0               0.0.0.0:514       0.0.0.0:*    users:(("rsyslogd",pid=143567,fd=5))
udp   UNCONN 0      0                  [::]:514          [::]:*    users:(("rsyslogd",pid=143567,fd=6))
tcp   LISTEN 0      25              0.0.0.0:514       0.0.0.0:*    users:(("rsyslogd",pid=143567,fd=7))
tcp   LISTEN 0      25                 [::]:514          [::]:*    users:(("rsyslogd",pid=143567,fd=8))

root@ubuntu2:~#  cat /etc/rsyslog.d/50-default.conf  |grep auth
auth,authpriv.*                 /var/log/auth.log

客户端配置日志转发

root@ubuntu2204:~# vi /etc/rsyslog.d/net.conf
root@ubuntu2204:~# cat /etc/rsyslog.d/net.conf
*.info @10.0.0.155:514
root@ubuntu2204:~#  systemctl restart rsyslog
root@ubuntu2204:~# logger "this msg from 10.0.0.151"

root@ubuntu2204:~# tail -1  /var/log/syslog
Mar 15 21:49:03 ubuntu2204 root: this msg from 10.0.0.151


#服务端更新日志
root@ubuntu2:~# tail -1 /var/log/syslog
Mar 15 21:49:03 ubuntu2204 root: this msg from 10.0.0.151

日志文件

  • /var/log/secure:系统安全日志,文本格式,应周期性分析

  • /var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行
    查看

  • /var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看

  • /var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看

  • /var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化
    将不再记录专用命令dmesg查看,可持续记录硬件变化的情况

  • /var/log/boot.log 系统服务启动的相关信息,文本格式

  • /var/log/messages :系统中大部分的信息

journalctl

操作系统日志事件都由 systemd 的 journald 守护进程来处理。journald 守护进程收集所有来自 Linux 操作系统的各种日志,并将其作为二进制数据存储在文件中。
以二进制数据集中记录事件、系统问题可以以文本、JSON 对象等多种方式进行转译,以满足各种需求。另外,由于日志是按顺序存储的,通过对日志的日期/时间操作,超级容易追踪到单个事件

日志的配置文件
/etc/systemd/journald.conf

用法

#查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
#查看内核日志(不显示应用日志)
journalctl -k
#查看系统本次启动的日志
journalctl -b
journalctl -b -0
#查看上一次启动的日志(需更改设置)
journalctl -b -1
#查看指定时间的日志
journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2017-01-10" --until "2017-01-11 03:00"
journalctl --since 09:00 --until "1 hour ago"
#显示尾部的最新10行日志
journalctl -n
#显示尾部指定行数的日志
journalctl -n 20
#实时滚动显示最新日志
journalctl -f
#查看指定服务的日志
journalctl /usr/lib/systemd/systemd
#查看指定进程的日志
journalctl _PID=1
#查看某个路径的脚本的日志
journalctl /usr/bin/bash
#查看指定用户的日志
journalctl _UID=33 --since today
#查看某个 Unit 的日志
journalctl -u nginx.service
journalctl -u nginx.service --since today
#实时滚动显示某个 Unit 的最新日志
journalctl -u nginx.service -f
#合并显示多个 Unit 的日志
journalctl -u nginx.service -u php-fpm.service --since today
#查看指定优先级(及其以上级别)的日志,共有8级
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
journalctl -p err -b
#日志默认分页输出,--no-pager 改为正常的标准输出
journalctl --no-pager
#日志管理journalctl
#以 JSON 格式(单行)输出
journalctl -b -u nginx.service -o json
#以 JSON 格式(多行)输出,可读性更好
journalctl -b -u nginx.serviceqq -o json-pretty
#显示日志占据的硬盘空间
journalctl --disk-usage
#指定日志文件占据的最大空间
journalctl --vacuum-size=1G
#指定日志文件保存多久
journalctl --vacuum-time=1years

logrotate日志转储

用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。

服务组成

/etc/cron.daily/logrotate #定时任务脚本,放在 cron.daily 目录中,默认系统会每天执行一次
/etc/logrotate.conf #主配置文件,定义日志转储策略
/etc/logrotate.d/ #配置文件目录,定义日志转储策略
/usr/sbin/logrotate #主程序
/var/lib/logrotate/status #logrotate服务的日志文件

工作原理:系统计划任务每天执行一次脚本文件,在脚本中再执行 /usr/sbin/logrotate /etc/logrotate.conf ,即调用 logrotate 程序再配合定义好的转储规则对日志文件进行转储。

实现日志转储

使用logrotate服务切割nginx日志,每天切割一次,要求大于不超过3M, 保存90天的日志, 旧日志以时间为后缀,要求压缩

root@ubuntu2:~# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
 daily
 missingok
 rotate 90
 compress
 delaycompress
 notifempty
 create 640 root root
 size 3M
 dateext
}
root@ubuntu2:~#
root@ubuntu2:~# dd if=/dev/zero of=/var/log/nginx/nginx.log  bs=4M count=1
1+0 records in
1+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.00445776 s, 941 MB/s
root@ubuntu2:~# ll /var/log/nginx/nginx.log  -lh
-rw-r--r-- 1 root root 4.0M Mar 15 14:13 /var/log/nginx/nginx.log
root@ubuntu2:~#  logrotate /etc/logrotate.d/nginx
root@ubuntu2:~# ll /var/log/nginx/nginx.log*  -lh
-rw-r----- 1 root root    0 Mar 15 14:14 /var/log/nginx/nginx.log
-rw-r--r-- 1 root root 4.0M Mar 15 14:13 /var/log/nginx/nginx.log-20240315

  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值