使用skywalking+elasticsearch实现全链路监控(代码片段)

author author     2023-05-07     627

关键词:

随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。
技术图片
面对以上情况, 我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。这时候分布式追踪系统就该闪亮登场了。

一、分布式追踪系统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页面刷新一下,便可看到数据了。
技术图片
点击“追踪”可以看到详细内容。
技术图片
技术图片

skywalking系列之skywalkinggoagent使用问题(代码片段)

概述SkyWalking是一个基于OpenTracing规范的、开源的APM系统,它是专门为微服务架构以及云原生架构而设计的,支持多种语言的客户端,部署简单,快速,目前在业界使用较为广泛。具体的skywalking安装部署参照上... 查看详情

skywalking搭建链路监控

一、skywalking简介官网:https://github.com/apache/skywalking引用官网的架构:二、部署OAP和UI需使用的镜像apache/skywalking-oap-server:8.6.0-es7apache/skywalking-ui:8.6.0创建 查看详情

skywalking架构部署

参考技术ASkywalking是一个可观测性分析平台(ObservabilityAnalysisPlatform简称OAP)和应用性能管理系统(ApplicationPerformanceManagement简称APM)。提供分布式链路追踪、服务网格(ServiceMesh)遥测分析、度量(Metric)聚合和可视化一体化解决方案... 查看详情

skywalking===》docker部署skywalking(代码片段)

注意版本一致性:这里使用es6.8.12skywalking-oap-server:8.5.0-es6skywalking-ui:8.5.0一、部署esdockerrun--restart=always-p9200:9200-p9300:9300-e"discovery.type=single-node"-eES_JAVA_OPTS=" 查看详情

使用skywalking监控mysql工具与方案(代码片段)

注:本文适用于SkyWalkingv9.1.0。SkyWalking简介SkyWalking是一个分布式系统的应用程序性能监视(APM)工具,专为微服务、云原生架构和基于容器(K8s)架构而设计。当前版本具备了全路径跟踪、指标采集、日志... 查看详情

skywalking--部署、使用、告警、日志集成

参考技术ASkywalking是一个可观测性分析平台(ObservabilityAnalysisPlatform简称OAP)和应用性能管理系统(ApplicationPerformanceManagement简称APM)。多语言自动探针,Java,.NETCore和Node.JS。多种监控手段,语言探针和servicemesh。轻量高效。不需... 查看详情

skywalking安装和使用

参考技术ASkyWalking是一款针对分布式系统的国产APM(ApplicationPerformanceMonitoring,应用性能监控)产品,主要针对微服务、CloudNative和容器化(Docker、Kubernetes、Mesos)架构的应用。SkyWalking的核心是一个分布式追踪系统,目前已进入Ap... 查看详情

k8s部署skywalking并将pod应用接入链路追踪(代码片段)

...文章介绍使用docker部署springboot和tomcat项目,并将其接入skywalking,这篇文章主要介绍使用k8s部署skywalking并将pod应用接入链路追踪。二、使用helm部署skywalking在k8s中使用helm的前提是需要先安装helm客户端,关于helm的安装可以查看官... 查看详情

skywalking8.1.0部署和使用

一、简介1、官方文档https://github.com/apache/skywalking/tree/master/docs2、功能SkyWalking是一个可观测性分析平台和应用性能管理系统,提供分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案,并支持多种开发语言... 查看详情

springcloudgateway使用skywalking时日志打印traceid

...技术A由于SpringCloudGateway是基于WebFlux来实现的,需要进到skywalking的agent目录,将optional-plugins目录底下的以下两个jar包复制到plugins目录新增启动参数启动程序后,尝试通过网关进行接口调用,可以在Skywalking-ui上看到链路已经串起... 查看详情

源码角度了解skywalking之spi在skywalking中应用(代码片段)

源码角度了解Skywalking之SPI在SKywalking中应用上篇文章中我们说到SKywalking的启动流程是怎样的,其中有一步是利用JDK的SPI机制来启动插件服务,今天我们就看一下具体是怎么利用JDK的SPI机制的。JDK的SPI所谓SPI就是ServiceProviderInterface... 查看详情

在并发情况下,elasticsearc如果保证读写一致?

1、可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突;2、另外对于写操作,一致性级别支持quorum/one/all,默认为quorum,即只有当大多数分片可用时才允许写... 查看详情

skywalking简单入门使用(代码片段)

🏆今日学习目标:🍀Skywalking简单入门使用✅创作者:林在闪闪发光⏰预计时间:50分钟🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加入: 林在闪闪发光的社... 查看详情

7、skywalking的调试-本地调试agent

参考技术A通过执行以下指令,会发现项目中出现Skywalking-Agent目录这个目录中的文件就是Skywalking-agent的运行时文件目录。测试应用的javaAgent参数指定的jar文件是这里的skywalking-agent.jar;拷贝此文件的绝对路径,之后的配置javaAgent... 查看详情

源码角度了解skywalking之trace可以跨线程吗(代码片段)

源码角度了解Skywalking之Trace可以跨线程吗Trace信息是一个重要的信息,那么Skywalking的trace可以跨线程传播吗?我们先给出答案,它是是可以的跨线程传播的,今天就带大家看一下Trace跨线程的使用和实现原理使用privatestaticfinalExecu... 查看详情

skywalking(代码片段)

介绍SkyWalking 创建与2015年,提供分布式追踪功能。从5.x开始,项目进化为一个完成功能的ApplicationPerformanceManagement系统。他被用于追踪、监控和诊断分布式系统,特别是使用微服务架构,云原生或容积技术。提供以下主要功... 查看详情

走进skywalking-插件概念[#2]

参考技术A[TOC]在解析SkyWalking的源码之前,我们先来了解下SkyWalking中的插件机制,那它的作用是什么?为什么先要去了解它呢?我们知道SkyWalking是用来监控应用程序的系统,那它必然需要收集我们应用程序中需要监控的相关数据... 查看详情

skywalking全链路追踪使用说明

1、背景与需求:        随着业务规模的不断增大,系统的复杂度也越来越高,我们的软件架构也进入了分布式的阶段,服务按照不同的维度进行拆分,那么一次请求可能横跨多个服务模块、项目,依... 查看详情