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

SkyWalking全链路监控部署及使用分享_第1张图片

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


【1】Skywalking概述

概述

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

特点

SkyWalking具有以下特性:

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

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

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

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

  • 高性能纯流式分析。


【2】Skywalking架构

SkyWalking全链路监控部署及使用分享_第2张图片

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://:8080/

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

SkyWalking全链路监控部署及使用分享_第3张图片

说明:

  • 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'

你可能感兴趣的:(IT管理,运维开发,敏捷流程,软件工程,skywalking,自动化)