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

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

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

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

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

日志系统rsync

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

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

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

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

启动停止

在centOS5及更早版本中使用的是 syslogrsyslogsyslog 的增强版本。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一份配置文件主要包括以下几个部分:MODULESRULES 、全局指令,模板,模块参数等,回头有机会讲解 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:

可以看到 logrotatecron.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

引用

  • https://blog.csdn.net/qq_29344757/article/details/86700898
  • https://medium.com/pizzas/rsyslog%E4%BB%8B%E7%B4%B9%E8%88%87%E4%BD%BF%E7%94%A8-cfb36497092d
  • https://www.cnblogs.com/sunsky303/p/7677370.html
  • https://www.jianshu.com/p/e129ed893362

原文地址:https://cloud.tencent.com/developer/article/1710230

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。

按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下:

计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的进程数目,用uptime查看到负载很高,既有可能是CPU利用率高,也可能是大量在等待io的进程导致,用mpstat查看每个CPU的使用情况,查看CPU的使用率或者CPU花在等待io的时间,接着用pidstat定位具体的进程
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线程切换及中断切换,进程切换的开销较大,除了需要保存寄存器和程序计数器中的值还需保存全局变量、栈等到内存中,以便下次运行恢复,而同一进程中的线程切换开销会小很多,只需更新寄存器和线程独有的栈,共享资源如打开的文件、全局变量等无需切换,当硬件中
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载。 默认视图: 当想看系统负载时,可观察汇总的%CPU中的us用户进程和sy系统进程是否占用CPU很高,相加接近100%就说明占用很高了,有些程序可能得不到及
文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具