【Linux进阶篇】日志系统

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
运维安全中心(堡垒机),企业双擎版 50资产 7天
运维安全中心(堡垒机),免费版 6个月
简介: 【Linux进阶篇】日志系统

日志

日志文件:系统中各个运行消息的文件,不同的日志文件记录了不同类型的信息,如内核消息、错误消息等。

syslog服务:

       syslogd: 系统,非内核产生的信息

       klogd:内核,专门负责记录内核产生的日志信息

分析日志文件: 通过浏览日志查找关键信息,对系统服务进行调试,判断故障发生的原因

分类

内核及系统日志: 数据由系统服务rsyslog统一管理可以根据主配文件/etc/rsyslog.conf中的设置决定内核消息及其各种系统消息的记录位置/var/log/messages

用户日志: 数据用于记录系统用户登录及其退出系统的相关信息,包括用户名、登录终端、 登录时间、来源、使用的进程等等 /var/log/secure

程序日志: 应用程序自己独立管理的一个日志,记录程序本身运行过程中的各种事件信息 /var/log/nginx/access.log /var/log/nginx/error.log

1、内核和系统日志 /etc/rsyslog.conf

mail.notice(举例)

服务.级别 /var/log/messages 内核和大多数系统消息日志位置

消息内容组成 时间:消息发出的时间和日期

主机名:生成消息的计算机的名称

子系统的名称:发出消息的应用程序的名称

消息内容:消息的具体内容

2、用户日志和程序日志

查询当前登录的用户情况:users,who,w

查询用户登录的历史记录:last 成功日志,lastb 失败日志

查看安全日志文件:/var/log/secure

举例:查看/var/log/secure安全日志文件,打开新终端会看到信息。

1. [root@log ~]# tailf /var/log/secure
2. Mar 18 12:18:22 localhost sshd[1689]: Server listening on 0.0.0.0 port 22.
3. Mar 18 12:18:22 localhost sshd[1689]: Server listening on :: port 22.
4. Mar 18 12:18:26 localhost gdm-launch-environment]: pam_unix(gdm-launch-environment:session): session opened for user gdm by (uid=0)

3、程序日志

       例1:httpd 服务的日志文件access_log和error_log分别记录客户访问事件和错误信息 /var/log/httpd/access_log /var/log/httpd/error_log

       例2:nginx服务的日志文件access.log和error.log /var/log/nginx/access.log /var/log/nginx/error.log

       例3:源码安装nginx日志路径 /usr/local/nginx/logs

注意:/var/log/dmesg 系统启动硬件检查日志:直接运行命令 dmesg

常见日志文件

/var/log/boot.log 记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息

/var/log/messages 记录Linux操作系统常见的系统和服务错误信息

/var/log/cron crond 计划任务产生的事件信息

/var/log/dmesg 引导过程中产生的信息

/var/log/maillog 记录电子邮件活动信息

/var/log/lastlog 记录最后一次用户成功登陆的时间、登陆IP等信息

/var/log/secure Linux系统安全日志,记录用户和工作组变化情况、用户登陆认证情况

/var/log/syslog 只记录警告信息,常常是系统出问题的信息,使用lastlog查看

/var/log/wtmp 记录用户登录、注销、系统启动、关键等信息,使用last命令查看

/var/log/btmp 记录失败或者是错误的登录信息和验证 lastb命令查看

/var/run/utmp 该日志文件记录有关当前登录的每个用户的信息。如who、w、users等就需要访问这个文件

日志消息的级别

0 emerg 会导致主机系统不可用的情况

1 alert 必须马上采取措施解决的问题

2 crit 比较严重的情况

3 err 运行出现问题

4 warning 可能影响系统功能,需要提醒用户的重要事件

5 notice 不会影响正常功能,但是需要注意的事件

6 info 一般信息

7 debug 程序或系统调试信息等

8 none 不记录任何日志

rsyslog.conf文件分析

加载模块、转发端口等基本配置

1. [root@log ~]# cat /etc/rsyslog.conf 
2. #省略部分内容
3. #### MODULES #### 
4. # Provides UDP syslog reception 
5. #$ModLoad imudp 
6. #$UDPServerRun 514 
7. 
8. # Provides TCP syslog reception 
9. #$ModLoad imtcp 
10. #$InputTCPServerRun 514
11. #省略部分内容

服务名称

auth        # 认证相关的

authpriv    # 权限,授权相关的

cron        # 任务计划相关的

daemon      # 守护进程相关的

kern        # 内核相关的

lpr         # 打印相关的

mail        # 邮件相关的

mark        # 标记相关的

news        # 新闻相关的

security    # 安全相关的,与auth 类似

syslog      # syslog自己的

user        # 用户相关的

uucp        # unix to unix cp 相关的

local0 到 local7 # 用户自定义使用

*           # *表示所有的facility

配合日志级别举例

1、//mail的info级别以上的信息,记录的位置

mail.info /var/log/mail

2、//只记录info这一个级别。

auth.=info

3、//user的相关信息但不包括error,取反。

user.!=error

4、//所有日志的info以上的信息

*.info

5、//mail的所有级别

mail.*

6、//所有服务的所有级别

*.*

7、//合并日志,写到一块

cron.info;mail.info

action(动作)日志记录的位置

-   //延迟写入,系统不繁忙的时候才写入。

发送邮件,通过什么协议

@@192.168.1.1 TCP

@192.168.1.1 UDP


*号表示所有在线用户

~ 忽略日志

^号后跟可执行脚本或程序的绝对路径


案例:更改系统安全日志secure的记录位置,将secure的位置更改为/usr/local/secure


1. [root@log ~]# vim /etc/rsyslog.conf         #默认57行
2. authpriv.*  /usr/local/secure
3. [root@log ~]# systemctl restart rsyslog
4. [root@log ~]# chattr +a /usr/local/secure

日志的采集

企业环境可以使用ELK,但rsyslog也可以实现日志收集功能

案例环境:将log1的日志发送到log2

log1:192.168.8.2

log2:192.168.8.11

log1:

1. [root@log1 ~]# vim /etc/rsyslog.conf
2.  14 # Provides UDP syslog reception
3.  15 $ModLoad imudp                  #15行删除注释
4.  16 $UDPServerRun 514               #16行删除注释
5.  17 
6.  18 # Provides TCP syslog reception
7.  19 $ModLoad imtcp                  #19行删除注释
8.  20 $InputTCPServerRun 514          #20行删除注释
9. #末尾添加
10.  92 *.* @192.168.8.2                #92行添加
11. [root@log1 ~]# systemctl restart rsyslog            #重启
12. [root@log1 ~]# yum -y install nginx                 #安装nginx

log2:

1. [root@log2 ~]# vim /etc/rsyslog.conf
2.  14 # Provides UDP syslog reception
3.  15 $ModLoad imudp                  #15行删除注释
4.  16 $UDPServerRun 514               #16行删除注释
5.  17 
6.  18 # Provides TCP syslog reception
7.  19 $ModLoad imtcp                  #19行删除注释
8.  20 $InputTCPServerRun 514          #20行删除注释
9. [root@log2 ~]# systemctl restart rsyslog
10. [root@log2 ~]# tailf /var/log/messages

案例2:把nginx的日志发送给log2 log1:

1. [root@log1 ~]# vim /etc/rsyslog.conf
2. $ModLoad imfile 
3. $InputFilePollInterval 1 
4. $InputFileName /var/log/nginx/access.log 
5. $InputFileTag nginx-info-access;
6. $InputFilestateFile state-nginx-info-accesslog 
7. $InputRunFileMonitor
8. $InputFileName /var/log/nginx/error.log 
9. $InputFileTag nginx-info-error; 
10. $InputFilestateFile state-nginx-info-errorlog 
11. $InputRunFileMonitor
12. $InputFilePollInterval 10 
13. if $programname == 'nginx-info-access' then @192.168.8.11:514 
14. if $programname == 'nginx-info-access' then ~ 
15. if $programname == 'nginx-info-error' then @192.168.8.11:514 
16. if $programname == 'nginx-info-error' then ~

参数解释:

//间隔多久采集1次。

默认单位是秒 $InputFilePollInterval 1

//采集的日志的名称

$InputFileName /usr/local/nginx/logs/access.log

//给对应的日志打一个标签

$InputFileTag nginx-info-access;

//给这个日志命名

$InputFilestateFile state-nginx-info-accesslog

//启动监控

$InputRunFileMonitor

日志的切割

为了防止日志文件过大,所以我们要做到日志定期的切割和清理。 logrotate 日志轮替

/etc/logrotate.conf

weekly //切割周期,默认每周

rotate 4 //保留多少个日志文件,那么一周一个,也就是能看到一个月的日志。如果是0就表示不作备份,仅做了一个切割,表示每周清空一下日志。

create //旧日志切割后,源文件是否生成新的日志。这一点就跟脚本切割日志有很大不同的地方。

dateext //切割后,日志的文件类型是什么样?默认是以日期来切割的。

include /etc/logrotate.d //还需要读取这个地方的内容 ,目录里都是其他地方的日志

/var/log/wtmp { //特指某个文件的切割方式,

       monthly //每月切割

       create 0664 root utmp //切割完成之后,这个文件的权 限,以及属主和属组是谁

       minsize 1M //文件超过1M之后才切割,这表示即便过了1个月, 大小没到1M,也不切割

       rotate 1 //保留1个

       }

其他参数:

compress        //压缩,gzip delaycompress   //延迟压缩 nocompress      //不压缩 copytruncate    //先拷贝,再清空。 missingok       //丢了也没关系,热日志会出现中断 ifempty         //即使日志文件为空,到日期也切割 notifempty      //为空者不切割 mail Email      //切割后的日志文件,不在本地保存,发送邮件到其他地方。 nomail          //生成的日志不发送,在本地使用 olddir Directory //另存为的地址,如果不写则默认是在同一个目录下边。 noolddir        //转存文件都保存在本地。 sharedscripts   //运行脚本,为脚本添加的a权限后需要暂时调整权限 postrotate      //切割之后,执行脚本 prefotate       //切割之前,执行脚本时间参数 daily           //每天 weekly          //每周 mounthly        //每月 yearly          //每年 rotate count    //保存几份。 dateext         //使用当前日期。 size(minisize)  //达到多少才切割,默认单位是M,sizeksizem默认单位是kb。size = 5

切割安全日志

1. [root@log1 ~]# vim /etc/rsyslog.conf
2. authpriv.*      /var/log/secure
3. [root@log1 ~]# vim /etc/logrotate.d/secure
4. /var/log/secure { 
5.     missingok 
6.     notifempty 
7.     daily 
8.     create 
9.     rotate 4 
10.     compress 
11. }
12. [root@log1 ~]# useradd zhangsan
13. [root@log1 ~]#  echo 123.com | passwd --stdin zhangsan
14. 更改用户 zhangsan 的密码 。
15. passwd:所有的身份验证令牌已经成功更新。
16. [root@log1 ~]#  su - zhangsan
17. Attempting to create directory /home/zhangsan/perl5
18. [zhangsan@log1 ~]$  exit
19. 登出
20. [root@log1 ~]# tail /var/log/secure
21. #省略部分内容
22. Mar 18 14:31:00 log1 passwd: gkr-pam: couldn't update the login keyring password: no old password was entered
23. Mar 18 14:31:00 log1 su: pam_unix(su-l:session): session opened for user zhangsan by root(uid=0)
24. Mar 18 14:31:07 log1 su: pam_unix(su-l:session): session closed for user zhangsan

手动切割日志

1.  logrotate -vf /etc/logrotate.d/secure
2. ls /var/log/

如果有特殊权限,而每次切割完成之后,都需要重新启动rsyslog服务,需要写脚本支持。

1. /var/log/secure { 
2.     sharedscripts 
3.     prerotate 
4.     /usr/bin/chattr -a /var/log/secure 
5.     endscript 
6.     missingok 
7.     notifempty 
8.     daily 
9.     create 
10.     rotate 4 
11.     compress 
12.     sharedscripts 
13.     postrotate 
14.     /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null 
15.     /usr/bin/chattr +a /var/log/secure 
16.     endscript 
17. }

脚本切割nginx日志

1. [root@log1 ~]# vim /usr/local/nginx/cut_nginx_log.sh
2. #!/bin/bash
3. LOG_PATH=/usr/local/nginx/logs/
4. PID=/var/run/nginx/nginx.pid
5. mv ${LOG_PATH}access.log  ${LOG_PATH}access_$(date +%F).log
6. mv ${LOG_PATH}error.log  ${LOG_PATH}error_$(date +%F).log
7. kill -USR1 `cat ${PID}`
8. [root@log1 ~]# chmod +x /usr/local/nginx/cut_nginx_log.sh
9. [root@log1 ~]# crontab -e
10. 30 23 * * * /bin/bash /usr/local/nginx/cut_nginx_log.sh

案例3:logrotate切割nginx日志

1. [root@log1 ~]# vim /etc/logrotate.d/nginx
2. /var/log/nginx/*.log {
3.     daily
4.     dateext
5.     compress
6.     rotate 7
7.     sharedscripts
8.     postrotate
9. kill -USR1 `cat /var/run/nginx.pid`
10.     endscript
11. }
12. [root@log1 ~]# logrotate -d -f /etc/logrotate.d/nginx
13. #省略部分内容
14. [root@log1 ~]# crontab -e
15. 30 23 * * *  /usr/sbin/logrotate -f /etc/logrotate.d/nginx


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
11
分享
相关文章
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
564 69
Grafana Loki,轻量级日志系统
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
67 27
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
|
9天前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
61 10
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
2月前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
105 24
Linux系统之whereis命令的基本使用
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
36 10
|
21天前
|
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
61 8
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
|
11天前
|
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
41 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等