{"value":"## 介绍\n\nApache SkyWalking 是一个开源的 APM 工具,用于监控分布式系统和排除故障,特别是为微服务、云原生和基于容器(Docker、Kubernetes、Mesos)的架构而设计。它提供分布式跟踪、服务网格可观测性、指标聚合和可视化以及警报。\n\n在本文中,我将介绍如何在 AWS EKS 和 RDS/Aurora 上快速设置 Apache SkyWalking,以及几个示例服务,监控服务以观察 SkyWalking 本身。\n\n## 先决条件\n\n- AWS 账号\n- [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)\n- [Terraform](https://www.terraform.io/downloads.html)\n- [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)\n\n我们可以使用 AWS Web 控制台或 CLI 来创建本教程所需的所有资源,但是当出现问题时,它可能过于繁琐且难以调试。因此,在本文中,我将使用 Terraform 创建所有 AWS 资源、部署 SkyWalking、示例服务和负载生成器服务 (Locust)。\n\n## 架构\n\n演示架构如下:\n\n![image.png](https://dev-media.amazoncloud.cn/4010f03a108145aa868d6201e6080ddc_image.png)\n\n如架构图所示,我们需要创建以下 AWS 资源:\n\n- EKS 集群\n- RDS 实例或 Aurora 集群\n\n听起来很简单,但背后有很多东西,比如 VPC、子网、安全组等。你必须正确配置它们以确保 EKS 集群可以连接到 RDS 实例 / Aurora 集群,否则 SkyWalking 不会不工作。幸运的是,Terraform 可以帮助我们自动创建和销毁所有这些资源。\n\n我创建了一个 Terraform 模块来创建本教程所需的所有 AWS 资源,您可以在 [GitHub 存储库](https://github.com/kezhenxu94/oap-load-test/tree/main/aws)中找到它。\n\n## 创建 AWS 资源\n\n首先,我们需要将 GitHub 存储库克隆 `cd` 到文件夹中:\n\n```bash\ngit clone https://github.com/kezhenxu94/oap-load-test.git\n```\n\n然后,我们需要创建一个文件 `terraform.tfvars` 来指定 AWS 区域和其他变量:\n\n```bash\ncat > terraform.tfvars <<EOF\naws_access_key = \"\"\naws_secret_key = \"\"\ncluster_name = \"skywalking-on-aws\"\nregion = \"ap-east-1\"\ndb_type = \"rds-postgresql\"\nEOF\n```\n\n如果您已经配置了 AWS CLI,则可以跳过 `aws_access_key` 和 `aws_secret_key` 变量。要使用 RDS postgresql 安装 SkyWalking,请将 `db_type` 设置为 `rds-postgresql`,要使用 Aurora postgresql 安装 SkyWalking,请将 `db_type` 设置为 `aurora-postgresql`。\n\n您可以配置许多其他变量,例如标签、示例服务计数、副本等,您可以在 variables.tf 中找到[它们](https://github.com/kezhenxu94/oap-load-test/blob/main/aws/variables.tf)。\n\n然后,我们可以运行以下命令来初始化 Terraform 模块并下载所需的提供程序,然后创建所有 AWS 资源:\n\n```bash\nterraform init\nterraform apply -var-file=terraform.tfvars\n```\n\n键入 `yes` 以确认所有 AWS 资源的创建,或将标志 `-auto-approve` 添加到 `terraform apply` 以跳过确认:\n\n```bash\nterraform apply -var-file=terraform.tfvars -auto-approve\n```\n\n现在你需要做的就是等待所有 AWS 资源的创建完成,这可能需要几分钟的时间。您可以在 AWS Web 控制台查看创建进度,也可以查看 EKS 集群内部服务的部署进度。\n\n## 产生流量\n\n除了创建必要的 AWS 资源外,Terraform 模块还将 SkyWalking、示例服务和 Locust 负载生成器服务部署到 EKS 集群。\n\n您可以访问 Locust Web UI 以生成到示例服务的流量:\n\n```bash\nopen http://$(kubectl get svc -n locust -l app=locust-master -o jsonpath='{.items[0].status.loadBalancer.ingress[0].hostname}'):8089\n```\n\n该命令将浏览器打开到 Locust web UI,您可以配置用户数量和孵化率以生成流量。\n\n## 观察 SkyWalking\n\n您可以访问 SkyWalking Web UI 来观察示例服务。\n\n首先需要将 SkyWalking UI 端口转发到本地:\n\n```bash\nkubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=skywalking -l component=ui -o name) 8080:8080\n```\n\n然后在浏览器中打开 http://localhost:8080 访问 SkyWalking web UI。\n\n## 观察 RDS/Aurora\n\n您也可以访问 RDS/Aurora web 控制台,观察 RDS/Aurora 实例 / Aurora 集群的性能。\n\n## 试验结果\n\n### 测试 1:使用 EKS 和 RDS PostgreSQL 的 SkyWalking\n\n#### 服务流量\n\n![image.png](https://dev-media.amazoncloud.cn/0106d211a1c647e2a098445342c4b542_image.png)\n![image.png](https://dev-media.amazoncloud.cn/eaa22e73a2964c22975dbd2e0f8fe4b6_image.png)\n\n#### RDS 性能\n\n![image.png](https://dev-media.amazoncloud.cn/0e5ec41a0eff4a7bb3a199eb66b7aa8c_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/ce6a0d76e7b942ddaaf2e79f3a5aadaf_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/a4e02114b8bd41b2b2c06dfd2b9265d7_image.png)\n\n#### SkyWalking 性能\n\n![image.png](https://dev-media.amazoncloud.cn/820e206c7d0e43e19449b038b5ee3aa6_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/fab22f4f206a4ad785826e07bdedc309_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/d49476326f644bbe94d08d084ed232d9_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/9fb1e28c23eb4fe48c57fcf8072f01a2_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/340bc3b43a41457898f015a5fc3fbabd_image.png)\n\n### 测试 2:使用 EKS 和 Aurora PostgreSQL 的 SkyWalking\n\n#### 服务流量\n\n![image.png](https://dev-media.amazoncloud.cn/0f97fe2b524448f9b88d332724a69923_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/aa57abd49f1241be838cd1338906bbcf_image.png)\n\n#### RDS 性能\n\n![image.png](https://dev-media.amazoncloud.cn/2db358e93708482a97f1e1e4ab7c3990_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/63967bb0e87547ea879372efcd8d36e4_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/90f825e00038460892ce4ab329af56d9_image.png)\n\n#### SkyWalking 性能\n\n![image.png](https://dev-media.amazoncloud.cn/72d85f50068d4b2090c88c71ce9f6afd_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/8f34982d66014548923914f3e932da95_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/93a4e375c8b1423fadbee54f6d1f1be5_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/cdf6006ed1074316a1eddb4b97b1fba4_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/701a23ffc69c42a1b17202bcbf38089f_image.png)\n\n## 清理\n\n完成演示后,您可以运行以下命令销毁所有 AWS 资源:\n\n```bash\nterraform destroy -var-file=terraform.tfvars -auto-approve\n```\n","render":"<h2><a id=\"_0\"></a>介绍</h2>\n<p>Apache SkyWalking 是一个开源的 APM 工具,用于监控分布式系统和排除故障,特别是为微服务、云原生和基于容器(Docker、Kubernetes、Mesos)的架构而设计。它提供分布式跟踪、服务网格可观测性、指标聚合和可视化以及警报。</p>\n<p>在本文中,我将介绍如何在 AWS EKS 和 RDS/Aurora 上快速设置 Apache SkyWalking,以及几个示例服务,监控服务以观察 SkyWalking 本身。</p>\n<h2><a id=\"_6\"></a>先决条件</h2>\n<ul>\n<li>AWS 账号</li>\n<li><a href=\"https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html\" target=\"_blank\">AWS CLI</a></li>\n<li><a href=\"https://www.terraform.io/downloads.html\" target=\"_blank\">Terraform</a></li>\n<li><a href=\"https://kubernetes.io/docs/tasks/tools/#kubectl\" target=\"_blank\">kubectl</a></li>\n</ul>\n<p>我们可以使用 AWS Web 控制台或 CLI 来创建本教程所需的所有资源,但是当出现问题时,它可能过于繁琐且难以调试。因此,在本文中,我将使用 Terraform 创建所有 AWS 资源、部署 SkyWalking、示例服务和负载生成器服务 (Locust)。</p>\n<h2><a id=\"_15\"></a>架构</h2>\n<p>演示架构如下:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/4010f03a108145aa868d6201e6080ddc_image.png\" alt=\"image.png\" /></p>\n<p>如架构图所示,我们需要创建以下 AWS 资源:</p>\n<ul>\n<li>EKS 集群</li>\n<li>RDS 实例或 Aurora 集群</li>\n</ul>\n<p>听起来很简单,但背后有很多东西,比如 VPC、子网、安全组等。你必须正确配置它们以确保 EKS 集群可以连接到 RDS 实例 / Aurora 集群,否则 SkyWalking 不会不工作。幸运的是,Terraform 可以帮助我们自动创建和销毁所有这些资源。</p>\n<p>我创建了一个 Terraform 模块来创建本教程所需的所有 AWS 资源,您可以在 <a href=\"https://github.com/kezhenxu94/oap-load-test/tree/main/aws\" target=\"_blank\">GitHub 存储库</a>中找到它。</p>\n<h2><a id=\"_AWS__30\"></a>创建 AWS 资源</h2>\n<p>首先,我们需要将 GitHub 存储库克隆 <code>cd</code> 到文件夹中:</p>\n<pre><code class=\"lang-bash\">git clone https://github.com/kezhenxu94/oap-load-test.git\n</code></pre>\n<p>然后,我们需要创建一个文件 <code>terraform.tfvars</code> 来指定 AWS 区域和其他变量:</p>\n<pre><code class=\"lang-bash\">cat > terraform.tfvars <<EOF\naws_access_key = ""\naws_secret_key = ""\ncluster_name = "skywalking-on-aws"\nregion = "ap-east-1"\ndb_type = "rds-postgresql"\nEOF\n</code></pre>\n<p>如果您已经配置了 AWS CLI,则可以跳过 <code>aws_access_key</code> 和 <code>aws_secret_key</code> 变量。要使用 RDS postgresql 安装 SkyWalking,请将 <code>db_type</code> 设置为 <code>rds-postgresql</code>,要使用 Aurora postgresql 安装 SkyWalking,请将 <code>db_type</code> 设置为 <code>aurora-postgresql</code>。</p>\n<p>您可以配置许多其他变量,例如标签、示例服务计数、副本等,您可以在 variables.tf 中找到<a href=\"https://github.com/kezhenxu94/oap-load-test/blob/main/aws/variables.tf\" target=\"_blank\">它们</a>。</p>\n<p>然后,我们可以运行以下命令来初始化 Terraform 模块并下载所需的提供程序,然后创建所有 AWS 资源:</p>\n<pre><code class=\"lang-bash\">terraform init\nterraform apply -var-file=terraform.tfvars\n</code></pre>\n<p>键入 <code>yes</code> 以确认所有 AWS 资源的创建,或将标志 <code>-auto-approve</code> 添加到 <code>terraform apply</code> 以跳过确认:</p>\n<pre><code class=\"lang-bash\">terraform apply -var-file=terraform.tfvars -auto-approve\n</code></pre>\n<p>现在你需要做的就是等待所有 AWS 资源的创建完成,这可能需要几分钟的时间。您可以在 AWS Web 控制台查看创建进度,也可以查看 EKS 集群内部服务的部署进度。</p>\n<h2><a id=\"_69\"></a>产生流量</h2>\n<p>除了创建必要的 AWS 资源外,Terraform 模块还将 SkyWalking、示例服务和 Locust 负载生成器服务部署到 EKS 集群。</p>\n<p>您可以访问 Locust Web UI 以生成到示例服务的流量:</p>\n<pre><code class=\"lang-bash\">open http://$(kubectl get svc -n locust -l app=locust-master -o jsonpath='{.items[0].status.loadBalancer.ingress[0].hostname}'):8089\n</code></pre>\n<p>该命令将浏览器打开到 Locust web UI,您可以配置用户数量和孵化率以生成流量。</p>\n<h2><a id=\"_SkyWalking_81\"></a>观察 SkyWalking</h2>\n<p>您可以访问 SkyWalking Web UI 来观察示例服务。</p>\n<p>首先需要将 SkyWalking UI 端口转发到本地:</p>\n<pre><code class=\"lang-bash\">kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=skywalking -l component=ui -o name) 8080:8080\n</code></pre>\n<p>然后在浏览器中打开 http://localhost:8080 访问 SkyWalking web UI。</p>\n<h2><a id=\"_RDSAurora_93\"></a>观察 RDS/Aurora</h2>\n<p>您也可以访问 RDS/Aurora web 控制台,观察 RDS/Aurora 实例 / Aurora 集群的性能。</p>\n<h2><a id=\"_97\"></a>试验结果</h2>\n<h3><a id=\"_1_EKS__RDS_PostgreSQL__SkyWalking_99\"></a>测试 1:使用 EKS 和 RDS PostgreSQL 的 SkyWalking</h3>\n<h4><a id=\"_101\"></a>服务流量</h4>\n<p><img src=\"https://dev-media.amazoncloud.cn/0106d211a1c647e2a098445342c4b542_image.png\" alt=\"image.png\" /><br />\n<img src=\"https://dev-media.amazoncloud.cn/eaa22e73a2964c22975dbd2e0f8fe4b6_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"RDS__106\"></a>RDS 性能</h4>\n<p><img src=\"https://dev-media.amazoncloud.cn/0e5ec41a0eff4a7bb3a199eb66b7aa8c_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/ce6a0d76e7b942ddaaf2e79f3a5aadaf_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/a4e02114b8bd41b2b2c06dfd2b9265d7_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"SkyWalking__114\"></a>SkyWalking 性能</h4>\n<p><img src=\"https://dev-media.amazoncloud.cn/820e206c7d0e43e19449b038b5ee3aa6_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/fab22f4f206a4ad785826e07bdedc309_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/d49476326f644bbe94d08d084ed232d9_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/9fb1e28c23eb4fe48c57fcf8072f01a2_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/340bc3b43a41457898f015a5fc3fbabd_image.png\" alt=\"image.png\" /></p>\n<h3><a id=\"_2_EKS__Aurora_PostgreSQL__SkyWalking_126\"></a>测试 2:使用 EKS 和 Aurora PostgreSQL 的 SkyWalking</h3>\n<h4><a id=\"_128\"></a>服务流量</h4>\n<p><img src=\"https://dev-media.amazoncloud.cn/0f97fe2b524448f9b88d332724a69923_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/aa57abd49f1241be838cd1338906bbcf_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"RDS__134\"></a>RDS 性能</h4>\n<p><img src=\"https://dev-media.amazoncloud.cn/2db358e93708482a97f1e1e4ab7c3990_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/63967bb0e87547ea879372efcd8d36e4_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/90f825e00038460892ce4ab329af56d9_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"SkyWalking__142\"></a>SkyWalking 性能</h4>\n<p><img src=\"https://dev-media.amazoncloud.cn/72d85f50068d4b2090c88c71ce9f6afd_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/8f34982d66014548923914f3e932da95_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/93a4e375c8b1423fadbee54f6d1f1be5_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/cdf6006ed1074316a1eddb4b97b1fba4_image.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/701a23ffc69c42a1b17202bcbf38089f_image.png\" alt=\"image.png\" /></p>\n<h2><a id=\"_154\"></a>清理</h2>\n<p>完成演示后,您可以运行以下命令销毁所有 AWS 资源:</p>\n<pre><code class=\"lang-bash\">terraform destroy -var-file=terraform.tfvars -auto-approve\n</code></pre>\n"}