随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。
面对以上情况, 我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。这时候分布式追踪系统就该闪亮登场了。
一、分布式追踪系统skywalking
1、什么是分布式追踪?
上图是常见的微服务的框架,4个实例,2个MySQL、1个Redis。实际上它有两次完全不同的请求进来:有一次的一个请求会访问 Redis,再去访问MySQL;另外一个可能走到另外的服务上,然后直接去MySQL。整个分布式追踪的目的是什么?是为了让我们最终在页面上、UI上、和数据上能够复现这个过程。我们要拿到整个完整的链路,包括精确的响应时间,访问的方法、访问的circle,访问的Redis的key等,这些是我们在做分布式追踪的时候需要展现的一个完整的信息。
2、skywalking简介
SkyWalking 是针对分布式系统的 APM 系统,也被称为分布式追踪系统
* 全自动探针监控,不需要修改应用程序代码。查看支持的中间件和组件库列表:https://github.com/apache/incubator-skywalking
* 支持手动探针监控, 提供了支持 OpenTracing 标准的SDK。覆盖范围扩大到 OpenTracing-Java 支持的组件。查看OpenTracing组件支持列表:https://github.com/opentracing-contrib/meta
* 自动监控和手动监控可以同时使用,使用手动监控弥补自动监控不支持的组件,甚至私有化组件。
* 纯 Java 后端分析程序,提供 RESTful 服务,可为其他语言探针提供分析能力。
* 高性能纯流式分析
SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。Skywalking 支持从多个来源和多种格式收集数据:多种语言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘测、Envoy 度量等数据格式。
下面基于Linux环境部署SkyWalking+elasticsearch。
二、部署前的准备工作
1、关闭 selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
sed -i ‘s/SELINUXTYPE=targeted/#&/‘ /etc/selinux/config
setenforce 0
2、安装需要用的工具
yum -y install vim wget java
3、下载SkyWalking和elasticsearch
SkyWalking和elasticsearch都提供编译好的包,下载下来解压后直接使用。
cd /data/
wget https://www-eu.apache.org/dist/skywalking/6.4.0/apache-skywalking-apm-6.4.0.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
注:SkyWalking 6.4.0目前只支持elasticsearch 6.x版本
4、防火墙开放以下端口
firewall-cmd --permanent --add-port=9200/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=11800/tcp
firewall-cmd --permanent --add-port=12800/tcp
firewall-cmd --reload
三、部署elasticsearch
tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz
mv elasticsearch-6.6.2 elasticsearch
修改elasticsearch配置
vim elasticsearch/config/elasticsearch.yml
cluster.name: CollectorDBCluster
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
network.host: 0.0.0.0
http.port: 9200
创建启动用户
useradd els -p 123456
chown -R els:els /data/elasticsearch
修改limit数量,需要重新登陆系统生效
vim /etc/security/limits.conf #添加以下内容
* soft nofile 75535
* hard nofile 75535
修改内核参数vm.max_map_count
vim /etc/sysctl.conf #添加以下内容
vm.max_map_count=262144
执行以下命令生效
sysctl -p
切换到els用户,启动elasticsearch
su - els
/data/elasticsearch/bin/elasticsearch -d
浏览器访问http://192.168.2.211:9200/进行验证
出现以上页面说明elasticsearch安装OK。
四、部署SkyWalking
tar zxvf apache-skywalking-apm-6.4.0.tar.gz
修改SkyWalking配置
vim apache-skywalking-apm-bin/config/application.yml
将h2内容注释掉,启用elasticsearch内容,使用elasticsearch存储数据。
注:nameSpace需要与elasticsearch的cluster.name保持一致
启动SkyWalking
cd apache-skywalking-apm-bin/bin/
./startup.sh
验证,浏览器访问http://192.168.2.211:8080/
能正常访问表示安装OK。
五、Java项目接入
skywalking支持很多项目,比如Java、.net、github、sample等,这里我只讲下Java项目的接入使用,其他项目大家可自行查看官方文档。
修改agent/config/agent.config文件内容,只需要修改以下两行
agent.service_name=${SW_AGENT_NAME:YFW_Java}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.2.211:11800}
注:agent.servicename是你的java项目的名称;collector.backendservice是项目连接skywalking的IP地址和端口号。
将agent打包并上传到java项目服务器上,在java程序启动时添加下面这个参数启动即可。
-javaagent:/yibang/agent/skywalking-agent.jar
注:指定skywalking-agent.jar文件的完整路径
然后将skywalking页面刷新一下,便可看到数据了。
点击“追踪”可以看到详细内容。
原文地址:https://blog.51cto.com/andyxu/2442691