MySql教程

Nacso+Skywalking+mysql/Elasticsearch 搭建详解,swUi界面详解

本文主要是介绍Nacso+Skywalking+mysql/Elasticsearch 搭建详解,swUi界面详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

​​​​

目录

1. 介绍

2. 准备

3. 目录结构

4. 开始配置

5. 启动

5.1. 启动SW

5.2. SW动态配置

5.3. 启动agent

6. sw界面监控说明

6.1. 简单测试

6.2. 忽略部分 URL 的追踪

6.3. 对mysql的操作链路分析

6.4. 对redis的操作链路分析

6.5. 更多链路追踪  

6.6. ui界面介绍

7. 日志框架示例

8. 告警配置

9. Sw+Elasticsearch集群配置


1. 介绍

Skywalking 是一个APM系统,即应用性能监控系统,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计。

架构

 

图中组件看起来虽然多,但SW逻辑上分为四部分: Probes, Platform backend, Storage and UI

 Probes(探针):基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式。

 Platform backend(平台后端):支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。

 Storage (存储):通过开放的插件话的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统.

 UI(界面):一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

文档链接

官网:https://skywalking.apache.org/   可以查看各个版本文档(英文)及提供下载等

中文文档:https://github.com/SkyAPM/document-cn-translation-of-skywalking 

2. 准备

本文中的Nacos是作为注册中心使用,SW支持的注册中心还包括:ZooKeeper,Kubernetes,Consul,Consul ;Nacos同时也可以作为配置中心;MySql是作为数据存储容器,SW支持的存储还包括:H2,ElasticSearch 6, 7,TiDB,InfluxDB

Nacos+Skywalking+Mysql

软件名称

版本

Nacos 

2.0.3

Skywalking

8.7.0

Mysql

5.7

下载Skywalking  这里我们选择带有Mysql存储引擎的SkyWalking版本,大家各自选取对应的版本即可 Downloads | Apache SkyWalking

 

3. 目录结构

├── agent                    #skywalking agent目录,也有人称为探针

│    ├── activations                #不知道干啥用

│    ├── bootstrap-plugins          #Bootstrap 类插件

│    ├── config                     #配置目录其中包含一个agent.conf------需要配置

│    ├── logs                       #agent的日志

│    ├── optional-plugins           #可选插件

│    ├── plugins                    #(如想使用可选插件或bootstrap插件,把包放到该目录下)

│    ├── skywalking-agent.jar       #agent的jar          

├── bin                      #启动脚本,内含skywakling

│    ├── oapService.bat              #oap初始化启动脚本windows

│    ├── oapServiceInit.bat          #oap初始化脚本windows

│    ├── oapServiceInit.sh           #oap初始化脚本linux

│    ├── oapServiceNoInit.bat        #oap无需初始化启动脚本windows

│    ├── oapServiceNoInit.sh         #oap无需初始化启动脚本linux

│    ├── oapService.sh               #oap初始化启动脚本windows

│    ├── startup.bat                 #sw启动脚本windows

│    ├── startup.sh                  #sw启动脚本linux------直接启动这个即可(相当于oap+UI)

│    ├── webappService.bat           #UI启动脚本windows

│    └── webappService.sh            #UI启动脚本linux------想重启UI使用这个

├── config                   #配置文件目录

│    ├── alarm-settings-sample.yml       #告警配置示例

│    ├── alarm-settings.yml              #告警配置

│    ├── application.yml                 #oap服务配置------需要配置

│    ├── component-libraries.yml         #组件库配置,定义被监控应用中使用的所有组件库

│    ├── gateways.yml                    #网关配置

│    ├── log4j2.xml                      #日志配置

│    ├── official_analysis.oal           #数据分析指标配置

│    └── service-apdex-threshold.yml     #阀值配置

├── LICENSE

├── licenses

├── NOTICE

├── oap-libs                 #oap依赖,不作展开

├── README.txt  

└── webapp                   #UI jar包

      ├── skywalking-webapp.jar            #UI jar包

      └── webapp.yml                       #UI配置文件------需要配置

4. 开始配置

下载解压后---注意:标注了中文注释的地方代表需要修改

编辑application.yml

进入SW的config目录,编辑application.yml  配置文件太长 就不全列出 只列出需要修改的地方

.....

cluster:

#选中nacos

  selector: ${SW_CLUSTER:nacos}

  # 集群模式的话注释掉standalone:

  #standalone:

  # Please check your ZooKeeper is 3.5+, However, it is also compatible with ZooKeeper 3.4.x. Replace the ZooKeeper 3.5+

  # library the oap-libs folder with your ZooKeeper 3.4.x library.

 nacos:

    #名字可以自己起(在nacos中展示的服务名称)

    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}

    #nacos集群 ip/域名:port,ip/域名:port

    hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:192.168.150.131:8848,192.168.150.132:8848,192.168.150.133:8848}

    # Nacos Configuration namespace

    #此处又命名空间就写真实命名空间,没有就写public

    namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}

# Nacos auth username 

#nacos的用户名密码(nacos 搭建若没有用户名密码就不用填)

    username: ${SW_CLUSTER_NACOS_USERNAME:"nacos"}

    password: ${SW_CLUSTER_NACOS_PASSWORD:"nacos"}

    # Nacos auth accessKey

    accessKey: ${SW_CLUSTER_NACOS_ACCESSKEY:""}

    secretKey: ${SW_CLUSTER_NACOS_SECRETKEY:""}

core:

  selector: ${SW_CORE:default}

  default:

    # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate

    # Receiver: Receive agent data, Level 1 aggregate

    # Aggregator: Level 2 aggregate

    role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator

    #skywalking服务端的REST绑定的IP

    restHost: ${SW_CORE_REST_HOST:0.0.0.0}

    #skywalking服务端的REST调用的端口

    restPort: ${SW_CORE_REST_PORT:12800}

    restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}

    restMinThreads: ${SW_CORE_REST_JETTY_MIN_THREADS:1}

    restMaxThreads: ${SW_CORE_REST_JETTY_MAX_THREADS:200}

    restIdleTimeOut: ${SW_CORE_REST_JETTY_IDLE_TIMEOUT:30000}

    restAcceptorPriorityDelta: ${SW_CORE_REST_JETTY_DELTA:0}

    restAcceptQueueSize: ${SW_CORE_REST_JETTY_QUEUE_SIZE:0}

    httpMaxRequestHeaderSize: ${SW_CORE_HTTP_MAX_REQUEST_HEADER_SIZE:8192}

    #skywalking服务端GRPC通信绑定的IP (本机服务器ip)

    gRPCHost: ${SW_CORE_GRPC_HOST:192.168.150.133}

    #skywalking服务端GRPC通信绑定的端口

    gRPCPort: ${SW_CORE_GRPC_PORT:11800}

    ......

storage:

#修改存储类型为mysql

  selector: ${SW_STORAGE:mysql}

mysql:

    properties:

     #mysql地址(我使用的本地的mysql)

      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://192.168.110.90:3306/swtest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&verifyServerCertificate=true&useSSL=false"}

      dataSource.user: ${SW_DATA_SOURCE_USER:zpy}

      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:zpy0.0}

      dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}

      dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}

      dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}

      dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}

    metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}

    maxSizeOfArrayColumn: ${SW_STORAGE_MAX_SIZE_OF_ARRAY_COLUMN:20}

    numOfSearchableValuesPerTag: ${SW_STORAGE_NUM_OF_SEARCHABLE_VALUES_PER_TAG:2}

.....

#配置中心 采用nacos作为配置中心

configuration:

  selector: ${SW_CONFIGURATION:nacos}

  none:

nacos:

#nacos服务列表

    # Nacos Server Host

    serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:192.168.150.131,192.168.150.132,192.168.150.133}

# Nacos Server Port

#nacos服务端口

    port: ${SW_CONFIG_NACOS_SERVER_PORT:8848}

    # Nacos Configuration Group 组名

    group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking}

    # Nacos Configuration namespace 空间名

    namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:}

    # Unit seconds, sync period. Default fetch every 60 seconds.

    period: ${SW_CONFIG_NACOS_PERIOD:60}

    # Nacos auth username

    username: ${SW_CONFIG_NACOS_USERNAME:"nacos"}

    password: ${SW_CONFIG_NACOS_PASSWORD:"nacos"}

    # Nacos auth accessKey

    accessKey: ${SW_CONFIG_NACOS_ACCESSKEY:""}

    secretKey: ${SW_CONFIG_NACOS_SECRETKEY:""}

注1:SW本身不提供Mysql的驱动,如果想使用Mysql作为存储,需要把Mysql的驱动jar复制到 sw的 'oap-libs '目录下

编辑agent.conf: (在启动agent上有详细说明,这一步可以先略过)

SW/agent/config/agent.conf: 

#名字可以自己起建议不同服务之间名字区分开,好区分,在SW ui界面展示的服务的名字

agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}

# 配置skywalking gRPC地址

collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.150.132:11800,192.168.150.133:11800}

#这一项可以选择开启,在链路追踪时,可以看到sql的参数

# plugin.jdbc.trace_sql_parameters=${SW_JDBC_TRACE_SQL_PARAMETERS:true}

编辑webapp.yml:

SW/webapp/webapp.yml

#####默认是8080端口,支持修改端口(注意不要端口冲突),但是不支持增加项目路径

server:

  port: 8899

spring:

  cloud:

    gateway:

      routes:

        - id: oap-route

          uri: lb://oap-service

          predicates:

            - Path=/graphql/**

    discovery:

      client:

        simple:

          instances:

            oap-service:

             #配置sw集群

              - uri: http://192.168.150.132:12800

              - uri: http://192.168.150.133:12800      

  mvc:

    throw-exception-if-no-handler-found: true

  web:

    resources:

      add-mappings: true

management:

  server:

    base-path: /manage

5. 启动

调整JVM参数(可选)

编辑如下启动脚本:bin/oapServiceInit.sh  bin/oapServiceNoInit.sh  bin/oapService.sh

设置JAVA_OPTS=" -Xms2048M -Xmx4096M"

注释:bin/webappService.sh的JAVA_OPTS可自行调整

5.1. 启动SW

直接sh SW/bin/startup.sh,启动SW会同时将OAP和UI启动,可以分别查看日志skywalking-oap-server.log和webapp.log观察是否启动成功

 

启动命令介绍:

/bin/oapService.sh:如果未进行初始化会进行初始化操作,然后开启监听提供服务。

/bin/oapServiceInit.sh:进行初始化操作,然后会退出。

/bin/oapServiceNoInit.sh:不进行初始化启动,会等待es索引、或者mysql、TIDB表存在,然后开始监听并提供服务。意味着oap服务器等待其他oap服务器进行初始化。

/bin/webappService.sh:启动UI服务。

/bin/startup.sh:同时启动oapService.sh和webappService.sh。

logs/skywalking-oap-server.log  日志代表启动成功

 

可以使用jps命令查看进程,可以看到这两个java程序在运行状态。

 

然后可以打开浏览器进行查看192.168.150.132/192.168.150.133:8899 sw ui 界面

 

5.2. SW动态配置

官方文档:Dynamic Configuration | Apache SkyWalking

SkyWalking支持对以下内容进行动态配置:

查看日志/utxt/soft/zpy/skywalking/apache-skywalking-apm-bin-es7/logs/skywalking-oap-server.log

 

Config Key

Value Description

Value Format Example

agent-analyzer.default.slowDBAccessThreshold

重写applciation.yml 中receiver-trace/default/slowDBAccessThreshold慢查询语句的阈值

default:200,mongodb:50

agent-analyzer.default.uninstrumentedGateways

覆盖gateways.yml.

same as gateways.yml

alarm.default.alarm-settings

警报设置将覆盖alarm-settings.yml。

same as alarm-settings.yml

core.default.apdexThreshold

覆盖service-apdex-threshold.yml中apdexThreshold

Same as service-apdex-threshold.yml

core.default.log4j-xml

log4j xml 配置将覆盖log4j2.xml.

same as log4j2.xml

core.default.endpoint-name-grouping

覆盖endpoint-name-grouping.yml

same as endpoint-name-grouping.yml

agent-analyzer.default.sampleRate

重写applciation.yml 中receiver-trace/default/sampleRate 慢查询语句的阈值

10000

agent-analyzer.default.slowTraceSegmentThreshold

设置这个关于延迟的阈值会使慢速跟踪段采样,如果它们花费更多的时间,即使采样机制被激活。默认值为-1,这意味着不会对慢跟踪进行采样。单位,毫秒。重写receiver-trace/default/slowTraceSegmentThreshold的application.yml。

-1

configuration-discovery.default.agentConfigurations

配置发现设置

Lookat configuration-discovery.md


默认动态配置是关闭的,在/config/application.yml中configuration处配置。已有的实现有Apollo、Nacos、Zookeeper、Consul。其中nacos配置如下,此处的config key为nacos中的dataId,namespace即命名空间对应的id,覆盖yml配置则属性文件后缀名选yaml,对于receiver-trace.default.slowDBAccessThreshold,文件后缀选text:

前面已经配置过了

 

访问nacos 可以看到skywalking服务已经启动(我是启动了两个(132,133),所以有两个实例)

 

 

测试动态配置:

新建一个data-id叫做agent-analyzer.default.uninstrumentedGateways,group信息是skywalking(skywalking 与前面aplication.yml中配置中心的nacos配置的group保持一致),配置格式yaml

 

配置内容:

gateways:

- name: proxy0

instances:

- host: 127.0.0.1 # the host/ip of this gateway instance

port: 9099 # the port of this gateway instance, defaults to 80

 

点击发布,发布成功后,注意两台台机器skywalking-oap-server.log的日志信息,控制台打印了配置的变化,这里就达到了不重启Skywalking而动态刷新配置的效果。

 

5.3. 启动agent

将apache-skywalking-apm-bin-es7/agent文件夹拷贝到微服务的每个服务发布容器中,位置可以根据情况调整,建议放在jar包同级目录。 (也可以不复制一份,直接启动程序的时候指明服务名,服务地址)

修改/agent/config/agent.conf

一般配置下面两项即可:(具体配置可看上文agent.conf 配置)

agent.service_name:客户端服务名,在apm系统中显示的服务名称;collector.backend_service:SW上传的服务地址。

1、Linux Tomcat 7, Tomcat 8, Tomcat 9 部署

修改tomcat/bin/catalina.sh的第一行。

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/swpath/agent/skywalking-agent.jar"; export CATALINA_OPTS

2、JAR包使用命令行启动应用时,添加-javaagent参数

java -javaagent:/sw的绝对路径/agent/skywalking-agent.jar -jar XXXX.jar

Linux : .sh 启动文件

 

可以不复制agent 直接用某个agent中的jar 然后在启动文件中指明服务名称和服务地址

 

我启动了两个一样的程序,132中的agent.service_name=witsky-mfp-mms,133中agent.service_name=witsky-mfp-mms2

 

 

在nacos中可以看到程序启动后成功注册在nacos上

 

在sw监控界面中可以看到两个服务名

 

Idea配置

通过 IDEA 的「Run/Debug Configurations」配置使用 SkyWalking Agent。如下图所示:

 

如果说控制台打印如下日志,说明 SkyWalking Agent 基本加载成功:

 

6. sw界面监控说明

6.1. 简单测试

在程序中新建一个测试controller(我程序是springcloud+nacos)  程序部署在服务132/133服务器上

 

请求接口/mms/test/test,查看sw仪表盘

 

请求test2接口,可以看到对该url追踪链路

 

6.2. 忽略部分 URL 的追踪

复制插件

trace-ignore-plugin 插件,在 optional-plugins 目录下,是可选插件,所以我们需要复制到 plugins 目录下。命令行操作如下:

cp optional-plugins/apm-trace-ignore-plugin-6.6.0.jar plugins/

配置文件

trace-ignore-plugin 插件,读取 apm-trace-ignore-plugin.config 配置文件,默认情况下不存在,所以我们需要进行创建并配置。

 

注:trace.ignore_path 配置项,设置忽略的 URL 路径,基于 Ant 风格路径表达式。这里,我们配置了读取环境变量 SW_AGENT_TRACE_IGNORE_PATH ,这样方便我们自定义。

重启程序

可以看到程序所在的agent已经加载了我们要忽略的配置文件

 

请求程序 /mms/test/test2接口后 查看sw仪表盘没有该链路的信息

 

 

请求/mms/test/test(没有配置忽略)

 

 

 

6.3. mysql的操作链路分析

(我的程序有定时执行mysql修改的操作)

1.点击「Database Dashboard」选项,再点击「Database」选项,可以以数据库为维度的监控数据。如下图所示:

 

 

2.点击「拓扑图」菜单,进入查看拓扑图的界面,可以看到 MySQL 小方块。如下图所示:

 

 

3.点击「追踪」菜单,进入查看链路数据的界面。如下图所示:

 

 

这里,我们暂时无法看到 SQL 的数据参数,可以通过修改 config/agent.config 配置文件,将 plugin.mysql.trace_sql_parameters 配置项,设置为 true 。

 

 

6.4. redis的操作链路分析

(我只有一个程序有定时操作redis)

1.点击「拓扑图」菜单,进入查看拓扑图的界面,可以看到 Redis 小方块。如下图所示:

 

2.点击「追踪」菜单,进入查看链路数据的界面。如下图所示:

 

3.点击 Redis 操作的链路数据,可以看到 Redis 具体操作。如下图所示:

 

6.5. 更多链路追踪  

可查看博客Spring Boot 链路追踪 SkyWalking 入门_weixin_42073629的博客-CSDN博客_springboot链路追踪

6.6. ui界面介绍

实例信息

端点

拓扑图

追踪

性能剖析

 

  • 服务:需要分析的服务;
  • 端点:链路监控中端点的名称,可以在链路追踪中查看端点名称;
  • 监控时间:采集数据的开始时间;
  • 监控持续时间:监控采集多长时间;
  • 起始监控时间:多少秒后进行采集;
  • 监控间隔:多少秒采集一次;
  • 最大采集数:最大采集多少样本;

 

7. 日志框架示例

在使用 SkyWalking 排查问题的时候,我们可能希望能够跟链路的日志进行关联,那么我们可以将链路编号( SkyWalking TraceId )记录到日志中,从而进行关联。

关于trace相关概念看中文翻译https://wu-sheng.gitbooks.io/opentracing-io/content/或者:https://github.com/opentracing-contrib/opentracing-specification-zh/blob/master/specification.md

traceId格式:{service_instance_id}.{thread_id}.({时间戳} * 10000 + 线程自增序列([0, 9999]))

SkyWalking 提供了多种日志框架的支持,通过不同的插件:

apm-toolkit-log4j-1.x-activation:支持 Log4j1 日志框架。

apm-toolkit-log4j-2.x-activation:支持 Log4j2 日志框架

apm-toolkit-logback-1.x-activation:支持 Logback 日志框架

日志为log4j2如果要在监控的应用中输出traceId,首先引入如下依赖:

<dependency>

      <groupId>org.apache.skywalking</groupId>      

     <artifactId>apm-toolkit-log4j-2.x</artifactId>      

     <version>{project.release.version}</version>

</dependency>

然后修改log4j2.xml的日志输出格式增加[%traceId]即可。更多信息查看官方文档

https://github.com/apache/skywalking/blob/v6.5.0/docs/en/setup/service-agent/java-agent/Application-toolkit-log4j-2.x.md

下面讲述使用logback:

修改logback.xml的日志输出格式,增加%tid即可。更多信息查看官方文档https://github.com/apache/skywalking/blob/v6.5.0/docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md

在 pom.xml 文件中,引入相关依赖。

<!-- SkyWalking 对 Logback 的集成 -->

<dependency>

    <groupId>org.apache.skywalking</groupId>

    <artifactId>apm-toolkit-logback-1.x</artifactId>

    <version>6.6.0</version>

</dependency>

在 logback-spring.xml 中,添加 Logback 配置,如下: 

<configuration scan="true" scanPeriod="60 seconds" debug="false">

<!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->

<!-- 自定义日志路径 -->

<property name="LOG_PATH" value="./proglog/mms-"/>

<!-- 参考SpringBoot默认的logback配置,增加了error日志文件 -->

<!-- org/springframework/boot/logging/logback/base.xml -->

<!-- <springProperty name="LOG_PATH" source="logging.file.path"/>-->

<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />

<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />

<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

<!-- <property name="LOG_PATH" value="${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}"/>-->

<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %tid %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} %tid [%thread] %-5level %logger{0} -- %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

<!-- 控制台日志 -->

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

<!--日志格式化-->

<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">

<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">

<pattern>${CONSOLE_LOG_PATTERN}</pattern>

</layout>

</encoder>

</appender>

<!-- 全量日志 -->

<appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">

<!--日志格式化-->

<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">

<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">

<Pattern>${FILE_LOG_PATTERN}</Pattern>

</layout>

</encoder>

<file>${LOG_PATH}all.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

<fileNamePattern>${LOG_PATH}all.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>

<maxFileSize>${LOG_FILE_MAX_SIZE:-50MB}</maxFileSize>

<maxHistory>${LOG_FILE_MAX_HISTORY:-30}</maxHistory>

</rollingPolicy>

</appender>

<!-- 错误日志 -->

<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">

<!--日志格式化-->

<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">

<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">

<pattern>${FILE_LOG_PATTERN}</pattern>

</layout>

</encoder>

<file>${LOG_PATH}err.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

<fileNamePattern>${LOG_PATH}err.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>

<maxFileSize>${LOG_FILE_MAX_SIZE:-50MB}</maxFileSize>

<maxHistory>${LOG_FILE_MAX_HISTORY:-30}</maxHistory>

</rollingPolicy>

<!-- 过滤出ERROR级别的日志 -->

<filter class="ch.qos.logback.classic.filter.LevelFilter">

<level>ERROR</level>

<onMatch>ACCEPT</onMatch>

<onMismatch>DENY</onMismatch>

</filter>

</appender>

<!-- 日志总开关 -->

<root level="INFO">

<!-- <appender-ref ref="CONSOLE" />-->

<appender-ref ref="FILE_ALL" />

<appender-ref ref="FILE_ERROR" />

</root>

<!-- 日志过滤 -->

<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>

<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>

<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>

<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>

<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>

<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>

<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>

</configuration>


主要修改地方

 

注:

通过%tid∶配置SkyWalking Traceld占位符

通过TraceldPatternLogbackLayout:实现对%tid替换成SkyWalking Traceld

启动程序  因为此时没有 SkyWalking TraceId,所以 %tid 占位符被替换成了 TID:N/A。

 

然后请求接口 test2 后查看日志。 %tid 占位符被替换成了SkyWalking TraceId bf7fa613eef24ddd8f0550e578af21d0.68.16377562756730001。

 

用该 SkyWalking TraceId 在 SkyWalking UI 中,进行检索。如下图所示:

 

手动追踪traceId,首先引入如下依赖:

<!-- SkyWalking 工具类 -->

<dependency>

    <groupId>org.apache.skywalking</groupId>

    <artifactId>apm-toolkit-trace</artifactId>

    <version>6.6.0</version>

</dependency>

然后在想要追踪的方法上增加@Trace注解,该方法内部即可通过TraceContext.traceId()方法获取traceId,亦可通过ActiveSpan.tag("my_tag","my_value");增加标签标记。

 

添加了 SkyWalking @Trace 注解,实现 SkyWalking 指定方法的追踪,会创建一个 SkyWalking LocalSpan。同时,可以通过 operationName 属性,设置操作名。

通过 ActiveSpan#tag(String key, String value) 方法,设置该 LocalSpan 的标签。ActiveSpan 还有其它方法,如下:

ActiveSpan.error() 方法:将当前 Span 标记为出错状态.

ActiveSpan.error(String errorMsg) 方法:将当前 Span 标记为出错状态, 并带上错误信息.

ActiveSpan.error(Throwable throwable) 方法:将当前 Span 标记为出错状态, 并带上 Throwable。

ActiveSpan.debug(String debugMsg) 方法:在当前 Span 添加一个 debug 级别的日志信息.

ActiveSpan.info(String infoMsg) 方法:在当前 Span 添加一个 info 级别的日志信息.

另外,我们可以使用 TraceContext#traceId() 方法,获得当前的 SkyWalking TraceId 链路追踪编号。

启动程序请求/traceId接口

 

 

 

8. 告警配置

Alarm | Apache SkyWalking

属性

含义

metrics-name

指定的规则(与规则名不同,这里是对应的告警中的规则map,具体可查看https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md#list-of-all-potential-metrics-name,其中一些常见的,endpoint_percent_rule——端点相应半分比告警,service_percent_rule——服务相应百分比告警)

threshold

阈值,与metrics-name和下面的比较符号相匹配

op

比较操作符,可以设定>,<,=,即如metrics-name: endpoint_percent, threshold: 75,op: < ,表示如果相应时长小于平均75%则发送告警

period

多久检查一次当前的指标数据是否符合告警规则

counts

达到多少次告警后,发送告警消息

silence-period

在多久之内,忽略相同的告警消息

message

告警消息内容

include-names

使用本规则告警的服务列表

我们通过nacos动态配置告警配置项测试

在nacos 中配置告警规则

 

rules:

service_resp_time_rule:

metrics-name: service_resp_time

op: ">"

threshold: 5

period: 2

count: 1

silence-period: 3

message: 服务【{name}】的平均响应时间在最近2分钟内有1次超过5毫秒

webhooks:

- http://192.168.150.132:10227/mms/test/alarm

注:webhook接口url的定义(地址自定义),除了规则制定之外,还有达到告警规则后,需要skywalking调用的webhook接口,如上所示的配置,一定要注意url的缩进,之前缩进两个空格,一直没生效。

告警webhook接口对接

   编写上述webhook对接的接口,当前版本webhook接口调用的方式是post+requestbody,而body中的内容如下:

 

在程序中写一个告警接收接口部署启动

 

在nacos中点击发布后可以看到sw 中的日志 表示已经动态加载

 

然后测试触发告警信息 ,请求132程序的test2接口,可以看到这个请求 平均响应时间超过了1ms ,点sw击告警可以看到输出的告警信息,查看程序日志可以看到接收到告警

 

 

 

9. Sw+Elasticsearch集群配置

下载es  Download Elasticsearch | Elastic

 

配置配置文件:

编辑/config/elasticsearch.yml 文件

## 设置集群名称,集群内所有节点的名称必须一致。

cluster.name: myes

## 索引数据存放的位置 需要手动创建该目录

path.data: /utxt/soft/zpy/skywalking/swes/elasticsearch-7.15.2/data

## 日志文件存放的位置 需要手动创建该目录

path.logs: /utxt/soft/zpy/skywalking/swes/elasticsearch-7.15.2/logs

## 监听地址,用于访问该es(当前服务器ip)

network.host: 192.168.150.132

## es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点

discovery.seed_hosts: ["192.168.150.132""192.168.150.133"]

## es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master

cluster.initial_master_nodes: ["es-node1""es-node2"]


因为es7 要使用jdk11 服务器上是java8 故改用es内置jdk  

修改 bin/elasticsearch-env添加

ES_JAVA_HOME="/utxt/soft/zpy/skywalking/swes/elasticsearch-7.15.2/jdk"

 

修改es jvm 堆大小

Elasticsearch 和 Lucene 对内存使用情况:

 

Elasticsearch 限制的内存大小是 JAVA 堆空间的大小,不包括Lucene 缓存倒排索引数据空间。

一般情况下并不需要更改 JVM 的配置项。

最可能更改的 JVM 配置是堆大小(heap size)

可以使用 jvm.options 配置文件或 ES_JAVA_OPTS 环境变量更改 JVM 配置

首选通过 config/jvm.options配置项 更改配置

Elasticsearch 通过 jvm.options 中的 Xms 和 Xmx 设置堆的大小

应该讲 Xms 和 Xmx 设为相同的值 (最好不要超过32g)

 

确定堆内存大小的值

# 公式

heapSize = math.floor(RAM/2)  # 物理内存的 50% 下取整

if heapSize > threshold:      # 如果大于阈值,则设为等于(或略小于阈值大小)

heapSize = threshold

# 例一机器状况: 物理内存 128G,CompressedOops 阈值为 31 G,zero based Compressed Oops 阈值为 30 G 配置建议: 启动两个实例,堆内存大小设为 30G

# 例二(最佳实践)机器状况: 物理内存 64G,CompressedOops 阈值为 31 G,zero based Compressed Oops 阈值为 30 G 配置建议: 启动一个实例,堆内存大小设为 30G

# 例三机器状况: 物理内存 32G,CompressedOops 阈值为 31 G zero based Compressed Oops 阈值为 30 G 配置建议: 启动一个实例,堆内存大小设为 16G

Es不允许root用户进行启动 此时用sms启动

#启动 ./bin/elasticsearch

#后台启动 ./bin/elasticsearch -d

启动报错:

 

最大可创建文件数太小,使用root用户修改limits.conf

vi /etc/security/limits.conf

# 在文件末尾中增加下面内容

*  hard nofile 65535

*  soft nofile 65535

 

注:* 带表Linux所有用户名称

vi /etc/security/limits.d/20-nproc.conf

# 在文件末尾中增加下面内容

* soft nofile 65536

* hard nofile 65536

* hard nproc 4096

然后重新启动–又报错了啦。。。

 

最大虚拟机内存太小,使用root用户修改sysctl.conf

vi /etc/sysctl.conf

# 在文件中增加下面内容

vm.max_map_count=655360

重新加载配置

sysctl -p 

再次启动-启动成功

 

 

l 集群状态显示“Green”,表示集群健康。还有其他“Yellow和Red”两种状态

 

 

l 查看集群节点-----heap.percent是堆内存的百分比

 

 

l 列出索引

  

Sw+es

修改sw中配置文件 在storage:中选择用es7作为存储数据  其他都不用改就用上文sw的配置就可以了

 

启动sw 查看启动日志 启动成功,访问sw ui界面

 

 

 

这篇关于Nacso+Skywalking+mysql/Elasticsearch 搭建详解,swUi界面详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!