1 SkyWalking

1.1 概述

image-1658911013817

SkyWalking 是什么?

SkyWalking是一款分布式系统的应用程序性能监控工具,专为微服务云原生和基于容器的 (Kubernetes) 架构而设计。

1.2 功能列表

既然这么强大,那么SkyWalking 有哪些功能呢?

image-1658911246688

  • 跟踪、指标和日志记录:SkyWalking 旨在实现一致的可观察性。在浏览器中监控您的应用程序发生的一切
  • 服务网格和 FaaS 准备就绪:内置服务网格和 FaaS 可观察性。从 Istio + Envoy Service Mesh 和 OpenFunction 作为 FaaS 平台收集和分析数据。
  • 可插拔存储:SkyWalking 支持广泛的后端存储解决方案,支持(H2、OpenSearch、ElasticSearch 6, 7, 8、MySQL、TiDB、PostgreSQL、BanyanDB)并且它们是可插拔的。
  • 多种监控手段:通过语言探针和 Service Mesh 等手段,获得链路、日志、指标等监控数据
  • 多个语言探针:Java、.Net Core、PHP、NodeJS、Golang、LUA、Rust、C++ 等
  • 轻量级高性能:无需大数据组件,无需大量的硬件资源,且对应用实例的负载消耗极低
  • 模块化架构:数据传输、数据存储,注册发现等模块,可替换不同的基础设施实现
  • 端到端的监控:SkyWalking 提供本地代理并与全球可观察性工具配合使用以支持所有堆栈监控,前端:Vue、React 等,后端:Java、.Net Core、PHP、NodeJS、Golang、Istio 等
  • 告警支持:内置 webhook 支持通过 HTTP、gRPC、Slack 等自动发送事件通知
  • 可视化界面:好用的监控后台,可支持自定义配置,或是进一步自定义它或集成您自己的。

1.3 整体架构

SkyWalking 整体架构如何?

SkyWalking 在逻辑上分为四个部分:Probes、Platform backend、Storage 和 UI。

image-1658911792565

  • Agent:在应用中,收集 Trace、Log、Metrics 等监控数据,使用 RPC、RESTful API、Kafka 等 Transport 传输方式,发送给 OAP 服务,包括各种格式的指标、跟踪、日志和事件(SkyWalking、Zipkin、OpenTelemetry、Prometheus、Zabbix 等)
  • 平台后端:支持数据聚合、分析和流式处理,涵盖跟踪、指标、日志和事件。作为聚合者角色、接收者角色或两者兼而有之。
  • Storage:通过开放/可插入接口存储 SkyWalking 数据。您可以选择现有的实现,例如 ElasticSearch、H2、MySQL、TiDB、BanyanDB,也可以自己实现。
  • Web UI:是一个高度可定制的基于 Web 的界面,允许 SkyWalking 最终用户可视化和管理 SkyWalking 数据。

1.4 官方文档

https://skywalking.apache.org/docs/main/latest/readme/ 地址下,提供了 SkyWalking 的英文文档。
考虑英语水平有限,推荐先阅读 https://github.com/SkyAPM/document-cn-translation-of-skywalking 地址,提供了 SkyWalking 的中文文档。

2. 搭建skywalking 单机环境

2.1 环境

本次搭建基于容器环境,如果有不了解容器的,请先阅读之前我写过的两篇文章

2.2 skywalking docker-compose 准备

  1. 新建skywalking目录
mkdir skywalking
cd skywalking
mkdir elasticsearch && cd elasticsearch
mkdir config && cd config
touch elasticsearch.yml
  1. 编辑elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
# In tracing scenario, consider to set more than this at least.
# thread_pool.index.queue_size: 1000 # Only suitable for ElasticSearch 6
thread_pool.write.queue_size: 1000 # Suitable for ElasticSearch 6 and 7

然后保存
3. 新建docker-compose.yaml

version: '3.3'
services:
  elasticsearch:
    image: elasticsearch:7.17.5
    container_name: elasticsearch
    environment:
      - "cluster.name=elasticsearch"
      - "discovery.type=single-node"
      - "ES_JAVA_OPTS=-Xms1g -Xmx2g"
    volumes:
      - ./elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - ./elasticsearch/data:/usr/share/elasticsearch/data
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9200:9200
    restart: always
  oap:
    image: apache/skywalking-oap-server:9.1.0
    container_name: oap
    depends_on:
      - elasticsearch
    links:
      - elasticsearch:elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    volumes:
      - ./config:/skywalking/config
    environment:
      SW_STORAGE: elasticsearch
      SW_NAMESPACE: sk-es
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      SW_STORAGE_ES_ADVANCED: "{\"index.translog.durability\":\"request\",\"index.translog.sync_interval\":\"5s\"}"
      SW_STORAGE_ES_INDEX_SHARDS_NUMBER: 2
      SW_STORAGE_ES_BULK_ACTIONS: 2000
      SW_STORAGE_ES_BULK_SIZE: 20
      SW_STORAGE_ES_FLUSH_INTERVAL: 10
      SW_STORAGE_ES_CONCURRENT_REQUESTS: 2
      SW_STORAGE_DAY_STEP: 15
      SW_CORE_RECORD_DATA_TTL: 15
      SW_CORE_METRICS_DATA_TTL: 20
  skywalking-ui:
    image: apache/skywalking-ui:9.1.0
    container_name: skywalking-ui
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 9090:8080
    environment:
      SW_OAP_ADDRESS: http://oap:12800
      SW_TIMEOUT: 5000

编辑完保存

image-1658912697541

  1. 运行容器

在skywalking目录下运行容器

docker-compose up -d

出现以下代表安装成功

image-1658912803176

  1. 访问 UI 界面

浏览器输入http://127.0.0.1:9090/,出现以下界面

image-1658913110835

2.3 SkyWalking Java Agent

  1. 进入skywalking 下载页面,下载Java Agent最新包
    image-1658913185015

  2. 解压缩skywalking-agent.jar

image-1658913329691

  1. 配置 Java 启动脚本
  • idea 启动
    image-1658913450458
    jvm 参数
-javaagent:/Users/zhangsan/skywalking/agent/skywalking-agent.jar

SkyWalking Agent 配置

SW_AGENT_NAME=sparkzxl-auth-server;SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800;SW_AGENT_SPAN_LIMIT=3000
参数 说明 示例值
SW_AGENT_NAME 配置 Agent 名字。一般来说,我们直接使用 Spring Boot 项目的 spring.application.name sparkzxl-auth-server
SW_AGENT_COLLECTOR_BACKEND_SERVICES 配置 Collector 地址(OAP连接地址) 127.0.0.1:11800
SW_AGENT_SPAN_LIMIT 配置链路的最大 Span 数量。一般情况下,不需要配置,默认为 300 。主要考虑,有些新上 SkyWalking Agent 的项目,代码可能比较糟糕 2000
  1. 启动 Spring Boot 项目
    idea 启动项目,在启动日志中,我们可以看到 SkyWalking Agent 被加载的日志。日志示例如下:
EBUG 2022-07-27 17:22:43.915 main AgentPackagePath : The beacon class location is jar:file:/Users/zhouxinlei/skywalking/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class. 
INFO 2022-07-27 17:22:43.916 main SnifferConfigInitializer : Config file found in /Users/zhouxinlei/skywalking/agent/config/agent.config. 

同时,也可以在 /Users/zhangsan/skywalking-agent/logs/skywalking-api.log 查看对应的 SkyWalking Agent 日志。

image-1658913866610

2.4 简单测试

启动完成后,可以去 SkyWalking UI 查看是否链路收集成功。

① 打开 http://127.0.0.1:9090/ 地址,进入 SkyWalking UI 界面。

image-1658913940450

② 点击service names

image-1658914026303

可以看到很多指标

③ 点击Trace,追踪接口请求

image-1658914145272
④其他tab

image-1658914186041

image-1658914201471

image-1658914219399

3 彩蛋

本文仅仅是简单的 SkyWalking 入门文章,如果想要更好的使用 SkyWalking,推荐通读下《SkyWalking 文档》

😈 最后弱弱的问一句,上完 SkyWaling 之后,有没发现自己系统各种地方慢慢慢!嘻嘻!

下一节讲解skywalking 日志追踪分析,先上个效果图:
image-1658914425090

image-1658914439850

image-1658914453952

上一篇 下一篇