数字化技能提升教程,数字化时代生存宝典

OpenResty日志调试与性能优化教程

浏览:598

OpenResty接入业务后,需要通过日志了解请求情况、定位Lua报错,并分析接口响应缓慢的原因。做好日志配置、超时控制和连接复用,有助于提高排查效率,减少不必要的资源消耗。

一、查看访问日志与错误日志

查看访问日志。

tail -f /usr/local/openresty/nginx/logs/access.log

查看错误日志。

tail -f /usr/local/openresty/nginx/logs/error.log

两类日志的用途有所不同。

  • access.log主要用于查看请求记录。
  • error.log主要用于检查配置错误、Lua报错和运行异常。

排查问题时,可以结合请求发生的时间,对照查看两类日志。

二、在Lua代码中输出日志

需要检查变量或请求信息时,可以使用ngx.log记录日志。

ngx.log(ngx.ERR, "debug user=", user_id, " uri=", ngx.var.request_uri)

该示例记录用户标识和请求地址,便于结合具体请求定位问题。 调试时应控制日志输出量,避免在高并发接口中持续打印大量错误级别日志。

三、自定义访问日志格式

为了分析接口耗时,可以在访问日志中增加请求处理时间、上游响应时间和请求标识等字段。

log_format main '$remote_addr $request $status $body_bytes_sent $request_time $upstream_response_time $http_x_request_id';

access_log logs/access.log main;

其中,$request_time和$upstream_response_time可用于辅助分析慢请求,$http_x_request_id用于记录请求头中的请求标识,方便关联排查。

四、检查并重载配置

修改配置后,先执行语法检查。

sudo /usr/local/openresty/nginx/sbin/nginx -t

确认检查通过,再重载配置。

sudo /usr/local/openresty/nginx/sbin/nginx -s reload

如果检查失败,应先根据输出中的文件路径和行号修正问题,不要直接继续重载。

五、性能优化建议

1. 为外部调用设置超时

访问Redis、MySQL或HTTP服务时,都应设置合理的超时时间,避免请求长时间等待。

2. 缓存高频访问数据

适合缓存的高频数据,可以放入lua_shared_dict,减少重复查询和外部服务调用。

3. 使用连接复用

访问外部服务后,合理使用keepalive复用连接,减少反复建立连接的开销。

4. 控制日志输出量

高并发接口应避免打印大量错误级别日志。临时调试结束后,及时清理不再需要的日志输出。

5. 保持接入层职责清晰

复杂业务逻辑尽量交给后端服务处理,OpenResty层主要负责接入处理,避免承载过多业务计算。

六、常见问题排查思路

  • 请求返回500,先查看error.log,检查是否存在Lua报错或运行异常。
  • 接口响应缓慢,关注访问日志中的request_time和upstream_response_time,结合错误日志继续排查。
  • 配置重载失败,重新执行nginx -t,根据输出中的文件路径和行号定位问题。
  • 磁盘占用增长过快,检查access.log和error.log的大小,确认是否需要配置日志轮转。

相关文章
猜你喜欢