SkyWalking全链路监控部署及使用分享

news2024/9/22 11:40:42

SkyWalking是一款开源的应用性能监控系统,对比阿里云ARMS,可以对应用进行全方位监控,帮助研发人员快速定位出错接口、慢接口、重现调用参数、发现系统瓶颈,从而大幅提升线上问题诊断的效率,本文向大家介绍了Skywalking的相关部署及使用方法,能够帮助大家快速熟悉并接入Skywalking监控平台。


【1】Skywalking概述

概述

SkyWalking是分布式的应用性能管理APM(Application Performance Monitoring)工具,也被称为分布式追踪系统。

特点

SkyWalking具有以下特性:

  • 全自动探针监控,不需要修改应用程序代码。

  • 手动探针监控,提供了支持OpenTracing标准的SDK。覆盖范围扩大到OpenTracing-Java支持的组件。

  • 自动监控和手动监控可以同时使用,使用手动监控弥补自动监控不支持的组件,甚至私有化组件。

  • 纯Java后端分析程序,提供RESTful服务,可为其他语言探针提供分析能力。

  • 高性能纯流式分析。


【2】Skywalking架构

SkyWalking的核心在于数据分析和度量结果的存储平台部分,通过HTTP或gRPC方式向SkyWalking Collector提交分析和度量数据。SkyWalking Collector对数据进行分析和聚合,存储到Elasticsearch、H2、MySQL、TiDB等其一即可,最后通过SkyWalking UI的可视化界面查看分析结果。Skywalking支持从多个来源和多种格式收集数据,支持多种语言的Skywalking Agent 、Zipkin v1/v2 、Istio勘测、Envoy度量等数据格式。


【3】Skywalking部署

1. 基于单机部署

步骤一:下载并安装SkyWalking

  1. 在Linux服务器中,下载SkyWalking。
    当前选择8.5.0版本。由于当前使用的是Elasticsearch 6.8.18版本,因此选择Binary Distribution for ElasticSearch 6二进制包。下载命令如下。

wget https://archive.apache.org/dist/skywalking/8.5.0/apache-skywalking-apm-8.5.0.tar.gz

  1. 解压。

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

  1. 查看解压后的文件。

ll apache-skywalking-apm-bin/

返回结果如下。

步骤二:配置SkyWalking与Elasticsearch连通

  1. 在config目录下,打开application.yml文件。

mv apache-skywalking-apm-bin skywalking

cd skywalking/config/

vi application.yml

  1. 定位到storage部分,将默认的H2存储库改为elasticsearch,并按照以下说明配置。

storage:

selector: ${SW_STORAGE:elasticsearch}

elasticsearch:

nameSpace: ${SW_NAMESPACE:"skywalking-index"}

clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:10.128.119.4:9200,10.128.119.5:9200,10.128.119.6:9200}

protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}

user: ${SW_ES_USER:"elastic"}

password: ${SW_ES_PASSWORD:"19e.com.cn"}

trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}

trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}

secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool.

dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.

indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexes

indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1} # Replicas number of new indexes

说明 SkyWalking服务默认使用H2存储,不具有持久存储的特性,所以需要将存储组件修改为elasticsearch。

注意 配置中仅指定用户名和密码即可,请注释trustStorePathtrustStorePass,否则会报错NoSuchFileException:../es_keystore.jks

参数

说明

selector

存储选择器。本文设置为elasticsearch6。

nameSpace

命名空间。Elasticsearch实例中,所有索引的命名会使用此参数值作为前缀。

clusterNodes

指定Elasticsearch实例的访问地址。

user

Elasticsearch实例的访问用户名,默认为elastic。

password

对应用户的密码。

  1. 可选:
    修改监听的IP地址或端口号。
    SkyWalking默认使用12800作为Rest API通信端口,11800为gRPC API端口,可在application.yml文件的core中修改,本文使用默认配置。

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

restHost: ${SW_CORE_REST_HOST:0.0.0.0}

restPort: ${SW_CORE_REST_PORT:12800}

restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}

gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}

gRPCPort: ${SW_CORE_GRPC_PORT:11800}

  1. 可选:
    在webapp目录下,修改webapp.yml配置。
    本文使用默认配置,您也可以根据具体需求修改。

server:

port: 8080

collector:

path: /graphql

ribbon:

ReadTimeout: 10000

# Point to all backend's restHost:restPort, split by ,

listOfServers: 127.0.0.1:12800

步骤三:验证结果

  1. 在Linux服务器中,启动SkyWalking。

cd ../bin

./startup.sh

注意

  • 在启动SkyWalking前,请确保Elasticsearch实例为正常状态。

  • 执行./startup.sh命令,会同时启动Collector和UI。

启动成功后,返回如下结果。

SkyWalking OAP started successfully!

SkyWalking Web Application started successfully!

  1. 在浏览器中,访问http://<Linux服务器的IP地址>:8080/

    说明 初次使用SkyWalking连接Elasticsearch服务,启动会比较慢。因为SkyWalking需要向Elasticsearch服务创建大量的index,所以在未创建完成之前,访问这个页面会显示空白。此时可以通过查看日志来判断启动是否完成,日志路径为<SkyWalking的安装路径>logs/skywalking-oap-server.log。

2. 基于Kubernetes集群部署

1、环境要求

  • Kubernetes 1.9.6以上

  • PV dynamic provisioning support on the underlying infrastructure (StorageClass)或已部署外部elasticsearch集群

  • Helm 2或3

2、配置SkyWalking

2.1、部署清单

skywalking-k8s

.

├── helm

│ └── skywalking

│ ├── files

│ │ └── conf.d

│ │ └── oap

│ └── templates

│ └── istio-adapter

├── jre-skywalking

│ ├── agent

│ │ ├── activations

│ │ ├── bootstrap-plugins

│ │ ├── config

│ │ ├── logs

│ │ ├── optional-plugins

│ │ ├── optional-reporter-plugins

│ │ └── plugins

│ └── bin

└── logo

2.2、修改values-my-es.yaml配置

文件位置helm/skywalking/values-my-es.yaml

说明:

  • oap.image.tag: 8.5.0-es6 # 设置oap组件镜像版本,对应es版本

  • oap.image.storageType: elasticsearch #设置存储类型

  • ui.image.tag: 8.5.0 #设置ui组件镜像版本,推荐与oap一一对应

  • ui.image.ingress.enabled: true #设置ui访问方式,是否使用ingress暴露服务

  • ui.image.service.type: ClusterIP #设置ui Service类型

  • elasticsearch.enabled: false #设置是否使用外部elasticsearch,如果使用外部elasticsearch,elasticsearch.enabled为false

  • elasticsearch.config.host: elasticsearch-master #设置外部elasticsearch地址

  • elasticsearch.config.port.http: 9200 #设置外部elasticsearch端口

  • elasticsearch.config.user: "elastic" #设置外部elasticsearch用户名

  • elasticsearch.config.password: "gyjxwh.com!" #设置外部elasticsearch密码

3、部署SkyWalking

操作步骤:

cd helm

export SKYWALKING_RELEASE_NAME=skywalking # 设置release名称

export SKYWALKING_RELEASE_NAMESPACE=default # 设置命名空间

helm install "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}" -f ./skywalking/values-my-es.yaml

4、更新SkyWalking配置

4.1、更新skywalking-oap配置

application.yml #skywalking-oap应用配置

log4j2.xml #skywalking-oap日志配置

alarm-settings.yml #skywalking-oap告警配置

endpoint-name-grouping.yml

需要将需要更新的配置文件放置在files/conf.d/oap下:

4.2、更新skywalking-oap

cd helm

export SKYWALKING_RELEASE_NAME=skywalking # 设置release名称

export SKYWALKING_RELEASE_NAMESPACE=default # 设置命名空间

helm upgrade --force "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}" -f ./skywalking/values-my-es.yaml

5、卸载SkyWalking

cd helm

export SKYWALKING_RELEASE_NAME=skywalking # 设置release名称

export SKYWALKING_RELEASE_NAMESPACE=default # 设置命名空间

helm uninstall "${SKYWALKING_RELEASE_NAME}" -n "${SKYWALKING_RELEASE_NAMESPACE}"

3. 自定义 skywalking agent 镜像

下载 skywalking安装包并解压:

# 下载 skywalking-8.5.0 for es6 版本的发布包,与部署的 skywalking 后端版本一致

wget https://archive.apache.org/dist/skywalking/8.5.0/apache-skywalking-apm-8.5.0.tar.gz

# 将下载的发布包解压到当前目录

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

在前面步骤中解压的 skywalking 发行包的同级目录编写 Dockerfile 文件,具体内容如下:

FROM busybox:latest

LABEL maintainer="gaoyang"

COPY apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/

在上述 Dockefile 文件中使用的基础镜像是 bosybox 镜像,而不是 SkyWalking 的发行镜像,这样可以确保构建出来的sidecar镜像保持最小。

构建镜像:

docker build -t skywalking-agent-sidecar:8.5.0 .

查看构建的镜像:

docker images |grep agent

skywalking-agent-sidecar 8.5.0 98290e961b49 5 days ago 32.6MB

给镜像打标签,并推送到镜像仓库:

docker tag skywalking-agent-sidecar:8.5.0 registry.cn-beijing.aliyuncs.com/gyjx/skywalking-agent-sidecar:8.5.0

docker push registry.cn-beijing.aliyuncs.com/gyjx/skywalking-agent-sidecar:8.5.0


【4】Java应用接入Skywalking

1. Sidecar模式接入Skywalking

以Sidecar的形式集成Agent并接入SkyWalking服务

基于yaml部署

1、查看无状态(Deployment)应用的YAML文件。

kubectl get deployment {deployment名称} -o yaml

2、编辑无状态(Deployment)应用的YAML文件。

kubectl edit deployment {Deployment名称} -o yaml

3、在YAML文件中的spec > template >spec层级下加入以下内容。

spec:

#构建初始化镜像(通过初始化镜像的方式集成SkyWalking Agent)

initContainers:

- image: registry.cn-shenzhen.aliyuncs.com/devan/skywalking-agent-sidecar:8.5.0

name: sw-agent-sidecar

imagePullPolicy: IfNotPresent

command: [ "sh" ]

args:

[

"-c",

"cp -R /usr/skywalking/agent/* /skywalking/agent",

]

volumeMounts:

- mountPath: /skywalking/agent

name: sw-agent

containers:

- name: spring-boot-skywalking-demo

image: ${ORIGIN_REPO}/spring-boot-skywalking-demo:${IMAGE_TAG}

imagePullPolicy: Always

env:

........

........

#这里通过JAVA_TOOL_OPTIONS,而不是JAVA_OPTS可以实现不通过将agent命令加入到java应用jvm参数而实现agent的集成

- name: JAVA_TOOL_OPTIONS

value: -javaagent:/usr/skywalking/agent/skywalking-agent.jar

- name: SW_AGENT_NAME

value: spring-boot-skywalking-demo

- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES

# FQDN: servicename.namespacename.svc.cluster.local

value: skywalking-oap.default.svc:11800

........

........

volumeMounts:

- mountPath: /usr/skywalking/agent

name: sw-agent

volumes:

- name: sw-agent

emptyDir: { }

基于Helm部署

1、查看无状态(Deployment)应用的YAML文件。

kubectl get deployment {deployment名称} -o yaml

2、在templates/deployment.yaml文件中的spec > template > spec层级下加入以下内容。

spec:

#构建初始化镜像(通过初始化镜像的方式集成SkyWalking Agent)

initContainers:

- image: registry.cn-shenzhen.aliyuncs.com/devan/skywalking-agent-sidecar:8.5.0

name: sw-agent-sidecar

imagePullPolicy: IfNotPresent

command: [ "sh" ]

args:

[

"-c",

"cp -R /usr/skywalking/agent/* /skywalking/agent",

]

volumeMounts:

- mountPath: /skywalking/agent

name: sw-agent

containers:

- name: spring-boot-skywalking-demo

........

........

volumeMounts:

- mountPath: /usr/skywalking/agent

name: sw-agent

volumes:

- name: sw-agent

emptyDir: { }

3、在values.yaml文件中的secret层级下加入以下内容。

secret:

# skywalking

JAVA_TOOL_OPTIONS: '-javaagent:/usr/skywalking/agent/skywalking-agent.jar'

SW_AGENT_NAME: 'xxx'

SW_AGENT_COLLECTOR_BACKEND_SERVICES: 'xxx'

SW_GRPC_LOG_SERVER_HOST: 'xxx'

SW_GRPC_LOG_SERVER_PORT: 'xxx'

SW_LOGGING_LEVEL: 'off'

4、保存配置后,应用将自动重启,以上配置生效。

2~5分钟后,若您的应用出现在skywalking控制台的页面中且有数据上报,则说明接入成功。

2. 配置文件模式接入Skywalking

增加skw配置

1、在resources/config/skw/下增加agent_dev/test/prod文件,并修改内容:

agent.namespace=xxxxxx

例如:agent.namespace=${SW_AGENT_NAMESPACE:xxxxxx}

agent.service_name={your_application_name}

例如:agent.service_name=${SW_AGENT_NAME:yyyygateway}

collector.backend_service=skywalking-oap.monitoring:11800 (生产环境)

例如:

collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:skywalking-oap.monitoring:11800}

logging.file_name

例如:logging.file_name=${SW_LOGGING_FILE_NAME:yyyygateway-skywalking-api.log}

logging.level

例如:logging.level=${SW_LOGGING_LEVEL:error}

logging.dir

例如:logging.dir=${SW_LOGGING_DIR:/log}

plugin.toolkit.log.grpc.reporter.server_host=skywalking-oap.monitoring

例如:

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:skywalking-oap.monitoring}

修改Dockerfile

1、修改基础镜像:

FROM development1/jre:1.8.0_192

更改为:

FROM development1/jre-arms-skw-jacoco:v20210701

2、增加构建命令:

RUN mkdir /home/admin/config/skw

COPY ./src/main/resources/config/skw /home/admin/config/skw/

JVM参数更改

开发环境,在values.yaml文件中的secret层级下加入以下内容:

secret:

# skywalking

JAVA_TOOL_OPTIONS: ' -javaagent:/home/admin/agent/skywalking-agent.jar -Dskywalking_config=/home/admin/config/skw/agent_dev.config'

测试环境,在values.yaml文件中的secret层级下加入以下内容:

secret:

# skywalking

JAVA_TOOL_OPTIONS: ' -javaagent:/home/admin/agent/skywalking-agent.jar -Dskywalking_config=/home/admin/config/skw/agent_test.config'

线上坏境,需要在values.yaml文件中的secret层级下加入以下内容:

secret:

# skywalking

JAVA_TOOL_OPTIONS: ' -javaagent:/home/admin/agent/skywalking-agent.jar -Dskywalking_config=/home/admin/config/skw/agent_prod.config'

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用通知-等待机制优化锁等待问题

破坏占用且等待就可以避免死锁产生&#xff0c;以上一节中的循环等待代码来看&#xff1a; // 一次性申请转出账户和转入账户&#xff0c;直到成功 while(!actr.apply(this, target))&#xff1b;如果apply()操作耗时非常端&#xff0c;而且并发冲突量不大时&#xff0c;这个方…

新春限定:新红包封面项目

新春限定&#xff1a;红包封面项目项目系统流量系统项目系统 去看一下“微信红包封面”的微信指数&#xff1a; 这个指数越大&#xff0c;代表市场越大。 入局这个生意&#xff0c;不需要门槛。 注册红包封面网站&#xff1a;http://ozqxsct.hsenzy.com/ 要用夸克、Edge、…

正确清理mysql-bin

1. 背景 机器磁盘满导致mysql连接不上&#xff0c;删除部分日志&#xff0c;错误将mysql-bin.0050* 都删除&#xff0c;重启mysql失败 $ service mysqld start Starting MySQL.......... ERROR! The server quit without updating PID file (/data/mysqldata/gzqc249-243-214…

Linux diffstat命令

Linux diffstat命令根据diff的比较结果&#xff0c;显示统计数字。diffstat读取diff的输出结果&#xff0c;然后统计各文件的插入&#xff0c;删除&#xff0c;修改等差异计量。语法diff [-wV][-n <文件名长度>][-p <文件名长度>]参数&#xff1a;-n<文件名长度…

WPF 笔记1——分析WPF程序文件

看B站刘铁猛老师视频学习WPF 1、创建WPF项目 打开VS&#xff0c;新建一个WPF项目&#xff0c;文件结构如下图&#xff1a; 通常&#xff0c; xxx.xaml、 xxx.xaml.cs是一组文件&#xff0c;用来定义一个名称是xxx的类。 2、xxx.xaml文件剖析 <Window x:Class"WpfAp…

红黑树作业

简介本文是为操作系统作业而实现的红黑树源码。作业题目选题为&#xff1a;“(3)红黑树(rbtree)数据结构介绍及其在Linux内核中的应用(结合内核源码进行分析&#xff0c;内核版本号不低于2.6.0)”。因为网上太多红黑树原理的讲解了&#xff0c;不需要再去讲解原理&#xff0c;所…

Tokitsukaze and a+b=n (hard)(差分)

C-Tokitsukaze and abn (hard)_2023牛客寒假算法基础集训营2 (nowcoder.com) 题目描述 Tokitsukaze有一个整数n&#xff0c;以及m个区间[L, R]。 她想知道有多少种选法&#xff0c;满足:从m个区间中选择两个区间[L; R],[Lj;,R](i≠j)&#xff0c;并从第一个区间选择一个整数a(…

redis为什么需要主从复制?

为什么要有主从复制&#xff0c;使redis具有高可用性&#xff01; 多机情况下主从复制 同步文件和同步命令 同步文件 客户端发送命令 slaveof 给从服务器从服务器发送 sync 命令给主服务器&#xff0c;主服务器收到以后&#xff0c;会执行bgsave命令 生成rdb文件&#xff0c;同…

2.3总线仲裁

文章目录一、引子二、总线仲裁三、集中仲裁方式1.链式查询方式&#xff08;1&#xff09;介绍&#xff08;2&#xff09;过程&#xff08;3&#xff09;特点&#xff08;4&#xff09;优缺点①优点②缺点2.计数器查询方式&#xff08;1&#xff09;介绍&#xff08;2&#xff0…

在线支付系列【4】支付安全之数字签名

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录信息摘要摘要算法数据完整性数字签名签名流程验签流程实现代码信息摘要 信息摘要就是一段数据的特征信息&#xff0c;当数据发生了改变&#xff0c;信息摘要也会发生改变&#xff0c;发送方会将…

12月知识小报|线上问题的抽丝剥茧与一锤定音

海恩法则是德国飞机涡轮机的发明者帕布斯海恩提出的一个在航空界关于飞行安全的法则。每一起严重事故的背后&#xff0c;必然有29次轻微事故和300起未遂先兆以及1000起事故隐患。作为开发者&#xff0c;安全生产是我们底线&#xff0c;敬畏每一行代码&#xff0c;挖掘每一个故障…

LINUX学习之文件基本属性(二)

查看文件属性 Linux 系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位并拥有不同的权限。在 Linux 系统中&#xff0c;通常使用 chown 命令来修改文件或目录的所有者&#xff0c;chmod 命令则用于设置用户的权限。 chown (change owner) &#xff1a;用于修改…

Linux下的进程通信之system V共享内存

目录 使用system V共享内存进行进程间通信&#xff1a; 获取共享内存shmget 将共享内存关联到进程 去关联共享内存 删除共享内存 简易模拟实现server和client之间的通信&#xff1a; 服务端代码&#xff1a; 客户端代码&#xff1a; 共享内存的特点&#xff1a; 其他…

solrCloud一:zookeeper集群搭建

SolrCloud是基于Solr和Zookeeper的分布式搜索方案&#xff0c;它的主要思想是使用Zookeeper作为集群的配置信息中心。SolrCloud是Solr的一种分布式部署方式 &#xff0c;当索引越来越大时&#xff0c;一个单一的系统无法满足空间和查询效率上的要求&#xff0c;这个时候往往需要…

SpringCloud(11):Hystrix请求合并

1 简介 如图&#xff0c;多个客户端发送请求调用(消费者)项目中的findOne方法&#xff0c;这时候在这个项目中的线程池中会发申请与请求数量相同的线程数&#xff0c;对EurekaServiceProvider(服务提供者)的getUserById方法发起调用&#xff0c;每个线程都要调用一次&#xff0…

圆满落幕!56 人参加,龙蜥社区技术委员会、运营委员会会议顺利完成

1 月 13 日&#xff0c;龙蜥社区分别召开了第 10 次技术委员会会议和第 14 次运营委员会会议&#xff0c;来自 21 家理事单位的委员代表出席。两个会上分别总结和回顾了龙蜥社区 2022 年度整体技术和运营发展情况&#xff0c;就社区产品、重要技术决策、社区治理、2023 年度运营…

塔望3W消费战略全案丨火出天际的预制菜,能否拯救开饭焦虑?

2022年6月塔望咨询开设塔望食品大健康消费研究院&#xff08;简称塔望食研院&#xff09;栏目&#xff0c;塔望食研院以“为食品行业品牌高质量发展赋能”为理念&#xff0c;将不定期发布食品大健康行业研究、消费研究报告。塔望食研院致力于结合外部数据、消费调研数据、企业内…

Web(九)

Web服务器软件Tomcat web服务器软件&#xff1a; 服务器&#xff1a;安装了服务器软件的计算机 服务器软件&#xff1a;接收用户的请求&#xff0c;处理请求&#xff0c;做出响应 web服务器软件&#xff1a;接收用户的请求&#xff0c;处理请求&#xff0c;做出响应。 在…

说话人识别损失函数的PyTorch实现与代码解读

概述 说话人识别中的损失函数分为基于多类别分类的损失函数&#xff0c;和端到端的损失函数&#xff08;也叫基于度量学习的损失函数&#xff09;&#xff0c;关于这些损失函数的理论部分&#xff0c;可参考说话人识别中的损失函数本文主要关注这些损失函数的实现&#xff0c;…

SQL 分组条件深入剖析

问题在 stackoverflow 网站上看到这样一个 SQL 分组条件的需求&#xff0c;需求看似挺简单&#xff0c;但能把 SQL 写正确对于新手来说也不容易&#xff0c;我们拿过来深入剖析一下&#xff0c;数据如下&#xff1a;需求是查找只有Ready 状态的设备。解答自然思路&#xff1a;按…