NginxAgent 支持矩阵
仅测试验证了每个大版本的最低小版本号和最大小版本号。
- 使用注意:不支持 reload 命令重启加载探针,有引入第三方模块请自行验证(可用
nginx -V命令输出校验,部分第三方模块可能改动核心源码导致适配出错) - 编译注意事项:探针本质是 nginx 的动态扩展,依赖 nginx 导出的符号表。因此编译参数不能有
-fvisibility-hidden。检查命令:nginx -V | grep fvisibility-hidden - lua 模式:客户根据文档自行嵌码,需要在测试环境验证无问题再上线
- 二次开发:修改过 nginx 源码的二次开发版本生产环境慎用,不在产品支持范围,请自行验证。风险较大,建议先在测试环境验证。
| 项目 | x86、x86_64 | aarch64 | 备注 |
|---|---|---|---|
| 版本 | Nginx v1.13.* ~ v1.28.0 | Nginx v1.13.* ~ v1.28.0 | 1.23 [SINCE SmartAgent-6.10.0] 1.24 ~ 25 [SINCE SmartAgent-7.4.0] 1.26 ~ 27 [SINCE SmartAgent-9.2.2] 1.28.0 [SINCE SmartAgent-9.5.1] 注:不支持 reload 命令重启加载探针 |
| OpenResty v1.13.* ~ v1.19.*、1.21.4.*、1.25.3.*、1.27.1.* | OpenResty v1.13.* ~ v1.27.1.* | JS 注入情况 1.27.1.x(nginx/v1.27.1) -- 支持 1.25.3.x(nginx/v1.25.3) -- 支持 1.21.4.x(nginx/v1.21.4) -- 支持 1.19.3.x(nginx/v1.19.3) -- 支持 1.17.8.x(nginx/v1.17.8) -- 支持 1.15.8.x(nginx/v1.15.8) -- 支持 1.13.6.x(nginx/v1.13.6) -- 不支持 注:不支持 reload 命令重启加载探针 | |
| Tengine v2.3.0 ~ v2.3.2、v2.4.0、v3.1.0 [SINCE SmartAgent-8.4.1] | Tengine v2.3.0 ~ v2.3.2、Tengine-2.4.0、Tengine-3.1.0 [SINCE SmartAgent-8.4.1] | 不支持 JS 注入 注:不支持 reload 命令重启加载探针 | |
| Apisix 2.13.1 | - | ||
| ingress-nginx v0.46.0、0.49.3 [SINCE SmartAgent-9.2.0] | ingress-nginx v0.46.0、0.49.3 [SINCE SmartAgent-9.2.0] | ||
| 应用场景 | 静态资源服务器 | 静态资源服务器 | |
| http_proxy 反向代理 | http_proxy 反向代理 | ||
| fastcgi 反向代理 | fastcgi 反向代理 | ||
| uwsgi 反向代理 | uwsgi 反向代理 | ||
| lua openresty 1.9.15.1 - 1.19.9.1 (nginx-agent-2.2.0 开始,对应 smartagent 6.8.0) | - | ||
| 容器 | docker | docker | |
| cri-o | cri-o | ||
| podman | podman | ||
| 操作系统 | CentOS 7 | CentOS 7.3+、CentOS 8+ | |
| Red Hat 7 | 统信 UOS V20+ | ||
| Ubuntu 20.04 | Kylin Server (V10 Tercel) | ||
| CentOS 5.11 | NeoKylin Server (Chromium) | ||
| CentOS 6.10 | openEuler 20.03+ | ||
| 其他 | JS 注入(需要特定环境) | JS 注入(需要特定环境) |
traceid 追加日志说明 (自 smartagent-7.4.0, nginx-2.6.0 起支持)
支持将 trace 相关信息追加到 access.log 日志中,具体的追加格式取决于 nginx.conf 中配置的 log_format 格式。只有当 access.log 开启写入时(即未使用 access_log off; 配置)才会写入 trace 信息。
新增本地配置支持(自 nginxagent-3.1.0 起):配置项位于 /opt/bonree/apm/nginx/current/conf/bonree_module.conf 文件中的 enableTraceInfoAppendToLog 参数,默认为关闭状态(值为 0)。当设置为开启(值为 1)时,将在日志中添加相应的占位符。如果 web 追加开关关闭,在非 JSON 模式下占位符会显示为"-";如果 web 追加开关开启,则会显示如 "br.traceId=1d779b52211c8b7538e087ebcfe6f7eb br.spanId=b8ec8707ef69d385 br.traceFlag=01" 的信息。
本地配置修改后支持通过 reload 命令重新加载生效。
以下是不同配置下的日志追加格式示例:
1. 不支持注入的情况
只要使用了内置的 combined 格式都不支持 trace 信息注入。
access_log logs/access.log combined;
2. 使用 main 格式的日志配置
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
带 trace 信息的日志输出示例:
192.168.44.1 - - [26/Jan/2024:10:31:14 +0800] "POST /ppinfo.php HTTP/1.1" 200 1916 "-" "PostmanRuntime/7.36.1" "-" "br.traceId=a6a525eecc758d1c1be07e9084cec692 br.spanId=98743c81d74cae8f br.traceFlag=00"
无 trace 信息时的日志输出示例:
192.168.44.1 - - [26/Jan/2024:10:31:14 +0800] "POST /ppinfo.php HTTP/1.1" 200 1916 "-" "PostmanRuntime/7.36.1" "-" "-"
3. 使用 JSON 格式的日志配置(示例1)
log_format json escape=json '{"@timestamp":"$time_iso8601",'
'"server_addr":"$server_addr",'
'"remote_addr":"$remote_addr",'
'"scheme":"$scheme",'
'"request_method":"$request_method",'
'"request_uri": "$request_uri",'
'"request_length": "$request_length",'
'"uri": "$uri",'
'"request_time":$request_time,'
'"body_bytes_sent":$body_bytes_sent,'
'"bytes_sent":$bytes_sent,'
'"status":"$status",'
'"upstream_time":"$upstream_response_time",'
'"upstream_host":"$upstream_addr",'
'"upstream_status":"$upstream_status",'
'"host":"$host",'
'"http_referer":"$http_referer",'
'"http_user_agent":"$http_user_agent" '
' } ';
access_log logs/access.log json;
带 trace 信息的日志输出示例:
{"@timestamp":"2024-01-26T10:32:59+08:00","server_addr":"192.168.44.185","remote_addr":"192.168.44.1","scheme":"http","request_method":"POST","request_uri": "/ppinfo.php","request_length": "329","uri": "/ppinfo.php","request_time":0.002,"body_bytes_sent":1916,"bytes_sent":2256,"status":"200","upstream_time":"0.002","upstream_host":"0.0.0.0:9000","upstream_status":"200","host":"192.168.44.185","http_referer":"","http_user_agent":"PostmanRuntime/7.36.1" ,"bonree_trace":"br.traceId=0d9ded1fa040e88b918448eb8249c47a br.spanId=9938b7f5ce85c49e br.traceFlag=00" }
无 trace 信息时的日志输出示例:
{"@timestamp":"2024-01-26T10:32:59+08:00","server_addr":"192.168.44.185","remote_addr":"192.168.44.1","scheme":"http","request_method":"POST","request_uri": "/ppinfo.php","request_length": "329","uri": "/ppinfo.php","request_time":0.002,"body_bytes_sent":1916,"bytes_sent":2256,"status":"200","upstream_time":"0.002","upstream_host":"0.0.0.0:9000","upstream_status":"200","host":"192.168.44.185","http_referer":"","http_user_agent":"PostmanRuntime/7.36.1" ,"bonree_trace":"" }
4. 使用 JSON 格式的日志配置(示例2)
log_format json escape=json '{ "s":"sdf2" }';
access_log logs/access.log json;
带 trace 信息的日志输出示例:
{ "s":"sdf2", "bonree_trace":"br.traceId=9994383053fb010f6920bbc7e1dba7c9 br.spanId=2802794bff373e64 br.traceFlag=00"}
无 trace 信息时的日志输出示例:
{ "s":"sdf2", "bonree_trace":""}
5. 使用空 JSON 对象的格式
log_format json escape=json '{}';
access_log logs/access.log json;
带 trace 信息的日志输出示例:
{"bonree_trace":"br.traceId=50402067dc69ce99a4747d2251a5c859 br.spanId=1708755a253946b6 br.traceFlag=00"}
无 trace 信息时的日志输出示例:
{"bonree_trace":""}
6. 支持写入到 syslog
access_log syslog:server=unix:/dev/log,tag=nginx,severity=info json;
日志追加逻辑与前述 JSON 格式类似,示例输出在 /var/log/message 中:
Jan 26 10:44:53 localhost journal: localhost.localdomain nginx: {"@timestamp":"2024-01-26T10:44:53+08:00","server_addr":"192.168.44.185","remote_addr":"192.168.44.1","scheme":"http","request_method":"POST","request_uri": "/ppinfo.php","request_length": "329","uri": "/ppinfo.php","request_time":0.002,"body_bytes_sent":1915,"bytes_sent":2255,"status":"200","upstream_time":"0.002","upstream_host":"0.0.0.0:9000","upstream_status":"200","host":"192.168.44.185","http_referer":"","http_user_agent":"PostmanRuntime/7.36.1" ,"bonree_trace":"br.traceId=70cb58b0947d478cbee54c6e275fcfeb br.spanId=7f50335c7efcaf6c br.traceFlag=00" }