ELK日志系统之使用Rsyslog快速方便的收集Nginx日志
常规的日志收集方案中Client端都需要额外安装一个Agent来收集日志,例如logstash、filebeat等,额外的程序也就意味着环境的复杂,资源的占用,有没有一种方式是不需要额外安装程序就能实现日志收集呢?Rsyslog就是你要找的答案!
Rsyslog
Rsyslog是高速的日志收集处理服务,它具有高性能、安全可靠和模块化设计的特点,能够接收来自各种来源的日志输入(例如:file,tcp,udp,uxsock等),并通过处理后将结果输出的不同的目的地(例如:mysql,mongodb,elasticsearch,kafka等),每秒处理日志量能够超过百万条。
Rsyslog作为syslog的增强升级版本已经在各linux发行版默认安装了,无需额外安装。
收集Nginx日志
ELK通过Rsyslog收集日志流程图如下:
- 处理流程为:Nginx --syslog–> Rsyslog --omkafka–> Kafka --> Logstash --> Elasticsearch --> Kibana
- Nginx产生日志通过syslog系统服务传给Rsyslog服务端,Rsyslog接收到日志后通过omkafka模块将日志写入Kafka,Logstash读取Kafka队列然后写入Elasticsearch,用户通过Kibana检索Elasticsearch里存储的日志
- Rsyslog服务系统自带无需安装,所以整个流程中客户端不需要额外安装应用
- 服务端虽然Rsyslog也已安装,但默认没有omkafka模块,如果需要Rsyslog写入Kafka需要先安装这个模块
- omkafka模块在rsyslog v8.7.0之后的版本才支持,所以需要先通过
rsyslogd -v
命令查看rsyslog版本,如果版本较低则需要升级
Rsyslog升级
防爬虫,详细内容请关注微信公众号【运维咖啡吧】查看
添加omkafka模块
防爬虫,详细内容请关注微信公众号【运维咖啡吧】查看
Rsyslog收集nginx日志
Client端Nginx配置
防爬虫,详细内容请关注微信公众号【运维咖啡吧】查看
Server端Rsyslog配置
防爬虫,详细内容请关注微信公众号【运维咖啡吧】查看
Server端logstash配置
防爬虫,详细内容请关注微信公众号【运维咖啡吧】查看
联调测试
配置完成后分别重启rsyslog服务和nginx服务,访问nginx产生日志
1.查看kafka是否有正常生成topic
# bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181 __consumer_offsets rsyslog_nginx
2.查看topic是否能正常接收日志
# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic rsyslog_nginx {"host": "domain.com","server_addr": "172.17.0.2","http_x_forwarded_for":"58.52.198.68","remote_addr":"10.120.89.84","time_local":"28/Aug/2018:14:26:00 +0800","request_method":"GET","request_uri":"/","status":200,"body_bytes_sent":1461,"http_referer":"-","http_user_agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36","upstream_addr":"-","upstream_status":"-","upstream_response_time":"-","request_time":0.000}
3.kibana添加index,查看Elasticsearch中是否有数据,如果前两步都正常,kibana搜不到index或index没有数据,多半是index名字写错了之类的基础问题,仔细检查
kibana查询展示
-
打开Kibana添加
rsyslog-nginx-*
的Index,并选择timestamp,创建Index Pattern
-
进入Discover页面,可以很直观的看到各个时间点请求量的变化,根据左侧Field实现简单过滤,例如我们想查看所有访问状态为404的uri,可以点击request_uri和status后边的add,这两项的内容将出现在右侧,然后点击status下边404状态码后边的加号,则只查看状态为404的请求,点击上方auto-refresh可以设置页面自动刷新时间
-
通过各种条件的组合查询可以实现各种各样的需求,例如每秒请求、带宽占用、异常比例、慢响应、TOP IP、TOP URL等等各种情况,并且可以通过Visualize很方便的将这些信息绘制图标,生成Dashboard保存
写在最后
- Nginx的access log绝对是网站的一个宝藏,通过日志量的变化可以知道网站的流量情况,通过对status状态的分析可以知道我们提供服务的可靠性,通过对特定活动url的追踪可以实时了解活动的火爆程度,通过对某些条件的组合查询也能为网站运营提供建议和帮助,从而使我们的网站更友好更易用
- Rsyslog服务的单点问题可以通过部署多个Rsyslog服务过三层负载来保证高可用,不过以我们的经验来说rsyslog服务还是很稳定的,跑了一年多,每分钟日志处理量在20w左右,没有出现过宕机情况,不想这么复杂的话可以写个check rsyslog服务状态的脚本跑后台,挂了自动拉起来
- 整个过程中我们使用了UDP协议,第一是因为Nginx日志的syslog模式默认支持的就是UDP协议,翻了官网没找到支持TCP的方式,我想这也是考虑到UDP协议的性能要比TCP好的多,第二也考虑到如果使用TCP遇到网络不稳定的情况下可能会不停的重试或等待,影响到Nginx的稳定。对于因为内容过长超过以太网数据帧长度的问题暂时没有遇到
如果你觉得文章对你有帮助,请转发分享给更多的人。如果你觉得读的不尽兴,推荐阅读以下文章:
阅读更多- ELK日志系统之使用Rsyslog快速方便的收集Nginx日志
- ELK日志系统之使用Rsyslog快速方便的收集Nginx日志
- 使用Docker构建ELK Docker集群日志收集系统
- 使用Docker快速部署ELK分析Nginx日志实践(二)
- ELK学习2_用Kibana和logstash快速搭建实时日志查询、收集与分析系统
- elk系统搭建并收集nginx日志-主要步骤
- ELK日志服务器的快速搭建并收集nginx日志 推荐
- ELK收集Nginx日志,使用grok正则表达式(二)
- ELK学习2_用Kibana和logstash快速搭建实时日志查询、收集与分析系统
- 最简单的系统日志收集方式 elk + rsyslog客户端
- ELK日志收集系统调研(四) -- 入门学习资源索引
- 新版本logstash+elasticsearch+redis+nginx 日志收集系统搭建
- 使用elk+redis搭建nginx日志分析平台
- logstash结合rsyslog,收集系统日志
- ELK日志收集系统调研(三) -- LogStash常用配置
- rsyslog收集nginx日志配置 推荐
- 用Kibana和logstash快速搭建实时日志查询、收集与分析系统
- 用Kibana和logstash快速搭建实时日志查询、收集与分析系统
- 利用Rsyslog集中收集系统日志和用户操作记录以及相关处理方法 推荐