共计 4110 个字符,预计需要花费 11 分钟才能阅读完成。
写在前边的话
在之前的文章中我么谈到了 ELK stack 的部署和简单的小 demo,然后我们又看了 elk stack 结合 filebeat 做了一个分析,具体可参考下面的链接:
Linux 部署 ELK 日志分析系统与简单测试 http://www.linuxidc.com/Linux/2016-10/135849.htm
ELK stack 实战之 Filebeat 的架构分析、配置解释与示例 http://www.linuxidc.com/Linux/2016-10/135850.htm
本篇文章我们主要谈一下 Linux 操作系统的 rsyslog(syslog),然后结合 elk stack 做一个分析 autho.log(linux 自己生成的日志) 的 demo
syslog 与 rsyslog
syslog
首先需要说明的是 syslog 是一种协议,广泛用于系统日志,syslog 系统日志消息可以记录在本地,也可以发送到接受 syslog 日志的服务器统一进行存储和处理,也可以解析其中的内容做相应的处理。
常见的应用场景是网络管理工具、安全管理系统、日志审计系统。
对于老版本的 unix 操作系统,默认使用 syslog,但是在新版本都已经被 rsyslog 所替代
老版本的 Linux 缺省使用 Syslog,其配置大致如下所示:
shell> cat /etc/syslog.conf | |
# Log all kernel messages to the console. | |
# Logging much else clutters up the screen. | |
# kern.* /dev/console | |
# Log anything (except mail) of level info or higher. | |
# Don't log private authentication messages! | |
*.info;mail.none;authpriv.none;cron.none /var/log/messages | |
# The authpriv file has restricted access. | |
authpriv.* /var/log/secure | |
# Log all the mail messages in one place. | |
mail.* -/var/log/maillog | |
# Log cron stuff | |
cron.* /var/log/cron | |
# Everybody gets emergency messages | |
*.emerg * | |
# Save news errors of level crit and higher in a special file. | |
uucp,news.crit /var/log/spooler | |
# Save boot messages also to boot.log | |
local7.* /var/log/boot.log |
完整的 syslog 日志中包含产生日志的程序模块(Facility)、严重性(Severity 或 Level)、时间、主机名或 IP、进程名、进程 ID 和正文。在 Unix 类操作系统上,能够按 Facility 和 Severity 的组合来决定什么样的日志消息是否需要记录,记录到什么地方,是否需要发送到一个接收 syslog 的服务器等。由于 syslog 简单而灵活的特性,syslog 不再仅限于 Unix 类主机的日志记录,任何需要记录和发送日志的场景,都可能会使用 syslog。
这里涉及两个概念:Facility 和 Severity,中文的意思大致是类型和级别。重点说明两条配置的含义:首先,所有 Severity 大于等于 info 的信息都会被保存到「/var/log/messages」中,但是 Facility 为 mail、authpriv、cron 的消息例外;其次,所有 Facility 为 mail 的消息都会保存到「/var/log/maillog」中,日志文件前面的减号表示的意思是异步写文件。
rsyslog
上边也说了,对于现在的很多发行版都默认采用了 rsyslog,rsyslog 是 syslog 的升级版,这里我们看些 Facility 和 Serverity
rsyslog 通过 Facility 概念来定义日志消息的来源,以方便对日志进行分类,facility 有以下几种
kern 内核消息 | |
user 用户级消息 | |
mail 邮件系统消息 | |
datemon 系统服务消息 | |
auth 认证系统消息 | |
syslog 日志系统本身消息 | |
lpr 打印系统消息 | |
authpriv 权限系统消息 | |
corn 定时任务消息 | |
news 新闻系统消息 | |
uucp uucp 系统消息 | |
ftp ftp 系统消息 |
除了日志来源以外,对于同一来源产生的日志消息,还进行了优先级的划分,优先级分为以下几种
Emergency 系统已经不能使用 | |
Alert 必须立即进行处理 | |
Critical 严重错误 | |
Error 错误 | |
Warning 警告 | |
Notice 正常信息,但是较为重要 | |
Informational 正常信息 | |
Debug debug 信息 |
案例:rsyslog+ELK 分析 auth.log
启动 / 停止 / 查看 rsyslog 的状态
在配置 rsyslog 的机器上执行即可
sudo service rsyslog start | |
sudo service rsyslog stop | |
Sudo service rsyslog status |
使用系统的 logger 命令测试 rsyslog 是否工作
在配置 rsyslog 的机器上执行即可
Logger hello world
查看 /var/log/message
[master@localhost log]$ sudo tail -n 1 messages
Sep 29 23:37:00 localhost master: hello word
测试 rsyslog 的性能
使用官方提供的 tcpflood
https://github.com/rsyslog/rsyslog/blob/master/tests/tcpflood.c
rsyslog+elk 做日志收集
1、服务器两台
192.168.197.129 配置 elk OS:RedHat
192.168.197.131 rsyslog 客户端 OS:CentOS7
2、ELK 客户端配置
即 129 这个服务器
rsyslog.conf
input { | |
tcp{port => 5514 | |
type => syslog | |
} | |
udp{port => 5514 | |
type => syslog | |
} | |
} | |
output { | |
stdout {codec=> rubydebug} | |
elasticsearch {hosts => ["192.168.197.129:9200"] | |
} | |
} |
启动 ELK 服务
rsyslog 客户端配置
即 131 这个服务器
sudo vim /etc/rsyslog.conf
找到下边的一段,去掉注释:
# provides UDP syslog reception | |
# module(load="imudp") | |
# input(type="imudp" port="5514") | |
# provides TCP syslog reception | |
# module(load="imtcp") | |
# input(type="imtcp" port="5514") |
如下:
# provides UDP syslog reception | |
module(load="imudp") | |
input(type="imudp" port="5514") | |
# provides TCP syslog reception | |
module(load="imtcp") | |
input(type="imtcp" port="5514") |
最后添加一行(elk 所在机器的 ip 和监听的端口)
*.* @192.168.197.129:5514
重启 rsyslog 服务
sudo service rsyslog restart
测试
在 rsyslog 所在客户端执行
logger -p info“hello, remote rsyslog”
部署 ELK 的服务器终端查看 Elasticsearch 的输出
kibana 的 web 展示界面可以看到
当然我们也可以执行一些其他的命令
ssh localhost
输入正确的密码,在终端可以监测到:
ssh localhost 输入错误的密码:
根据这种情况我们就可以针对登录日志做出相应的分析
这里的 logstash 中的 rsyslog.conf 文件也可以这样写
input { | |
syslog{port => 5514 | |
type => syslog | |
} | |
} | |
output { | |
stdout {codec=> rubydebug} | |
elasticsearch {hosts => ["192.168.197.129:9200"] | |
} | |
} |
这个时候在 rsyslog 的服务器中执行
logger -p info“hello, remote rsyslog”
END
————————————– 分割线 ————————————–
CentOS 上配置 rsyslog 客户端用以远程记录日志 http://www.linuxidc.com/Linux/2015-02/112989.htm
CentOS 6.3 下利用 Rsyslog+LogAnalyzer+MySQL 部署日志服务器 http://www.linuxidc.com/Linux/2013-07/86956.htm
使用 rsyslog mysql 和 logAnalyzer 的日志服务器 http://www.linuxidc.com/Linux/2012-09/70717.htm
Rsyslog 配置及使用教程 http://www.linuxidc.com/Linux/2015-02/113614.htm
RHEL5.4 部署中央日志服务器之 rsyslog+loganalyzer http://www.linuxidc.com/Linux/2010-12/30801.htm
————————————– 分割线 ————————————–
Rsyslog 的详细介绍 :请点这里
Rsyslog 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-10/135851.htm
