微服务轮子项目(22) -APM监控(SkyWalking)

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
日志服务 SLS,月写入数据量 50GB 1个月
简介: 微服务轮子项目(22) -APM监控(SkyWalking)

1. 前言

SkyWalking开源项目由吴晟2015年创建,同年10月在GitHub上作为个人项目开源。SkyWalking项目的核心目标,是针对微服务Cloud Native、容器化架构,提供应用性能监控和分布式调用链追踪能力。 目前已加入Apache孵化器。目前支持链路追踪和监控应用组件如下,基本涵盖主流框架和容器,如国产PRC Dubbomotan等,国际化的spring boot,spring cloud。提供以下主要功能:

  • 分布式追踪和上下文传输
  • 应用、实例、服务性能指标分析
  • 根源分析
  • 应用拓扑分析
  • 应用和服务依赖分析
  • 慢服务检测
  • 性能优化

下面是 SkyWalking 6.x的架构图:

工作原理:

  • 在应用程序中添加 SkyWalking Agent,就可以将接口、服务、数据库、MQ等进行追踪,将追踪结果通过 HTTPgRPC 发送到 OAPServer,经过分析和聚合,将结果存储到 ElasticsearchH2SkyWalking 同时提供了一个 SkyWalking UI的可视化界面,UIGraphQL + HTTP方式获取存储数据进行展示。

相关资料:

2. APM与其它对比

性能损耗对比:

从上表可以看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPUmemory的影响,在内部服务器进行的压测,对CPUmemory的影响都差不多在10%之内。

2.1 Zipkin

调用链:

优点:与spring-cloud项目整合非常方便,而且支持以spring-boot的方式部署zipkin-collector

缺点:功能比较少,而且有代码入侵(jar包和配置项)

2.2 Pinpoint

首页:

调用链:

优点:功能比较全,UI比较好,而且调用链的跟踪粒度非常细,并且依靠HBase强大的存储能力适合日志量非常庞大的场景

缺点:由于采集信息太过详细所以对性能的损耗最大,并且HBase的维护代价有点大,需要有能力hold住一套HBase集群

2.3 Skywalking

首页:

应用拓扑图:

优点:功能比较全,UI比较好,性能损耗较少,主流中间件和数据库的监控基本都支持

缺点:es强在检索能力但存储能力偏弱

3. Server安装部署

Step1 :准备所需的第三方软件:

  • 需要服务器8080、11800、12800这3个端口未被占用
  • JDK6+(被监控的应用程序运行在jdk6及以上版本)
  • JDK8+(SkyWalking oapServerWebUI部署在jdk8及以上版本)
  • Elasticsearch 5.x+(集群模式或不使用)
  • 被监控应用的宿主服务器系统时间(包含时区)与oapServerwebUI部署的宿主服务器时间设置正确且相同

Step2 :下载发布版:

Step3 :修改配置:

  • 修改config目录下的application.yml文件(只需修改storage的配置,其他默认就可以了)

Step4 :启动:

  • 启动命令在bin目录下,需要启动oapwebapp,执行以下命令:
sh startup.sh

可以分别单独启动oapwebapp,也可以通过startup.sh两个一齐启动:

Step5 :访问:

4. Agent安装

4.1 拷贝agent

拷贝agent目录到所需位置(被监控的应用程序服务器):

  • agent在server的目录下,插件和配置都包含在包中,请不要改变目录结构

agent目录介绍:

  • 配置文件在/config目录中
  • 插件全部放置在/plugins目录中.新的插件,也只需要在启动阶段,放在目录中,就自动生效,删除则失效.
    -Log默认使用文件输出到/logs目录中.

4.2 修改配置

agent的配置可通过修改配置文件或者添加启动参数配置:

vim config/agent.config
  • agent.service_name:应用名
  • collector.backend_service:server端地址

4.3 添加trace-ignore插件

复制optional-plugins里面的apm-trace-ignore-plugin-x.jar到plugins里面:

cp optional-plugins/apm-trace-ignore-plugin-6.0.0-GA.jar plugins/

可以通过配置skywalking.trace.ignore_path环境变量去设置忽略的url,多个以,隔开:

-Dskywalking.trace.ignore_path=/your/path/1/**,/your/path/2/**

4.4 安装agent

应用程序的命令行中添加-javaagent参数. 并确保在-jar参数之前添加它:

java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar

下面是通过启动参数配置来配置agent的例子:

java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \
       -Dskywalking.trace.ignore_path=/actuator/** \
       -Dskywalking.agent.service_name=zlt-uaa \
       -Dskywalking.collector.backend_service=127.0.0.1:11800 \
       -jar \
       yourApp.jar \

5. 日志信息清理

需要清理的有两部分数据:

  • ES的索引数据
  • skywalking的oap-server的log文件

5.1 ES索引数据清理

可通过修改skywalkingconf/application.ymlttl配置来自动清理:

5.2 oap-server的log文件清理

1.创建清理脚本

vim sw-log-clear.sh
#/bin/bash
#只保留5天内的日志文件
LAST_DATA=`date -d "-5 days" "+%Y-%m-%d"`
#删除5天前的所有日志
rm -f /opt/skywalking/logs/skywalking-oap-server-${LAST_DATA}-*.log

2.添加定时任务

#编辑crontab文件,添加相应的任务
vim /etc/crontab
#设置每天的凌晨一点清除索引
0 1 * * * root sh /opt/sw_script/sw-log-clear.sh
相关实践学习
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
本场景将自定义告警信息同时分发至多个通知渠道的需求,例如短信、电子邮件及钉钉群组等。通过采用轻量消息队列(原 MNS)的主题模型的HTTP订阅方式,并结合应用实时监控服务提供的自定义集成能力,使得您能够以简便的配置方式实现上述多渠道同步通知的功能。
目录
相关文章
|
26天前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
日志收集和Spring 微服务监控的最佳实践
|
2月前
|
存储 Prometheus 监控
从入门到实战:一文掌握微服务监控系统 Prometheus + Grafana
随着微服务架构的发展,系统监控变得愈发重要。本文介绍如何利用 Prometheus 和 Grafana 构建高效的监控系统,涵盖数据采集、存储、可视化与告警机制,帮助开发者提升系统可观测性,及时发现故障并优化性能。内容涵盖 Prometheus 的核心组件、数据模型及部署方案,并结合 Grafana 实现可视化监控,适合初学者和进阶开发者参考实践。
345 6
|
18天前
|
监控 Kubernetes Java
使用 New Relic APM 和 Kubernetes Metrics 监控 EKS 上的 Java 微服务
在阿里云AKS上运行Java微服务常遇性能瓶颈与OOMKilled等问题。本文教你通过New Relic实现集群与JVM双层监控,集成Helm部署、JVM代理注入、GC调优及告警仪表盘,打通从节点资源到应用内存的全链路观测,提升排障效率,保障服务稳定。
115 1
|
7月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
101 0
|
7月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
776 0
|
3月前
|
存储 监控 Shell
SkyWalking微服务监控部署与优化全攻略
综上所述,虽然SkyWalking的初始部署流程相对复杂,但通过一步步的准备和配置,可以充分发挥其作为可观测平台的强大功能,实现对微服务架构的高效监控和治理。尽管未亲临,心已向往。将一件事做到极致,便是天分的展现。
|
7月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
244 0
|
7月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
在微服务架构中,随着业务复杂度增加,项目可能需要调用多个微服务。为避免使用`@Value`注解逐一引入配置的繁琐,可通过定义配置类(如`MicroServiceUrl`)并结合`@ConfigurationProperties`注解实现批量管理。此方法需在配置文件中设置微服务地址(如订单、用户、购物车服务),并通过`@Component`将配置类纳入Spring容器。最后,在Controller中通过`@Resource`注入配置类即可便捷使用,提升代码可维护性。
106 0
|
11月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
549 6
|
11月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
253 1

热门文章

最新文章