Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警

前言

这次主要分享通过Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警方案。通过执行耗时,定位哪些接口拖累了服务的性能;通过请求频次,设置适当的限流和熔断机制,拦截非法或不合理的请求,保障服务的可用性。

InfluxDB

官网:https://www.influxdata.com/

按照官方的说法,InfluxDB是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。

下载地址:https://portal.influxdata.com/downloads,解压后的目录如下

打开配置文件,设置数据存储路径

[data]
# The directory where the TSM storage engine stores TSM files.
#dir = "/var/lib/influxdb/data"
dir = "C:/Users/001wa/Desktop/software/influxdb-1.2.2-1/data" # The directory where the TSM storage engine stores WAL files.
#wal-dir = "/var/lib/influxdb/wal"
wal-dir = "C:/Users/001wa/Desktop/software/influxdb-1.2.2-1/data"

开启管理界面

[admin]
# Determines whether the admin service is enabled.
enabled = true # The default bind address used by the admin service.
bind-address = ":8083"

cmd到当前目录,使用配置文件influxdb.conf启动服务后,可以查看管理页面http://127.0.0.1:8083/

至此,服务启动成功。

创建数据库并改变默认策略,并创建具有管理员权限的账户

CREATE DATABASE "db_metrics"
CREATE RETENTION POLICY "rp_metrics" ON "db_metrics" DURATION 10w REPLICATION 1 DEFAULT CREATE USER "admin" WITH PASSWORD 'admin' WITH ALL PRIVILEGES

Metrics.Net

现有多个Metrics及其扩展的版本:

https://github.com/etishor/Metrics.NET 该版本的作者据说去天堂了,期望天堂里没有程序员这个职业。

https://github.com/davidB/metrics-influxdb 这个扩展支持的Influxdb版本太低,高版本会报异常,无奈放弃。

https://github.com/Recognos/Metrics.NET这个版本每个时间周期都会向数据源推数据,如果这段时间内没有数据则默认用上个周期的数据,并且数据会累计,导致重复,不便于统计和展示。

https://github.com/Recognos/Metrics.NET.InfluxDB这个版本的扩展不错。

最终选择后面两个,并对源码做了一点扩展和二次开发,基础SDK主要封装Metrics的基础操作和修复上述重复、累计问题,并注册全局的环境、主机的自定义Tags。

            Metric.Config.WithReporting(report => report
.WithInfluxDbMyHttp(host, port, database, userName, password, null, null, TimeSpan.FromSeconds(intervalSeconds), null, configFunc => configFunc
.WithConverter(new DefaultConverter().WithGlobalTags($"env={environment},host={Dns.GetHostName()}"))
.WithFormatter(new DefaultFormatter().WithLowercase(true))
.WithWriter(new InfluxdbHttpWriter(configFunc, batchSize))));

之后在基础sdk上扩展一个用于统计webapi接口耗时和频次的sdk。

    /// <summary>
/// WebAPI接口过滤器
///
/// 记录接口耗时、频次,记录到Metrics
/// </summary>
public class MetricsFilterAttribute : ActionFilterAttribute

主要采用Histogram,并自定义Tags便于Grafana的筛选

                if (stopWatch != null)
{
stopWatch.Stop(); var tags = new string[] { $"method={actionExecutedContext.Request.Method.ToString()}" };
var metricsName = FormatMetricsName(actionExecutedContext.ActionContext.ActionDescriptor);
//build and update histogram
var histogram = GetOrAddHistogram(metricsName, tags);
histogram.Update(stopWatch.ElapsedMilliseconds);
}

WebAPI引用后,要注册全局的过滤器

            config.Filters.Add(new MetricsFilterAttribute());

Grafana

Grafana是一个非常好看的监控界面,从这里下载:https://grafana.com/grafana/download

启动服务,打开登陆页面http://localhost:3000,使用默认账号登陆。

这里主要关注数据源的配置和图表的画法,不再详述用户分组权限的管理和自动化预警,想了解更多可以参考官方文档:http://docs.grafana.org/guides/getting_started/

首先添加数据源,设置数据源的类型、地址、数据库、通信方式等。

之后,自定义模板,将自定义的Tags作为筛选项,并设置数据源、筛选条件。

最终的效果为:

接下来,自定义图表

设置标题

选择自己的数据库和查询字段,比如采用Histrogram直方图记录单位时间内的执行次数和耗时分布

因为耗时和访问次数属于不同的维度,这里要设置两个Y坐标

显示一些聚合数据

设置我们要展示图形格式

最终效果为

熔断

为了保证单个接口或服务的可用性,通常针对单个用户账户、单个调用方ip在某个时间段内的访问频次进行限制,拦截恶意的请求,保障服务的可用性。

可以在Grafana中设置预警阈值,直接调用接口,对用户或ip进行访问拦截等。

后语

这篇是线上服务的可用性保障方案的其中一篇,其它的内容会后续补充:

1.对Web、H5、App相关页面进行埋点,统计用户访问的PV、UV、停留时间、转化率等。

2.VSAnalyseTool本地调试分析接口的耗时、内存、CPU的使用情况,直接定位问题、优化代码。
  接口性能分析与优化

3.SoapUI对接口进行并行压力测试,针对性改善接口性能。

4.Metrics.net + influxdb + grafana对API进行埋点。

5.完善日志系统,记录请求和响应及耗时,标识一次完整的请求,便于查找和定位问题。

6.对EntityFramework进行轻度包装,支持AsNoTracking、自动nolock、记录SQL执行耗时、读写分离等。

7.zabbix监控服务器的内存、线程、CPU Average、CPU Load、IO等,设置阈值、及时预警,保障线上的可用性。

8. WinDbg分析线上服务异常时的内存转储文件,排查大对象、高频回收、线程耗时、死锁等问题。

  高CPU、数据库无法读写的真凶

  Windbg DUMP分析(原创汇总)

  记一次内存泄漏DUMP分析

 
 

WebAPI的自动化监控和预警的更多相关文章

  1. Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警

    前言 这次主要分享通过Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警方案.通过执行耗时,定位哪些接口拖累了服务的性能:通过请求频次,设置适当的限流 ...

  2. 使用 Metrics.net + influxdb + grafana 搭建项目自动化监控和预警方案

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_25042791/article/d ...

  3. 自动化监控利器-Zabbix

    转自: http://www.xuliangwei.com/xubusi/117.html   1.1为何需要监控系统 在一个IT环境中会存在各种各样的设备,例如:硬件设备.软件设备.其系统的构成也是 ...

  4. Legolas工业自动化平台案例 —— 水源地自动化监控系统

    天津港爆炸事件后,除了安置群众.追究事故责任外,人们最关心的莫过于爆炸污染物对于周边环境的影响,其中最重要的一块就是饮用水的安全.所幸的是,水源的安全监测是实实在在有据可依的.环保单位和供水企业在建设 ...

  5. 第5章Zabbix自动化监控

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...

  6. Linux下自动化监控内存、存储空间!

    距离上一次更新文章已经过去一段时间了,小编在这段时间因为一些琐事,加上身体生病不能及时更新文章,今天身体逐渐恢复就急忙来更新文章,今天思梦给大家带来的就是如何自动化监控我们的服务器一些基本的配置来保证 ...

  7. zabbix实现百台服务器的自动化监控--技术流ken

    前言 最近有小伙伴通过Q联系到我说:公司现在有百多台服务器,想要部署zabbix进行监控,怎么实现自动化全网监控? 本篇博客将讲解一个我工作时做的一个实际项目,现在写出来供大家以后参考使用. 实现自动 ...

  8. 自动化监控白皮书——WAS监控

    WebSphere(WAS)是一些大型企业常用的中间件,由于was自身提供的工具有时不能满足多样化的监控需求,而我们又会经常遇到对was进行监控的应用场景,所以我们有必要自己动手做一些was的监控脚本 ...

  9. Docker容器的自动化监控实现

    本文由  网易云 发布. 近年来容器技术不断成熟并得到应用.Docker作为容器技术的一个代表,目前也在快速发展中,基于 Docker的各种应用也正在普及,与此同时 Docker对传统的运维体系也带来 ...

随机推荐

  1. java去除反复的字符串和移除不想要的字符串

    在java开发中碰到了有些字符串是反复的,假设在进行业务处理要所有遍历太对的数据就会反复,所以在进行业务处理前进行一个去重操作. watermark/2/text/aHR0cDovL2Jsb2cuY3 ...

  2. codeforces7D Palindrome Degree(manacher&amp;dp或Hsh&amp;dp)

    D. Palindrome Degree time limit per test 1 second memory limit per test 256 megabytes input standard ...

  3. Oracle在更改机器名后服务无法启动的解决方法

    Oracle改变机器名后会导致服务无法正常启动,能够通过下列操作解决: 1.oracle\product\10.2.0\db_3\network\ADMIN文件夹下,listener.ora文件里的L ...

  4. BZOJ 1898 构造矩阵+矩阵快速幂

    思路: T的最小公倍数是12 那么12以内暴力 整除12 的部分用矩阵快速幂 //By SiriusRen #include <cstdio> #include <cstring&g ...

  5. 浏览器输入一个url的过程,以及加载完html文件和js文件的标志

    简单理解: 当在浏览器地址栏输入一url时,浏览器会做以下几个步骤: 1.将url转化为ip地址,也就是DNS解析,(先找本地host文件中是否有对应的ip地址,如果有就直接用,没有的话,就按域名的二 ...

  6. Analysis of the Facebook.app for iOS

    Analysis of the Facebook.app for iOS Posted Oct 18, 2016 Did you ever wonder why the Facebook.app fo ...

  7. Glidar测试安装

    在上一篇随笔中,我们完成了对Glidar 仿真器的概念层面的认识.接下来,我们将着手对该该仿真器进行安装测试. 1 依赖库的安装 安装环境为Windows 7 64位+Ubuntu14.04 LTS的 ...

  8. firewall 实现数据的端口转发

    端口转发:firewall-cmd --add-port=80/tcp firewall-cmd --add-port=10050/tcp firewall-cmd --add-forward-por ...

  9. CDR X6设计师的福利,3折特惠!

    最新消息称,即日起CorelDRAW官方为回馈新老用户长期以来的支持,特别推出CorelDRAW X6降价活动.目前CorelDRAW X6售价仅为2399元,照这个价格,CDR 2017     会 ...

  10. React显示文件夹中SVG

    import React from 'react'; import _ from 'lodash'; import styles from './iconPicker.less'; const req ...