性能监控-微服务链路追踪skywalking搭建

skywalking是什么

SkyWalking是一个可观测性分析平台和应用性能管理系统,它基于OpenTracing规范和开源的AMP系统。SkyWalking提供了分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。具体来说,SkyWalking可以帮助我们看到一个请求经过的所有调用链路,包括微服务调用和各种中间件调用。它也可以提供服务监控,比如监控哪些服务调用失败了,服务被访问了多少次。SkyWalking的核心部分包括Agent(探针)和OAP(后端服务)。Agent负责采集服务实例的Trace、Metrics等数据,然后通过gRPC方式上报给SkyWalking后端。SkyWalking后端服务则负责接收Agent上报的数据,交给Analysis Core进行流式分析,最终将分析得到的结果写入持久化存储中。

中文文档:hong设置 (skyapm.github.cio)

参考:微服务链路追踪SkyWalking的介绍和部署_skywalking部署_技术闲聊DD的博客-CSDN博客

参考:链路追踪SkyWalking整合项目以及数据持久化_skywalking 持久化_技术闲聊DD的博客-CSDN博客

Liunx部署skywalking以及skywalking基本使用_linux部署skywalking_LiuEastHua的博客-CSDN博客

官方demo:

Apache SkyWalking

skywaking架构

Skywalking架构图,可以分成几个部分,简单来说,可以分成oap、webapp和agent三部分:

oap是skywalking最核心的部分,主要用于汇总数据、存储数据、提供对外的相关接口;
webapp主要提供了ui界面,并且从oap获取数据并且展示(通常和oap部署在服务端,相当于skywalking服务的后台监控管理程序);
agent是探针,部署在需要收集数据的应用服务器上,并将数据同步到Skywalking平台。
 

 

下载skywalking APM

 Downloads | Apache SkyWalking

解压

tar zxvf apache-skywalking-apm-9.6.0.tar.gz 

 解压后文件

下载java agent

agent在部署项目时需要下载到项目所在机器上。

https://skywalking.apache.org/docs/main/next/en/setup/backend/log-analyzer/

wget https://dlcdn.apache.org/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz --no-check-certificate

 

 解压 

tar zxvf apache-skywalking-java-agent-9.0.0.tgz

配置数据库

配置文件路径apache-skywalking-apm-bin/config/

可以用ES,默认是h2,我这里配置为mysql

配置mysql对于jdbcurl,修改mysql对于地址和密码

linux环境部署

cd  /apache-skywalking-apm-bin/bin/

./startup.sh

启动成功后会有两个服务,如下:

skywalking-oap-server:暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml
skywalking-web-ui:服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml


查看日志tail -300f  /apache-skywalking-apm-bin/logs/

启动成功显示如下日志 

也可以分别运行oap.service.sh和 webappservice.sh,过了很久很久,竟然可以访问了,这两个脚本也没有运行结束,然后这执行窗口也不能关,关了后skywalking就也不能用了。

实际这样的日志就是对的

 

避坑指南

问题1 jdk版本错误

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/skywalking/oap/server/webapp/ApplicationStartUp has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

 说明应该用jdk11版本,而我的jdk是1.8的。

安装jdk11版本。

问题2 mysql驱动不对

启动,报错

Failed to get driver instance for jdbcUrl=jdbc:mysql,可以知道是mySQL的驱动不对。

skywalking使用笔记 - 知乎 (zhihu.com)

在ops-lib加上MySQL驱动包,下载地址MySQL :: Download Connector/J

我下载的是depend platform版本,解压后,把jar包放到ops-lib下。

显示version of OAP后,start脚本仍然在运行,也无法访问。

反应很慢

如上应该是启动成功了

问题3 windows闪退

用windows部署,同样修改数据库配置,添加mysql驱动,启动startup.bat闪退

百度说是文件夹路径有中文或者空格,去掉了空格,启动startup.bat解决。

问题4 webservice.bat窗口闪退 

查看时jdk版本不对,电脑同时有两个版本,读到了jdk8 应该读11,需要修改下环境变量。

改了jdk版本还是不对,手动输入命令

java -jar E:\sky\apache-skywalking-apm-9.0.0\apache-skywalking-apm-bin\webapp\skywalking-webapp.jar  --spring.config.location=E:\sky\apache-skywalking-apm-9.0.0\apache-skywalking-apm-bin\webapp\webapp.yml --logging.file=E:\sky\apache-skywalking-apm-9.0.0\apache-skywalking-apm-bin\logs\webapp.log

问题5 报错logback

卡住了,不知道怎么解决。

问题6 yaml报错

运行9.6.0版本又报错yaml文件

 

问题7

Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) 

问题8

隔天再次启动,发现报错mysql。

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

检查application.yaml中mysql的地址账号密码是否正确。

问题9 前端访问显示404--未解决

日志显示前端已启动,但是访问显示4040

 部署java项目

下载一个测试jar

curl -O https://arthas.aliyun.com/math-game.jar

使用java agent,启动项目

nohup java -javaagent:skywalking-agent.jar -Dskywalking.agent.service_name=admin -jar adminmath-game.jar > /dev/null 2>&1 &

 启动后,在skywalking 常规服务-服务,可以看到启动的service。

windows环境部署

部署skywalking

1、准备好jdk11环境,设置环境变量。

2、修改application.yaml里数据库配置。我这里还用的mysql

3、mysql驱动放到ops-lib文件夹

用的是这个MySQL :: Download Connector/J

4、启动oapService.bat

5、启动webappService.bat

日志路径:D:\software\apache-skywalking-apm-9.6.0\apache-skywalking-apm-bin\logs 

启动成功标志,查看日志:

 数据库自动创建数据表

访问skywalking

访问:http://127.0.0.1:8080/

 部署項目

java -javaagent:skywalking-agent.jar -Dskywalking.agent.service_name=UserApplication -jar UserApplication-SNAPSHOT.jar

 报错

ERROR 2023-10-08 17:13:23.672 main SnifferConfigInitializer : Failed to read the config file, skywalking is going to run in default config.
org.apache.skywalking.apm.agent.core.conf.ConfigNotFoundException: Failed to load agent.config.

 配置文件加载失败,因为偷懒直接把agent.jar复制到了一个文件执行的命令。

再次在agent目录下执行命令

java -javaagent:skywalking-agent.jar -Dskywalking.agent.service_name=UserApplication -jar D:\Project\UserApplication\target\UserApplication-SNAPSHOT.jar

 

可以看到提示8080端口被占用了,所以需要指定端口启动

java -Dserver.port=8090 -javaagent:skywalking-agent.jar -Dskywalking.agent.service_name=UserApplication -jar D:\Project\UserApplication\target\UserApplication-SNAPSHOT.jar

启动成功

 启动后,在skywalkig会多出一个常规服务模块,点进去可以看到部署的服务。

 修改skywalking服务地址

skywalking-agent默认连接的是本机的skywalking,如果要修改配置,

修改配置文件:agent.config,修改

(1)服务名(The service name in UI),随意

(2)服务器地址(Backend service addresses)

docker部署

参考基于Docker部署Skywalking-CSDN博客 

Docker部署SkyWalking+ElasticSearch+Agent - 知乎

如下为一个错误的命令。

docker run --restart=always -p 9400:9400 -p 9500:9500 -e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
--name='elasticsearch_sky' --cpuset-cpus="1" -m 2G -d elasticsearch:7.6.2docker run --name oap --restart always -d --restart=always -e TZ=Asia/Shanghai -p 12800:12800 -p 11800:11800 --link elasticsearch_sky:elasticsearch -e SW_STORAGE=elasticsearch7 -e SW_STORAGE_ES_CLUSTER_NODES=服务器IP地址:9400 apache/skywalking-oap-server:8.3.0-es7docker run -d --name skywalking-ui \
--restart=always \
-e TZ=Asia/Shanghai \
-p 8088:8080 \
--link oap:oap \
-e SW_OAP_ADDRESS=oap:12800 \
apache/skywalking-ui:8.3.0

访问8088发现未打开

问题1 ES连接失败

查看日志

docker logs oap服务的容器ID

连接ES失败。

查看ES日志,发现 ES里用的IP地址为172开头。

修改oap启动命令重新启动,这里oap和ui都需要重新启动,因为oap容器name改了。

docker run --name oap1 --restart always -d --restart=always -e TZ=Asia/Shanghai -p 12800:12800 -p 11800:11800 --link elasticsearch_sky:elasticsearch -e SW_STORAGE=elasticsearch7 -e SW_STORAGE_ES_CLUSTER_NODES=172.17.0.2:9200 apache/skywalking-oap-server:8.3.0-es7docker run -d --name skywalking-ui1 \
--restart=always \
-e TZ=Asia/Shanghai \
-p 8088:8080 \
--link oap1:oap1 \
-e SW_OAP_ADDRESS=oap1:12800 \
apache/skywalking-ui:8.3.0

注意ES服务器的地址,我这里填写ES日志里的172.17.0.2:9200才成功。

可以curl校验一下,如果curlES端口提示Connection refused,那么ES端口是不能用,具体怎么不能用可以查一下。

访问8088端口,成功,这是8.3.0版本的skywalking比较老了,可以部署新的。

部署docker项目 

需要注意的一点是docker部署的项目,需要把agent打进镜像中,详细见下面文章。

使用Skywalking监控你的服务-简单部署_skywalking 监控不了-CSDN博客

微服务整合skywalking,也需要把agent放入工程内。 修改微服务的启动VM option。 

企业级监控项目Skywalking详细介绍,来看看呀_一一哥Sun的博客-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/129686.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法练习Day15】平衡二叉树二叉树的所有路径左叶子之和

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 平衡二叉树二叉树的所有路径…

Redis三种模式(主从复制,哨兵,集群)

Redis三种模式(主从复制,哨兵,集群) 一、主从复制1.1、主从复制概述1.2、 Redis主从复制流程1.3、 Redis主从复制作用1.4 、部署Redis 主从复制 二、Redis 哨兵模式2.1、哨兵模式的原理2.2、哨兵模式的作用2.3、哨兵的结构组成2.4…

力扣 -- 132. 分割回文串 II

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int minCut(string s) {int ns.size();//保存s的所有子串是否是回文串的信息的哈希表vector<vector<bool>> hash(n,vector<bool>(n));for(int in-1;i>0;i--){for(int ji;j<n;j){i…

6-10 单链表分段逆转 分数 15

void K_Reverse( List L, int K ) { //此题已经默认size > K 因为当size < K时 反转后将不再符合链表的定义//求出表中元素个数int size 0;for (List cur L->Next; cur ! NULL; cur cur->Next)size; List prv, cur, next, first, head L;//共需要反转 si…

设计模式 - 行为型模式考点篇:策略模式(概述 | 案例实现 | 优缺点 | 使用场景)

目录 一、行为型模式 1.1、策略模式 1.1.1、概论 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 1.1、策略模式 1.1.1、概论 策略模式设计的每一个算法都封装了起来&#xff0c;使他们可以相互替换&#xff0c;通过一个对象委派不同的算法给相应的客户…

Hive【Hive(六)窗口函数】

窗口函数&#xff08;window functions&#xff09; 概述 定义 窗口函数能够为每行数据划分 一个窗口&#xff0c;然后对窗口范围内的数据进行计算&#xff0c;最后将计算结果返回给该行数据。 语法 窗口函数的语法主要包括 窗口 和 函数 两个部分。其中窗口用于定义计算范围…

Spark基础

一、spark基础 1、为什么使用Spark Ⅰ、MapReduce编程模型的局限性 (1) 繁杂 只有Map和Reduce两个操作&#xff0c;复杂的逻辑需要大量的样板代码 (2) 处理效率低 Map中间结果写磁盘&#xff0c;Reduce写HDFS&#xff0c;多个Map通过HDFS交换数据 任务调度与启动开销大 (…

【C/C++】指针函数与函数指针

1、指针函数--指针作为函数的返回值 指针函数本质是一个函数&#xff0c;只不过函数的返回值是一个指针 #include <stdio.h> #include <malloc.h> #include <string.h>char * funGetString(); int main() {char * sentence funGetString();printf(" %…

Java练习题-用冒泡排序法实现数组排序

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;Java练习题 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又…

域信息收集

DMZ&#xff0c;是英文“demilitarized zone”的缩写&#xff0c;中文名称为“隔离区”&#xff0c;也称“非军事化区”。它是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题&#xff0c;而设立的一个非安全系统与安全系统之间的缓冲区。该缓冲区位于企业…

Lua系列文章(1)---Lua5.4参考手册学习总结

windows系统上安装lua,下载地址&#xff1a; Github 下载地址&#xff1a;https://github.com/rjpcomputing/luaforwindows/releases 可以有一个叫SciTE的IDE环境执行lua程序 1 – 简介 Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。 它支持过程编程&#xff0c; 面向对…

android Google官网 :支持不同的语言和文化 rtl / ltr : 本地化适配:RTL(right-to-left) 适配

参考 google官网&#xff1a; 支持不同的语言和文化 应用包含可能专门针对特定文化而设计的资源。例如&#xff0c;应用可以包含针对特定文化的字符串&#xff0c;这些字符串将转换为当前语言区域的语言。 将具有文化特异性的资源与应用的其他资源分开是一种很好的做法。And…