使用 StatsD + InfluxDB + Grafana 搭建 Node.js 监控系统 (二)
文章来源:zhuanlan.zhihu.com/p/26981364?…
上一篇主要讲了 StatsD + InfluxDB + Grafana 的搭建并用 Grafana 创建了两种图表(Graph):
- api 每个接口的请求量
- api 每个接口的响应时间
这一篇主要讲讲两个深入使用 Grafana 的方式:
- 如何将 Grafana 跟 ELK 紧密的结合起来
- Grafana 监控报警
Grafana + ELK
在观察 Grafana 监控时,发现某个 api 接口响应时间突然有一个尖刺,这个时候的表情是:
不过别急,我之前写过一篇《Koa 请求日志打点工具》讲了如何打点 Koa 应用,将慢日志收集到 ELK,可以看到具体某个请求每一步 yield 表达式的执行耗时。那如何将 Grafana 和 ELK 中的打点日志结合起来呢?我们深入研究下 Grafana,会发现一个可用的功能:Grafana 的图表可以添加 link,如下:
上图选项的意思是:当鼠标悬浮在图表的左上角时,会弹出一个名为 Go to shimo 的链接,点击会跳转到 shimo.im。记住勾选上 Include time range,这是关键所在。
Kibana-RequestId-Link
勾选 Include time range 会在 querystring 里添加 from=xxx&to=xxx,而且当选取范围时 Grafana 的 time range 格式跟 Kibana 的还不太一样。于是我写了一个 Chrome 插件 kibana-requestId-link,解决了两个问题:
- 转换 time range 格式。即从 Grafana 带到 Kibana 的 time range(from 和 to)转化成 Kibana 认识的 time range,并重定向。
- 给 requestId 添加 link。点击后跳转到限定在相同时间范围内通过该 requestId 查询的结果,省了自己再粘贴复制到 Kibana 查询一遍的过程。
该插件已发布到 Chrome App Store,下载地址。
安装完插件后,我们还需要修改初始化 Grafana 响应时间图表的脚本,将:
links: [] 复制代码
改为:
"links": [ { "title": "Go to kibana", "type": "absolute", "keepTime": true, "targetBlank": true, "url": "http://你的kibana地址/app/kibana#/discover?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-1h,mode:quick,to:now))&_a=(columns:!(routerName,sumOfTake,requestId),index:'logstash-*',interval:auto,query:(query_string:(analyze_wildcard:!t,query:'app:%22api%22%20AND%20routerName:%22<%= action %>%22%20AND%20_exists_:%22sumOfTake%22')),sort:!('@timestamp',asc))" } ] 复制代码
这里有两点需要说明:
- url 里默认 time:(from:now-1h,mode:quick,to:now),kibana-requestId-link 插件会将这个值替换掉。
- query_string 里查询语句为:
app:"api" AND routerName:"xxx" AND _exists_:"sumOfTake" 复制代码
这里是针对我们业务 api 的 lucene 查询语句。app 限定为 api 的日志,routerName 表明是哪个接口,_exists_:"sumOfTake" 表明是请求最后一步的 log(因为只有慢日志和错误日志的最后一步才加了 sumOfTake 字段)。一句话解释:查询某个时间段内, api 某个接口的所有慢请求和错误请求。
举个真实的例子,过去一小时 file.star 这个接口的响应时间图表:
可以看出,在 09:17 和 09:19 左右分别有一个尖刺(响应时间大于500ms),点击 Go to kibana 跳转到 Kibana,如下:
有两条慢日志,且时间点和响应时间都吻合(这里没有错误请求日志)。我们点击第二条慢日志的 requestId,跳转到如下:
可以看出从请求到来到结束执行了 18 步,大部分 step 执行时间都很短,但在 step=17 这一步执行了 1190ms,点击左边展开查看具体信息:
url 表明是哪个接口,fn 表明 yield 表达式是 this.me.addStarredFile(file, { individualHooks: true }),filename 表明代码在 /data/app/api/controllers/file.js:439:4,status 是 afterYield 表明这个 yield 表达式执行的时间(beforeYield 表示上个 yield 表达式执行之后到这个 yield 表达式执行之前),take 表明执行了 1190ms。
Grafana 监控报警
Grafana v4 版本加入了报警(Alert)功能。
首先,点击左上角图标弹出选项菜单->Alerting->Alert List->Configure notifications。如果没有 channel,点击 New Channel 创建一个。创建或修改 channel 都如下所示:
Email addresses 中 email 地址以分号隔开。点击 Send Test 测试是否能收到邮件。
注意:需要配置 Grafana 的使用邮箱地址。
回到具体的监控图表,进入编辑页面,有一个 Alert tab 页,如下:
上图选项的意思是:给 file.star 接口加一个监控报警,每 60s 检查一次,如果过去 5m 平均响应时间大于 500ms 则发送报警邮件。Notifications 可以设置发送到哪些 channel,这里设置只发送到 admin 这个 channel,可以在 Message 里填写详细的描述,State history 保存了所有报警历史。
对应的我们需要修改创建响应时间图表的脚本,添加 alert 字段:
{ "alert": { "conditions": [ { "evaluator": { "params": [ 500 ], "type": "gt" }, "operator": { "type": "and" }, "query": { "params": [ "A", "5m", "now" ] }, "reducer": { "params": [], "type": "avg" }, "type": "query" } ], "executionErrorState": "alerting", "frequency": "60s", "handler": 1, "name": "<%= action %> 响应时间", "noDataState": "no_data", "notifications": [] }, ... "id": <%= panelId %> } 复制代码
注意:这里的 A 即之前 mean 的 refId。
收到的报警邮件会带有当前监控图表的 screenshot,如下所示:
最后
我们正在招聘!
[北京/武汉] 石墨文档 做最美产品 - 寻找中国最有才华的工程师加入
使用 StatsD + InfluxDB + Grafana 搭建 Node.js 监控系统 (二)相关推荐
- 浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统
监控从来都是一个很宽泛的问题,任何可能出问题的地方都需要加入监控.全量监控的确是监控的终极目标.在搭建一套监控系统前,需要结合实际的系统情况和发展趋势进行考量.在作者看来,一套监控系统应主要由数据采集 ...
- Telegraf+InfluxDB+Grafana搭建服务器监控平台
Telegraf+InfluxDB+Grafana搭建服务器监控平台 tags:网站 个人网站:https://wanghualong.cn/ 效果展示 本站服务器状态监控:https://statu ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志
为什么80%的码农都做不了架构师?>>> 沪江CCtalk视频地址:https://www.cctalk.com/v/15114923883523 log 日志中间件 最困难的 ...
- 视频教程-Prometheus+Grafana搭建全方位的监控告警系统-Linux
Prometheus+Grafana搭建全方位的监控告警系统 高级运维工程师.资深DevOps工程师,精通kubernetes容器编排工具,熟练使用linux操作系统,多年线上线下教学经验 韩先超 ¥ ...
- JMeter+InfluxDB+Grafana实现可视化实时监控
本文我们将介绍如何使用JMeter+InfluxDB+Grafana打造可视化实时监控. 目录 一.简介 概述 简单介绍实现原理 二.indluxdb安装和部署 1.indluxdb下载 2.修改in ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 处理静态资源
视频地址:www.cctalk.com/v/151149238- 处理静态资源 无非花开花落,静静. 指定静态资源目录 这里我们使用第三方中间件: koa-static 安装并使用 安装 koa-st ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 路由koa-router
路由koa-router--MVC 中重要的环节:Url 处理器 ?? iKcamp 制作团队 原创作者:大哼.阿干.三三.小虎.胖子.小哈.DDU.可木.晃晃 文案校对:李益.大力萌.Au.DDU. ...
- 计算机系统的搭建步骤,电脑搭建Node.js开发环境的操作教程[多图]
电脑如何搭建Node.js开发环境?近日有用户询问怎么在Win7系统电脑上搭建Node.js开发环境,今天教程之家就给大家分享Node.js开发环境的搭建教程. 操作步骤: 1.下载Node.js官方 ...
- 【鸿蒙 HarmonyOS】HarmonyOS 开发环境搭建 ( Node.js 安装 )
文章目录 一.下载 Node.js® 安装包 二.安装 Node.js 三.验证 Node.js 鸿蒙 HarmonyOS 开发环境 DevEco Studio 安装 , 参考博客 : [鸿蒙 Har ...
最新文章
- 【 Vivado 】UCF到XDC之间的转换
- golang 得到 结构体 struct 标签 tag 内容 结构体中的``数据
- Swift中如何重新懒加载
- CentOS 6.4 i386 版本安装 FastDFS、使用Nginx作为文件访问WEB服务器
- Pytorch中的variable, tensor与numpy相互转化的方法
- 静态工厂配置bean
- 通过修改注册表设定浏览器的却省值
- android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法
- 使用 Gitolite 搭建 Git 服务器
- 关于 cocos2d-x win32 版本的 cpu 占用改良
- 麦马计算机专业对化学的要求,2018麦克马斯特大学最新入学要求+热门专业全解析...
- python---numpy简单用法
- 算法笔记:Dinic最大流和SPFA费用流
- 用于检验手机号的位数以及检验此手机中是否为中国移动的手机号
- 第三周作业-循环与判断语句(网络131黄宇倩)
- 阅读笔记--计算机网络 自顶向下方法
- LeetCode 413.等差数列的划分
- Visual C++中的AFX前缀
- springboot网吧管理系统
- matlab摩托车刹车问题,摩托车刹车系统的这些知识,你了解过吗?
热门文章
- java就业培训教程 第一章读书笔记
- 提高编写CSS代码效率的10个习惯
- SQL - 18.触发器
- js中使用shiro标签的一个小坑
- 减治法解决约瑟夫斯问题(JAVA)
- 1562区别 洛达1552_洛达1562A与洛达1536u与杰里有哪些区别呢?
- linux vi编辑器 Ctrl s,Linux命令-----vi/vim编辑器
- dns服务器v6解析 windows_04:缓存DNS、Split分离解析、电子邮件通信、Web服务器项目实战...
- Linux 创建网页服务,Linux使用Node.js建立访问静态网页的服务实例详解
- 产品新人如何快速成长?