日志系统rsyslog和日志切割logrotate-Linux每日一练(9)

简介: 日志系统rsyslog和日志切割logrotate-Linux每日一练(9)

上一节留的问题本来是网络的,但是我还是打算把网络留到最后一次来更新,因为我任性~


我发现了一些公众号大号整天转发垃圾文章引发焦虑,让看得人怀疑自己,读者越是焦虑他们就越是开心,方便做广告卖课程,赚钱也没错,卖广告也是为了恰饭,但是一周推两三次广告谁能受得了啊。


说真的,买课程的人大多也看不完,就是买个安心,买了就相当于学了,然后继续心安理得的玩,其实现在的线上课程完课率只有不到10%,想想我买了那么多极客时间实际上看完的也只有部分,酌情安排自己的时间才是王道。


扯远了,步入正题,Linux自带的 日志系统rsync


日志系统rsync


Linux日志机制的核心是 rsyslog 守护进程,该服务负责监听Linux下的日志信息,并把日志信息追加到对应的日志文件中,一般在 /var/log 目录下。


它还可以把日志信息通过网络协议发送到另一台Linux服务器上,或者将日志存储在 MySQL 或 Oracle 等数据库中。


对于日志收集,基本所有人都听说过 ELK(ElasticSearch+Logstash+Kibana)的大名,其实所有的 Linux 日志管理系统都基于 rsyslog ,他们配置的第一步都是配置 rsyslog 发送端。


所以我们只要对这个服务进行简单配置,就可以把线上环境的日志集中化收集起来,不仅方便开发调试;还避免了直接到线上环境查看,发生安全隐患。


启动停止


在centOS5及更早版本中使用的是 syslog , rsyslog 是 syslog 的增强版本。 rsyslog 一般默认都会安装且设置为自动启动

$ ps -ef |grep rsyslogd
root 923 1 0 Aug21 ? 00:03:02 /usr/sbin/rsyslogd -n
$ /etc/init.d/rsyslog start
$ /etc/init.d/rsyslog stop
$ /etc/init.d/rsyslog restart

配置文件写法


可以参考官网:https://www.rsyslog.com/doc/master/configuration/basic_structure.html

执行文件: /sbin/rsyslogd


主配置文件: /etc/rsyslog.conf

自定义配置文件: /etc/rsyslog.d/*.conf

修改配置文件后,重启服务: sudo /etc/init.d/rsyslog restart

一份配置文件主要包括以下几个部分: MODULES 、 RULES 、全局指令,模板,模块参数等,回头有机会讲解 ELK 的时候再展开,这里只用关心 RULES , 他表达了三个信息,只要全部满足就可以完成日志输出。


在 rsyslog.conf 文件里找如下格式内容,代表含义为:什么服务. 日志等级、输出到哪里

mail.info /var/log/maillog_info

我们自己写的程序根本没有必要使用rsyslog来自定义输出日志(个人理解,有误请指出),因为我们会用自己的日志组件输出的应该输出的位置。这里了解下日志设施有哪些即可,你可以去看这个配置文件知道这些日志被输出到哪里了,方便运维和定位问题。


日志设施有:


auth(security), authpriv: 授权和安全相关的消息

kern: 来自Linux内核的消息

mail: 由mail子系统产生的消息

cron: cron守护进程相关的信息

daemon: 守护进程产生的信息

news: 网络消息子系统

lpr: 打印相关的日志信息

user: 用户进程相关的信息

local0 to local7: 保留,本地使用


日志级别有(升序):


debug:包含详细的开发情报的信息,通常只在调试一个程序时使用。

info:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理。

notice: 不是错误情况,也不需要立即处理。

warning: 警告信息,不是错误,比如系统磁盘使用了85%等。

err:错误,不是非常紧急,在一定时间内修复即可。

crit:重要情况,如硬盘错误,备用连接丢失。

alert:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失。

emerg:紧急情况,需要立即通知技术人员。



例如:把所有来自cron守护进程的消息保存到/var/log/cron文件中。 当指定日志级别时,所有等于或大于该日志等级的信息都要被处理。


cron.*  /var/log/cron


日志切割


日积月累日志会越来越大,直到撑爆你的磁盘,历史日志就没有必要保留了,最好永远只保留近期的日志,超过某个大小或者某段保留时间的日志自动删除。


在 python 的日志组件中支持日志滚动,可以规定每个日志文件有多大,保留多少个文件;也可以规定保留几天内的日志。在 Linux 里面也有类似的组件,也是自带的: logrotate ,他本身是通过计划任务读取配置定时执行的。


呐,这就是 Linux 定时任务涉及的目录,下面的脚本会按文件名写的时间定时执行。

/etc/cron.daily:
logrotate  man-db.cron  mlocate
/etc/cron.hourly:
0anacron
/etc/cron.monthly:
/etc/cron.weekly:

可以看到 logrotate 在 cron.daily 下面,内容使用到了 logrotate.conf 配置文件,这个配置文件记录了日志滚动规则的全局配置,你可以手动执行下面这个脚本来手动轮转日志。

$ cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
....

需要注意的是这几项全局配置,一般是无须改动的,可以打开日志压缩减少空间占用

$ cat /etc/logrotate.conf
weekly     //轮转的周期,一周轮转
rotate 4   //保留4份
create     //轮转后创建新文件
dateext    //使用日期作为后缀
#compress  //是否压缩
include /etc/logrotate.d   //包含该目录下的文件  

日志轮转配置


假如你的服务本身不支持日志轮转,可以在/etc/logrotate.d下新增任意名称的文件实现配置,举个例子。

$ vim /etc/logrotate.d/log-file 
/var/log/log-file {
    monthly
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
    postrotate
        /usr/bin/killall -HUP rsyslogd
    endscript
}


上面的模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。也可以通过man手册中的例子进行配置。


monthly 每月一次,也可以改成’daily’,‘weekly’或者’yearly’

rotate 5 保留5个日志,超过删除最老的

compress 已轮循的用gzip压缩

delaycompress 一般和compress选项一起用,最近的归档不压缩,方便查看。

missingok 在日志轮循期间忽略错误

notifempty 如果日志文件为空,轮循不会进行。

create 644 root root 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。

postrotate/endscript 在所有其它指令执行完后,中间包含的命令会被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。也可以包含一些提醒服务重新读取配置的命令


以上信息来源 “man logrotate”


手动执行与日志验证


可以这样手动执行


logrotate /etc/logrotate.conf



也可以单独切割某个日志


logrotate -vf /etc/logrotate.d/log-file


logrotate本身的日志位于

cat /var/lib/logrotate/logrotate.status 
logrotate state -- version 2
"/var/log/yum.log" 2020-1-1-3:48:1
"/var/log/boot.log" 2020-8-22-3:17:1
"/var/log/chrony/*.log" 2019-12-21-12:0:0
"/var/log/wtmp" 2019-12-21-12:0:0
"/var/log/spooler" 2019-12-21-12:0:0
"/var/log/btmp" 2020-9-1-3:16:1
"/var/log/maillog" 2019-12-21-12:0:0
"/var/log/wpa_supplicant.log" 2019-12-21-12:0:0
"/var/log/secure" 2020-8-11-3:47:1
"/var/log/messages" 2020-8-26-3:16:1
"/var/log/cron" 2020-8-13-3:19:1


引用



我其实写了Linux的系列文章感兴趣可以到我的博客或者公众号里查看

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
5月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
494 3
Linux系统禁用swap
|
5月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
999 3
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
5月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
525 122
基于docker搭建监控系统&日志收集
|
6月前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
6月前
|
存储 Ubuntu Linux
「正点原子Linux连载」第二章Ubuntu系统入门
在图2.8.2.4中,我们使用命令umount卸载了U盘,卸载以后当我们再去访问文件夹/mnt/tmp的时候发现里面没有任何文件了,说明我们卸载成功了。
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
590 3
Linux系统初始化脚本
|
6月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
431 18
|
5月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
692 2
|
5月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
557 1