一、常见APM概述

华为云 APM 是Application Performance Management的缩写,对应的开源产品有:Pinpoint、SkyWalking、Zipkin、CAT、Xhprof/Xhgui等,华为云的APM就是基于开源的pinpoint二次开发的商业产品。另外对应的几家商业云厂商的产品有阿里云的ARMS(Application Real-Time moniloring Service)、AWS的X-Ray、Azure的Application Insights、Google的stackdriver。

APM产品对比
APM产品对比

从上面的对比图可以看了,华为云和AWS的布局有点类似,产品拆分成了两个,阿里、谷歌、微软都是做成了一个产品(华为的AOM是个一体华的运维平台,里面包含APM的数据,相对更接近ARMS、stackdriver这些产品)。

二、华为云APM实战

本次测试使用的ECS虚拟主机进行测试,所以需要先在Linux主机上安装ICagent程序;如果是CCE容器测试,这部可以省略,只需要在运行容器的时候选择勾选APM就可以了。

安装ICAgent之前,又需要获取AK/SK信息,这个可以在IAM — 用户 — 安全设置项 — 新增访问密钥里进行配置(每个用户只允许配置2个):

huaweicloud-iam-aksk
huaweicloud-iam-aksk

出于安全原因,AK/SK信息只能下载一次,如果丢失或忘记,只能重新再生成。有了这两个信息,可以在Linux下一条指令完成ICAgent的安装:

1curl http://icagent-ap-southeast-1.obs.ap-southeast-1.myhuaweicloud.com/ICAgent_linux/apm_agent_install.sh > apm_agent_install.sh
2REGION=ap-southeast-1
3bash apm_agent_install.sh -ak ak信息 -sk SK信息 -region ap-southeast-1 -projectid 0de61da60f00f3952f87c003fd9cd8f0;

这里为便于查看,我把指令拆分成了三部分,由于这里我使用的香港节点,这里对应是ap-southeast-1。

安装完成后,这里根据华为云官网的最佳实践下载测试代码:

1mkdir /root/testdemo/ && cd /root/testdemo/
2curl -l http://demos.obs.myhuaweicloud.com/demo_install.sh > demo_install.sh && bash demo_install.sh
3
4# 安装运行java程序所需的环境
5yum -y install java-1.8.0-openjdk mariadb-server
6mysql_secure_installation

这里会下载4个demo开头的tar文件,解压开来是四个java程序。其中需要修改第三个程序,即cat application_dao.yml文件,修改里面的数据库连接信息。

修改完成后,在启动应用程序的时候,有两个启动文件:
– start.sh 该文件是不带APM的启动脚本
– start_apminside.sh 该文件是带APM的启动脚本

这个时候直接启动,虽然可以正常打开UI界面,不过登录和操作是不成功的,因为数据库里没有数据,看dao.log也会发现连接不到数据库。官方的实践内容实际上是缺了步骤的,通过源码分析,发现可以增加如下SQL增加对应的表结构、登录用户和测试数据:

 1create database `ShoppingMallDB` default character set utf8 collate utf8_general_ci;
 2
 3use ShoppingMallDB;
 4
 5CREATE TABLE `product_table` (
 6        `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
 7        `name` TEXT NULL,
 8        `price` DOUBLE NULL DEFAULT NULL,
 9        `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
10        PRIMARY KEY (`id`)
11)
12COLLATE='latin1_swedish_ci'
13ENGINE=InnoDB
14AUTO_INCREMENT=5
15;
16
17CREATE TABLE `user_table` (
18        `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
19        `name` TEXT NOT NULL,
20        `password` TEXT NOT NULL,
21        `created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
22        PRIMARY KEY (`id`)
23)
24COLLATE='latin1_swedish_ci'
25ENGINE=InnoDB
26AUTO_INCREMENT=4
27;
28
29CREATE TABLE `payment_table` (
30        `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
31        `productid` TEXT NOT NULL,
32        `userid` TEXT NOT NULL,
33        `created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
34        PRIMARY KEY (`id`)
35)
36COLLATE='latin1_swedish_ci'
37ENGINE=InnoDB
38AUTO_INCREMENT=4
39;
40
41SET GLOBAL event_scheduler = OFF;
42SET GLOBAL event_scheduler = ON;
43
44CREATE EVENT AutoDeleteOlProduct
45
46ON SCHEDULE EVERY '1' HOUR
47  STARTS CURRENT_TIMESTAMP
48  ON COMPLETION PRESERVE
49  DO
50DELETE  FROM ShoppingMallDB.payment_table WHERE created 

当然出于安全考虑,程序也可以不连接数据库的root用户,可以使用其他用户操作,这里新建一个用户:

1use mysql;
2select host, user from user;
3create user apm identified by 'paasapm';
4grant all on ShoppingMallDB.* to apm@'%' identified by 'paasapm' with grant option;
5flush privileges;

三、APM调用链操作

通过华为云帐号控制台进入APM后,会提示“当前为基础版,APM探针默认不采集性能数据,请点击 免费体验 ,或 切换版本 至企业版、专业版。”,由于企业版和专业版会根据探针数量收费,这里只出于测试目的,选择基础版免费体验即可,一次可以免费体验60分钟。

huaweicloud-apm-topology
huaweicloud-apm-topology

从上面图可以看到可以使用链路拓扑、调用追踪、SQL分析、JVM监控分析应用本身的问题。

最后贴下几个云厂商相关云产品的链接页:
AWS x-Ray
AWS cloudwatch
阿里云ARMS
Azure Application Insights(其是Azure Monitor产品的一部分)
stackdriver(新名称叫Operations suite)