Lua实现日志收集业务

简介: Lua实现日志收集业务

Lua实现日志收集业务


文章目录

Lua

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

OpenResty®

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项

用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。OpenResty 通过lua脚本扩展nginx功能,可提供负载均衡、请求路由、安全认证、服务鉴权、流量控制与日志监控等服务。

OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

关于OpenRestry的学习,可以参考中文社区官网:http://openresty.org/cn/

OpenRestry安装

下载OpenRestry:

wget https://openresty.org/download/openresty-1.11.2.5.tar.gz

解压:

tar -xf openresty-1.11.2.5.tar.gz

安装(进入到解压目录进行安装):

cd openresty-1.11.2.5
./configure --prefix=/usr/local/openresty --with-luajit --without-http_redis2_module --with-http_stub_status_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module
make
make install

软件会安装到/usr/local/openresty,这里面会包含nginx,如下图所示:

配置环境变量:

vi /etc/profile
export PATH=/usr/local/openresty/nginx/sbin:$PATH
source /etc/profile

Lua日志收集实操

使用Lua实现日志收集,并向Kafka发送访问的详情页信息,此时我们需要安装一个依赖组件lua-restry-kafka。关于lua-restry-kafka的下载和使用,可以参考

https://github.com/doujiang24/lua-resty-kafka

日志收集流程

日志收集流程如下:

用户请求/web/items/xxx.html,进入到nginx第1个location中,在该location中向Kafka发送请求日志信息,并将请求中的/web去掉,跳转到另一个location中,并查找本地文件,这样既可以完成日志收集,也能完成文件的访问。

实现步骤

插件配置

插件 lua-restry-kafka 地址:https://github.com/doujiang24/lua-resty-kafka

下载包 lua-resty-kafka-master.zip,我们需要将该文件上传到/usr/local/openrestry目录下,并解压,再配置使用,具体步骤如下:

解压:

unzip lua-resty-kafka-master.zip

配置:

修改nginx.conf,在配置文件中指定lua-resty-kafka的库文件位置:

lua_package_path "/usr/local/openresty/lua-resty-kafka-master/lib/?.lua;;";

配置效果图如下:

日志收集

用户访问一个静态详情页的时候,需要实现日志收集,日志收集采用Lua将当前访问信息发布到Kafka中,因此这里要实现Kafka消息生产者。

我们定义一个消息格式:

{
  "actime": "2020-4-10 9:50:30",
  "uri": "http://192.168.211.137/items/S1235433012716498944.html",
  "ip": "119.123.33.231",
  "token": "Bearer ITHEIMAOOPJAVAITCAST"
}

生产者脚本:

定义好了消息格式后,创建一个生产者,往Kafka中发送静态详情页的访问信息。我们创建一个lua脚本,access.lua用于访问信息日志的信息收集,脚本内容如下:

--引入json解析库
local cjson = require("cjson")
--kafka依赖库
local client = require "resty.kafka.client"
local producer = require "resty.kafka.producer"
--配置kafka的链接地址
local broker_list = {
      { host = "192.168.211.137", port = 9092 }
}
--创建生产者
local pro = producer:new(broker_list,{ producer_type="async"})
--获取IP
local headers=ngx.req.get_headers()
local ip=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr or "0.0.0.0"
--定义消息内容
local logjson = {}
logjson["uri"]=ngx.var.uri
logjson["ip"]=ip
logjson["token"]="Bearer ITHEIMA"
logjson["actime"]=os.date("%Y-%m-%d %H:%m:%S")
--发送消息
local offset, err = pro:send("itemaccess", nil, cjson.encode(logjson))
--页面跳转
local uri = ngx.var.uri
uri = string.gsub(uri,"/web","")
ngx.exec(uri)

nginx配置

按照上面的流程图,我们需要配置nginx的2个location,修改nginx.conf,代码如下:

server {
    listen       80;
    server_name  localhost;
    #/web开始的请求,做日志记录,然后跳转到下面的location
    location /web/items/ {
    content_by_lua_file /usr/local/openresty/nginx/lua/items-access.lua;
    }
    #商品详情页,以/items/开始的请求,直接在详情页目录下找文件
    location /items/ {
    #日志处理
    #content_by_lua_file /usr/local/openresty/nginx/lua/items-access.lua;
    root /usr/local/server/web/;
    }
}

日志收集测试

请求地址:http://192.168.211.106/web/items/static01.html

查看Kafka的itemaccess队列数据:

君子以言有物而行有恒


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5天前
|
存储 监控 Cloud Native
|
监控 网络协议 Java
分布式链路追踪- SkyWalking使用手册
分布式链路追踪- SkyWalking使用手册
957 0
分布式链路追踪- SkyWalking使用手册
|
消息中间件 数据采集 域名解析
数据采集-Lua集成kafka流程跑通|学习笔记
快速学习数据采集-Lua集成kafka流程跑通
413 0
数据采集-Lua集成kafka流程跑通|学习笔记
|
6月前
|
JSON 监控 数据可视化
实时日志分析:通过Golang编写实时日志分析模块,加强公司监控管理软件的日志监控功能
在当今数字化时代,企业面临着庞大而复杂的网络环境,对实时监控和日志分析的需求变得日益迫切。本文将介绍如何使用Golang编写实时日志分析模块,以增强公司监控管理软件的日志监控功能。通过本文的指导,你将能够建立一个定制的实时日志分析系统,更好地监测和管理公司的网络活动。
233 0
|
7月前
|
存储 缓存 Prometheus
统一观测丨使用 Prometheus 监控 Memcached 最佳实践
统一观测丨使用 Prometheus 监控 Memcached 最佳实践
53846 8
|
10月前
|
存储 JavaScript 数据可视化
大型网站重构指南 第1.2部分:Nodejs 系统可观测性 OpenTelemetry+SigNoz
大型网站重构指南 第1.2部分:Nodejs 系统可观测性 OpenTelemetry+SigNoz
657 0
大型网站重构指南 第1.2部分:Nodejs 系统可观测性 OpenTelemetry+SigNoz
|
11月前
|
JSON 数据格式 Python
基于elasticsearch的自定义业务告警的设计思路
基于elasticsearch的自定义业务告警的设计思路
160 0
|
消息中间件 监控 前端开发
前端日志采集方案浅析
在前端部署过程中,通常会使用nginx作为部署服务器,而对于默认的nginx服务来说,其提供了对应的日志记录,可以用于记录服务器访问的相关日志,对于系统稳定性及健壮性监控来说,日志采集、分析等能够提供更加量化的指标性建设,本文旨在简述前端应用及打点服务过程中所需要使用的nginx采集方案。
181 0
|
消息中间件 数据可视化 NoSQL
使用ELK替换业务日志记录
可视化客户端,不是必须安装,如果是公司内部自己用的日志,那么可以直接安装,简化开发流程。 如果是对B业务,需要将日志在业务开发平台,提供给客户查询,则可以不安装Kibana,需要自行开发业务系统,做权限管理、查询Elasticsearch和展示
84 0
使用ELK替换业务日志记录
|
消息中间件 NoSQL Java