为什么需要监控,在哪些层次上监控,监控什么

监控是为复杂的分布式系统服务的,它收集跨不同的应用,不同的服务器的系统行为信息,可通过采样收集所需的性能指标,帮助分析性能问题,并在指标超过正常值时报警。

全链路监控

全链路监控的起源

全链路监控又名分布式监控系统,全链路追踪。

目前市面的全链路系统基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)来做的。

论文

全链路监控的思想

APM(Application Performance Management)的核心思想是什么? 在应用服务各节点相互调用的时候,从中记录并传递一个应用级别的标记,这个标记可以用来关联各个服务节点之间的关系。比如两个应用服务节点之间使用HTTP作为传输协议的话,那么这些标记就会被加入到HTTP头中。可见如何传递这些标记是与应用服务节点之间使用的通讯协议有关的,常用的协议就相对容易加入这些内容,一些按需定制的可能就相对困难些,这一点也直接决定了实现分布式追踪系统的难度。

它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,APM会感知应用间关系和服务间关系,并进行相应的指标统计。

如何衡量一个大规模集群的跟踪系统的优劣?

它应该满足低损耗、应用透明的、大范围部署这三个需求的。

全链路监控系统的功能

web应用过程:分析url调用过程中性能消耗原因,抓取超过阈值url的详细数据

数据库性能:支持多种数据库类型的监测,定位并追踪慢SQL语句问题

错误分析:记录错误发生时的详细信息,统计应用错误率,定位问题具体至代码行

外部API调用:可以监测所有服务端应用外部调用API的耗时,并进行汇总统计

线程剖析:可以实现生产环境下实时在线的线程剖析,可在运行时了解代码性能

NoSQL分析:实时监控Memcache, MongoDB,Redis等NoSQL数据库的性能问题

JVM性能:实时监控JVM运行状态,通过图表展示JVM内存分配情况、内存使用情况、垃圾收集信息、类加载数量、JVM 线程信息以及会话信息。

HTTP 会话:分析每个应用程序的 HTTP 会话数,包括:活跃、过期、拒绝的会话。

一个比较完整的全链路监控系统,通常会包括几个部分。

第一,数据埋点和采集。

第二,指标计算。

第三,指标存储、查询、展现。

第四,调用链的存储、查询、展现。

第五,告警、问题定位。

第六,自监控。

第七,治理。

全链路监控系统的解决方案

Pinpoint (开源)

Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.

Pinpoint等相关工具的作用就是追踪每个请求的完整调用链路,收集调用链路上每个服务的性能数据对代码的零侵入,运用JavaAgent字节码增强技术,只需要加启动参数即可

* Pinpoint-Collector:收集各种性能数据

* Pinpoint-Agent:和自己运行的应用关联起来的探针

* Pinpoint-Web:将收集到的数据显示成WEB网页形式

* HBase Storage:收集到的数据存到HBase中

复制代码

SkyWalking (开源)

https://baijiahao.baidu.com/s?id=1585656128092617457&wfr=spider&for=pc

skywalaking总体架构分为三部分

skywalking-collector:链路数据归集器,数据可以落地ElasticSearch,单机也可以落地H2,不推荐,H2仅作为临时演示用

skywalking-web:web可视化平台,用来展示落地的数据

skywalking-agent:探针,用来收集和发送数据到归集器

Zipkin (开源)

https://www.cnblogs.com/zhongpan/p/7506930.html

官网:OpenZipkin · http://zipkin.io/

github地址:https://github.com/openzipkin/zipkin

这个是twitter开源出来的,也是参考Dapper的体系来做的。

Zipkin的java应用端是通过一个叫Brave的组件来实现对应用内部的性能分析数据采集。

Brave的github地址:https://github.com/openzipkin/brave

这个组件通过实现一系列的java拦截器,来做到对http/servlet请求、数据库访问的调用过程跟踪。

然后通过在spring之类的配置文件里加入这些拦截器,完成对java应用的性能数据采集。

CAT (开源)

github地址:https://github.com/dianping/cat

跟踪的手段,是要在代码里硬编码写一些“埋点”,也就是侵入式的。

这样做有利有弊,好处是可以在自己需要的地方加埋点,比较有针对性;坏处是必须改动现有系统,很多开发团队不愿意。

其他监控

普罗米修斯

https://www.cnblogs.com/Leo_wl/p/8143222.html

http://blog.csdn.net/j3T9Z7H/article/details/78139771

Prometheus(普罗米修斯)是一个名字非常酷的开源监控系统。它支持多维度的指标数据模型,服务端通过HTTP协议定时拉取数据后,通过灵活的查询语言,实现监控的目的。

Prometheus 可以从配置或者用服务发现,去调用各个应用的 metrics 接口,来采集数据,然后存储在硬盘中,而如果是基础应用比如数据库,负载均衡器等,可以在相关的服务中安装 Exporters 来提供 metrics 接口供 Prometheus 拉取。

采集到的数据有两个去向,一个是报警,另一个是可视化。

Zabbix

zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

zabbix由2部分构成,zabbix server与可选组件zabbix agent。

zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。

Consul 和 Zookeeper

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置,内置了服务注册与发现,具有健康检查、Key/Value存储、多数据中心的功能。

健康检查

What is the Health Check

Health Check(健康状态检查)不仅是对自己应用程序内部检测各个项目之间的健康状态(各项目的运行情况、项目之间的连接情况等),还包括了应用程序对外部或者第三方依赖库的状态检测。

复制代码

Why use Health Check

现在我们的项目越来越多的从单体多层架构转换成多项目多层架构即现在流行的微服务架构。

原来我们的App把各个模块分层分项目处理,比如Users项目仅仅处理User的一些业务需求,但在整个项目使用的时候,我们仅仅需要引用其类库即可,不用担心项目与类库之间的不兼容问题,如果不兼容在编译期已经会有提示。但如今,业务规模越来越庞大的时候,我们单独把Users作为一个service来做,所有一切都在其内部处理,对于外部来说仅仅公开几个api即可,但与项目之间的连接就从单纯的物理引用关系转换成了网络调用关系。

当我们架构从单体架构到微服务架构的时候,我们会发现越来越多的引用从物理转向了网络,在原来我们不需要考虑之间是否调用成功,但现在我们必须考虑进去,网络因素、服务器因素、其他因素等都会影响各服务之间的调用,因此Health Check孕育而生,它在微服务架构中是举足轻重的。

复制代码

Health Check’s Feathure

Health Check的功能有哪些?在微服务架构中很简单,就是检查各services的运行状态是否正常。在微服务的架构中,所有的一切都是service,db is service,rabbitmq is service,auth is service, shoppingcart is server……我们的架构能够根据业务需求,横向的扩容,多个db,多个rabbitmq,多个auth,多个shoppingcart。我们总结下,微服务架构下的Health Check是通过网络检查各services是否正常运行,它的功能是:

复制代码

1、提供外部调用Health Check接口,反馈自身状态

2、检测相关service状态是否正常(比如db server,能否连接到db,能否打开数据库等)

3、UnHealthly时处理机制

参考资源:

http://bigbully.github.io/Dapper-translation/

http://iamlile.github.io/2017/10/06/apm/

http://www.360doc.com/content/18/0129/10/52429660_726071502.shtml

cat全链路监控_全链路监控(一):方案概述相关推荐

  1. cat全链路监控_全链路监控选型

    实现全链路监控 SkyWalking SkyWalking是apache基金会下面的一个开源APM项目,为微服务架构和云原生架构系统设计.它通过探针自动收集所需的指标,并进行分布式追踪.通过这些调用链 ...

  2. openfalcon 组件监控_运维监控系统之Open-Falcon

    目录: Open-Falcon的简介 行业监控软件对比 Open-Falcon架构 Open-Falcon部署 Open-Falcon相关连接 一.Open-Falcon的简介 1.监控系统,可以从运 ...

  3. 腐烂国度2主宰版计算机学知识,一、主宰版新内容/mod说明_腐烂国度2主宰版图文全攻略_全任务全基地详解资料攻略_新基地位置_3DM单机...

    <腐烂国度2:主宰版>图文全攻略,全任务全基地详解资料攻略(含"新增内容""资料合集""全任务/基地""上手指南&qu ...

  4. 链路 英文_光纤链路基础

    光纤链路基础 什么是光纤? 光纤的完整名称叫做光导纤维英文名是 OPTIC FIBER,是用纯石英(玻璃)以特别的工艺拉成比头发还细中间有介质的玻璃管,可以在很短的时间内传递巨大数量的信息. 光纤的特 ...

  5. 普罗米修斯 监控_新一代的监控系统普罗米修斯(Prometheus)

    Prometheus是一个开源的监控和告警系统.从2012开始,很多的公司和组织开始采用Prometheus作为他们的监控系统.这个开源系统有着活跃的开发者社区和用户群体. Prometheus主要的 ...

  6. python系统监控_使用Python监控Linux系统

    阅读目录 一.Python编写的监控工具 一.多功能系统资源统计工具dstat 1.dstat介绍 dstat是一个用Python语言实现的多功能系统资源统计工具,用来取代Linux下的vmstat. ...

  7. python实时监控_使用Python监控Linux系统

    服务器名称{{ hostname }} 开机时间{{boot_time}} cpu个数{{ cpu_count }} cpu利用率{{ cpu_percent }} 内存总量{{ mem_percen ...

  8. mysql master 监控_可用于监控 mysql Master Slave 状态的python代码

    代码如下: import os import sys import MySQLdb def getStatus(conn): query = " SHOW SLAVE STATUS &quo ...

  9. cat全链路监控_谛听全链路监控平台实践与思考

    一.项目背景 近几年,信也科技的研发技术伴随着业务的快速增长逐步演化为微服务化的分布式体系架构,但随之带来的系统间的上下游依赖关系的复杂度也呈指数级上升,已有的烟囱式的监控产品(CAT.ELK等)存在 ...

最新文章

  1. PTA团体程序设计天梯赛-L2-021 点赞狂魔
  2. 如何阻止子元素触发父元素的事件
  3. linux c rename 重命名文件和文件夹
  4. 计算机专业推荐表自我介绍,就业推荐表-自我介绍
  5. 最全编程语言在线 API 文档
  6. Codeforces 527C Glass Carving
  7. python实现文件格式转换_python实现快速文件格式批量转换的方法
  8. (原創) 如何為Blog加上簡體中文(繁體中文)翻譯? (Web) (CSS) (JavaScript)
  9. BeanDefinition源码解析
  10. python2ide_python_2_IDE安装
  11. 云数据库模糊查询与索引管理
  12. 测试用例设计方法-场景法详解
  13. Spring Data Redis 官方中文文档
  14. 基于Web的酒店客房管理系统的设计与实现
  15. Python使用pyecharts库画简单的中国地图
  16. 异步FIFO跨时钟域亚稳态如何解决?
  17. mt管理器主题修改教程_领不了的QQ画图红包教程
  18. 资深大牛带你了解源码!带你轻松理解Android-Hook机制,已开源
  19. 【 C++ 】AVL树
  20. Win7下如何在windows资源管理器中打开FTP

热门文章

  1. Class类,Class对象的理解
  2. 任务6 -传统机器学习--SVM
  3. 全球著名的十位质量大师
  4. 未名企鹅极客 | 医药数据管理中的短文本高效匹配技术
  5. 【Pandas】 ValueError: Unable to parse string “2,00“ at position 3769
  6. java el 表达式_Javaweb之EL表达式
  7. 游戏制作之路(1)Blender下载
  8. 多卡聚合通信设备在广电视频传输行业解决方案
  9. Water Flow Optimizer 水流优化器
  10. 提升搜索引擎的友好度只要五个步骤