SpringCloud Alibaba微服务运维一 - 集成SkyWalking

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
应用实时监控服务-应用监控,每月50GB免费额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: SpringCloud Alibaba微服务运维一 - 集成SkyWalking

概述


大家都知道在微服务架构下的一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响,如果没有及时处理很有可能会造成整个系统崩溃。

面对以上情况,我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。

本章内容我们来给我们的微服务集成SkyWalking监控,毕竟都2021年了,生产环境应该很少人使用zipkin来作为调用链监控吧。

手动狗头

原来在 "运维监控" 系列文章中已经写过SkyWalking的系列文章,感兴趣的同学可以访问以下链接查看。

http://javadaily.cn/category/devops

这次在微服务系列文章中再写一遍主要是基于两个原因:

  • 原来的版本采用的是SkyWalking6.x,新版本已经到了8.3,版本差异较大。
  • 保持这个系列文章的完整性

版本说明:ElasticSearch7.10.1 + Skywalking8.3

前提条件:准备好一台安装JDK8的虚拟机


ElasticSearch 安装部署


  • 下载

官网的下载链接很慢,这里推荐一个国内下载地址:https://www.newbe.pro/Mirrors/Mirrors-Elasticsearch/

  • 解压缩

将文件上传至服务器目录 /app/elasticsearch并解压

cd /app/elasticsearch
tar -zxvf elasticsearch-7.7.0-linux-x86_64.tar.gz
  • 修改系统内存配置

/etc/sysctl.conf增加如下配置

vm.max_map_count = 655360

/etc/security/limits.conf后面增加如下配置

# End of file
*       soft    memlock   unlimited
*       hard    memlock   unlimited
*       hard    nofile    65536
*       soft    nofile    65536

修改完成后需要使用命令 sysctl -p 重新加载配置

  • 创建ElasticSearch启动用户

ElasticSearch不允许使用root用户启动,所以我们需要创建一个elastic用户用于启动ElasticSearch,并授予用户对应权限。

useradd elastic
chown -R elastic:elastic /app/elasticsearch/elasticsearch-7.10.1


  • 修改es配置/app/elasticsearch/elasticsearch-7.10.1/config/elasticsearch.yml
cluster.name: sw-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]


  • 修改es的JVM参数/app/elasticsearch/elasticsearch-7.10.1/config/jvm.options
-Xms4g
-Xmx4g


  • 切换elastic用户并启动elastic
su elastic  # 切换用户
cd /app/elasticsearch/elasticsearch-7.10.1/bin
# 启动
./elasticsearch
# 后台启动
./elasticsearch -d

这时候会看到如下提示

future versions of Elasticsearch will require Java 11; your Java version from [/app/java/jdk1.8.0_18 1/jre] does not meet this requirement

ElasticSearch7以上版本需要JDK11支持,但是我们系统安装的是JDK8并且环境变量设置的JAVA_HOME也是JDK8。

[root@tymonitor bin]# which java
/app/java/jdk1.8.0_181/bin/java
[root@tymonitor bin]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

「这里需要修改成使用ES自带的JDK,当然如果你装的就是JDK11+的版本下个步骤可以忽略。」

  • 配置elsaticsearch jdk

打开文件 /app/elasticsearch/elasticsearch-7.10.1/bin/elasticsearch-env,修改如下配置

if [ ! -z "$JAVA_HOME" ]; then
  JAVA="$JAVA_HOME/bin/java"
  JAVA_TYPE="JAVA_HOME"
else
  if [ "$(uname -s)" = "Darwin" ]; then
     # macOS has a different structure
   JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
  else
      JAVA="$ES_HOME/jdk/bin/java"
  fi
    JAVA_TYPE="bundled jdk"
fi

修改为:

if [ "$(uname -s)" = "Darwin" ]; then
    # macOS has a different structure
    JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
  else
    JAVA="$ES_HOME/jdk/bin/java"
  fi
  JAVA_TYPE="bundled jdk"
{
  "name" : "node-1",
  "cluster_name" : "sw-application",
  "cluster_uuid" : "AOvOVaqWQ6uWDGQRx1l4nA",
  "version" : {
    "number" : "7.10.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "1c34507e66d7db1211f66f3513706fdf548736aa",
    "build_date" : "2020-12-05T01:00:33.671820Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}


SkyWalking 搭建


下载安装

  • 下载

从官网下载SkyWalking最新版本8.3,由于我们需要使用ES7.x版本所以需要下载ES7的版本。

下载地址:https://skywalking.apache.org/downloads/

版本:apache-skywalking-apm-es7-8.3.0.tar.gz

  • 上传并解压

将下载下来的文件上传至服务器 /app/skywalking/

使用命令解压并重命名文件夹:

tar -zxvf apache-skywalking-apm-es7-8.3.0.tar.gz
mv apache-skywalking-apm-bin-es7/ apache-skywalking-apm


配置

  • 修改UI页面访问端口

修改/app/skywalking/apache-skywalking-apm/webapp/webapp.yml,将默认端口8080修改成其他端口8768

server:
  port: 8768


  • 修改storage模式

SkyWalking默认使用h2作为存储数据库,我们需要替换为elasticsearch7;

storage:
  selector: ${SW_STORAGE:elasticsearch7}


  • 修改elasticsearch7相关配置

修改nameSpace为当前es集群的名称,nameSpace需要与前面ES的配置保持一致;clusterNodes为节点名称

storage:
  elasticsearch7:
    nameSpace: ${SW_NAMESPACE:"sw-application"}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}


  • 启动Skywalking
cd /app/skywalking/apache-skywalking-apm/bin
sh startup.sh
...
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!

启动完成后我们可以通过命令 netstat -aptn 查看端口占用情况

端口占用情况


APM


服务配置


将SkyWalking解压后的 agent文件夹复制到应用服务器,如 /app/service/ltc/skywalking-agent/agent,修改应用服务器的启动命令,在 java -jar 之间增加 -javaagent指令。

如:

java -Xms4g -Xmx4g -javaagent:/app/service/skywalking-agent/agent/skywalking-agent.jar=agent.service_name=auth-service,agent.instance_name=auth-service-01,collector.backend_service=xx.xx.xx.xx:11800

主要配置三个参数

  • agent.service_name=auth-service

「必填」,用于指定服务名称

  • collector.backend_service=xx.xx.xx.xx:11800

「必填」,用于指定后端oap的地址

  • agent.instance_name=auth-service-01

「选填」,用于指定实例名称,如果不指定则在UI图上会显示 UUID@IP的格式

「注意:SpringCloud Gateway接入SkyWalking需要将 /agent/optional-plugins/apm-spring-cloud-gateway-2.x.x-plugin-8.3.0.jar复制到/agent/plugins/目录下。」

将所有服务都加上SkyWalking的探针并启动后,再次访问SKyWalking的UI地址,效果如下:

仪表盘

拓扑图

链路跟踪


以上,希望对你有所帮助!

相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
目录
相关文章
|
2月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
60 2
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
98 1
|
2月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
68 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
56 4
|
15天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
24天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
49 4
|
2月前
|
存储 运维 监控
高效运维:从基础架构到自动化管理的全面指南
【10月更文挑战第11天】 本文将深入探讨如何通过优化基础架构和引入自动化管理来提升企业IT运维效率。我们将从服务器的选择与配置、存储解决方案的评估,到网络的设计与监控,逐一解析每个环节的关键技术点。同时,重点讨论自动化工具在现代运维中的应用,包括配置管理、持续集成与部署(CI/CD)、自动化测试及故障排除等方面。通过实际案例分析,展示这些技术如何协同工作,实现高效的运维管理。无论是IT初学者还是经验丰富的专业人员,都能从中获得有价值的见解和实操经验。
77 1
|
2月前
|
运维 监控 测试技术
构建高效运维体系:从监控到自动化的实践之路
【10月更文挑战第9天】 在当今信息技术飞速发展的时代,运维作为保障系统稳定性与效率的关键角色,正面临前所未有的挑战。本文将探讨如何通过构建一个高效的运维体系来应对这些挑战,包括监控系统的搭建、自动化工具的应用以及故障应急处理机制的制定。我们将结合具体案例,分析这些措施如何帮助提升系统的可靠性和运维团队的工作效率。
53 1