1. 服务监控三要素[1]
服务监控需要满足的三要素分别如下:
- 日志监控
- 指标监控
- 请求链路追踪
服务监控只要能满足这三个要素,基本就能实现我们想要的监控效果。
1.1.主流APM系统[1:1]
APM 系统(Application Performance Management,即应用性能管理)是对企业的应用系统进行实时监控,实现对应用性能管理和故障定位的系统化解决方案,在运维中常用。
- CAT(开源): 由国内美团点评开源的,基于 Java 语言开发,目前提供 Java、C/C++、Node.js、Python、Go 等语言的客户端,监控数据会全量统计。国内很多公司在用,例如美团点评、携程、拼多多等。CAT 需要开发人员手动在应用程序中埋点,对代码侵入性比较强。
- Zipkin(开源): 由 Twitter 公司开发并开源,Java 语言实现。侵入性相对于 CAT 要低一点,需要对web.xml 等相关配置文件进行修改,但依然对系统有一定的侵入性。Zipkin 可以轻松与 Spring Cloud 进行集成,也是 Spring Cloud 推荐的 APM 系统。
- Pinpoint(开源): 韩国团队开源的 APM 产品,运用了字节码增强技术,只需要在启动时添加启动参数即可实现 APM 功能,对代码无侵入。目前支持 Java 和 PHP 语言,底层采用 HBase 来存储数据,探针收集的数据粒度非常细,但性能损耗较大,因其出现的时间较长,完成度也很高,文档也较为丰富,应用的公司较多。
- SkyWalking(开源): 国人开源的产品,2019 年 4 月 17 日 SkyWalking 从 Apache 基金会的孵化器毕业成为顶级项目。目前 SkyWalking 支持 Java、.Net、Node.js 等探针,数据存储支持MySQL、ElasticSearch等。
- 还有很多不开源的 APM 系统,例如,淘宝鹰眼、Google Dapper 等等。
2. SkyWalking[2]
SkyWalking 是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案
2.1 功能列表
- 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
- 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
- 轻量高效。无需大数据平台,和大量的服务器资源。
- 模块化。UI、存储、集群管理都有多种机制可选。
- 支持告警。
- 优秀的可视化解决方案。
2.2 整体架构
整个架构,分成上、下、左、右四部分:
- 上部分 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 :负责提供控台,查看链路等等。
2.3 搭建SkyWalking 单机环境
- 第一步,搭建一个 Elasticsearch 服务。
- 第二步,下载 SkyWalking 软件包。
- 第三步,搭建一个 SkyWalking OAP 服务。
- 第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。
- 第五步,搭建一个 SkyWalking UI 服务。
环境说明
操作系统:Centos 7.6
Docker:20.10.18
Skywalking OAP:8.9.1
Skywalking UI:8.9.1
Skywalking Agent:8.14
Elasticsearch:7.1.1
下载镜像
docker pull docker.io/elasticsearch:7.1.1
docker pull apache/skywalking-ui:8.9.1
docker pull apache/skywalking-oap-server:8.9.1
说明:Skywalking 8.9.1是 Skywalking 8 的最后一个版本,并且修复了Log4j的JNDI注入漏洞CVE-2021-44228
下载镜像时如提示 command not found ,请先去安装docker
下载Java Agent源码包,后续在项目中会用到
https://archive.apache.org/dist/skywalking/java-agent/8.14.0/apache-skywalking-java-agent-8.14.0.tgz
安装Elasticsearch
先运行es容器
docker run -d --name=es --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m" b0e9f9f047e6
可根据自己的情况修改 ES_JAVA_OPTS 的值
创建持久化文件
mkdir -p /home/elasticsearch/
复制容器内的文件
docker cp es:/usr/share/elasticsearch/data /home/elasticsearch/
docker cp es:/usr/share/elasticsearch/logs /home/elasticsearch/
删除es容器
docker rm -f es
以挂载模式运行
docker run -d --name=es --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /home/elasticsearch/data:/usr/share/elasticsearch/data -v /home/elasticsearch/logs:/usr/share/elasticsearch/logs -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m" b0e9f9f047e6
使用 docker logs -f es 查看启动日志,当看到下面的内容时说明启动成功
"publish_address {172.17.0.2:9300}, bound_addresses {0.0.0.0:9300}"
或者访问 http://ip:9200 时出现下面内容也说明启动成功
{
"name" : "a1c4bc953b44",
"cluster_name" : "docke