平台统一监控的介绍和调研
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
背景
目前平台缺少强有力的监控工具单独依靠Spring Boot Admin 还太欠缺没有大屏、没有分布式链路追踪、自定义告警繁琐在我的《Spring Boot Admin2》专栏中自定义过JVM监控和异常监控都需要自己编码定义监控规则和告警效率很低。
需求
为了解决如上的问题我整理了一下内部对应监控的可能需求
1、内部服务的监控(Metrics)
2、网站、服务接口外部可用性监控
3、服务器硬件相关指标监控
4、数据库、中间件等监控
5、自定义的一些业务指标监控Exporter
6、灵活的自定义告警规则(AlertManager)
7、链路监控skywalking
产品调研
Zabbix
传统监控产品主要在服务器相关监控方面有优势不支持云原生监控C语言开发资料多
📌 Zabbix 告警机制不完善设置繁琐 监控微服务能力太弱了解到只能监控微服务的在线状态
Nightingale夜莺Open-Falcon
国产监控云原生监控分析系统采用 All-In-One 的设计集数据采集、可视化、监控告警、数据分析于一体与Prometheus、VictoriaMetrics、Grafana、Telegraf、Datadog 等生态紧密协同集成提供开箱即用的企业级监控分析和告警能力产品较新2020年发布符合国人风格资料少部分插件需要购买或自研GO语https://n9e.github.io/docs/prologue/introduction/
📌 本来个人更倾向于选择该产品深入产品交流群后群里交流不活跃很多问题没人回复如果用开源产品肯定会碰到很多问题没有一个良好的交流环境会很难继续使用。
📌 后期调研了企业版企业版价格昂贵按年收费费用堪比一个高级程序员。
Hertzbeat
国产小众监控主打无侵入式无Agent监控支持JVMMYSQLLinux, Kubernetes等应用服务数据库操作系统中间件云原生等监控。更自由化的阈值告警配置支持邮箱短信webhook钉钉企业微信飞书机器人等告警通知。提供Custom-Monitoring通过不同的协议SSHJDBCJMXSNMPHTTP等仅需配置YML就能自定义监控指标并快速接入监控系统Java语言
https://hertzbeat.com/docs/
📌 刚看到的个人开源监控产品群交流活跃个人觉得功能够用但是不够美观
Prometheus
云原生时代监控产品支持自定义配置告警自定义监控Go语言开发资料较多
这是监控三字塔可见Prometheus+Grafana的组合已经覆盖了大部分的监控。
这是Prometheus的管理界面Prometheus本身也是一个TSDB时序数据库。
配合Grafana大屏工具对指标进行展示并且官方商城有很多免费的大屏可以直接使用几乎可以做到开箱即用上图就是使用了免费的JVM指标大屏。
📌 Grafana 具有很强大的功能相关教程文章可见《Grafana》
Prometheus 架构
什么是Exporter
广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target如下所示Prometheus通过轮询的方式定期从这些target中获取样本数据:
- 社区提供的
Prometheus社区提供了丰富的Exporter实现涵盖了从基础设施中间件以及网络等各个方面的监控功能。这些Exporter可以实现大部分通用的监控需求。下表列举一些社区中常用的Exporter
- 用户自定义的
除了直接使用社区提供的Exporter程序以外用户还可以基于Prometheus提供的Client Library创建自己的Exporter程序目前Promthues社区官方提供了对以下编程语言的支持Go、Java/Scala、Python、Ruby。同时还有第三方实现的如Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等。
自定义埋点
public class DemoMetrics implements MeterBinder {
public Counter counter;
public Map<String, Double> map = new HashMap<>();
@Override
public void bindTo(MeterRegistry meterRegistry) {
//定义并注册一个计数器
this.counter = Counter.builder("prometheus.demo.counter").tags(new String[]{"name", "counter1"})
.description("demo counter").register(meterRegistry);
//设置动态变化的仪表盘
Gauge.builder("prometheus.demo.gauge", map, x -> x.get("x")).tags("name", "gauge1").description("This is Gauge")
.register(meterRegistry);
}
}
总结
综上所述为了既省成本又有扩展性决定选择开源的Prometheus+Grafana虽然有一定的学习成本但毕竟是目前的主流监控产品。
作者其他文章
Grafana 系列文章版本OOS v9.3.1
Spring Boot Admin 2 系列文章