Apache Skywalking + ElasticSearch 服务搭建及微服务链路追踪应用

本文详细介绍了Apache SkyWalking的分布式链路追踪系统,包括安装Elasticsearch作为存储、配置SkyWalking OAP和Agent、接入Spring Boot与Dubbo应用,以及如何设置认证和访问权限。步骤从安装存储、配置文件到实际应用监控的全过程都有详尽的演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Apache Skywalking是什么

专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM(Application Performance Monitor)系统。Apache Skywalking(Incubator)通过加载探针的方式收集应用调用链路信息,并对采集的调用链路信息进行分析,生成应用间关系和服务间关系以及服务指标。SkyWalking的Agent端使用推送模式,OAP服务器端使用拉取模式。

Apache Skywalking (Incubating)目前支持多种语言,其中包括Java,.Net Core,Node.js和Go语言。其整体架构如下:

  • 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
  • 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  • 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
  • 左部分 SkyWalking UI :负责提供控制台,查看链路等等。

二、安装

1.先安装存储,本次选择了elasticSearch 7.6作为数据存储,除此之外skywalking还支持h2,mysql等。

安装详情请参考文章:ElasticSearch 7安装部署指南 版本是elasticsearch-7.6.1

2.然后我们就可以安装skywalking啦。

官网:
http://skywalking.apache.org/downloads/

历史版本下载地址:
https://archive.apache.org/dist/skywalking/

本次使用的版本为下图所示红框:这种带esX的包增加了对 Elasticsearch X的版本支持

当然这个下载速度是比较慢的,推荐另一个下载地址:https://mirror.bit.edu.cn/apache/skywalking/8.1.0/apache-skywalking-apm-es7-8.1.0.tar.gz 

(1)首先将下载的安装包解压到指定目录:

tar -zxvf apache-skywalking-apm-es7-8.1.0.tar.gz  -C /opt/

(2)修改 skywalking OAP 配置文件(此步比较关键)

cd config
vim application.yml

集群设置,因测试环境使用的单机模式,因此这个部分没有改动

存储器设置,首先设置要使用的storage存储器及版本,本次是"elasticsearch7",如果是elasticsearch6,这里则需要设置成"elasticsearch"

然后在对应的存储器elasticsearch7相关设置下进行namespace设置,这个namespace可以在之前安装elasticSearch时就事先设置好,可通过命令:curl 'http://elastic服务IP:9200' 查询cluster_name

如下图:

而cluster_name默认值是"elasticsearch",想要个性化配置,需要对参数$ELASTICSEARCH/config/elasticsearch.yml中的cluster.name进行设置

(3)启动skywalking

/opt/apache-skywalking-apm-bin-es7/bin/startup.sh

后台打印出以下信息说明启动成功 

访问 http://skywalking服务IP:8080 看一下UI界面,当然此时还没有下图中的服务链路,界面应该是空的,因为我们还没有进行探针设置。

(4)SkyWalking Agent 设置

将 apache-skywalking-apm-bin/agent 目录,拷贝到 Java 应用所在的服务器上。这样,Java 应用才可以配置使用该 SkyWalking Agent。本次测试的例子是spring-boot+dubbo的应用。该微服务环境的搭建在本人另一篇文章(有兴趣可以看看:https://blog.youkuaiyun.com/lihuifen2011/article/details/105099688?spm=1001.2014.3001.5501)进行了详细的描述,这里不再赘述。

现在我们只需要进行如下几步即可实现微服务的监控了:

(4.1)首先复制agent到要加入探针的微服务的某一路径下。因为我们是测试环境,微服务与skywalking在同一台机器上,我偷了个懒,这里直接在同级目录下复制了agent文件

生产环境需要将agent文件夹复制到微服务所在机器合适的路径下。

cd /opt/apache-skywalking-apm-bin-es7/
cp -r agent agent_dubbo_provider

 (4.2)设置微服务名。这将作为监控中该服务的识别名字出现在skywalking前台中

具体位置是在agent文件目录的config文件夹下修改agent.config文件中以下参数

#对agent.config文件进行修改
vim agent_dubbo_provider/config/agent.config

(4.3)配置skywalking服务验证token 

  需要开启agent.config文件中另一个参数项,配了这个参数可以防止未知的agent被监测和链路跟踪

agent.authentication = ${SW_AGENT_AUTHENTICATION:token值}

同样的需要将此token值配置到skywalking oap服务中,具体位置是:

apache-skywalking-apm-bin/config/application.yml里面,receiver-sharing-serverauthentication

receiver-sharing-server:
  default:
    authentication: ${SW_AUTHENTICATION:"token值"}

 全部配置完成后别忘了重启skywalking服务

(4.4)启动微服务

java -javaagent:/opt/apache-skywalking-apm-bin-es7/agent_dubbo_provider/skywalking-agent.jar -jar /opt/dubbo-provider.jar &

微服务启动后先发起微服务间的请求,然后去skywalking控制台看一下效果

以下是微服务与用户间的拓扑结构,非常直观

(5)skywalking配置修改后如何重启服务

列出名字带skywalking的进程,找到带oap的这个就是skywalking服务,kill -9 进程号。然后再参照以下命令启动skywalking

/opt/apache-skywalking-apm-bin-es7/bin/startup.sh

以上就是整个服务搭建过程及应用的说明。在这个过程中,本人也参考了很多大神的文章,在这里也记录一下:

Skywalking安装:
https://www.cnblogs.com/xiaochangwei/p/SkyWalking-install.html
http://www.iocoder.cn/SkyWalking/install/
https://blog.youkuaiyun.com/seashouwang/article/details/111156985
dubbo实践:
1.dubbo例子部署及agent集成
https://blog.youkuaiyun.com/weixin_42528266/article/details/107841478
http://www.iocoder.cn/SkyWalking/How-do-I-use-Skywalking-to-do-tracking-for-the-Dubbo-service/
https://blog.youkuaiyun.com/dyfangdy/article/details/100700400
2.增加了手动追踪某api的方法,需要写代码
https://blog.youkuaiyun.com/weixin_37910453/article/details/90250352
3.Skywalking 怎么监控微服务以及性能分析怎么看,偏重于UI的使用
https://skywalking.apache.org/zh/2019-01-03-monitor-microservice/
https://blog.youkuaiyun.com/qq_31587795/article/details/108233526

(6)对于微服务增加了接口访问权鉴的情况,经验证,不会影响skywalking进行链路追踪。

如何增加基于Filter的微服务接口访问权鉴可以参考这篇文章:https://www.jianshu.com/p/94f145335e5f

(7)关于skywalking用户登录的实现

 skywalking从1.6开始就将用户登录认证这一步移除了,考虑到生产环境的安全需要,本次将采用其他方法实现用户认证后访问UI界面的目的。

主要有以下几种方式:

  • skywalking反编译改动源码并集成CAS登录认证:涉及到对skywalking反编译及源码改动,略复杂。
  • nginx+htpasswd实现登录认证:比较简便,本次采用该方法。

(7.1)首先是安装nginx,这里不再赘述,注意:因htpasswd使用限制,nginx必须安装到skywalking 服务端。

(7.2)linux安装htpasswd指令并新增用户名及密码。参考该篇文章https://blog.youkuaiyun.com/endzhi/article/details/88931176

(7.3)nginx上的配置文件需要修改,具体可参照以下截图:

配置passwd.db文件路径,及登录弹出窗提示信息,并需要指定需要认证的请求及跳转的skywalking web路径

然后执行重新加载nginx配置文件的指令

 ./nginx -s reload

访问http://skywalking服务端IP/skywalking 可看到以下登录界面,由此实现用户登录认证的目的。

htpasswd还可以修改用户密码,删除用户等,密码也进行了MD5加密,比较安全。关于htpasswd的命令可参照这篇文章:https://ipcmen.com/htpasswd

skywalking ui的各种分析指标的解读:https://roombox.xdf.cn/blog/graphical-use-of-skywalking-ui/

<think>我们正在回答用户关于SkyWalking搭建和使用方法的问题。根据引用内容,SkyWalking的整体架构包括Collector、UI和存储设备。搭建时主要关注这三个部分,其中Collector和UI已包含在官方安装包中,因此重点在于配置存储设备(如Elasticsearch)。步骤:1.准备环境:确保已安装Java(SkyWalking要求Java8以上)。2.下载SkyWalking:从官网下载安装包(如apache-skywalking-apm-*.tar.gz)。3.配置存储:修改配置文件,设置存储为Elasticsearch(或其他支持的存储,如H2,但生产环境建议ES)。4.启动SkyWalking后端(Collector)和UI。5.配置应用程序的Agent,以将监控数据发送到Collector。详细步骤:一、安装存储(以Elasticsearch为例):引用[2]提到需要安装ES。建议安装ES6.x或7.x版本(根据SkyWalking版本要求)。安装ES后,确保其运行正常。二、配置SkyWalking使用ES:解压SkyWalking安装包,进入config目录,修改`application.yml`文件:-设置storage选择器为elasticsearch(默认可能是H2,注释掉H2,启用elasticsearch)。-配置elasticsearch的集群节点地址(clusterNodes)、索引名称等。三、启动SkyWalking后端和UI:SkyWalking的启动脚本在bin目录下:-Linux:`bin/startup.sh`-Windows:`bin/startup.bat`这个脚本会同时启动后端(oapService)和前端(webappService)。四、使用SkyWalkingAgent监控应用:在需要监控的应用启动命令中加入SkyWalkingAgent参数。例如:```shelljava-javaagent:/path/to/skywalking-agent/skywalking-agent.jar\-Dskywalking.agent.service_name=your-service-name\-Dskywalking.collector.backend_service=localhost:11800\-jaryour-application.jar```其中:-`-javaagent`:指定agent的jar包路径。-`-Dskywalking.agent.service_name`:设置服务名。-`-Dskywalking.collector.backend_service`:指定Collector的地址(默认11800端口)。五、访问SkyWalkingUI:启动后,通过浏览器访问`http://localhost:8080`(默认端口)查看监控数据。注意事项:-确保Collector的端口(如11800,12800)和UI的端口(8080)不被防火墙阻挡。-多实例部署时,每个实例都需要配置Agent。使用:-在UI上可以查看服务、实例、端点、拓扑图、追踪、性能剖析和告警等信息。-通过拓扑图可以直观了解服务间依赖关系。-追踪功能可以查看具体请求的链路,帮助定位问题。引用说明:[^1]介绍了SkyWalking的架构和搭建重点。[^2]提到了分布式系统中链路跟踪的必要性,并给出了从0开始部署的方法,其中第一步就是安装ES。生成相关问题:1.SkyWalking支持哪些存储后端?2.如何配置SkyWalkingAgent以监控多个服务实例?3.SkyWalking的告警功能如何配置?4.如何自定义SkyWalking的监控指标?5.SkyWalking与其他链路跟踪工具(如Zipkin)相比有什么优势?</think>### SkyWalking搭建与使用方法 #### 一、环境准备 1. **基础依赖** - Java 8+(建议JDK 11) - 存储服务Elasticsearch 7.x(推荐)或 H2(仅测试用) - 下载[最新SkyWalking发布包](https://skywalking.apache.org/downloads/) 2. **存储安装(以Elasticsearch为例)** ```bash # 下载ES 7.x wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.2-linux-x86_64.tar.gz tar -xzf elasticsearch-7.16.2-linux-x86_64.tar.gz cd elasticsearch-7.16.2/ ./bin/elasticsearch -d # 后台启动 ``` #### 二、SkyWalking服务搭建 1. **修改配置文件** 解压SkyWalking包,编辑 `config/application.yml`: ```yaml storage: selector: elasticsearch # 启用ES存储 elasticsearch: nameSpace: "skywalking-es" clusterNodes: "localhost:9200" # ES地址 protocol: http ``` 2. **启动服务端** ```bash bin/startup.sh # Linux启动OAP+UI ``` - **OAP服务**:收集数据(默认端口11800/12800) - **Web UI**:访问 `http://localhost:8080` #### 三、应用监控接入(Java示例) 1. **部署Agent** 复制 `agent/` 目录到目标服务器: ```bash java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \ -Dskywalking.agent.service_name=your-service-name \ # 服务名 -Dskywalking.collector.backend_service=localhost:11800 \ # OAP地址 -jar your-app.jar ``` 2. **配置项说明** | 参数 | 作用 | |---|---| | `agent.service_name` | 服务标识(拓扑图显示) | | `collector.backend_service` | OAP服务地址 | | `logging.level` | Agent日志级别(默认off) | #### 四、核心功能使用 1. **仪表盘** - **服务拓扑图**:可视化微服务依赖关系 - **性能指标**:响应时间、吞吐量、SLA率(如 $ \text{SLA} = \frac{\text{成功请求}}{\text{总请求}} \times 100\% $) - **链路追踪**:查看请求完整路径及耗时 2. **问题排查** - **慢查询分析**:定位SQL或API瓶颈 - **异常统计**:按服务/实例聚合错误日志 - **端点分析**:监控特定API的性能表现 #### 五、生产建议 1. **高可用部署** - OAP集群:修改 `cluster.yml` 配置ZooKeeper协调 - ES集群:配置多节点及分片策略 2. **安全加固** ```yaml # 在application.yml中启用认证 receiver-http: authentication: "your-token" ``` > **注意事项**: > - Agent需匹配JDK版本(如SkyWalking 9.x支持JDK17) > - 跨服务追踪需确保 `trace_id` 透传[^1] > - 存储选择:ES适合生产,H2仅用于测试[^2] [^1]: 分布式链路跟踪需保证请求上下文传递 [^2]: ES提供高可靠存储与检索能力,H2有数据丢失风险
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值