业务监控系统如何做,一起来看看如何使用Statsd+Graphite+Grafana搭建业务监控系统

article/2025/9/20 16:33:39

背景介绍

希望能够对业务指标监控,通过业务指标监控反应业务系统的稳定性,原因是通过对基础资源,应用服务状态,性能监控,不能够反应业务系统的稳定性,举个栗子:服务程序一切正常,下单接口因参数校验,导致很多下单不成功,状态码正常返回,对于服务端来说一切正常,但是从业务角度,已经出问题了,可能是传参或某个环节导致的,这种问题就没有办法通过常规手段进行监控,不管是那个环节出问题,对我们的业务都是有影响的。

例如:单位时间段内的下单数、成单数,基于同环比进行监控和预警,先于用户发现问题并止损。

利用Grafana漂亮UI对业务监控,资源监控,绘制个性化大盘,基于Statsd+Graphite+Grafana 实现自定义监控指标Metirc

工具介绍

  • Statsd 是一个使用Node开发网络守护进程,它的特点是通过UDP(性能好,及时挂了也不影响主服务)或者TCP来监听各种数据信息,然后发送聚合数据到后端服务进行处理。常见支持的「Graphite」, 「ElasticaSearch」,「InfluxDB」 等等 ,它故宫了各种语言的客户端API,这里我们使用了jsocol/pystatsd: A Python client for statsd进行数据收集
  • Graphite 是一套Python写的开源编程接口,主要是用来收集服务器的及时状态,在这里主要作为statsd的数据后端。分为了三个子项目
    • carbon 守护进程,接收StatsD发送过来的原始统计数据。
    • whisper 用来存储统计数据的时间序列数据库。
    • graphite webapp 用来图形化展示统计数据的web项目。
  • Grafana 使用Go开发,可以在界面上设计调整自己的统计图表,支持多重报警,可定制化。

利用镜像安装Graphite&Statsd

docker run -d\--name graphite\--restart=always\-p 80:80\-p 2003-2004:2003-2004\-p 2023-2024:2023-2024\-p 8125:8125/udp\-p 8126:8126\graphiteapp/graphite-statsd

Includes the following components

  • Nginx - reverse proxies the graphite dashboard
  • Graphite - front-end dashboard
  • Carbon - back-end
  • Statsd - UDP based back-end proxy

Mapped Ports

HostContainerService
8080nginx
20032003carbon receiver - plaintext
20042004carbon receiver - pickle
20232023carbon aggregator - plaintext
20242024carbon aggregator - pickle
80808080Graphite internal gunicorn port (without Nginx proxying).
81258125statsd
81268126statsd admin

发送指标数据

while true; do echo -n "example:$((RANDOM % 100))|c" | nc -w 1 -u 127.0.0.1 8125; done

UDP发送

Message格式:

example:1|c

当然还支持更多格式了,例如:counter、timer、gauge和set

Java简单UDP投送实例:

public static void send(String message) {LogUtil.getInstance().info("UDPClient send:" + message);byte[] data = message.getBytes();DatagramSocket client =null;try{//3.打包(发送的地点及端口)//1.创建客户端+端口client = new DatagramSocket(5555);//3.打包(发送的地点及端口)DatagramPacket packet = new DatagramPacket(data, data.length,new InetSocketAddress("127.0.0.1",8125));//4.发送client.send(packet);}catch (Exception e){LogUtil.getInstance().error(e,"UDPClient send:" + message);}finally {if(client==null){//5.释放client.close();}}}

使用架构模式

异步直连式

说明:应用程序中、植入全局异步投送监控指标Metirc的异步线程或协程,每次使用异步调用异步线程进行投送即可,每个应用程序都需要建议UDP连接。

好处:简单,直接、复杂低

缺点:占用应用性能、对应用侵入性比较大

注意:因异步投送,故需要控制线程池控制异步线程数量,防止对业务产生比较大的影响。

应用场景:中小型项目,对性能和稳定性要求不高。

集中式消费

说明:应用程序中,约定Metirc指标数据格式,借助kafka,投送到kafka,中间加一层集中式消费kafka,然后到stats集群中

好处:应用程序和Stats是解耦的,提升应用程序的稳定性和性能。

缺点:复杂度较高。

注意:因异步投送,故需要控制线程池控制异步线程数量,防止对业务产生比较大的影响。

应用场景:较大型项目,对性能和稳定性有一定的要求。

可插拔Backends:

StatsD支持可插拔backends,安装包中默认带有graphite后端。可以将其他后端作为简单的npm软件包进行分发和安装:

  • amqp-backend
  • ganglia-backend
  • librato-backend
  • socket.io-backend
  • statsd-backend
  • mongo-backend
  • mysql-backend
  • datadog-backend
  • monitis backend
  • instrumental backend
  • hosted graphite backend
  • statsd aggregation backend
  • zabbix-backend
  • opentsdb backend
  • influxdb backend
  • stackdriver backend
  • couchdb-backend
  • elasticsearch backend
  • Google BigQuery backend

2、服务端实现:

StatsD最初由Etsy的Erik Kastner编写,它基于Flickr的想法以及Cal Henderson的这篇文章:Counting and Timing。2011年该服务器用Nodejs编写重写,但是从那时起已经有其他语言的实现:

  • brubeck - Server in C
  • clj-statsd-svr — Clojure server
  • gographite — Server in Go
  • gostatsd — Server in Go
  • netdata - Embedded statsd server in the netdata server, in C, with visualization
  • Net::Statsd::Server — Perl server, also available on CPAN
  • Py-Statsd — Server and Client
  • Ruby-Statsdserver — Ruby server
  • statsd-c — Server in C
  • statsdaemon (bitly) — Server in Go
  • statsdaemon (vimeo) — Server in Go
  • statsdcc - Server in C++
  • statsdpy — Python/eventlet Server
  • Statsify - Server in C#
  • statsite — Server in C
  • bioyino — High performance multithreaded server written in Rust

3、客户端实现:

客户端主要是根据statsd协议,通过UDP/TCP向守护进程通信。常见的实现有:

Node

  • lynx — Node.js client used by Mozilla, Nodejitsu, etc.
  • Node-Statsd — Node.js client
  • node-statsd-client — Node.js client
  • node-statsd-instrument — Node.js client
  • statistik - Node.js client with timers & CLI
  • statsy - clean idiomatic statsd client

Java

  • java-statsd-client — Lightweight (zero deps) Java client
  • Statsd over SLF4J — Java client with SLF4J logging tie-in
  • play-statsd — Play Framework 2.0 client for Java and Scala
  • statsd-netty — Netty-based Java 8 client

Python

  • Py-Statsd — Server and Client
  • Python-Statsd — Python client
  • pystatsd — Python client
  • Django-Statsd — Django client

Ruby

  • statsd-instrument — Ruby client
  • statsd — Ruby client (needs new maintainer)
  • Statsd-Client — Ruby client (not maintained)

Perl

  • Net::Statsd — Perl client, also available on CPAN
  • Net::StatsD::Client — Perl client, not available on CPAN
  • Etsy::StatsD - Perl client, also available on [CPAN] (https://metacpan.org/module/Etsy::StatsD)

PHP

  • Metrics
  • PHP client
  • php-statsd and Spark
  • php-statsd-client - supports SplClassLoader
  • statsd-php-client - Minimalist performant client
  • phpLeague-statsd-client - Php League StatsD client
  • statsd-php-client - optimized client with monolog and symfony2 integrations available
  • statsd-php - PSR-4 compatible client

Clojure

  • Clojure client

Io

  • io-statsd — StatsD Client for Io

C

  • C client — A trivial C client

CPP

  • statsd-client-cpp — StatsD Client in CPP
  • cpp-statsd-client — A header-only StatsD client implemented in C++

.NET

  • NStatsD.Client — .NET 4.0 client
  • C# client — C# client
  • graphite-client — .NET client library for StatsD and Graphite
  • StatsC — An asynchronous client with built-in support for batching
  • JustEat.StatsD — A .NET library for publishing metrics to statsd. Targets both .NET full framework and .NET Standard 2.0.
  • Statsify - .NET client

Go

  • go-statsd - Go statsd client library with zero allocation overhead, great performance and reconnects
  • GoE — Minimal & Performant
  • go-statsd-client — Simple Go client
  • g2s
  • StatsD
  • statsd — A simple and very fast StatsD client

Apache

  • mod_statsd - StatsD client to send stats straight from Apache

Varnish

  • libvmod-statsd - StatsD client to send stats straight from Varnish

PowerShell

  • powershell-statsd - PowerShell client

Browser

  • StatsC - Push stats to StatsD from the browser!
  • StatsD HTTP Proxy - HTTP proxy to StatsD with REST interface for using in browsers
  • StatsD HTTP Client - StatsD client over http for using in browsers

Objective-C

  • MCStatsd - Cocoa client

ActionScript

  • flash-statsd - Flash client

WordPress

  • wordpress-statsd - WordPress Plugin

Drupal

  • StatsD - Drupal module

Haskell

  • statsd-client

R

  • rstatsd

Lua

  • lua-statsd

Nim

  • statsd_client
  • nim-metrics - supports StatsD, Carbon and Prometheus

参考:

https://github.com/statsd/statsd/wiki

https://hub.docker.com/r/graphiteapp/graphite-statsd


http://chatgpt.dhexx.cn/article/EumcycTl.shtml

相关文章

Spark 应用监控告警-Graphite_exporter

Spark 应用监控告警-Graphite_exporter Spark监控和工具 Web界面事后查看REST API度量高级工具一、下载graphite_exporter 1.1 修改graphite_exporter_mapping1.2 启动graphite_exporter二、Spark配置Graphite metrics三、启动Spark程序四、配置Prometheus 4.1 查看Prometheus…

Graphite系统监控

转载至 : http://my.oschina.net/fufangchun/blog/232895?p1 目录[-] 一、简介: 二、Graphite的安装及配置 0.Graphite目录 1.安装环境 2.所需软件 3.安装依赖 4.安装Graphite组件 ①.检查依赖: ②.安装graphite-web: ②.安装whisper&#x…

【大数据监控】Prometheus、Node_exporter、Graphite_exporter安装部署详细文档

目录 Prometheus简介下载软件包安装部署创建用户创建Systemd服务修改配置文件prometheus.yml启动Prometheus node exporter下载软件包安装部署创建systemd服务启动node_exporter graphite_exporter下载软件包安装部署创建systemd服务启动 graphite_exporter Prometheus 简介 P…

docker部署grafana graphite stastd实时监控告警配置_亲测成功

docker部署grafana graphite stastd实时监控告警配置_亲测成功 实时监控请求的次数和响应时间及异常报警 项目中需要监控API接口的调用情况,如:调用次数,每次调用耗时,调用高峰期,异常报警等 grafana graphite stastd这一套对代码没有侵入,也不会影响接口性能 安装docker环…

graphite安装笔记

0.Graphite目录 Graphite安装之后,在安装位置(默认为/opt/graphite)的文件布局如下: 目录介绍/opt/graphite/bin二进制文件目录/opt/graphite/conf配置文件目录/opt/graphite/lib库目录/opt/graphite/storage数据存放目录,包括log&#xff0c…

graphite 数据库_大数据存储和分析-IBM DB2和Graphite

在本文中,我们将结合IBM™Persistence API使用IBM DB2作为数据源,描述PCC系统中的数据存储。 此外,我们讨论了如何使用Graphite来检测代码库和工作负载。 最后,我们描述了用于分析数据的工具。 成绩单 IBM DB2和Java Persistence API DB2是IBM关系数据库服务器,已在整个…

graphite安装(一键搞定版)

一、python部分: 0、系统: $ cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 1、检查系统python是否2.7以上(最新graphite需要python至少2.7): $ python -V Python 2.7.5 2、安装pip:…

graphite http api

Render API Graphite web 提供了/render API用来生成图片和获取原始数据。这个API通过查询字符串支持各种参数。参数之间通过&进行分割,如下所示: &namevalue 你可以通过访问 http://GRAPHITE_HOST:GRAPHITE_PORT/render 这个url来确认这个A…

sitespeed+graphite+grafana

最近在看性能UI performance testing 的工具 其中一个是 sitespeed。 sitespeed.io 是 一款可监视和衡量网站前端性能的开源工具。 1. 开 源 2 . 支持事务模 拟 3 . 自动性能分析,形成可视化报 告 4 . 提供的 docker 镜像已搭建完成监控系统,满足…

在Ubuntu18.04使用Docker安装graphite

安装docker apt install docker.io 参照graphite官网,运行docker docker run -d \--name graphite \--restartalways \-p 80:80 \-p 2003-2004:2003-2004 \-p 2023-2024:2023-2024 \-p 8125:8125/udp \-p 8126:8126 \graphiteapp/graphite-statsd 查看docker&am…

graphite

Graphite 是一个用于采集网站实时信息并进行统计的开源项目,可用于采集多种网站服务运行状态信息。Graphite服务平均每分钟有4800次更新操作。实践已经 证实要监测网站发发生什么是非常有用的,它的简单文本协议和绘图功能可以方便地即插即 用的方式用于任…

Graphite详解

Graphite详解 作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs Graphite是一个开源实时的、显示时间序列度量数据的图形系统。Graphite并不收集度量数据本身,而是像一个数据库&…

时序数据库-Graphite

Graphite就属于一种时序数据库,作用是存储和聚合监控数据并绘制图标,不负责数据的收集。之所以想写一篇关于Graphite的博文主要是因为这是我接触到的另一种新型数据库,其特点和功能让人眼前一亮。但是需要强调的是,这里所谓的时序…

Graphite介绍

Graphite详解 https://www.2cto.com/kf/201603/494435.html Graphite是一个开源实时的、显示时间序列度量数据的图形系统。Graphite并不收集度量数据本身,而是像一个数据库,通过其后端接收度量数据,然后以实时方式查询、转换、组合这些度量数…

http中的XFF(X-Forwarded-For)

详细知识请移步大佬网页

攻防世界-xff_referer

题目 访问题目场景 抓包看看,打开场景,页面提示我们ip必须是123.123.123.123,我们就想到burpsuite抓包,添加上X-Forwarded-For:123.123.123.123 GET / HTTP/1.1 Host: 223.112.5.156:54671 X-Forwarded-For:123.123.123.123 User-…

XCTF2-web xff_referer

xff_referer 题目描述 X老师告诉小宁其实xff和referer是可以伪造的。 进入场景 提示对ip地址进行了限制 根据题目的描述,可以推测是伪造xff和referer。 根据要求构造xff和referer 轻松获得flag xff x-forwarded-for简称XFF,是http协议的一个扩展…

攻防世界-WEB:xff_referer

题目:https://adworld.xctf.org.cn/challenges/problem-set-index?id25&rwNmOdr1679149714756 题目描述:X老师告诉小宁其实xff和referer是可以伪造的。 根据题目描述,那就是考验xff和referer知识。 知识补充: XFF X-Forwarde…

day28 SQL注入HTTP头XFFCOOKIEPOST请求

前言 #知识点: 1、数据请求方式-GET&POST&COOKIE等 2、常见功能点请求方式-用户登录&IP记录等 3、黑盒白盒注入测试要点-SQLMAP注入参数 #补充点: 黑盒测试:功能点分析 1、后台要记录操作访问IP IP要进行代码的获取&#…

NGINX动态XFF黑名单配置

通过XFF地址动态限制访问 方案特点: 无需reloadAPI管理 NGINX PLUS的KEYVAL是可以通过API进行管理的内部可持久化kv存储。 KEYVAL查找XFF地址是否在黑白名单中,来实现访问控制。 KEYVAL存放黑白名单列表: 定义键值为1为白名单定义键值为…