如何监控业务的响应速度?Cloud Insight SDK 实践分享
一直在说 Cloud Insight 是数据聚合平台,可以用 SDK 和 API 实现业务监控,如今不拿出点实践人们恐怕是不能信服。那今天本文就先简单介绍一下 SDK 可以应用在哪些方面,再举个真实用户场景来让大家看看。
首先说一点,通过 SDK 你可以把你想看的任何数据都接在 Cloud Insight 平台上,例如运营可以把涉及到的用户数据放上去,让开发,运维,boss 随时都可以看到自己产品的用户,如果涉及到多个层次的指标数据(日活,增长,转化,留存。。。)都有相应的简单操作;开发可以把自己 build 代码的次数,提交的次数放上去;销售也可以把用户签单数,签单额放上去(如果允许的话啊);运维就更不用说了,所有服务器监控指标都可以放上来。
下面介绍一个业务场景的监控,本实例来自真实用户场景。
用户需求
监控可用性和响应速度,运营的需求要求每次接口响应控制在0.1-0.5s内。如果超出这个时间就要找到问题,进行优化。
以前的做法
在后端添加 serverId 和处理时间并放到 http header 中,通过 curl 去获得后端信息和处理时间,采样后生成报表。
后来改成通过 nginx 记录 upstream 的 response time,采样生成可视化数据。但由于 nginx 日志分布于不同的机器中,收集数据相对来讲还是比较麻烦的。
现在的监控手段
配置
通过 Cloud Insight SDK 采集数据,通过探针发送这些数据到后端服务器,后端服务器对数据进行处理,进行展示。
真正操作起来很简单,安装 Ci 探针,安装 Python SDK,编辑代码,调用系统命令,获取 nginx,php 的响应时间,从几个响应时间中取最大值传到 Cloud Insight 服务器,探针默认 30s 抓取一次数据,但我们又想每秒统计三次响应最慢的请求,所以写一个定时执行这个命令的脚本。
#!/usr/bin/env python
# -*- coding:utf8 -*-
import commands
import socket
from oneapm_ci_sdk import statsd
hostname = socket.gethostname()
error, result = commands.getstatusoutput(""" tail /opt/dataroot/nginx/access.log |grep "download" | awk -F '" "' '{print $7}' """)
if ( error == 0 ):
code = result.split("\n")
statsd.gauge('php_response_time.download.%s' % hostname, float( max(code) ) )
print 'php_response_time.%s : %04f' % ( hostname, float(max(code)) )
#获取Nginx Upstream response time
* * * * * for i in $(seq 3); do sleep 15; python /opt/ci_check_php_response_time.py; done
部署好后,可以在自定义数据仪表盘上看到应用数据。把这些自定义数据放在一张仪表盘上,后期可以直接打开这个自定义仪表盘来查看 php 的响应情况,即使是多个不同服务器中的 nginx 消息也都可以放在一张图表上,效果如下图:
这样仪表盘是配置完了,其实还可以设置报警策略,在一些指标超出范围时触发报警。
查看
依照平时使用习惯,进入监控界面,首先第一眼就是各个平台概览,看看是不是都在正常运行,正常情况下图标都应该是绿色的,如果变成红色了就点进去看看,上面会有相应报错。
上述平台如果没有问题,就进入仪表盘页面,首先左面是自定义仪表盘,在这就可以查看之前配置的 php 的响应情况,右面是平台仪表盘,一般你系统监控上什么就会自动出现相应的组件信息。
点击查看业务数据的仪表盘,发现了一个 PHP 响应时间达到 5s 的异常纪录,查看 Ai(Application Insight) 的 web 事务(web 事务默认会抓取响应超过 2s 的事务),果然发现一个异常缓慢的事务,通过分析(代码级监控)确认问题,解决问题。
延伸
SDK 是 Cloud Insight 团队根据 StatsD 进行了修改,方便用户上传自定义指标,目前支持的数据格式有 Counters Gauges 2种,支持的语言有 Python Ruby Nodejs 3 种,其他的 Java PHP 还在开发中。目前使用 SDK 的前提条件为需要安装 Cloud Insight Agent。Agent 的采集周期为 30 s,数据发送周期为 15 s。
我们还将提供 Cloud Insight API,它拥有更加强大的功能,通过它可以不受任何约束的发送符合 Cloud Insight 数据格式标准的任意数据,无论本机是否安装了 Cloud Insight Agent,目前在开发中。
总结
- 监控服务器,简单,一键安装
- 监控数据库等组件,简单,修改配置文件,重启探针
- 监控业务数据,依旧简单,使用 SDK
简单列几个有意思的 SDK 监控应用:
- 监控北京空气质量 监控不同地区 PM2.5
- 监控闭路电视的硬盘空间 github 上有项目
- 使用 Cloud Insight SDK 实现 Druid 监控 实现大数据监控
参考文档:
Cloud Insight 集监控、管理、计算、协作、可视化于一身,帮助所有 IT 公司,减少在系统监控上的人力和时间成本投入,让运维工作更加高效、简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
本文转自 OneAPM 官方博客
如何监控业务的响应速度?Cloud Insight SDK 实践分享的更多相关文章
- 如何使用 Cloud Insight SDK 实现 Druid 监控?
Druid 简介与用途 首先说明,这里所说的 Druid 并不是阿里巴巴的数据库连接池项目,而是 Eric Tschetter 创立的一个开源的分布式实时处理系统,希望为烧钱的大数据处理,提供一种更廉 ...
- 使用 Cloud Insight SDK 监控北京空气质量!
现在越来越多的 App 都开始有广告了.特别是空气质量监测,和天气类的 App,广告还是蛮多的,眼花缭乱,真是够了. 最近刚好在用一款系统监控工具 Cloud Insight,它提供的 SDK 可以把 ...
- 微服务性能分析|Pyroscope 集合 Spring Cloud Pig 的实践分享
随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈.CPU利用率高.或内存泄漏等问题.要找到问题的根本原因,我们通常都会通过日志.进程再结合代码去判断根 ...
- Docker 监控- Prometheus VS Cloud Insight
如今,越来越多的公司开始使用 Docker 了,2 / 3 的公司在尝试了 Docker 后最终使用了它.为了能够更精确的分配每个容器能使用的资源,我们想要实时获取容器运行时使用资源的情况,怎样对 D ...
- Cloud Insight 和 BearyChat 第一次合体,好紧张!
说到 ChatOps 我们可能立刻想到是 Slack(啥?没听过?哦!),但是由于国内网络和语言的问题你可能无法拥有很好的体验了.那就把目光转回国内吧,国内的话就不得不提到 BearyChat 等 C ...
- Cloud Insight 客户案例-晨芯时代科技有限公司
在不断迭代的过程中,Cloud Insight 也很重视客户对产品的使用体验,这次我们拜访了晨芯时代,了解到他们在使用 Cloud Insight 过程中对产品的一些想法. 客户背景 晨芯时代是一家开 ...
- Cloud Insight 仪表盘上线 | 全面监控 Redis
OneAPM 作为应用性能领域的新兴领军企业,近期发布了重量级新产品-- Cloud Insight 数据管理平台,用它能够监控所有基础组件,并通过 tag 标签对数据进行管理. 近日,Cloud I ...
- 极客范:如何使用 Cloud Insight 来监控闭路电视?
最近新上线支持 Windows 系统及其组件 监控功能的 Cloud Insight,在系统监控领域基本囊括了对所有主流和部分非主流平台的支持.但是这还不够,Cloud Insight 可不仅仅是一个 ...
- 用 OneAPM Cloud Insight 监控 Docker 性能
Docker 是构建和部署软件的一个新兴的轻量级的平台,也是一个减轻替代虚拟机的容器.Docker 通过给开发者提供兼容不同环境的镜像,成为解决现代基础设施的持续交付的一个流行的解决方案. 和虚拟机一 ...
随机推荐
- .NET4.5可以给所有线程设置默认的Culture了
How to set CurrentCulture for all threads in a domain in .NET 4.5 Before .NET 4.5 if we wanted to se ...
- Scrapy源码学习(一)
用Scrapy已经有一段时间了,觉得该是看一下源码的时候了.最开始用的时候还是0.16的版本,现在稳定版已经到了0.18.结合使用Scrapy的过程,先从Scrapy的命令行看起. 一.准备 下载源代 ...
- PHP获取和操作配置文件php.ini的几个函数
当无法修改php.ini配置文件怎么办,莫担心. php有一套设置和获取配置信息的函数. 1.ini_get()获取配置参数,ini_set()设置配置参数 <?php
- CLR via C# 内存管理读书记
1. CLR 垃圾回收采用基于代的机制, 在一次垃圾回收中存活下来的对象被提升到另一代 2. 在确认对象是否垃圾时,从一组根开始,根包括静态字段,方法参数,局部变量等 3. 使用CriticalFin ...
- MemProof教程
简介 MemProof(内存清道夫)是AutomatedQA出品的一款非常不错的检测内存泄漏和资源泄漏的免费调试工具,适合于WIN32平台下使用DELPHI/C++ BUILDER开发的应用程序. 利 ...
- Discuz X1.5 利用添加好友处存储xss进行蠕虫worm扩散
Discuz X1.5 在添加好友的地方有处存储xss,借助此处xss跟用户交互可以进行蠕虫指数扩散. 位置在添加好友处 x完之后的效果 点击后触发 ok 借助此存储xss,我们进行worm传播,dz ...
- c# HttpWebRequest与HttpWebResponse(转)
如果你想做一些,抓取,或者是自动获取的功能,那么就跟我一起来学习一下Http请求吧.本文章会对Http请求时的Get和Post方式进行详细的说明,在请求时的参数怎么发送,怎么带Cookie,怎么设置证 ...
- 无法打开物理文件xxx.mdf 操作系统错误 5:“5(拒绝访问。)” (Microsoft SQL Server,错误: 5120) 的解决方法
问题描述:在附加数据库到sql server时,附加不上,出现如下图所示的错误 解决方法:找到xxx.mdf和xxx_log.ldf文件, 点击“右键”->“属性”->"安全&q ...
- poj 3740 Easy Finding 二进制压缩枚举dfs 与 DLX模板详细解析
题目链接:http://poj.org/problem?id=3740 题意: 是否从0,1矩阵中选出若干行,使得新的矩阵每一列有且仅有一个1? 原矩阵N*M $ 1<= N <= 16 ...
- c++继承详解
C++中的三种继承public,protected,private 三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员 ...