我的需求是统计一些请求相关数据,因为 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 分析工具来处理。
请教一下有没有简单一点的方式?