linux学习45-日志管理

xiaoxiao2025-10-22  10

日志管理

1 日志介绍

日志:

记录内容: 时间,地点,人物,事件日志级别: 事件的关键性程度,Loglevel

事件记录格式: 日期时间 主机进程[pid]: 事件内容

[root@hai7-8 ~]$cat /var/log/messages Oct 25 20:34:27 hai7-8 dhclient[53598]: DHCPACK from 172.20.0.1 (xid=0x12fbdb30) | 日期时间 | 主机名 | 进程编号 | 事件内容

C/S架构 通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理

CentOS6和CentOS7的日志管理程序rsyslog

查看版本信息[root@hai7-8 $]$rpm -qi rsyslog 特性 多线程支持UDP, TCP, SSL, TLS, RELPMySQL, PGSQL, Oracle实现日志存储强大的过滤器,可实现过滤记录日志信息中任意部分自定义输出格式 rsyslog术语(见man logger) facility:设施,从功能或程序上对日志进行归类 auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, local0-local7, syslogPriority:优先级别,从低到高排序 debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic) 参看帮助:man 3 syslog

2 日志配置

程序包:rsyslog

rsyslog包内主要文件

主程序 /usr/sbin/rsyslogd配置文件 /etc/rsyslog.conf,/etc/rsyslog.d/*.conf库文件(各种模块) /lib64/rsyslog/*.so

端口号:udp514和tcp514

配置文件格式:由三部分组成

MODULES:相关模块配置,通常不需要修改GLOBAL DIRECTIVES:全局配置,通常不需要修改RULES:日志记录相关的规则配置[root@hai7-8 ~]$vim /etc/rsyslog.conf #### RULES #### '主日志,`*.info` 为一个组合,*表示哪个设施发生的事,info表示级别比info高的级别都要记录,中间以点分隔,用来分隔多个组合' *.info;mail.none;authpriv.none;cron.none /var/log/messages '身份验证日志' authpriv.* /var/log/secure '邮件日志,-表示异步写入' mail.* -/var/log/maillog '计划任务记录' cron.* /var/log/cron '当发生emerg级别以上级别的事件,将给所有登录的用户发消息' *.emerg :omusrmsg:* 'uucp和news类别当发生crit级别事件时,放入/var/log/spooler文件中' uucp,news.crit /var/log/spooler '自定义级别7,记录内核的信息放在/var/log/boot.log' local7.* /var/log/boot.log |facility.Priority| |日志存放地点|

RULES配置格式 facility.priority; facility.priority… target

facility *: 所有的facility facility1,facility2,facility3,...:指定的facility列表priority *:所有级别 none:没有级别,即不记录 PRIORITY:指定级别(含)以上的所有级别 =PRIORITY:仅记录指定级别的日志信息target 文件路径:通常在/var/log/,文件路径前的-表示异步写入 用户:将日志事件通知给指定的用户,* 表示登录的所有用户,与权限有关系,普通用户无法得到通知[root@hai7-6 ~]$vim /etc/rsyslog.conf #### RULES #### local6.* root

管道:| COMMAND,转发给其它命令处理

日志服务器:@host,把日志送往至指定的远程服务器记录

在远程服务器上打开udp的514端口[root@hai6 ~]$vim /etc/rsyslog.conf $ModLoad imudp <==启用udp接口 $UDPServerRun 514 #$ModLoad imtcp <==tcp接口,使用哪种协议就启用哪一种 #$InputTCPServerRun 514 以ssh服务为例,ssh默认记录的日志为authpriv类型,在本地服务器上修改日志配置文件[root@hai7-6 ~]$vim /etc/rsyslog.conf authpriv.* /var/log/secure <==注释掉此项将不往本机发送 authpriv.* @192.168.50.106 <==udp协议,指定为远程主机ip authpriv.* @@192.168.50.106 <==tcp协议指定为远程主机ip格式,2个@

自定义日志文件存放地点 如果软件本身不支持rsyslog日志,需要基于rsyslog的API接口来开发才可以 以ssh为例

在rsyslog配置文件RULES部分,增加一行自定义规则[root@hai7-6 ~]$vim /etc/rsyslog.conf #### RULES #### local6.* /var/log/sshtest.log <==增加行 修改ssh配置文件中定义日志记录项[root@hai7-6 ~]$vim /etc/ssh/sshd_config #SyslogFacility AUTHPRIV <==原定义项,注释掉 SyslogFacility local6 <==自定义项 重启ssh及日志服务[root@hai7-6 ~]$systemctl restart sshd [root@hai7-6 ~]$systemctl restart rsyslog

测试工具:‘logger’ 生成日志信息

1. '生成一个新日志信息' [root@hai7-6 ~]$logger "This is a log" 2. '/var/log/messages记录了大部分应用程序以及操作系统发生的事' [root@hai7-6 ~]$tail -f /var/log/messages Oct 26 07:53:13 hai7-6 root: This is a log <==触发生成的日志信息

其他日志

/var/log/secure 系统安装日志,文本格式,应周期性分析/var/log/btmp 当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看[root@hai7-6 ~]$lastb root ssh:notty 192.168.50.97 Fri Oct 26 09:19 - 09:19 (00:00) /var/log/wtmp 当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看[root@hai7-6 ~]$last reboot system boot 3.10.0-862.el7.x Wed Sep 19 16:23 - 09:19 (36+16:56) (36+16:56),表示运行了多久,在什么时间登录 /var/log/lastlog 每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看[root@hai7-6 ~]$lastlog gdm :0 Tue Sep 25 07:45:51 +0800 2018 <==此账号为图形界面部署时用到,变相说明系统安装时间 /var/log/dmesg 系统引导过程中的日志信息,文本格式,使用dmesg命令查看,或者cat文件/var/log/messages 系统中大部分的信息/var/log/anaconda : anaconda的日志,安装系统过程日志;centos6中此日志在/var/log目录下,anaconda开头的文件

3 日志管理journalctl(centos7)

Systemd统一管理所有Unit 的启动日志,带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/etc/systemd/journald.conf

journalctl用法 查看所有日志(默认情况下,只保存本次启动的日志) 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 yesterdayjournalctl–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.servicejournalctl -u nginx.service --since today 实时滚动显示某个Unit 的最新日志 journalctl -u nginx.service -f合并显示多个Unit 的日志 journalctl -u nginx.service -u php-fpm.service --since today 日志管理journalctl 查看指定优先级(及其以上级别)的日志,共有8级 0: emerg 1: alert 2: crit 3: err 4: warning 5: notice 6: info 7: debug示例 journalctl -p err -b journalctl -p 3 -b 日志输出格式 默认分页输出,–no-pager 改为正常的标准输出 journalctl --no-pager以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

4. 将日志记录于MySQL中

需要安装的程序包 rsyslog-mysql搭建过程 rsyslog服务器上执行的操作 安装模块mysql模块相关的程序包[root@hai7-7 ~]$yum install rsyslog-mysql 查看程序包包含文件[root@hai7-7 ~]$rpm -ql rsyslog-mysql /usr/lib64/rsyslog/ommysql.so 'rsyslog所有模块都放在/usr/lib64/rsyslog/中' /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 'sql脚本,将在mysql中建立的数据库表等,需要导入mysq' sql脚本拷贝给数据库服务器,建立rsyslog服务器的专用数据库[root@hai7-7 ~]$scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 192.168.50.97:/data 修改rsyslog配置文件,加载支持mysql的模块[root@hai7-7 ~]$vim /etc/rsyslog.conf #### MODULES #### <==在模块部分加入新增模块 # Provides TCP syslog reception 1. $ModLoad imtcp <==启用tcp接口,将注释去掉 $InputTCPServerRun 514 2. $ModLoad ommysql <==$ModLoad表示加载,后面跟模块名称不需要.so后缀,/usr/lib64/rsyslog/下的模块不需要写路径 #### RULES #### <==在规则部分定义模块转发功能 3. *.info;mail.none;authpriv.none;cron.none :ommysql:192.168.50.107,Syslog, syslog,centos | facility.priority | | 模块名 | 数据库ip, |数据库名,|账号,|数据库密码| 数据库服务器 在数据库服务器上为rsyslog创建数据库及表[root@hai7-6 data]$mysql < mysql-createDB.sql 在数据库为rsyslog服务器创建账号[root@hai7-6 data]$mysql -e "GRANT ALL ON Syslog.* TO syslog@'192.168.50.97' IDENTIFIED BY 'centos'" 测试,使用logger命令生成日志

5. web页面展示数据库日志(loganalyzer)

搭建环境 lamp或者lnmp架构以模块方式搭建额外需要的程序 php-gd,增加动态绘图功能 搭建过程 在rsyslog服务器上准备amp或nmp组合[root@hai7-8 ~]$yum install httpd php php-mysql php-gd -y 安装LogAnalyzer,官网获取程序包,解压[root@hai7-8 ~]$tar xvf loganalyzer-4.1.6.tar.gz 将解压后生成的src目录,拷贝到httpd页面文件目录[root@hai7-8 ~]$cp -ar loganalyzer-4.1.6/src/ /var/www/html/log 建立配置文件1. '进入拷贝目录' [root@hai7-8 ~]$cd /var/www/html/log 2. '创建配置文件' [root@hai7-8 ~]$touch config.php 3. '授予权限,这一步必须有,不然会报错,官方脚本要求为666,也可以手动授权写权限' [root@hai7-8 /var/www/html/log]$chmod 666 config.php 根据环境可以授权写权限 [root@hai7-8 /var/www/html/log]$setfacl -m u:apache:w config.php 登录httpd页面(http://192.168.50.110/log/ ),此实验使用主机为192.168.50.110,前3步选择默认,下一步就可以,第3步后直接跳转到第7步,设置如下图 基于安全考虑,如果设置权限为666,配置成功后要将权限修改为644[root@hai7-8 ~]$cd /var/www/html/log [root@hai7-8 log]$chmod644 config.php

6. Logrotate日志存储

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

配置文件

主配置文件:/etc/logrotate.conf子配置文件:/etc/logrotate.d//var/log/wtmp { monthly <==每个月生成一个新文件 create 0664 root utmp <==为旧文件取一个新名字,给予权限664 minsize 1M <==最小达到1M,采取创建新的日志文件 rotate 1 <==保留1个版本 }

主要参数如下

参数描述compress通过gzip 压缩转储以后的日志nocompress不需要压缩时,用这个参数copytruncate用于还在打开中的日志文件,把当前日志备份并截断nocopytruncate备份日志文件但是不截断create mode owner group转储文件,使用指定的文件模式创建新的日志文件nocreate不建立新的日志文件delaycompress和compress一起使用时,转储的日志文件到下一次转储时才压缩nodelaycompress覆盖delaycompress选项,转储并压缩errors address专储时的错误信息发送到指定的Email 地址ifempty即使是空文件也转储,是缺省选项notifempty如果是空文件的话,不转储mail address把转储的日志文件发送到指定的E-mail 地址nomail转储时不发送日志文件olddirdirectory转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统noolddir转储后的日志文件和当前日志文件放在同一个目录下prerotate/endscript在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行postrotate/endscript在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行daily指定转储周期为每天weekly指定转储周期为每周monthly指定转储周期为每月size大小指定日志超过多大时,就执行日志转储rotate count指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份Missingok如果日志不存在,提示错误Nomissingok如果日志不存在,继续下一次日志,不提示错误
转载请注明原文地址: https://www.6miu.com/read-5038359.html

最新回复(0)