前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用开源 Byzer 和 JuiceFS 做实时Nginx日志分析

如何使用开源 Byzer 和 JuiceFS 做实时Nginx日志分析

作者头像
用户2936994
发布2022-07-21 14:13:54
5550
发布2022-07-21 14:13:54
举报
文章被收录于专栏:祝威廉祝威廉

要对 Nginx 日志作分析,需要解决两个核心问题:

  1. 日志收集
  2. 日志分析

传统方案

传统方案有两种,一种是大数据领域的方案,一种是运维领域的方案。

运维领域常见的方案是使用 ELK 全家桶, 通过 Logstash 收集,直接写入 ElasticSearch, 配合web插件 Kibana 完成交互分析部分。

这套架构缺点也很明显:

  1. 每个节点要独立部署logstash
  2. ElasticSearch 实时写入会极大的影响读取
  3. ElasticSearch 分析能力有限

第二种是大数据解决方案,使用 flume 收集日志,使用 Kafka作为数据队列,使用 Spark/flink 消费Kafka 将日志写入对象存储。最后,再接一套完整的数据分析工具。

这套架构缺点也比较明显:

  1. 使用的组件很多,每个组件都有比较大的运维压力。
  2. 需要借助大数据相关分析工具,可能需要熟悉大数据体系的东西。

JuiceFS + Byzer 双剑合并方案

日志收集部分,只需要将对象存储通过 JuiceFS 挂载成服务器本地目录,然后直接将 Nginx 日志写入到那个目录即可。

相比传统方案:

  1. 配置,运维简单,组件只要一个JuiceFS 就可以直接完成数据实时收集到对象存储/HDFS
  2. 非常的低碳环保,不需要数据在各个系统倒腾,比如先写到本地,再发送到Kafka,然后再通过流应用收集等等。

大家唯一可能担心的是,Nginx 直接写 JuiceFS 影响NGINX 的正常运行,有两方面可以帮大家减少一些顾虑:

  1. JuiceFS 本身是一个高可用的服务,支持本地写缓存异步上传等特性,而且经过广泛的生产验证。
  2. NGINX 的日志输出是使用异步 IO 来实现的,即使 JuiceFS 出现暂时性的抖动,也基本不影响 NGINX 的正常运行(restart 或 reload 可能会受影响)

数据分析部分,则可以使用 Byzer 来进行分析。Byzer 可以直接读取 JuiceFS 里的日志数据,然后使用 可编程SQL语法 在 Byzer 专属的 Byzer-notebook产品进行分析。

Notebook界面是这样的:

下面是一个实际的 Byzer 代码 分析 Nginx 日志的例子(简单统计,把产生的统计结果作为邮件发送):

代码语言:javascript
复制
load text.`/data/nginx/logs/access_log*` as nginxTable;

-- 日志文件的清洗和统计
select 
  access_host,access_page,count(1) as access_freq 
from (
    select split(value,' ')[2] as access_host,split(value,' ')[7] as access_page 
    from (select * from nginxTable where value is not null)
  )
where 
  access_host !="-"
group by access_host,access_page 
order by access_freq desc
limit 10 as accessTable;

set saveDir="/tmp/access";
set savePath="/tmp/access.csv";

-- 保存PV统计数据为CSV格式的文件
save overwrite accessTable as csv.`${saveDir}` where header="true";

-- 因为在分布式环境运行,我们的文件会按照分区个数保存为多个文件,这里我们进行合并
!hdfs -getmerge /tmp/access/tmp/access.csv;

set EMAIL_TITLE = "Byzer网站访问日志分析"; 
set EMAIL_BODY = '''<div>Hi All,<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日志分析完成,请查收邮件!</div><br/><hr/><div>Thanks,<br/>The Byzer Org</div>''';
set EMAIL_TO = "userAccountNumber@qq.com, userAccountNumber@163.com";

-- 发送附件邮件到指定邮箱
run command as SendMessage.``
where method="mail"
and content="${EMAIL_BODY}"
and from = "userAccountNumber@qq.com"
and to = "${EMAIL_TO}"
and subject = "${EMAIL_TITLE}"
and contentType="text/html"
and attachmentContentType="text/csv"
and attachmentPaths="${savePath}"
and smtpHost = "smtp.qq.com"
and smtpPort="587"
and `properties.mail.smtp.ssl.enable`= "true"
and `userName`="userAccountNumber@qq.com"
and password="***"
;

总结

用户仅仅需要使用 JuiceFS 和 Byzer 就可以完成数据的收集和分析,具有如下有点:

  1. 两个产品都有很好的横向扩展性,云原生,简单易用,支持海量大数据分析
  2. 整套方案只需要 JuiceFS 和 Byzer,运维压力小
  3. JuiceFS 可以轻松收集数据,低碳环保
  4. Byzer 具有强大的分析能力,简单易用,具备完成数据加载,处理,投递等各种能力,也包括AI方面的能力,还提供了易用的开发界面(Byzer-notebook)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 传统方案
  • JuiceFS + Byzer 双剑合并方案
    • 总结
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档