本文介紹如何通過Nginx正向代理接入ARMS應用監控。
使用場景
對于非阿里云環境(包括線下數據中心以及其他云環境)的應用,只要網絡能和ARMS服務端連通,就可以接入ARMS應用監控。您可以選擇通過公網接入,或者通過專線接入,具體接入方式請參見應用監控接入概述。
如果應用所在的環境只有特定的機器可以連通公網,就需要通過正向代理進行中轉。對于大多數用戶而言,正向代理通常是不需要的,但金融系統等對網絡安全性有特殊要求場景,可能存在這樣的需求。
前提條件
已自行部署Nginx,并確保Nginx的穩定運行。
該方案目前暫不支持4.x版本探針,請先使用3.x版本探針接入,探針版本說明請參見探針(Java Agent)版本說明。
架構方案
如圖所示,在用戶所在IDC,業務應用部署區的Java應用無法訪問公網,只有DMZ區域具備訪問公網的能力,可以通過如下兩個步驟進行正向代理轉發:
在DMZ區域部署Nginx,參見本文提供的Nginx配置腳本,將ARMS探針上報的監控數據轉發到阿里云ARMS服務端。
修改ARMS探針的配置,將DMZ區域部署的Nginx作為監控數據上報目標。
Nginx配置
步驟一:安裝部署Nginx
請先確保Nginx已經安裝,并具備公網訪問能力,Nginx的安裝方式請參見Nginx官方文檔。
步驟二:獲取ARMS接入點信息
根據需要接入的阿里云地域,獲取ARMS接入點域名,以及ACM引擎的IP地址。具體操作,請參見Java應用監控網絡配置。
步驟三:獲取阿里云賬號ID
獲取阿里云賬號ID,具體操作,請參見如何查看阿里云賬號ID?。
步驟四:修改Nginx配置文件
修改/etc/nginx/site-available/default文件,添加如下內容:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name arms-service;
ignore_invalid_headers off;
# 請將數字部分替換為步驟三中獲取的阿里云賬號ID
location /1672753017****** {
# 請將URL替換為步驟二中獲取的持續剖析接入點
proxy_pass http://arms-profiling-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com;
}
location / {
# 請將URL替換為步驟二中獲取的調用鏈接入點
proxy_pass http://arms-dc-sz.aliyuncs.com;
}
}
server {
listen 9990;
server_name arms-meta;
ignore_invalid_headers off;
location / {
# 請將URL替換為步驟二中獲取的調用鏈接入點
proxy_pass http://arms-dc-sz.aliyuncs.com:9990;
}
}
server {
listen 80;
server_name arms-metrics;
ignore_invalid_headers off;
location / {
# 請將URL替換為步驟二中獲取的指標接入點
proxy_pass http://cn-shenzhen.arms.aliyuncs.com;
}
}
server {
listen 8080;
server_name arms-acm;
ignore_invalid_headers off;
location / {
return 200 $server_addr;
}
}
server {
listen 8848;
server_name arms-acm;
ignore_invalid_headers off;
location / {
# 請將IP地址替換為步驟二中獲取的ACM引擎IP地址
proxy_pass http://139.196.XX.XX:8848;
}
}
修改/etc/nginx/nginx.conf文件,添加如下內容:
stream {
upstream arms-arthas {
# 請將URL替換為步驟二中獲取的調用鏈接入點
server arms-dc-sz.aliyuncs.com:9092;
}
server {
listen 9092;
proxy_pass arms-arthas;
}
}
ARMS探針配置
目前ARMS正向代理模式支持手動接入的探針,以及通過Kubernetes環境自動接入的探針。請先參考手動安裝探針和通用Kubernetes環境自動安裝探針文檔安裝探針。探針安裝完成之后,數據上報目標為ARMS的公網接入點,由于Java應用所在的環境沒有公網訪問能力,所以暫時無法接入ARMS。參考本節內容,將探針的數據上報目標修改為Nginx之后,即可成功接入ARMS。
手動安裝模式
步驟一:修改hosts
修改應用所在機器的/etc/hosts文件,添加如下內容,請將IP地址替換為Nginx的IP地址。
10.0.0.201 arms-service
10.0.0.201 arms-metrics
10.0.0.201 arms-meta
10.0.0.201 arms-acm
# 將域名中的cn-shanghai替換為對應的阿里云地域代碼
10.0.0.201 arms-profiling-cn-shanghai.arms-service
步驟二:修改探針配置文件
在探針目錄下找到arms-agent.config配置文件,修改如下配置項對應的值:
# 如下5個配置項在所有版本的ARMS探針中都存在
profiler.collector.trace.endpoint=arms-service
profiler.collector.metric.endpoint=arms-metrics
profiler.collector.meta.endpoint=arms-meta
profiler.collector.endpoint=arms-service
profiler.acm.endpoint=arms-acm
# 探針版本為3.2.0+新增了profiler.oss.endpoint配置項,需要將此配置的值修改為arms-service
profiler.oss.endpoint=arms-service
Kubernetes環境自動安裝模式
通過容器環境自動接入的探針,需要版本在3.2.0或以上才能使用正向代理模式。如果您的探針版本低于3.2.0,請先升級探針,具體操作,請參見升級ARMS探針。
步驟一:獲取探針配置文件的內容
對于已經自動安裝ARMS探針的Java應用,登錄其中的一個Pod,可以在/home/admin/.opt/ArmsAgent/arms-agent.config路徑找到探針的配置文件,復制其中的內容。
步驟二:創建ConfigMap
針對上一步復制的內容,修改如下配置項對應的值:
profiler.collector.trace.endpoint=arms-service
profiler.collector.metric.endpoint=arms-metrics
profiler.collector.meta.endpoint=arms-meta
profiler.collector.endpoint=arms-service
profiler.acm.endpoint=arms-acm
profiler.oss.endpoint=arms-service
創建名為arms-agent-proxy-mode.config的ConfigMap,填入修改后的內容:
apiVersion: v1
kind: ConfigMap
metadata:
name: arms-agent-proxy-mode.config
data:
arms-agent.config: |-
### arms-agent.config的其他內容復制過來,只修改6個配置項 ####
profiler.collector.trace.endpoint=arms-service
profiler.collector.metric.endpoint=arms-metrics
profiler.collector.meta.endpoint=arms-meta
profiler.collector.endpoint=arms-service
profiler.acm.endpoint=arms-acm
profiler.oss.endpoint=arms-service
### arms-agent.config的其他內容復制過來,只修改6個配置項 ####
步驟三:修改應用YAML
參考以下內容,修改應用所在工作負載的YAML。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-boot-demo
name: spring-boot-demo
spec:
replicas: 1
selector:
matchLabels:
app: spring-boot-demo
template:
metadata:
labels:
app: spring-boot-demo
armsPilotAutoEnable: "on"
armsPilotCreateAppName: spring-boot-demo
spec:
hostAliases:
# 將此IP替換為Nginx的IP
- ip: "192.168.172.171"
hostnames:
- "arms-service"
- "arms-metrics"
- "arms-meta"
- "arms-acm"
# 將域名中的cn-shanghai替換為對應的阿里云地域代碼
- "arms-profiling-cn-shenzhen.arms-service"
containers:
- env:
# 將探針配置指向修改后的新的配置文件
- name: ARMS_CONFIG_FILE
value: /home/admin/.opt/ArmsAgent/arms-agent-proxy-mode.config
image: >-
registry.cn-hangzhou.aliyuncs.com/ahas_apsara_adp/spring-boot-demo:wt-test
imagePullPolicy: Always
name: spring-boot-demo
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 512Mi
volumeMounts:
# 作為新的配置文件,掛載到探針目錄
- mountPath: /home/admin/.opt/ArmsAgent/
name: arms-agent-proxy-mode
imagePullSecrets:
- name: wt-test
volumes:
# 將configMap映射成名為arms-agent-proxy-mode的volume
- configMap:
name: arms-agent-proxy-mode.config
name: arms-agent-proxy-mode
上述YAML中,帶注釋的部分是需要關注并修改的內容。
確認接入成功
重啟應用,等待2分鐘左右,若您的應用出現在ARMS控制臺的 頁面中且有數據上報,則說明接入成功。