通过Jaeger为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后,可观测链路 OpenTelemetry 版即可开始监控应用,您可以查看应用拓扑、调用链路、异常事务、慢事务和SQL分析等一系列监控数据。本文介绍如何使用Jaeger埋点并上报应用数据。
前提条件
教程概述
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器,对其进行跟踪可以帮助我们更好的了解应用服务的运行状况。
当Nginx代理的微服务出现假死现象时,因为采集不到任何数据,所以无法评估造成的影响。借助链路追踪,我们追踪微服务的上游Nginx,并快速统计出假死现象影响的访问量。
在Docker上部署和跟踪Nginx
下载Dockerfile并编译部署。
wget https://arms-apm.oss-cn-hangzhou.aliyuncs.com/demo/nginx-jaeger-docker.tgz tar -xzvf nginx-jaeger-docker.tgz cd nginx-jaeger # 编译docker docker build --rm --tag nginx-jaeger:0.1 .
运行Docker。
docker run --rm -p 80:80 -e "GRPC_HOST=${GRPC_HOST}" -e "GRPC_AUTH=${GRPC_AUTH}" -d jaeger-nginx:0.1
${GRPC_HOST}
和${GRPC_AUTH}
是前提条件中保存的Agent接入点信息。例如:
docker run --rm -p 80:80 -e "GRPC_HOST=tracing-analysis-dc-hz.aliyuncs.com:1883" -e "GRPC_AUTH=123abc@123abc_789abc@456abc}" -d jaeger-nginx:0.1
在ECS上部署和跟踪Nginx
安装Nginx。
下载并解压Nginx源码。
wget http://nginx.org/download/nginx-1.14.2.tar.gz tar -xzvf nginx-1.14.2.tar.gz
编译Nginx源码。
cd nginx-1.14.2 ./configure --with-compat make sudo make install
安装OpenTracing插件。
下载OpenTracing插件并解压。
wget https://github.com/opentracing-contrib/nginx-opentracing/releases/download/v0.7.0/linux-amd64-nginx-1.14.0-ngx_http_module.so.tgz tar -xzvf linux-amd64-nginx-1.14.0-ngx_http_module.so.tgz
拷贝.so文件至Nginx的modules目录。如果不存在该目录则需要先创建。
sudo mkdir /usr/local/nginx/modules sudo cp ngx_http_opentracing_module.so /usr/local/nginx/modules/ngx_http_opentracing_module.so
使用Jaeger进行链路追踪。
下载Jaeger插件并将其拷贝至任意工作目录。
wget https://github.com/jaegertracing/jaeger-client-cpp/releases/download/v0.4.2/libjaegertracing_plugin.linux_amd64.so sudo cp /usr/local/lib/libjaegertracing_plugin.so /usr/local/lib/libjaegertracing.so
配置/usr/local/nginx/conf/nginx.conf文件。
load_module modules/ngx_http_opentracing_module.so; events {} http { opentracing on; opentracing_load_tracer /usr/local/lib/libjaegertracing_plugin.so /etc/jaeger-config.json; server { error_log /var/log/nginx/debug.log debug; listen 80; location ~ { opentracing_operation_name $uri; opentracing_trace_locations off; # 跳转到代理的服务,用户根据需要替换。 proxy_pass http://127.0.0.1:8081; opentracing_propagate_context; } } }
说明详细配置说明,请参见opentracing-contrib配置。
在/etc/jaeger-config.json文件中配置Jaeger参数。
{ "service_name": "nginx", // 配置采样 "sampler": { "type": "const", "param": 1 }, "reporter": { "localAgentHostPort": "localhost:6831" } }
采用以下方法之一配置Jaeger Agent。
若使用自建的Jaeger服务,则下载原生Jaeger Agent,并配置collector.host-port。
nohup ./jaeger-agent --collector.host-port=10.100.**.**:142** 1>1.log 2>2.log &
若使用阿里云的Jaeger托管服务,则下载tracing-analysis-agent,并用以下参数启动Agent,以将数据上报至可观测链路 OpenTelemetry 版。
请将<endpoint>替换成前提条件中保存的Agent接入点信息。请删除页面上显示的接入点信息末尾的“/api/traces”,例如
http://tracing-analysis-dc-sh.aliyuncs.com/adapt_abc123@abc123_efg123@efg123
。# collector.host-port 用于设置网关,网关因地域而异。例如: nohup ./tracing-analysis-agent-linux-amd64 --collector.host-port=<endpoint>
运行Nginx并访问Nginx服务。
sudo /usr/local/nginx/sbin/nginx curl "http://localhost"
在其他环境上部署和跟踪Nginx
从Registry中拉取镜像。
docker pull registry.cn-hangzhou.aliyuncs.com/public-community/jaeger-nginx:0.1
运行Nginx Docker。
docker run --rm -p 80:80 -e "GRPC_HOST=${GRPC_HOST}" -e "GRPC_AUTH=${GRPC_AUTH}" -d registry.cn-hangzhou.aliyuncs.com/public-community/jaeger-nginx:0.1
${GRPC_HOST}
和${GRPC_AUTH}
是前提条件中保存的Agent接入点信息。例如:
docker run --rm -p 80:80 -e "GRPC_HOST=tracing-analysis-dc-hz.aliyuncs.com:1883" -e "GRPC_AUTH=123abc@123abc_789abc@456abc}" -d jaeger-nginx:0.1
访问Nginx页面。
在浏览器访问localhost/nginx.conf或者curl "localhost/nginx.conf"。
查看结果
登录ARMS控制台后,在 页面选择目标应用,查看链路数据。
语言列显示图标的应用为接入应用监控的应用,显示-图标的应用为接入可观测链路 OpenTelemetry 版的应用。