DataDog/nginx-datadog

GitHub: DataDog/nginx-datadog

Datadog 官方维护的 Nginx 动态模块,提供开箱即用的 APM 分布式链路追踪和应用安全防护能力。

Stars: 39 | Forks: 11

Datadog Tracing Nginx [![codecov](https://codecov.io/gh/DataDog/nginx-datadog/graph/badge.svg?token=SZCZI1FAYU)](https://codecov.io/gh/DataDog/nginx-datadog) # Datadog Nginx 模块 本仓库包含 `ngx_http_datadog_module` 的源代码,这是一个 Nginx 模块,用于将 Datadog [APM](https://docs.datadoghq.com/tracing) 和 [Application Security Management](https://docs.datadoghq.com/security/application_security) 集成到 Nginx 中。 ## 用法 1. 从[最新发布版本](https://github.com/DataDog/nginx-datadog/releases)中下载一个 gzip 压缩包,将其解压到 Nginx 查找模块的目录(例如 `/usr/lib/nginx/modules/`)。 2. 在 Nginx 主配置文件(例如 `/etc/nginx/nginx.conf`)的顶部添加以下行: ``` load_module modules/ngx_http_datadog_module.so; ``` 默认情况下,链路追踪(Tracing)会自动添加到所有端点。有关更多信息,请参阅 [API 文档](doc/API.md)。 ## 兼容性 针对以下每种组合:1) Nginx 版本,2) 架构,3) 是否内置 AppSec,都有两个压缩包(实际的 executable module 和单独的调试符号)。主压缩包包含一个文件 `ngx_http_datadog_module.so`,即 Datadog Nginx 模块。 命名规则如下: * `ngx_http_datadog_module--.so.tgz`:不带 AppSec 支持的构建版本。 * `ngx_http_datadog_module-appsec--.so.tgz`:带有 AppSec 支持的构建版本。 支持的架构(``)为 `amd64` 和 `arm64`。 虽然**可能**可以针对较旧版本构建扩展,但这不受保证;特别是 AppSec 构建需要版本 1.21.4 中引入的功能。 ## 默认行为 除非另行配置,`ngx_http_datadog_module` 会为 Nginx 添加以下默认行为: ### 链路追踪 (Tracing) - 连接到位于 `http://localhost:8126` 的 Datadog agent。 - 为每个请求创建一个 span: - 服务名称为 "nginx"。 - 操作名称为 "nginx.request"。 - 资源名称为 `"$request_method $uri"`,例如 "GET /api/book/0-345-24223-8/title"。 - 包含多个 `http.*` [标签](https://github.com/DataDog/nginx-datadog/blob/535a291ce96d8ca80cb12b22febac1e138e45847/src/tracing_library.cpp#L187-L203)。 可以通过 Nginx 配置文件中的 [datadog\_*](doc/API.md) 系列指令或通过[环境变量](https://github.com/DataDog/dd-trace-cpp/blob/main/include/datadog/environment.h)指定自定义配置。 ## 启用 AppSec 要启用 AppSec,除了使用正确的二进制文件(名称中带有 "-appsec" 的发布构件)外,还需要编辑 Nginx 配置: * 设置 `datadog_appsec_enabled on;`。 * 定义一个(或多个)线程池。 * 选择 AppSec 将使用的线程池,可以在全局范围或按 location 进行选择。 有关更多信息,请参阅[文档](doc/API.md)。 ## 构建模块 如果您使用的 Nginx 版本不再受本仓库支持,可以按照以下步骤构建模块。 本仓库对其某些依赖项使用 [git submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules)。为了确保在构建之前所有依赖项都可用或已更新,请运行以下命令: ``` git submodule update --init --recursive ``` ### 前置条件 在构建模块之前,请确保您的环境满足以下要求: - 较新的 C 和 C++ 工具链(`clang` 或 `gcc/g++`)(必须至少支持某些 C++20 特性)。 - make。 - CMake `v3.24` 或更新版本。 - 架构为 `x86_64` 或 `arm64`。 ### 使用 Docker 构建 我们推荐使用 Docker,这可以大大简化各种环境的构建过程。以下是针对不同构建目标的具体命令和选项。 #### 为 Nginx 构建 ``` WAF=ON ARCH=x86_64 NGINX_VERSION=1.27.1 make build-musl ``` 选项: - `WAF=`:启用 (`ON`) 或禁用 (`OFF`) AppSec。 - `ARCH=`:指定 CPU 架构。 - `NGINX_VERSION=`:指定要构建的 Nginx 版本。 Nginx 模块将在 `.musl-build\ngx_http_datadog_module.so` 处生成。 ### 使用 Docker 为 OpenResty 构建 要为 OpenResty 构建模块: ``` WAF=ON ARCH=x86_64 RESTY_VERSION=1.27.1.1 make build-openresty ``` 选项: - `WAF=`:启用 (`ON`) 或禁用 (`OFF`) AppSec。 - `ARCH=`:指定 CPU 架构。 - `RESTY_VERSION=`:指定要构建的 OpenResty 版本。 Nginx 模块将在 `.musl-build\ngx_http_datadog_module.so` 处生成。 ### 使用 Docker 为 Ingress Nginx 构建 要为 [Ingress Nginx](https://github.com/kubernetes/ingress-nginx) 构建模块: ``` WAF=ON ARCH=x86_64 INGRESS_NGINX_VERSION=1.11.2 make build-ingress-nginx ``` 选项: - `WAF=`:启用 (`ON`) 或禁用 (`OFF`) AppSec。 - `ARCH=`:指定 CPU 架构。 - `INGRESS_NGINX_VERSION=`:指定要构建的 Ingress Nginx 版本。 Nginx 模块将在 `.musl-build\ngx_http_datadog_module.so` 处生成。 ## 致谢 本项目主要基于先前的工作。请参阅 [CREDITS.md](CREDITS.md)。
标签:API集成, APM, ASM, Bash脚本, Datadog, Nginx, SRE, Web服务器, 中间件, 偏差过滤, 分布式追踪, 动态链接库, 可观测性, 安全模块, 应用性能监控, 性能分析, 架构可视化, 站点可靠性工程, 请求拦截, 请求追踪