Nginx探针部署
UniAgent中集成了Nginx探针,支持监控Nginx应用。
兼容性要求
安装探针之前,请确保您的系统满足如下这些条件:
-
Linux 64位操作系统,满足以下列表条件之一:
- RedHat Enterprise Linux (RHEL) 6.0 或更高版本
- CentOS 6.0 或更高版本
- SuSE Linux 10.0或更高版本
- Debian 6.0 ("lenny") 或更高版本
- Ubuntu 9.10 ("Karmic Koala") 或更高版本
- 任何其他内核版本高于2.6.32,GLIBC版本高于2.12的Linux发行版。
-
Nginx需要满足以下条件之一:
- Nginx :1.11.5 - 1.26.1
- Openresty :1.13.6 - 1.25.3
- Tengine :2.3.0 - 3.1.0
- 任何以Nginx或Openresty为基础组件的产品,例如apisix。
以上Nginx版本必须为官方发布版本,如果在官方版本基础上修改过源码,会造成探针无法正常工作。
如果要适配二次开发过的Nginx,必须提供二次开发后的Nginx源码、编译平台类型(目前仅支持x86_64和aarch64 两种,即amd64还是arm64)、编译选项
/path/to/nginx -V和编译后的Nginx签名信息strings /path/to/nginx | grep 8,4,8
安装
Nginx探针集成在了UniAgent包中,需要以root权限安装。
- 下载UniAgent安装脚本并以root权限执行。
sudo sh tingyun-uniagent-版本.sh
- 手工开启Nginx开关。
sudo sed -i -e "s/nginx_enabled.*/nginx_enabled=true/" /opt/tingyun-oneagent/conf/interceptor.conf
- 重启Nginx服务。
sudo systemctl restart nginx
配置
探针配置文件路径为/opt/tingyun-oneagent/conf/nginx.conf。
-
修改探针日志级别:修改
agent_log_level字段,修改后不需要重启Nginx应用即可生效。 -
捕捉HTTP请求头:修改
capture_header字段,目前仅支持配置最多一个HTTP头,修改后不需要重启Nginx应用即可生效。 -
修改Nginx应用命名方式:修改
naming_mode字段,修改后不需要重启Nginx应用即可生效。支持以下几种命名方式:
0 - 按server_name:port命名
1 - 按server_name命名
2 - 按http_host:port命名
3 - 按http_host命名
4 - 按主机IP:port命名
5 - 按主机IP命名其中:
- server_name指的是Nginx自身配置文件内指定的server名称。
- http_host指的是HTTP请求内的域名,如果没有域名则取访问端的IP地址。
- 主机IP指的是当前配置文件内的
host_ip字段的内容,host_ip字段默认为当前主机或Pod的IP地址,也可手工修改为其他想要的内容。
⚠️ 当Nginx配置中一个server段server_name指定了多个名称时,例如以下配置:
server {
listen 80;
server_name www.test.com www1.test.com www2.test.com;
root /usr/share/nginx/html;
}探针只能获取到第一个名称,对于上述例子,只能获取到www.test.com, 即当
naming_mode配置为0时,www.test.com、 www1.test.com、 www2.test.com 3个域名产生的请求均汇总在www.test.com之下如果想将不同的域名拆开,请将
naming_mode配置为2,请求会按照域名:端口进行命名。
功能范围
- 仅支持采集 http/https 协议请求的性能数据
- 不支持采集 gRPC, WebSocket, SMTP, IMAP, POP3 协议请求的性能数据
- 不支持采集 TCP/UDP 层代理的性能,例如 MySQL、Redis、SMTP 等
- 不支持的功能:自定义嵌码、用户溯源、自定义事务命名
开启Web前端性能分析功能
UniAgent 2.5.4.0及以上版本支持通过Nginx探针自动对html页面嵌入JS探针,采集Web前端性能数据。
开启流程为在 "用户体验" -> "Web" -> "应用" 页面点击 "添加应用" 按钮,录入页面应用名称,嵌码方式选择 "APM注入", 选择Nginx对应的后端应用,点击启用即可。
在以下场景,无法嵌入JS探针:
-
非浏览器发起的请求,例如Curl、Wget等工具发起的请求,上游应用利用HttpClient发起的请求
-
后端应用返回给Nginx时内容为压缩时
-
Content-Type不是text/html格式时
-
响应状态码不为200时
-
JS可嵌码位置超过64K时
常见问题
如何查看Nginx探针的日志
-
UniAgent 2.2.2.0及以下版本,Nginx探针没有独立的日志文件,探针将日志输出到Nginx的error日志内,请确认Nginx的error日志路径位置。
-
UniAgent 2.3.0.0及以上版本,Nginx探针日志文件位置为
/opt/tingyun-oneagent/logs/agent/nginx.log。
将 /opt/tingyun-oneagent/conf/nginx.conf 中agent_log_level日志级别设置为DEBUG可以输出调试级别的日志。更改日志级别开关不需要重启Nginx,等待1分钟后会自动生效。
搜索Nginx日志:
tail -f /path/to/nginx/logs/error.log | grep tingyun
如何确认Nginx探针是否成功加载?
-
确认探针版本及支持列表
确认UniAgent版本的版本:
cat /opt/tingyun-oneagent/Version确认UniAgent支持的nginx版本,下面列表为当前探针的支持列表:
grep nginx /opt/tingyun-oneagent/conf/interceptor.conf -
确认UniAgent服务是否正常工作。
sudo systemctl status tingyun-oneagentUniAgent服务状态应该为Active: active (running) 。
sudo cat /etc/ld.so.preload