在微服务应用非常广的今天,面临必要的问题

    一个大型的互联网项目,采用微服务的架构设计,可能保证整个项目的完整运营就需要几十上百个服务的互相协作,那如果某个服务突然宕机或出现死锁等bug,怎么办?这个时候各个服务的维护团组开始互相扯皮了,都一口咬定是XXX的错误,与自己无关,哈哈哈哈哈,这个时候如果通过日志一层一层的去追踪足以把人逼疯了

     1.那怎么快速串联调用的链路,对出现问题的服务进行排查呢?

     2.怎么一目了然的知道各个服务之间的依赖关系?

    3. 一个调用下怎样知道串联的各个服务所消耗性能?

     4.执行顺序谁先谁后?

分布式调用链就是为了解决以上几个问题而生,它主要的作用如下:

1、自动采集各项服务的数据数据,并且监控调用各服务所消耗的性能
2、能分析数据,可以监控完整的调用过程,问题可追踪可复现
3、数据可视化:每个组件的性能可视化,能帮助我们很好地定位系统的瓶颈,及时找出问题所在

这里就搭建Skywalking来示例,当然也有很多链路追踪监控工具

      我这里就用 elasticsearch+skywalking来实现

          当然skywalking也支持其 它配置可选项有H2/MYSQL/elasticsearch7/tidb/influxdb

 配置elasticsearch7非结构型数据存储效率更高

     好了现在就开始搭建吧

  部署前准备   

                 linux服务器 一台

                 Elasticsearch 压缩包  下载Download Elasticsearch | Elastic

                 skywalking   压缩包    下载Downloads | Apache SkyWalking

        linux需要先搭建jdk环境哈

                

我这边是先下载到本地然后通过shell工具上传到linux服务器,你也可以直接wget 压缩包地址 

 类似 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-linux-x86_64.tar.gz

     解压elasticsearch

tar -zxvf elasticsearch-7.14.0-linux-x86_64.tar.gz 

修改config/elasticsearch.yml文件

cluster.name: my-application
node.name: node-1
path.data: /usr/local/data
path.logs: /usr/local/logs
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]

# 需要开启跨域才能给elasticsearch-head,kibana等连接
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

 创建用户组用户并授权

groupadd elsearch

sudo useradd elsearch -g elsearch

passwd elsearch

chown -R elsearch:elsearch elasticsearch-7.14.0

 vi /etc/sysctl.conf

vm.max_map_count=262144

 保存并退出   

:wq

 使之立即生效

 sysctl -p

 

 su - elsearch   //切换用户 需要输入密码的哈,按提示来,就是上面自己设置的

使用elsearch 用户执行 你存放elasticsearch目录下的bin目录里面的elasticsearch文件


./elasticsearch -d

 访问你服务器的ip:9200 能出现以下数据就是部署成功了

 好了到skywalking

再切换回去

su - root

 解压你的skywalking压缩包

 tar -zxvf apache-skywalking-apm-es7-8.5.0.tar.gz 


cd apache-skywalking-apm-bin-es7/

 config/application.yml 这个配置文件要改成我们前面设置的elasticsearch

它默认使用的是H2

    把这个位置修改成这个

storage:
  selector: ${SW_STORAGE:elasticsearch7}

$ bin/oapService.sh
 

 修改 webapp.yml 的端口 默认是8080,很容易被占用冲突

webapp/webapp.yml

 bin/startup.sh

 执行就ok了

成功之后就可以通过你部署的ip+webapp.yml里面配置的端口访问你的skywalking

比如我的就是127.0.0.1:7080 就可以了,当然我这里面已经有内容了是因为我已经使用,你刚启动好的话,里面应该是空白没有内容的

 好了,这skywalking环境是已经搭建好了,那怎么开启链路监控呢?

 

比如我这个demo来说 

 

 我这里idea经过了汉化,不喜欢用汉化的可以找到 VM options: 这个位置把下面内容填充进去

-javaagent:D:\skywalking-agent\skywalking-agent.jar -DSW_AGENT_NAME=demo-client -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

nohup java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=你的服务名  -jar demo.jar > demo.log 2>&1 &

 当然你也可以设置大小-Xms512m -Xmx512m 等等等等

 

 我这里是一个比较简单的demo,所以看起来影响不大,哈哈哈哈,等你几十个服务就可以看到密密麻麻的调用了

哦哦这里必要说一下,

 你用的啥语言就搞啥语言的代理  你执行

 -javaagent:D:\skywalking-agent\skywalking-agent.jar -DSW_AGENT_NAME=demo-client -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

是需要

 

对应的 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐