亚马逊AWS官方博客
在EKS中使用Apache Skywalking实现应用性能监控
概述
微服务架构和容器服务越来越受欢迎,但分布式结构对系统运维带来了巨大挑战,运维人员很难发现应用系统性能瓶颈的发生点和出现故障的位置。本文中介绍的Apache Skywalking是一款开源软件,用来收集、分析、统计和可视化分布式系统的调用链信息,应用比较广泛,性能比较突出。下面将介绍在EKS上部署Skywalking OAP和UI应用,部署基于Skywalking Java Agent的Springboot示例应用,并进行端到端的演示和功能介绍。
整体实验的架构图如下:
架构图说明:
1.部署EKS集群。新建EKS集群参考https://docs.thinkwithwp.com/eks/latest/userguide/getting-started-eksctl.html
2.在EKS集群中,部署Skywalking Kubernetes,包含Skywalking OAP和UI两个Kubernetes Deployment和Service,其中Skywalking OAP负责接收 Agent 发送的trace和log数据;UI是展示OAP数据的门户。部署参考:https://github.com/apache/skywalking-kubernetes
3.在EKS集群中,部署包含Skywalking Java Agent的Springboot程序。需创建IAM role for service account,授予S3读权限,用于访问S3的功能演示。参考:https://docs.thinkwithwp.com/eks/latest/userguide/iam-roles-for-service-accounts.html
4.在S3创建bucket,并且上传一个测试文件。
5.在Opensearch中,新建domain。
详细步骤说明
1.新建Opensearch Domain
在演示中,采用如下的参考配置:
Network: VPC access
Security Group: 打开80端口,VPC内部IP能访问Opensearch Domain
Fine-grained access control: Disabled
Domain level access policy: Public Access
Require HTTPS for all traffic to the domain: Disabled
Node-to-node encryption: Disabled
新建domain成功后,可以用下面的命令测试domain是否工作正常,其中vpc-xxx.us-east-1.es.amazonaws.com是新建domain的DNS域名。
curl -v http://vpc-xxx.us-east-1.es.amazonaws.com/_cluster/health
2.部署Skywalking Kubernetes
1)安装helm和kubectl
2)部署helm应用
说明:其中elasticsearch.config.host是上一步创建的Opensearch domain的DNS域名。
部署成功后,将返回下面的信息:
NAME: skywalking
LAST DEPLOYED: Tue Apr 5 00:09:31 2022
NAMESPACE: skywalking
STATUS: deployed
通过kubectl get pod -n skywalking命令,查看Skywalking pod是否工作正常,如下显示:
通过kubectl get service -n skywalking命令,获得Skywalking services信息,如下显示:
通过kubectl port-forward svc/skywalking-ui -n skywalking 8080:80命令,可以在浏览器中访问http://127.0.0.1:8080,从而访问skywalking-ui应用。
3.部署Springboot程序
1)Springboot程序示例代码说明
Springboot程序将上传Skywalking日志,和读取S3文件的metadata,参考代码如下:
2)Springboot配置说明
在pom.xml文件中,添加Skywalking日志处理的功能依赖。
在pom.xml文件中,添加访问S3的依赖。
在resources/application.yml文件中,添加logging的配置项
在resources目录下,新建文件logback-spring.xml,添加下面的配置,其中%tid是Skywalking traceid。
3)下载Skywalking Java Agent
下载地址为https://skywalking.apache.org/downloads/
4)生成Docker image和部署Kubernetes APP(springboot-skywalking)
将Springboot程序和Skywalking Java Agent打包成Docker image,image的启动命令为:
java -javaagent:/home/skywalking-agent/skywalking-agent.jar -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking-oap.skywalking.svc.cluster.local:11800 -DSW_AGENT_NAME=springboot-skywalking -jar springboot-skywalking.jar
其中SW_AGENT_COLLECTOR_BACKEND_SERVICES是上一步部署的Skywalking OAP的地址和端口;SW_AGENT_NAME是在Skywalking UI中显示的服务名。
5)访问springboot-skywalking应用
通过kubectl port-forward svc/springboot-skywalking 8888:80命令,可以在浏览器中访问http://127.0.0.1:8888/,从而访问springboot-skywalking应用。
在浏览器中,分别打开http://127.0.0.1:8888/和http://127.0.0.1:8888/aws_s3。
在浏览器中,打开http://127.0.0.1:8080/,查看Skywalking UI的信息。
查看trace信息:
- “GET:/”条目中,可以看到请求http://127.0.0.1:8888/的Duration数值
- 点击右上角的“View Logs”,可以看到这次请求的日志
- “GET:/aws_s3”条目中,可以看到http://127.0.0.1:8888/aws_s3的请求链路,最下面一条是访问S3的请求信息。
- 双击请求S3的条目,可以看到请求的具体信息。
查看整体服务的Topology信息:
4.异常排查
当springboot-skywalking APP没有访问S3授权,再次访问http://127.0.0.1:8888/aws_s3时,可以看到在Skywalking UI中,Trace信息有异常显示。
点击<S3文件>,查看详细信息,看到403的异常代码。
Skywalking Java Agent参数设置介绍
在Java Agent目录中,config/agent.config是Skywalking Java Agent的配置文件,下面列举常用的参数说明:
- 参数sample_n_per_3_secs,可以设置每3秒上传trace的数量,默认是-1,无限制。当系统请求量大时,设置这个参数,可以减少上传的trace数量,从而减少整体系统的压力。
- 参数ignore_suffix,忽略指定后缀请求的trace
- 参数service_name,在Skywalking UI中显示的服务名
- 参数backend_service,指定Skywalking OAP系统的地址和端口
- 参数dir,指定保存Java Agent自身日志的路径
- 参数file_name,指定保存Java Agent自身日志的文件名
- 参数level,设置输出日志的级别
结论
在这篇文章中,介绍了在EKS中如何部署Skywalking OAP和UI服务,部署Opensearch托管服务作为Skywalking的存储,部署包含Skywalking Java Agent的Springboot示例程序和配置文件,并进行了端到端的功能演示,包含查看异常Trace信息,也介绍了Skywalking Java Agent的部分参数说明。
参考资料
- https://docs.thinkwithwp.com/eks/latest/userguide/getting-started-eksctl.html
- https://docs.thinkwithwp.com/eks/latest/userguide/iam-roles-for-service-accounts.html
- https://github.com/apache/skywalking-kubernetes
- https://skywalking.apache.org/
- https://skywalking.apache.org/downloads/
- https://skywalking.apache.org/docs/main/latest/readme/
- https://skywalking.apache.org/docs/main/latest/en/ui/readme/
- https://skywalking.apache.org/docs/skywalking-java/latest/readme/
- https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/supported-list/
- https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/configurations/