通過Jaeger為應用埋點并上報鏈路數據至可觀測鏈路 OpenTelemetry 版后,可觀測鏈路 OpenTelemetry 版即可開始監控應用,您可以查看應用拓撲、調用鏈路、異常事務、慢事務和SQL分析等一系列監控數據。本文介紹如何使用Jaeger埋點并上報應用數據。
前提條件
登錄ARMS控制臺,在左側導航欄單擊接入中心。
在服務端應用區域單擊Jaeger卡片。
在彈出的Jaeger面板中選擇數據需要上報的地域。
說明初次接入的地域將會自動進行資源初始化。
選擇連接方式和上報方式,然后復制接入點信息。
連接方式:若您的服務部署在阿里云上,且所屬地域與選擇的接入地域一致,推薦使用阿里云內網方式,否則選擇公網方式。
上報方式:根據客戶端支持的協議類型選擇HTTP或gRPC協議上報數據。
教程概述
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 版的應用。