如何在 AWS EKS 和 RDS/Aurora 上运行 Apache SkyWalking

介绍如何在 AWS EKS 和 RDS/Aurora 上快速搭建 Apache SkyWalking。

介绍

Apache SkyWalking 是一个开源的 APM 工具,用于监控分布式系统和排除故障,特别是为微服务、云原生和基于容器(Docker、Kubernetes、Mesos)的架构而设计。它提供分布式跟踪、服务网格可观测性、指标聚合和可视化以及警报。

在本文中,我将介绍如何在 AWS EKS 和 RDS/Aurora 上快速设置 Apache SkyWalking,以及几个示例服务,监控服务以观察 SkyWalking 本身。

先决条件

我们可以使用 AWS Web 控制台或 CLI 来创建本教程所需的所有资源,但是当出现问题时,它可能过于繁琐且难以调试。因此,在本文中,我将使用 Terraform 创建所有 AWS 资源、部署 SkyWalking、示例服务和负载生成器服务 (Locust)。

架构

演示架构如下:

graph LR
    subgraph AWS
        subgraph EKS
          subgraph istio-system namespace
              direction TB
              OAP[[SkyWalking OAP]]
              UI[[SkyWalking UI]]
            Istio[[istiod]]
          end
          subgraph sample namespace
              Service0[[Service0]]
              Service1[[Service1]]
              ServiceN[[Service ...]]
          end
          subgraph locust namespace
              LocustMaster[[Locust Master]]
              LocustWorkers0[[Locust Worker 0]]
              LocustWorkers1[[Locust Worker 1]]
              LocustWorkersN[[Locust Worker ...]]
          end
        end
        RDS[[RDS/Aurora]]
    end
    OAP --> RDS
    Service0 -. telemetry data -.-> OAP
    Service1 -. telemetry data -.-> OAP
    ServiceN -. telemetry data -.-> OAP
    UI --query--> OAP
    LocustWorkers0 -- traffic --> Service0
    LocustWorkers1 -- traffic --> Service0
    LocustWorkersN -- traffic --> Service0
    Service0 --> Service1 --> ServiceN
    LocustMaster --> LocustWorkers0
    LocustMaster --> LocustWorkers1
    LocustMaster --> LocustWorkersN
    User --> LocustMaster

如架构图所示,我们需要创建以下 AWS 资源:

  • EKS 集群
  • RDS 实例或 Aurora 集群

听起来很简单,但背后有很多东西,比如 VPC、子网、安全组等。你必须正确配置它们以确保 EKS 集群可以连接到 RDS 实例 / Aurora 集群,否则 SkyWalking 不会不工作。幸运的是,Terraform 可以帮助我们自动创建和销毁所有这些资源。

我创建了一个 Terraform 模块来创建本教程所需的所有 AWS 资源,您可以在 GitHub 存储库中找到它。

创建 AWS 资源

首先,我们需要将 GitHub 存储库克隆 cd 到文件夹中:

git clone https://github.com/kezhenxu94/oap-load-test.git

然后,我们需要创建一个文件 terraform.tfvars 来指定 AWS 区域和其他变量:

cat > terraform.tfvars <<EOF
aws_access_key = ""
aws_secret_key = ""
cluster_name   = "skywalking-on-aws"
region         = "ap-east-1"
db_type        = "rds-postgresql"
EOF

如果您已经配置了 AWS CLI,则可以跳过 aws_access_keyaws_secret_key 变量。要使用 RDS postgresql 安装 SkyWalking,请将 db_type 设置为 rds-postgresql,要使用 Aurora postgresql 安装 SkyWalking,请将 db_type 设置为 aurora-postgresql

您可以配置许多其他变量,例如标签、示例服务计数、副本等,您可以在 variables.tf 中找到它们

然后,我们可以运行以下命令来初始化 Terraform 模块并下载所需的提供程序,然后创建所有 AWS 资源:

terraform init
terraform apply -var-file=terraform.tfvars

键入 yes 以确认所有 AWS 资源的创建,或将标志 -auto-approve 添加到 terraform apply 以跳过确认:

terraform apply -var-file=terraform.tfvars -auto-approve

现在你需要做的就是等待所有 AWS 资源的创建完成,这可能需要几分钟的时间。您可以在 AWS Web 控制台查看创建进度,也可以查看 EKS 集群内部服务的部署进度。

产生流量

除了创建必要的 AWS 资源外,Terraform 模块还将 SkyWalking、示例服务和 Locust 负载生成器服务部署到 EKS 集群。

您可以访问 Locust Web UI 以生成到示例服务的流量:

open http://$(kubectl get svc -n locust -l app=locust-master -o jsonpath='{.items[0].status.loadBalancer.ingress[0].hostname}'):8089

该命令将浏览器打开到 Locust web UI,您可以配置用户数量和孵化率以生成流量。

观察 SkyWalking

您可以访问 SkyWalking Web UI 来观察示例服务。

首先需要将 SkyWalking UI 端口转发到本地:

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=skywalking -l component=ui -o name) 8080:8080

然后在浏览器中打开 http://localhost:8080 访问 SkyWalking web UI。

观察 RDS/Aurora

您也可以访问 RDS/Aurora web 控制台,观察 RDS/Aurora 实例 / Aurora 集群的性能。

试验结果

测试 1:使用 EKS 和 RDS PostgreSQL 的 SkyWalking

服务流量

Service Traffic Locust Service Traffic SW

RDS 性能

RDS Performance RDS Performance RDS Performance

SkyWalking 性能

SkyWalking Performance SkyWalking Performance SkyWalking Performance SkyWalking Performance SkyWalking Performance

测试 2:使用 EKS 和 Aurora PostgreSQL 的 SkyWalking

服务流量

Service Traffic Locust Service Traffic SW

RDS 性能

RDS Performance RDS Performance RDS Performance

SkyWalking 性能

SkyWalking Performance SkyWalking Performance SkyWalking Performance SkyWalking Performance SkyWalking Performance

清理

完成演示后,您可以运行以下命令销毁所有 AWS 资源:

terraform destroy -var-file=terraform.tfvars -auto-approve