全链路追踪 OpenTelemetry 零侵扰可观测性 eBPF Prometheus 全链路监控

当前位置:首页> 服务调用链>Skywalking没有日志 Skywalking类似

Skywalking没有日志 Skywalking类似

时间:2024-10-04 05:10:29

一、日志skywalking agent配置

配置文件路径在./agent/config/agent.config下

中文配置参数列表

8.5配置列表

配置覆盖

配置优先级,日志每种配置功能一样,没有区别,不过存在优先级之分,按如下顺序

令牌身份验证是关于监控应用数据是可信的。

应用端 agent.config

服务端 application.yml

如果令牌不正确,日志将会在 agent端看到如下日志

默认是日志false,通过设置为true打开,方便调试

默认是false,通过设置为true打开,方便调试

skywalking的追踪功能可以查看到

CDS

仅支持一下几个动态配置

分为 bootstrap插件和 optional插件

Java agent的所有插件都是可插拔的。在agent或第三方仓库的日志optional-plugins文件夹下提供了可选的插件。想要使用可选插件,日志你需要将对应插件移动到/plugins文件夹下。日志

已知的日志 Bootstrap插件.

目前,我们提供了如下的日志可选插件。

二、日志走进SkyWalking-插件概念[#2]

[TOC]

在解析SkyWalking的日志源码之前,我们先来了解下SkyWalking中的日志插件机制,那它的日志作用是什么?为什么先要去了解它呢?我们知道SkyWalking是用来监控应用程序的系统,那它必然需要收集我们应用程序中需要监控的日志相关数据,那问题就来了,日志它怎么知道我们系统中需要收集哪些数据?所以插架的作用就在于此,由于对监控的应用程序的不确定性,进而提供了可扩展的插件机制来满足实际的业务监控需求。

为什么先要去了解它?因为对监控数据的来源收集是应用监控的基础,也是第一步,也就是SkyWalking中的探针部分,同时它也是我们解析Agent启动源码中重要的一环。

在SkyWalking的文档及源文件中,相信你能看到官方已经提供了很多常见框架的不同版本的通用插件,这里面一些由官方提供,一些由社区开发者Pull;但是如果你想在项目中重度使用SkyWalking来做APM,仅仅使用这些插件还是不够的,你必然需要封装符合自己业务监控需求的插件,相应的,你必须的知道插件的机制以及如何开发。

工欲善其事必先利其器,开发插件前,我们先得具备SkyWalking的插件中的基础概念以及开发规范的要点。

它是上下文管理器,是SkyWalking中的核心API,负责提供所有主要的API,像下文中Span和Context的一些列操作都是由它封装并提供方法,同时负责维护Context上下文,内部是通过 ThreadLocal来进行多线程的隔离和维护的,在后面插件开发的过程中会经常使用到这个类的。

跨度,它是系统中完成的单个工作单元,通俗的说一条完整的调用链路就是由多个Span单元组成的,通过下图相信你会更加直观的了解它,

这是/storage/waste的一条调用链路,下面的每一行就代表一个Span,上面的 test是自定义的插件拦截定义的Span。

OpenTracing的规范中定义了一个Span需要包含操作名称、开始和结束时间、跨度标签、跨度日志、 SpanContext,其中SpanContext的作用是携带跨进程的边界数据,由 traceId、 spanId、键值对数据组成。

而SkyWalking的Span概念与之类似,同时提供了一些扩展,我们先来看下Span的类图结构,

首先 AsyncSpan定义了一个顶层接口,

能看到里面定义了两个方法,它们是在异步场景下使用的API,当Span中的组成信息需要在另一个线程中进行设置时,像标签、日志、属性等,就可以使用它们。使用的方式也很简单,比如在A线程的Span里面调用 prepareForAsync()方法,然后再B线程中拿到Span进行设置,完成后调用 asyncFinish()方法来结束调用即可。

再来看它的子类接口 AbstractSpan,它里面就定义了Span的属性组成,像操作名称OperateName、标签Tag、日志Log、组件Component、类别Layer等等。其中

而下面的实现子类中,其中 NoopSpan是一个空实现,没有任何实际操作,用来存放 IgnoredTracerContext的,我们主要看 AbstractTracingSpan下三个重要的实现子类:

我们再定义Span的时候只需要根据上面的描述创建相应的Span即可,其中 EntrySpan和 ExitSpan注意要设置Component和Layer值。这里创建Span的方式也很简单,利用 ContextManager提供的API来完成,

Context通常代表着上下文,相信看过一些框架源码,像Spring等,一定对它很熟悉;那我们来看看SkyWalking中的Context是怎么定义的,先看类图,

这里 AbstractTracerContext是一个顶层接口,代表着跟踪上下文的管理器, IgnoredTracerContext刚才我们提到过,源码注释中对其说明是表示一个被忽略的上下文,主要作用是用一个字段 int stackDepth来维护堆栈深度,它通常在Span中的OperateName定义为空时会被创建;而 TracingContext才是核心跟踪逻辑控制器,它保存着一些基本的信息个状态以外,还存放着上下文中传播的 Span和跨度深度等重要数据。

我们在创建 Span的时候方法内部会自动帮我创建 AbstractTracerContext并初始化,所以不用担心,主要在下面两种情况下会需要我们进行传递处理:

通过上面我们知道了SkyWalking中插件的作用、自定义插件中需要定义的哪些基本信息和规范,以及如何在不同的场景下进行上下文的传播,那接下来就是如何进行插件开发了,下一篇我们继续。

身未动,心已远。

把一件事做到极致就是天分!

三、SpringCloudGateway使用Skywalking时日志打印traceId

由于SpringCloudGateway是基于WebFlux来实现的,需要进到skywalking的agent目录,将optional-plugins目录底下的以下两个jar包复制到plugins目录

新增启动参数

启动程序后,尝试通过网关进行接口调用,可以在Skywalking-ui上看到链路已经串起来了

但是有个问题,日志里记录的日志始终不显示正确的TID

查看Skywalking-agent的源码,可以看到,在apm-spring-webflux-5.x-plugin-8.10.0.jar插件里,拦截了 org.springframework.web.reactive.DispatcherHandler的 handle方法

拦截器里往reactor的调用链路里,放入< SKYWALKING_CONTEXT_SNAPSHOT- ContextSnapshot>

网上找了下资料,在这里[ ]发现了相关信息

四、linux安装全链路追踪工具skywalking8.0

SkyWalking是一个针对分布式系统的APM(应用性能监控)系统,特别针对微服务、cloud native和容器化架构,其核心是个分布式追踪系统。它通过探针自动收集所需的指标,且基于探针技术对应用零侵入零耦合。通过这些调用链路以及指标,SkyWalking APM会感知应用间关系和服务间关系,并进行相应的指标统计。

解压后,进入目录,默认自带了agent,这个是用来追踪java项目的。我因为是用来追踪php项目,所以这个用不上,如果要追踪php项目,需要另外安装php的agent,请查看我另外一篇文章( linux安装sky-php-agent)

bin里面是启动文件

config目录里面是配置文件

webapp目录里面是UI界面项目文件和配置文件

默认情况下,只需要更改一下 config/application.yml文件

默认的restHost和gRPCHost的IP为0.0.0.0,我这里改成我这边内网的IP。这里要注意一下,一旦改了IP,就只能用这个IP,比如我这里改成了内网IP,那么用127.0.0.1都不能访问。

如果需要更改UI界面访问的端口,可以修改 webapp/webapp.yml,里面配置文件很简单

注意一下,如果要想能够让受控端访问到skywalking服务,那么必须将12800端口对受控端服务器打开。WEB界面的端口,我这里是8081,大家可以改成自己需要的端口。

变更完配置后,就可以进去bin目录下,运行 startup.sh,服务就会启动。然后通过http://服务器ip:8081进行界面访问。

受控端如果也启动了的话,这个时候,界面里就自动会出现数据了。

emmmm.....这里有个坑,默认情况下,打开界面什么数据都看不到,这个需要点击右上角的“自动”按钮,让按钮变成蓝色,这个时候就会有数据出现了。

如果还是没有出现数据,那就检查受控端服务是不是已经启动了,或者去看一下logs目录下的日志。如果受控端连接服务端出现错误,就看skywalking-oap-server.log;如果受控端一切正常,界面数据还是不显示,就看webapp.log

我在安装的时候,使用startup.sh启动文件,又遇到一个坑。这个启动文件,无论中间是不是有报错,都会提示启动成功。而且因为没有停止的命令,如果重复运行startup.sh,日志里会提示端口占用。这个时候,需要使用命令先查看占用端口的进程,然后杀掉进程,再重新运营启动文件才可以。

参考资料:全链路监控

全链路追踪
全链路追踪数据 客服 好云网业务分析 医疗质量管理根因分析 微服务监控 需求分析 微服务技术栈监控 前 根因分析树状图怎么画 prometheus 卷积神经网络可视化m 分布式追踪与监控 3d可视化网络安全吗
网络性能监控
搭建可视化网络 搭建 skywalking prometheus 网络可视化的优势包括 塔吊可视化夜间无网络 全链路监控是什么 全 网管软件根因分析 全面的网络性能监控 单个微服务的监控 配 prometheus
应用性能管理
根因分析步骤 分布式追踪 稳定 分 冰山图分析完后解决表 用传播学知识分析网抑 药品无标签的根因分析 差异与根因分析的区别 智能监控量测云平台官 公司网络可视化领域研 护理根因分析法 给药 微服务做服务器监控
服务调用链/dt>
kube prome 网络词语数据可视化 prometheus prometheus 关系网络分析可视化 决策树和根因分析法 鱼骨头根因分析怎么做 prometheus 网络信息可视化网站推 微服务架构监控 智能
SkyWalking
工地网络可视化 强大的应用性能管理 分布式链路追踪技术有 prometheus skywalking 服务 调用链 prometheus 可视化多网络检查 网 skywalking skywalking
关注我们