教程:使用 NGINX 为应用配置 OpenTelemetry
原文作者:Akash Ananthanarayanan - F5 NGINX 技术营销经理转载来源:NGINX 开源社区
教程概述
- 准备工作
- 部署 NGINX Plus 并安装 OpenTelemetry 模块
- 部署 Jaeger 和 echo 应用
- 在 NGINX 中配置 OpenTelemetry 以进行链路追踪
- 测试配置
准备工作
- Linux/Unix 环境或任何兼容环境
- NGINX Plus 订阅
- 熟悉基本的 Linux 命令行和 JavaScript
- Docker
- Node.js 19.x 或更高版本
- Curl
部署 NGINX Plus 并安装 OpenTelemetry 模块
部署 Jaeger 和 echo 应用
version: '3'
Services:
jaeger:
image: jaegertracing/all-in-one:1.41
container_name: jaeger
ports:
- "16686:16686"
- "4317:4317"
- "4318:4318"
environment:
COLLECTOR_OTLP_ENABLED: true
http-echo:
image: mendhak/http-https-echo
environment:
- HTTP_PORT=8888
- HTTPS_PORT=9999
ports:
- "4500:8888"
- "8443:9999"
$docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
5cb7763439f8 jaegertracing/all-in-one:1.41 "/go/bin/all-in-one-…" 30 hours ago Up 30 hours 5775/udp, 5778/tcp, 14250/tcp, 0.0.0.0:4317-4318->4317-4318/tcp, :::4317-4318->4317-4318/tcp, 0.0.0.0:16686->16686/tcp, :::16686->16686/tcp, 6831-6832/udp, 14268/tcp jaeger
e55d9c00a158 mendhak/http-https-echo "docker-entrypoint.s…" 11 days ago Up 30 hours 8080/tcp, 8443/tcp, 0.0.0.0:8080->8888/tcp, :::8080->8888/tcp, 0.0.0.0:8443->9999/tcp, :::8443->9999/tcp ubuntu-http-echo-1
在 NGINX 中配置 OpenTelemetry 以进行链路追踪
- otel_exporter — 设置 OpenTelemetry 数据的参数,包括 endpoint、interval、batch size 及 batch count。这些参数对成功导出数据至关重要,必须准确定义。
- otel_service_name — 设置 OpenTelemetry 资源的服务名称属性,以方便管理和改进链路追踪。
- otel_trace — 现在只需通过指定一个变量即可启用或禁用 OpenTelemetry 链路追踪,从而灵活地管理链路追踪设置。
- otel_span_name — 默认情况下,OpenTelemetry span 的名称设置为请求的位置名称。值得一提的是,该名称不仅可进行自定义,还能够按需添加变量。
配置示列
http {
keyval "otel.trace" $trace_switch zone=name;
server {
location / {
otel_trace $trace_switch;
otel_trace_context inject;
proxy_pass http://backend;
}
location /api {
api write=on;
}
}
}
location /api {
api write=off;
}
user nginx;
worker_processes auto;
load_module modules/ngx_otel_module.so;
error_log /var/log/nginx debug;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
keyval "otel.span.attr" $trace_attr zone=demo;
keyval_zone zone=demo:64k state=/var/lib/nginx/state/demo.keyval;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include mime.types;
default_type application/json;
upstream echo {
server localhost:4500;
zone echo 64k;
}
otel_service_name nginx;
otel_exporter {
endpoint localhost:4317;
}
server {
listen 4000;
otel_trace on;
otel_span_name otel;
location /city {
proxy_set_header "Connection" "" ;
proxy_set_header Host $host;
otel_span_attr demo $trace_attr;
otel_trace_context inject;
proxy_pass http://echo;
}
location /api {
api write=on;
}
location = /dashboard.html {
root /usr/share/nginx/html;
}
}
}
curl -X POST -d '{"otel.span.attr": "<span attribute name>"}' http://localhost:4000/api/6/http/keyvals/<zone name>
测试配置
HTTP/1.1 200 OK Server: nginx/1.25.3 Date: Wed, 29 Nov 2023 20:25:04 GMT Content-Type: application/json; charset=utf-8 Content-Length: 483 Connection: keep-alive X-Powered-By: Express ETag: W/"1e3-2FytbGLEVpb4LkS9Xt+KkoKVW2I" { "path": "/city", "headers": { "host": "localhost", "connection": "close", "user-agent": "curl/7.81.0", "accept": "*/*", "traceparent": "00-66ddaa021b1e36b938b0a05fc31cab4a-182d5a6805fef596-00" }, "method": "GET", "body": "", "fresh": false, "hostname": "localhost", "ip": "::ffff:172.18.0.1", "ips": [], "protocol": "http", "query": {}, "subdomains": [], "xhr": false, "os": { "hostname": "e55d9c00a158" }, "connection": {}
- demo – Otel — OpenTelemetry span 属性名称
- http.status_code field – 200 — 表示创建成功
- otel.library.name – nginx — OpenTelemetry 服务名称
结语

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
超 10 倍查询加速,N-Gram Index 设计与优化全解析
在数据库和搜索系统的日常应用中,模糊查询与拼写纠错已成为提升用户体验与系统智能化不可或缺的功能。如何在保证查询准确性的同时,实现极致低延迟和低内存消耗? 什么是 N-Gram Index? N-Gram Index 是一种基于字符串切分的倒排索引结构,主要用于模糊匹配、全文检索以及自动补全等场景。这项技术常应用于类似 Elasticsearch 这样的文本搜索引擎,或 AI 数据检索场景中。 其基本原理是将字符串按照长度为 n 的滑动窗口进行切分,得到多个子串,其中 n 被称为 gram。举个例子,比如对字符串 "hello" 进行切分(假设 n=2),则会得到 "he"、"el"、"ll" 和 "lo" 这几个子串。 N-Gram 的基本使用流程是:在插入数据时,将目标列按 n 进行切分;在查询时,也会将 like 查询条件按相同方式切分,最后判断查询子串是否为数据集的子集,从而实现高效匹配。 目前,Databend 作为一款高性能数据湖仓,支持 N-Gram Index 和全文索引(Full-text Index)两种文本索引,可以满足各类文本检索加速需求。全文索引在数据库中是非常...
- 下一篇
深度解析 Cursor(逐行解析系统提示词、分享高效制定 Cursor Rules 的技巧...)
编者按: 我们今天为大家带来的这篇文章,作者的观点是:只有深入理解 AI 编程工具的底层原理和能力边界,才能真正驾驭这些工具,让它们成为提升开发效率的"外挂神器"。 本文从 LLM 的基础工作机制出发,解释了 Cursor 等工具本质上是 VSCode 的复杂封装,通过聊天界面、工具集(如 read_file、write_file 等)和精心设计的提示词来实现智能编程辅助。作者还逐行解析了 Cursor 的系统提示词,分析了其中的工程设计细节。此外,作者还提供了制定高效 Cursor Rules 的具体指导,强调 Cursor Rules 应该像百科词条般详实,而非简单的命令列表。 作者 | Shrivu Shankar 编译 | 岳扬 透彻了解 Cursor[1]、Windsurf[2] 和 Copilot[3] 这类 AI 编程工具的运作原理细节,能大大提升你的开发效率,并让这些工具在不同场景下都更加稳定地工作 ------ 尤其在庞大、复杂的代码库中。当人们难以让 AI 编程工具高效工作时,往往是把它们当成了传统工具来使用,却忽略了一个关键:只有清楚这些工具的先天不足和最佳应对策...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范