在 log_by_lua* 收集到的数据如何存储到 redis ?

127 views
Skip to first unread message

三角形小于零

unread,
Jun 9, 2019, 6:11:44 AM6/9/19
to openresty
我的需求是统计一些请求相关数据,因为 1.不想因为让统计代码侵入到正常请求流程, 2.部分数据在 log_by_lua* context 之前无法收集到, 所以我希望在 log_by_lua* 阶段收集到的数据存储到 redis 。

但是在 log_by_lua* 阶段无法使用 cosocket 相关 api. 所以我在 log_by_lua* 阶段收集到的数据存储到 share dict 中,打算用 ngx.timer 定时把 share dict 中的数据存储到 redis。只是貌似 timer 一般在 init_worker_by_lua* 阶段定义并且执行,而这个阶段也无法使用 init_worker_by_lua*。

有想过两个方法,但是觉得对于简单的统计需求来说都太麻烦了:

1. 还是把收集到的数据存到 share dict 里,但是提供一个接口供外部访问 share dict,让接口来存储数据。
2. log_by_lua* 阶段把数据 print 到 log 中,让 log 分析工具来处理。

请教一下有没有简单一点的方式?

liu degui

unread,
Jun 9, 2019, 9:29:30 PM6/9/19
to openresty
楼主该问题找到解决方法了么?能否分享下?

在 2019年6月9日星期日 UTC+8下午6:11:44,三角形小于零写道:

Frank Yu

unread,
Jun 9, 2019, 10:11:09 PM6/9/19
to open...@googlegroups.com
落日志,直接处理日志就行可以吧。连 redis 都不需要了。

liu degui <stalli...@gmail.com> 于2019年6月10日周一 上午9:29写道:
--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
---
您收到此邮件是因为您订阅了Google网上论坛上的“openresty”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到openresty+...@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/openresty/744965dc-b7ef-4dde-a724-a76e0210c427%40googlegroups.com

Ming

unread,
Jun 10, 2019, 2:23:01 AM6/10/19
to openresty


三角形小于零 <chenxin...@gmail.com> 于2019年6月9日周日 下午6:11写道:
我的需求是统计一些请求相关数据,因为 1.不想因为让统计代码侵入到正常请求流程, 2.部分数据在 log_by_lua* context 之前无法收集到, 所以我希望在 log_by_lua* 阶段收集到的数据存储到 redis 。

但是在 log_by_lua* 阶段无法使用 cosocket 相关 api. 所以我在 log_by_lua* 阶段收集到的数据存储到 share dict 中,打算用 ngx.timer 定时把 share dict 中的数据存储到 redis。只是貌似 timer 一般在 init_worker_by_lua* 阶段定义并且执行,而这个阶段也无法使用 init_worker_by_lua*。


看上去 ngx.timer.every 可以满足你的需求

有想过两个方法,但是觉得对于简单的统计需求来说都太麻烦了:

1. 还是把收集到的数据存到 share dict 里,但是提供一个接口供外部访问 share dict,让接口来存储数据。
2. log_by_lua* 阶段把数据 print 到 log 中,让 log 分析工具来处理。

请教一下有没有简单一点的方式?

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
---
您收到此邮件是因为您订阅了Google网上论坛上的“openresty”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到openresty+...@googlegroups.com

三角形小于零

unread,
Jun 11, 2019, 3:36:50 AM6/11/19
to openresty
ngx.timer.every 应该写在哪个阶段,init_worker_by_lua* 吗?init_worker_by_lua* 这个阶段也是不允许调用 cosocket api 的。

在 2019年6月10日星期一 UTC+8下午2:23:01,WenMing写道:


三角形小于零 <chenxin...@gmail.com> 于2019年6月9日周日 下午6:11写道:
我的需求是统计一些请求相关数据,因为 1.不想因为让统计代码侵入到正常请求流程, 2.部分数据在 log_by_lua* context 之前无法收集到, 所以我希望在 log_by_lua* 阶段收集到的数据存储到 redis 。

但是在 log_by_lua* 阶段无法使用 cosocket 相关 api. 所以我在 log_by_lua* 阶段收集到的数据存储到 share dict 中,打算用 ngx.timer 定时把 share dict 中的数据存储到 redis。只是貌似 timer 一般在 init_worker_by_lua* 阶段定义并且执行,而这个阶段也无法使用 init_worker_by_lua*。


看上去 ngx.timer.every 可以满足你的需求

有想过两个方法,但是觉得对于简单的统计需求来说都太麻烦了:

1. 还是把收集到的数据存到 share dict 里,但是提供一个接口供外部访问 share dict,让接口来存储数据。
2. log_by_lua* 阶段把数据 print 到 log 中,让 log 分析工具来处理。

请教一下有没有简单一点的方式?

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 open...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 open...@googlegroups.com

归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
---
您收到此邮件是因为您订阅了Google网上论坛上的“openresty”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到openresty+unsubscribe@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/openresty/c7321c44-8fb7-4499-975d-d78f82bdfc0f%40googlegroups.com

Ming

unread,
Jun 11, 2019, 6:07:43 AM6/11/19
to openresty
ngx.timer.every 不属于 cosocket API,是可以写在 init_worker_by_lua 中的。 然后你在 timer 里面调用 cosocket API

三角形小于零 <chenxin...@gmail.com> 于2019年6月11日周二 下午3:36写道:
ngx.timer.every 应该写在哪个阶段,init_worker_by_lua* 吗?init_worker_by_lua* 这个阶段也是不允许调用 cosocket api 的。

在 2019年6月10日星期一 UTC+8下午2:23:01,WenMing写道:
三角形小于零 <chenxin...@gmail.com> 于2019年6月9日周日 下午6:11写道:
我的需求是统计一些请求相关数据,因为 1.不想因为让统计代码侵入到正常请求流程, 2.部分数据在 log_by_lua* context 之前无法收集到, 所以我希望在 log_by_lua* 阶段收集到的数据存储到 redis 。

但是在 log_by_lua* 阶段无法使用 cosocket 相关 api. 所以我在 log_by_lua* 阶段收集到的数据存储到 share dict 中,打算用 ngx.timer 定时把 share dict 中的数据存储到 redis。只是貌似 timer 一般在 init_worker_by_lua* 阶段定义并且执行,而这个阶段也无法使用 init_worker_by_lua*。


看上去 ngx.timer.every 可以满足你的需求

有想过两个方法,但是觉得对于简单的统计需求来说都太麻烦了:

1. 还是把收集到的数据存到 share dict 里,但是提供一个接口供外部访问 share dict,让接口来存储数据。
2. log_by_lua* 阶段把数据 print 到 log 中,让 log 分析工具来处理。

请教一下有没有简单一点的方式?

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 open...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 open...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
---
您收到此邮件是因为您订阅了Google网上论坛上的“openresty”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到openresty+...@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/openresty/c7321c44-8fb7-4499-975d-d78f82bdfc0f%40googlegroups.com

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com

归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
---
您收到此邮件是因为您订阅了Google网上论坛上的“openresty”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到openresty+...@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/openresty/639df605-dc47-45e8-9885-af2b898dfa2c%40googlegroups.com
Reply all
Reply to author
Forward
0 new messages