Nginx Tracing 最佳实践_nginx 实战教程
off999 2025-10-23 09:41 24 浏览 0 评论
简介
Nginx 是一款流行的高性能 HTTP 和反向代理服务器,以轻量、稳定、并发处理能力强著称。对 Nginx 进行链路追踪,能在分布式系统中清晰呈现请求经 Nginx 转发后的完整路径,这不仅让问题定位更高效,可快速锁定延迟、错误等问题发生的具体环节,还能通过追踪其处理请求的耗时、转发延迟等数据,精准识别系统性能瓶颈,为优化资源分配和架构设计提供依据。
观测云
观测云采集器 DataKit 支持 ddtrace 采集插件,能够接收 nginx-datadog 模块的链路数据并在平台统一分析。
部署 DataKit
登录观测云控制台,点击「集成」-「DataKit」-「Linux」,复制安装命令在服务器执行即可。
开启 ddtrace 插件
按照以下步骤操作:
# 进入 ddtrace 采集器配置文件目录
cd /usr/local/datakit/conf.d/ddtrace
# 开启配置文件
cp ddtrace.conf.sample ddtrace.conf
# 重启 Datakit
datakit service -R
配置 Nginx
按照以下步骤操作:
1、访问
https://github.com/DataDog/nginx-datadog/releases ,在 Assets 中寻找并下载与当前处理器架构和版本匹配的模块 ngx_http_datadog_module-<处理器架构>-<版本>.so.tgz;
2、执行以下操作创建模块路径,假设 Nginx 安装在默认路径,配置 Nginx:
# 配置 Nginx
cd /usr/local/nginx
mkdir modules && cd $_
3、上传第一步中下载的模块至 modules 目录,执行以下命令解压,解压后将获得
ngx_http_datadog_module.so 文件:
tar xzvf ngx_http_datadog_module-<处理器架构>-<版本>.so.tgz
4、在配置文件
/usr/local/nginx/conf/nginx.conf 的最顶部加载模块,以在 HTTP 上下文(上下文概念请参考“配置上下文和配置项” 章节)中进行配置为例,注释中包含详细说明:
# 加载模块
load_module modules/ngx_http_datadog_module.so;
worker_processes 1;
events {
worker_connections 1024;
}
http {
# 配置 Datakit URL
datadog_agent_url http://localhost:9529;
# 配置服务名称
datadog_service_name nginx-demo;
# 配置环境名称
datadog_environment test;
# 配置版本名称
datadog_version 1.0.0;
# 配置采样率 0-1.0
datadog_sample_rate 1.0;
# 配置标签
datadog_tag foo bar;
include mime.types;
default_type application/octet-stream;
# 通过 $datadog_trace_id 和 $datadog_span_id 为日志加入 trace_id 和 span_id,均为 16 进制
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$datadog_trace_id" "$datadog_span_id"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
该模块默认开启从请求中提取追踪上下文,默认支持 tracecontext 和 datadog 两种协议,可通过如下配置增加对 b3 协议的支持:
datadog_propagation_styles=tracecontext datadog b3
效果展示
配置上下文和配置项
nginx-datadog 模块将 Nginx 的配置文件划分为如下上下文区域:
# "main" context
# ...
events {
# ...
}
http {
# "http" context
# ...
server {
# "server" context
# ...
listen 80;
location /ping {
# "location" context
# ...
}
location /auth {
if ($request_method = POST) {
# "if" context
# ...
}
# ...
}
}
}
相同配置项可在不同的上下文区域中配置,例如 datadog_service_name 配置支持 http、server、location 三个不同的上下文区域,如果需要为不同的 server 分别配置服务名称,则可以在 server 上下文中分别配置,完整配置列表参考:
https://github.com/DataDog/nginx-datadog/blob/master/doc/API.md 。
此外,该模块能够支持通过环境变量进行配置,例如为应用增加额外的数据标签,在配置环境变量后启动 Nginx:
export DD_TAGS=layer:proxy,foo:bar
nginx
最终将在数据的 message.meta 中看到定义的标签,可用于配置的环境变量列表参考:
https://docs.datadoghq.com/tracing/trace_collection/library_config/cpp/ 。
自行编译所需版本的模块
datadog-nginx 是一个较新的模块,Github 中官方预编译的版本支持范围有限,因此可使用容器化构建的方式编译所需版本。执行以下命令,构建 Nginx 所需的模块:
mkdir -p $HOME/workspace/nginx-datadog-build && cd $_
git clone https://github.com/DataDog/nginx-datadog.git
cd nginx-datadog/
# 拉取项目中引用的子模块
git submodule update --init --recursive
# 查看最新版本
git tag
# 检出到最新 tag
git checkout v1.6.2
# 确认当前检出的标签
git status
# 根据需求替换 platform、ARCH、NGINX_VERSION
# 以 Nginx 版本 1.27.1 为例,构建 amd64 架构的模块
# 注意:
# 构建过程中容器内部会拉取 Github 上的一些仓库,如果因为无法访问 Github 导致构建中断,可为容器增加以下环境变量配置代理:
# - http_proxy=<proxy-addr>
# - https_proxy=<proxy-addr>
docker run --init --rm \
--platform linux/x86_64 \
--env ARCH=x86_64 \
--env BUILD_TYPE=RelWithDebInfo \
--env NGINX_VERSION=1.27.1 \
--env NGINX_SRC_DIR=$HOME/workspace/nginx-datadog-build/nginx-datadog/nginx \
--env WAF=OFF \
--env RUM=OFF \
--env COVERAGE=OFF \
--mount "type=bind,source=$HOME/workspace/nginx-datadog-build/nginx-datadog,destination=/mnt/repo" \
public.ecr.aws/b1o7r7e0/nginx_musl_toolchain:latest \
make -C /mnt/repo build-musl-aux
# 打包制品
cd $HOME/workspace/nginx-datadog-build/nginx-datadog/.musl-build
tar czvf ngx_http_datadog_module-amd64-1.27.1.so.tgz ngx_http_datadog_module.so
注意:
- 模块构建成功并不意味在最终集成时不存在兼容性问题,以在引入模块后执行 nginx -t 命令检查的结果为准;
- 构建配置遵循 nginx-datadog 项目 Makefile 中的变更。
相关推荐
- ie8 ie10浏览器手机版下载(ie8_11浏览器安卓手机版)
-
进入出现提示的网页,点击IE11右边的齿轮,再选添加到兼容性视图列表。网页会刷新一下,就变成IE7方式打开了。试试看。如果你无法下载文件,这个时候你可以把电脑重新启动一下,然后清理一下内存,再打开I...
- 手机破解qq空间相册的方法(手机怎么破解qq空间相册视频教学)
-
没有什么办法,你可以直接询问她吧,既然分手了就不要再纠缠了最好。QQ空间解锁步骤:1、登陆QQ空间,在右上角找到“设置”,把鼠标青放在设置上,不要点击,出现“帮助中心”。2、然后点击“帮助中心”,就会...
- 纯净版的win7旗舰版(win7的纯净版和旗舰版有什么区别)
-
win7系统纯净版,旗舰版并不是同一类概念。主要区别如下:纯净版是win7ghost版本的一种类型,是指该系统就是纯粹的win7系统,未包含任何第三方软件;而旗舰版是win7系统的官方划分的一种类型...
-
- 免费企业邮箱来一个(申请免费的企业邮箱)
-
1.首先,我们登录我们的QQ,然后点击QQ上方的小邮件标识;2.弹出的界面,我们点击下方的企业邮箱;3.弹出的界面,我们点击开通邮箱;4.弹出的界面,我们点击免费版的立即开通;5.然后我们输入相关的信息,最后点击注册;6.最后就注册完成了。...
-
2025-12-24 02:51 off999
- 怎么更新win11(怎么更新win11补丁最快)
-
要更新电脑系统到Windows11,需要满足一定的硬件要求。首先,你需要确保你的电脑符合以下最低硬件要求:-64位处理器或系统架构-4GBRAM-64GB存储空间-DirectX12兼容显卡...
- cpu温度过高原因(cpu温度太高怎么回事)
-
cpu温度过高的原因 1.CPU风扇散热不行。CPU风扇与CPU接触不完全,CPU风扇转速过低,风扇质量不过关,这都是造成CPU温度过高的原因。 2.系统使用CPU占用率100%。系统垃圾过多,开...
- 该内存不能为read不显示桌面
-
运行输入msconfig回车,打开系统配置实用程序,在启动项目中查找一个名为“开机提示出现错误的程序”,如果有将它前面的钩去掉,然后按应用确定。 如果故障依旧,建议先查杀一下木马,修复一下系统试试...
-
- 官方网站注册(playstation官方网站注册)
-
要注册快手网站,首先需要下载并安装快手APP,然后选择注册账号。注册时需要填写手机号码并验证,然后设置用户名和密码。在注册过程中还需要设置头像和填写个人信息,确保信息真实有效。注册完成后,可以开始使用快手APP,浏览、上传视频、与其他用户互...
-
2025-12-24 00:03 off999
- 手机照片删除恢复软件免费版
-
手机照片误删怎么办?在我们日常生活中经常会用到截屏或者相机,我们保存有意义的图片的同时也会留下许多垃圾图片,时间长了,再想清理很容易就会误删手机照片,那么手机照片误删该怎么办呢?今天就给大家分享几个找...
- 如何在国内使用gpt(如何在国内使用推特)
-
需要具备以下两个条件,才能使用gpt35国内版:1.购买相关许可证:gpt35国内版是需要购买相应的许可证才能使用的,需要联系属于该软件产品的销售方,获取合法的许可证。2.安装环境的配备:gpt3...
- google加速器(google加速器官网)
-
需要加速器的。手机谷歌浏览器需要加速器。要运行谷歌浏览器还需要在手机上下载安装一个加速器。谷歌浏览器是一款由Google公司开发的网页浏览器,该浏览器基于其他开源软件撰写,包括WebKit,目标是提升...
- windows7下如何分区(win7怎么系统分区)
-
按照以下步骤进行操作:1.确定您的电脑已经安装Windows7操作系统,并且至少有一个硬盘分区。2.打开“计算机管理”工具。在Windows7中,您可以通过打开“开始菜单”,在搜索框中输入“计...
- android windows7下载(安卓安装win7)
-
1、在电脑桌面上找到电脑的控制面板,点击进入控制面板;2、点击控制面板右上角的“查看方式”下拉菜单中选择“类别”选项;3、接着点击“时钟,语言和区域”选项;4、单击语言下方的“添加语言”;5、左键单击...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
