本文介绍如何通过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控制台的 页面中且有数据上报,则说明接入成功。