Linux从入门到精通——系统日志管理
####系统日志管理### 程序产生日志
【进程和操作系统内核需要能够为发生的事件记录日志,这些日志可用于系统审核和问题的故障排除,一般这些日志永久存储/var/log目录中。】
1.rsyslog vim
/etc/rsyslog.conf
Syslog 守护进程 — 一个用来接收、处理和发送 syslog 信息的程序。它可以远程发送 syslog 到一个集中式的服务器或写入到一个本地文件。常见的例子包括 rsyslogd 和 syslog-ng。在这种使用方式中,人们常说“发送到 syslog”。
Syslog 协议 — 一个指定日志如何通过网络来传送的传输协议和一个针对 syslog 信息(具体见下文) 的数据格式的定义。它在 RFC-5424 中被正式定义。对于文本日志,标准的端口是 514,对于加密日志,端口是 6514。在这种使用方式中,人们常说“通过 syslog 传送”。
rsyslog是一个开源工具,广泛用于linux系统以通TCP/UDP协议转发或者接受日志消息
此服务是用来采集日志,不生成日志,收集日志并且搬到指定位置
此服务的主配置文件为/etc/rsyslog.conf
指定日志保存位置修改配置文件,修改后需要重启rsyslog服务才能生效
*.* /var/log/student.log
2.rsyslog的管理
/var/log/message ##服务信息日志,大多数系统日志信息在这里
/var/log/secure ##安全和身份认证相关的消息和错误的日志文件
/var/log/maillog ##与邮件服务器相关的日志文件
/var/log/cron ##与定时人物相关的日志文件
/var/log/boot.log ##与系统启动有关的日志文件
【UDP:直接发送 TCP:询问后才发送】
“什么类型.什么级别” /var/log/file ##日志采集规则
(1)日志类型分为:
auth ##pam产生的日志
authpriv ##ssh,ftp等登陆信息的验证信息
cron ##时间任务相关
kern ##内核
lpr ##打印
mail ##邮件
mark(syslog)-rsyslog ##服务内部的信息,时间标识
news ##新闻组
user ##用户程序产生的相关信息
uucp ##unix
to unix copy, unix主机之间相关的通讯
local 1~7 ##自定义的日志设备
(2)日志级别分为:
debug ##有调式信息的,日志信息最多
info ##一般信息的日志,最常用
notice ##最具有重要性的普通条件的信息
warning ##警告级别
err ##错误级别,组织某个功能或者模块不能正常工作的信息
crit ##严重级别,组织整个系统或者整个软件不能正常工作的信息
alert ##需要立刻修改的信息
emerg ##内核崩溃等严重信息
none ##什么都不记录
【注意:从上到下,级别从低到高,记录的信息越来越少】
【详细的可以查看手册:man
3 syslog】
3.日志的远程同步
(1)在日志发送方:
vim /etc/rsyslog.conf
*.*
@172.25.254.210 ## @表示udp协议发送 @@表示tcp协议发送
日志接受方IP
systemctl restart rsyslog
【如果光在发送方开启同步日志,接受方是收不到同步日志的】
(2)在日志接受方:
vim /etc/rsyslog.conf
15 $ModLoad imudp ##日志接受模块
16 ¥UDPServerRun
514 ##开启接受端口
【开启端口但是有防火墙还是收不到同步的日志】
systemctl restart rsyslog
systemctl stop firewalld ##关闭火墙
systemctl disable firewalld 设定火墙开机关闭
(3)测试:
在发送方和接受方都清空日志文件
> /var/log/messages ##方便查看结果
(4)在日志接受方查看
cat /var/log/messages
4.日志采集格式的设定
vim /etc/rsyslog.conf
$template LOGFMT,
“%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n”
%timegenerated% ##显示日志时间
%FROMHOST-IP% ##显示主机ip
%syslogtag% ##日志记录目标
%msg% ##日志内容
\n ##换行
*.* /var/log/westos;LOGFMT
cat /var/log/westos
5.时间同步服务
(1)服务名称:chronyd
Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确。
它由两个程序组成:chronyd和chronyc。
chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。
chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。
在很多情况下,chrony相对于ntp程序来说,都有不少优势
(2)在服务端:vim /etc/chronyd.conf
22.allow 172.25.254.0/24 ##允许那些客户端同步本机时间
29.local stratum 10 ##本机不同步任何主机的时间,本机作为时间源
systemctl restart chronyd
timedatectl set-timezone Asia/Shanghai ##更改当前时区为东8区
(3)在客户端:vim /etc/chrony.conf
server 172.25.254.110 iburst ##本机立即同步110主机时间
systemctl restart chronyd
timedatectl set-timezone
Asia/Shanghai ##更改当前时区为东8区
(4)测试:
chronyc sources -v
210 Number of source = 1
6.timedatectl命令
timedatectl命令可以查询和更改系统时钟和设置,你可以使用此命令来设置或更改当前的日期,时间和时区,或实现与远程NTP服务器的自动系统时钟同步。
timedatectl ##管理系统时间
status ##显示当前时间信息
set-time ##设定当前时间
set-timezone ##设定当前时区
set-local-rtc 0|1 ##设定是否使用utc时间
list-timezone ##查看支持的所有时区
(1).显示系统的当前时间和日期
timedatectl
# timedatectl status
# 两条命令效果等价
[root@rhel1 ~]# timedatectl |
注意NTP synchronized值,只有时间服务器自己同步完成时间之后,才能为其它服务器提供时间同步服务。
(2).设置日期与时间
timedatectl set-time “YYYY-MM-DD HH:MM:SS”
timedatectl set-time “YYYY-MM-DD”
timedatectl set-time “HH:MM:SS”
(3).查看所有可用的时区
timedatectl list-timezones # 亚洲
timedatectl list-timezones | grep -E “Asia/Shanghai*” #中国上海
(4).设置时区
timedatectl set-timezone Asia/Shanghai
手动修改时间时,必须把NTP enabled 设置为no.
[root@rhel1 ~]# date
Sun Oct 8 11:00:51 CST 2017
[root@rhel1 ~]# timedatectl
Local time: Sat 2017-10-07 11:31:45 CST
Universal time: Sat 2017-10-07 03:31:45 UTC
RTC time: Sun 2017-10-08 03:01:57
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
如果把NTP enabled 修改为yes时,表示开启自动同步时间,此时,是不能手动修改时间的。
如果为No时,表示关闭自动同步时间。
[root@rhel1 ~]# timedatectl set-ntp yes
[root@rhel1 ~]# timedatectl set-time “2017-10-08 11:00:50”
Failed to set time: Automatic time synchronization is enabled
[root@rhel1 ~]# timedatectl set-ntp no
[root@rhel1 ~]# timedatectl set-time “2017-10-08 11:00:50”
[root@rhel1 ~]# date
Sun Oct 8 11:00:51 CST 2017
7.journal
systemd-journald和rsyslog:
- 一种改进的日志管理服务,是
syslog
的补充,收集来自内核、启动过程早期阶段、标
准输出、系统日志,守护进程启动和运行期间错误的信息 - 将消息写入到结构化的事件日志中(数据库),默认情况下重启后删除
-
syslog
的信息也可以由systemd-journald
转发到rsyslog
中进一步处理 - 默认情况下,
systemd
的日志保存在/run/log/journal
中,系统重启就会清除,这是RHEL7的新特性。通过新建/var/log/journal
目录,日志会自动记录到这个目录中,并永久存储。 -
rsyslog
服务随后根据优先级排列日志信息,将它们写入到/var/log
目录中永久保存
(1)journalctl ##日志查看工具
-n 3 ##查看最近三条日志
-p err ##查看错误日志
-0 verbose ##查看日志的详细参数
–since ##查看从什么时间开始的日志
–until ##查看到什么时间为止的日志
(2)如何是使用systemd-journald保存系统日志
默认情况下,systemd日志保存在/run/log/journal中,systemd-journald是不保存系统日志到硬盘的,那么关机后再开机只能看到本次开机之后的日志,上次关机之前的日志是无法查看的。如果将日志保存在/var/log/journal目录,这样做的优点是启动后就可以利用历史数据,形成永久日志
实现步骤:
mkdir /var/log/journal
chgrp systemd-journal
/ver/log/journal
chmod g+s /ver/log/journal
killall -1 systemd-journald
ls /ver/log/journal