使用SkyWalking+elasticsearch实现全链路监控

随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。

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

一、分布式追踪系统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

时间: 2024-08-01 04:54:52

使用SkyWalking+elasticsearch实现全链路监控的相关文章

SpringBoot集成Zipkin实现分布式全链路监控

目录 Zipkin 简介 Springboot 集成 Zipkin 安装启动 zipkin 版本说明 项目结构 工程端口分配 引入 Maven 依赖 配置文件.收集器的设置 编写 Controller 发送请求进行测试 Springboot 启动类 运行分析 核心概念 Zipkin 简介 Zipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency proble

鹰眼系统;全链路监控系统;分布式监控系统

有一些大公司的开源方案: https://www.jianshu.com/p/a125bea43abe 阿里的鹰眼系统: https://cn.aliyun.com/aliware/news/monitoringsolution 知名的开源apm(Application Performance Management)工具 https://blog.csdn.net/konglongaa/article/details/55807192 Dapper,大规模分布式系统的跟踪系统 http://bi

全链路设计与实践

背景 随着公司业务的高速发展,公司服务之间的调用关系愈加复杂,如何理清并跟踪它们之间的调用关系就显的比较关键.线上每一个请求会经过多个业务系统,并产生对各种缓存或者 DB 的访问,但是这些分散的数据对于问题排查,或者流程优化提供的帮助有限.在这样复杂的业务场景下,业务流会经过很多个微服务的处理和传递,我们难免会遇到这些问题: 一次请求的流量从哪个服务而来? 最终落到了哪个服务中去? 为什么这个请求这么慢? 到底哪个环节出了问题? 这个操作需要依赖哪些东西? 是数据库还是消息队列? Redis挂了

阿里10年分布式技术沉淀:阿里高可用体系核心缔造者、全链路压测创始人告诉你!

原文链接 7月27日,云栖社区.阿里中间件将举办首届阿里巴巴中间件技术峰会,揭秘阿里10年分布式技术干货.目前活动官网已上线:https://yq.aliyun.com/promotion/262, 点击报名. 本次活动看点十足,大咖齐聚.纯正干货,下面给大家做下详解介绍,相信看后定会让你动心! 议题详情 双11核武器全链路压测--张军 / 阿里巴巴中间件高级技术专家 阿里巴巴双11备战期间,保障系统稳定性最大的难题在于容量规划,而容量规划最大的难题在于准确评估从用户登录到完成购买的整个链条中,

饿了么全链路压测平台的实现与原理

背景 在上篇文章中,我们曾介绍过饿了么的全链路压测的探索与实践,重点是业务模型的梳理与数据模型的构建,在形成脚本之后需要人工触发执行并分析数据和排查问题,整个过程实践下来主要还存在以下问题: 测试成本较高,几乎每个环节都需要人力支撑,费时费力. 由于测试用例较多,涉及的测试机范围较广,手工执行容易犯错,线上测试尤其危险. 记录结果和测试报告极不方便,需要二次加工.填写和上传. 测试过程中靠手工监控,覆盖不全且定位问题困难. 基于这些因素,我们决定推进全链路压测的自动化进程.这篇我们主要介绍全链路

京东全链路压测军演系统(ForceBot)架构解密

摘要:全链路压测是应对电商大促容量规划最有效的手段,如何有效进行容量规划是其中的架构关键问题.京东在全链路压测方面做过多年尝试,本文转载京东商城基础平台技术专家文章,介绍其最新的自动化压测 ForceBot 体系. ForceBot愿景 1.诞生背景 伴随着京东业务的不断扩张,研发体系的系统也随之增加,各核心系统环环相扣,尤其是强依赖系统,上下游关系等紧密结合,其中一个系统出现瓶颈问题,会影响整个系统链路的处理性能,直接影响用户购物体验. 往年的 618.双 11 大促备战至少提前 3 个月时间

如何开展全链路压测&全链路压测核心要素

之前对全链路压测概念比较懵,现在简单梳理下,后续有学习到的干货再持续补充:可参考:阿里全链路压测京东全链路压测 1.什么是全链路压测 基于实际的生产业务场景.系统环境,模拟海量的用户请求和数据对整个业务链进行压力测试,并持续调优的过程. 2.全链路压测解决什么问题 针对业务场景越发复杂化.海量数据冲击下整个业务系统链的可用性.服务能力的瓶颈,让技术更好的服务业务,创造更多的价值. 3.如何开展全链路压测?分析压测业务场景涉及系统服务:协调各个压测系统资源:压测环境(需要将请求和访问.业务数据处理

全链路压测自动化实践

背景与意义 境内度假是一个低频.与节假日典型相关的业务,流量在节假日较平日会上涨五到十几倍,会给生产系统带来非常大的风险.因此,在2018年春节前,我们把整个境内度假业务接入了全链路压测,来系统性地评估容量和发现隐患,最终确保了春节期间系统的稳定. 在整个过程中,我们意识到,全链路压测在整个系统稳定性建设中占有核心重要的位置,也是最有效的方案.结合实际业务节假日的频率(基本平均一个月一次),如果能够把它作为稳定性保障的常规手段,我们的系统质量也能够得到很好的保障.同时,为了解决周期常态化压测过程

全链路非功能测试之服务资源监控工具篇

随着信息化建设的迅速发展,为了更好的.有效的保障系统上线后稳定高效运行,在上线前都会对其服务端进行各种压力测试,例如单交易负载测试.混合综合场景压力测试.稳定性测试.浪涌测试.端到端非功能测试等全链路非功能性测试,目的是为了在上线把各种怀疑性技术性问题等排查清楚.因此在最基本的全链路非功测试过程中,对于服务器的资源使用情况.带宽.网络.磁盘.进程.数据或日志存储文件目录使用情况等进行可靠和可持续的监控,统计分析在压力测试过程中的各种数据,从而能及时发现问题原因,并快速定位解决.例如数据库的数据量