日志在所有应用系统中都占有极其重要的位置,本文主要介绍linux系统内核的日志,另外还介绍了一些日志分析工具。
看Linux系统信息日志主要的两种途径:
Linux将系统启动信息传到ring buffer中,内核产生的信息由printk()函数打印出来。printk()函数打出的信息用数字表示消息重要级别,高于一定级别会打印到屏幕。
sudo dmesg > message.txt
打印最近一次的信息
sudo dmesg | tail -f
Linux系统启动后,由/etc/init.d/sysklogd先后启动klogd,syslogd两个守护进程。
- klogd:kernel,记录内核相关的日志 - syslogd:service,记录应用程序的日志
使用klogd读取内核信息有两种方式:
klogd的输出结果会传送给syslogd进行处理,syslogd会根据/etc/syslog.conf的配置把log信息输出到/var/log/下的不同文件中.
记录本次开机时的启动信息,包括内核检测硬件、各种内核支持的功能等。
系统启动时,内核检测过程中产生的信息。
记录账号最后一次登陆信息。
邮件往来记录。
记录很多信息,系统有问题时的必查文件。
记录一些账号登陆信息,如pop3、ssh、telnet、ftp登陆信息。
成功与失败登陆的记录。
一些网络服务产生的日志。
syslogd是一个分发器,它将接收到的所有日志按照/etc/syslog.conf的配置策略发送到这些日志应该去的地方,当然也包括从klogd接收到的日志。klogd首先接收内核的日志,然后将之发送给syslogd。syslog函数原型:
syslog(priority, "%s", string);
Rsyslog是Linux下强大而安全的日志处理系统。
Rsyslog可以单机运行,也可以C/S方式运行。
# 安装
sudo apt install rsyslog
rsyslogd -v
# 查看状态
systemctl status rsyslog.service
# 重启
systemctl restart rsyslog.service
# 启动
systemctl start rsyslog.service
配置文件:
vim /etc/rsyslog.conf
#################
#### MODULES ####
#################
# 开启UDP端口
module(load="imudp")
input(type="imudp" port="514")
# 开启TCP端口
module(load="imtcp")
input(type="imtcp" port="514")
# 可选配置--用于限制特定子网、IP等的访问
$AllowedSender TCP, 127.0.0.1, 10.10.10.0/8, *.xiem.com
服务器端要配置放行指定的端口号。
vim /etc/rsyslog.conf
$PreserveFQDN on # 允许主机名保留FQDN
##Enable sending of logs over UDP add the following line:
# 配置使用UDP发送消息
*.* @服务器ip或域名:514 # 添加远程RSYSLOG服务器
##Enable sending of logs over TCP add the following line:
# 配置使用TCP发送消息
*.* @@服务器ip或域名:514
# 配置当服务端不在线时的处理方式:进行本地缓存
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1
ls /var/log/rsyslog-client/
netstat -4altunp | grep 514
logrotate是一个Linux系统日志的管理工具。它可以切割、压缩等其他软件的日志文件软件。logrotate是基于crontab运行的,所以这个时间点是由crontab控制的,其脚本是/etc/cron.daily/logrotate。Logrotate会调用配置文件/etc/logrotate.conf。可以在/etc/logrotate.d目录里放置自定义好的配置文件,用来覆盖Logrotate的缺省值。
yum -y install logrotate
查看配置文件位置:
rpm -ql logrotate
其中:
我们主要用它来切分nginx日志。
vim /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 7
missingok
notifempty
dateext
compress
sharedscripts
postrotate
if [ -f /run/nginx.pid ]; then
kill -USR1 `cat /run/nginx.pid`
fi
endscript
}
其中 /var/log/nginx/*.log /run/nginx.pid要以 log位置和nginx.conf里 pid的实际位置为准。
手工运行:
/usr/sbin/logrotate -f /etc/logrotate.d/nginx
/usr/sbin/logrotate -d -f /etc/logrotate.d/nginx
logwatch 是一个Perl编写的开源日志分析器,可以对原始的日志文件进行解析并转换成结构化文档。
在写bash时可以用来记录标准日志信息。
阿里云日志服务给集中化日志管理提供了一个新的解决方案。其服务类似于ELK(Elasticsearch、Kibana 和 Logstash),支持多种数据数据的接入。
使用此服务需要在客户机安装阿里的logtail客户端。支持正则表达式等多种查询方式,也支持API接入。