1 APM概述
在云时代微服务架构下应用日益丰富,纷杂的应用异常问题接踵而来。应用运维面临巨大挑战:
- 分布式应用关系错综复杂,应用性能问题分析定位困难,应用运维面临如何保障应用正常、快速完成问题定位、迅速找到性能瓶颈的挑战。
- 应用体验差导致用户流失。运维人员如果无法实时感知并追踪体验差的业务,不能及时诊断应用异常,将严重影响用户体验。
- 业务系统的应用多、分布广,跨系统、跨区域、跨应用的调用频繁,如何降低应用的管理和运维成本,提升应用运维的效率是迫切需要解决的问题。
华为云应用性能管理服务(Application Performance Management,简称APM)帮助运维人员快速发现应用的性能瓶颈,以及故障根源的快速定位,为用户体验保驾护航。无需修改代码,只需为应用安装一个APM Agent,就能够对该应用进行全方位监控,帮助您快速定位出错接口和慢接口、重现调用参数、发现系统瓶颈,从而大幅提升线上问题诊断的效率。目前支持JAVA、Python、Node.js、Go、Php、C++和.Net应用。
2 部署
2.1 部署JAVA示例应用
示例应用包含4个服务,ui服务是入口,其接口如下:
GET /start
GET /readtimeout
示例应用运行在名称为demo的namespace中,因此先创建它:
kubectl create ns demo
demo应用的yaml如下,直接apply到kubernetes集群。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: acme-financial-ui
name: acme-financial-ui
namespace: demo
spec:
replicas: 1
selector:
matchLabels:
app: acme-financial-ui
template:
metadata:
labels:
app: acme-financial-ui
spec:
containers:
- env:
image: swr.cn-south-1.myhuaweicloud.com/migrator/acme-financial-ui:v0.1
name: ui
ports:
- containerPort: 8081
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: acme-financial-ui
name: acme-financial-ui
namespace: demo
spec:
ports:
- name: http
port: 8081
protocol: TCP
targetPort: 8081
selector:
app: acme-financial-ui
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: acme-financial-office
name: acme-financial-office
namespace: demo
spec:
replicas: 1
selector:
matchLabels:
app: acme-financial-office
template:
metadata:
labels:
app: acme-financial-office
spec:
containers:
- env:
image: swr.cn-south-1.myhuaweicloud.com/migrator/acme-financial-office:v0.1
name: office
ports:
- containerPort: 8082
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: acme-financial-office
name: acme-financial-back-office
namespace: demo
spec:
ports:
- name: http
port: 8082
protocol: TCP
targetPort: 8082
selector:
app: acme-financial-office
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: acme-financial-customer
name: acme-financial-customer
namespace: demo
spec:
replicas: 1
selector:
matchLabels:
app: acme-financial-customer
template:
metadata:
labels:
app: acme-financial-customer
spec:
containers:
- env:
image: swr.cn-south-1.myhuaweicloud.com/migrator/acme-financial-customer:v0.1
name: customer
ports:
- containerPort: 8084
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: acme-financial-customer
name: acme-financial-customer
namespace: demo
spec:
ports:
- name: http
port: 8084
protocol: TCP
targetPort: 8084
selector:
app: acme-financial-customer
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: acme-financial-account
name: acme-financial-account
namespace: demo
spec:
replicas: 1
selector:
matchLabels:
app: acme-financial-account
template:
metadata:
labels:
app: acme-financial-account
spec:
containers:
- env:
image: swr.cn-south-1.myhuaweicloud.com/migrator/acme-financial-account:v0.1
name: account
ports:
- containerPort: 8083
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: acme-financial-account
name: acme-financial-account
namespace: demo
spec:
ports:
- name: http
port: 8083
protocol: TCP
targetPort: 8083
selector:
app: acme-financial-account
type: ClusterIP
2.2 创建APM应用
2.3 为JAVA应用注入探针
在华为云kubernetes控制台完成操作即可,在所有deployment上执行相关操作:
等待三分钟,APM应用显示探针都正常,效果如下:
2.4 使用华为云ELB暴露UI服务
创建一个独享型ELB,内网IP地址是10.0.13.177:
创建ingress资源,并关联刚刚创建的ELB实例:
创建ingress完成后,效果如下图所示:
3 浏览器访问测试示例应用
浏览器访问ELB的内网地址:
在APM应用中查看调用链:
在APM应用中查看微服务的指标:
4 小结
本文通过在华为云的实践,介绍运行在kubernetes集群的JAVA应用通过JAVA Agent技术接入APM服务,非常有画面感地让大家知道APM将服务很大程度上变成了白盒,强力辅助程序员发现应用的性能问题。