目录

skywalking APM 监控

skywalking

基于OpenTracing规范,专门为微服务架构以及云原生服务。

APM 监控

一个基于微服务架构的电商系统

APM (Application Performance Management) 即应用性能管理,属于IT运维管理(ITOM)范畴.
分为一下三个方面:

  • Logging
    服务在处理某个请求时打印的错误日志,可以将这些日志信息记录到Elasticsearch或是其他存储中。通过Kibana或是其他工具来分析这些日志了解服务的行为和状态,大多数情况下。日志记录的数据很分散,并且相互独立。例如错误日志,请求处理过程中关键步骤的日志等等。
  • Metrics
    Metric是可以聚合的,例如为电商系统中每个HTTP接口添加一个计数器,计算每个接口的QPS,可以通过简单的加和计算得到系统的总负载情况。
  • Tracing
    在微服务架构系统中一请求会经过很多服务处理,调用链路会非常长,要确定中间哪个服务出现异常是非常麻烦的事情,通过分布式链路追踪,运维人员就可以构建一个请求的视图。视图上战术了一个请求从进入系统开始到返回响应的整个流程。

系统交互图

系统加载图

目前流行的APM监控

  • Zipkin
    • 对web.xml 进行修改,代码侵入
    • twitter开源
  • Cat
    • 支持Java、C/C++、Node.Js、Python、go
    • 代码侵入,埋点
    • 美团开源
  • Pinpoint
    • 基于字节码注入技术,代码无侵入
    • 韩国公司开发,社区交流滞后
    • 只支持hbase
    • 颗粒度更细
  • Skywalking
    观测性分析平台
    • 基于字节码注入技术,代码无侵入
    • 服务、服务实例、端点指标分析
    • 服务拓扑图分析
    • 服务、服务实例和端点(Endpont)SLA分析
    • 支持es,h2,mysql,TiDb,sharding-sphere

skywalking 整体框架

  • 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
  • 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  • 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
  • 左部分 SkyWalking UI :负责提供控台,查看链路等等。

skywalking 配置

使用docker-compose安装

使用mysql作为存储
下载 mysql-connector-java-8.0.30.jar

1
2
mkdir ./libs/
mv mysql-connector-java-8.0.30.jar ./libs/

创建带mysql驱动的基础镜像

1
2
3
FROM apache/skywalking-oap-server:9.1.0
LABEL maintainer="[email protected]"
COPY ./libs/* /skywalking/oap-libs

上传dockerhub或者自己的镜像仓库,这里我是上传到自己的仓库

  1. 创建镜像

docker build -t skywalking-mysql-server:v1.0 .

  1. 打tag,选择上传位置

docker tag skywalking-mysql-server:v1.0 <仓库地址>/blog/skywalking-mysql-server:v1.0

  1. 上传镜像

docker push <仓库地址>/blog/skywalking-mysql-server:v1.0

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: "3"
services:
  skywalking-oap-server:
    image: "hub.docker.com/jobcher/skywalking-mysql-server:v1.0" #docker iamge 地址
    container_name: "oap-server"
    restart: "always"
    environment:
      - SW_STORAGE=mysql
      - SW_JDBC_URL="jdbc:mysql://10.12.12.4:3306/sk"
      - SW_DATA_SOURCE_USER=user # mysql用户名
      - SW_DATA_SOURCE_PASSWORD=password # mysql密码
    ports:
      - "10.12.12.16:12800:12800"
      - "10.12.12.16:1234:1234"
      - "10.12.12.16:11800:11800"

  skywalking-oap-ui: #UI界面
    image: "apache/skywalking-ui:9.1.0"
    container_name: "oap-ui"
    restart: "always"
    environment:
      - SW_OAP_ADDRESS=http://10.12.12.16:12800
    ports:
      - "8180:8080"