本章概述
- 监控逻辑架构图
- 整体布局
- 常见监控方案
- Prometheus简介
前言
监控的重要性:
通过业务监控系统,全面掌握业务环境的运行状态,通过白盒监控能够提前预知业务瓶颈,通过黑盒监控能够第一时间发现业务故障并通过告警通告运维人员进行紧急恢复,从而将业务影响降到最低。
黑盒监控,关注的是时时的状态,一般都是正在发生的事件,比如nginx web界面打开的是界面报错503、磁盘无法报错数据等,即黑盒监控重点在于能对正在发生的故障进行通知告警。
白盒监控,关注的是原因,也就是系统内部暴露的一些指标数据,比如nginx 后端服务器的响应时长、磁盘的I/O负载值等。
监控系统需要能够有效的支持白盒监控和黑盒监控,通过白盒能够了解其内部的实际运行状态,以及对监控指标的观察能够预判可能出现的潜在问题,从而对潜在的不确定因素进行提前优化并避免问题的发生,而通过黑盒监控,比如常见的如HTTP探针、TCP探针等,可以在系统或者服务在发生故障时能够快速通知相关的人员进行处理,通过建立完善的监控体系,从而达到以下目的:
(1)长期趋势分析:通过对监控样本数据的持续收集和统计,对监控指标进行长期趋势分析。例如,通过对磁盘空间增长率的判断,我们可以提前预测在未来什么时间节点上需要对资源进行扩容。
(2)对照分析:两个版本的系统运行资源使用情况的差异如何?在不同容量情况下系统的并发和负载变化如何?通过监控能够方便的对系统进行跟踪和比较。
(3)告警:当系统出现或者即将出现故障时,监控系统需要迅速反应并通知管理员,从而能够对问题进行快速的处理或者提前预防问题的发生,避免出现对业务的影响。
(4)故障分析与定位:当问题发生后,需要对问题进行调查和处理。通过对不同监控监控以及历史数据的分析,能够找到并解决根源问题。
(5)数据可视化:通过可视化仪表盘能够直接获取系统的运行状态、资源使用情况、以及服务运行状态等直观的信息
1.1 监控逻辑架构图
监控架构说明:
1、prometheus client端收集k8s集群数据存储在本地或者远端存储上
2、然后由prometheus server将数据收集起来
3、通过grafana展示k8s集群的数据
4、如果服务异常,可以通过alertmanager进行告警(通过邮件、钉钉、微信等进行告警)
1.2 整体布局
1.3 常见监控方案
开源监控软件:cacti、nagios、zabbix、smokeping、open-falcon等
1、Cacti
官网链接:https://www.cacti.net/
github链接:https://github.com/Cacti/cacti
Cacti是基于LAMP平台展现的网络流量监测及分析工具,通过SNMP技术或自定义脚本从目标设备/主机获取监控指标信息;其次进⾏数据存储,调用模板将数据存到数据库,使用 rrdtool存储和更新数据,通过rrdtool绘制结果图形;最后进行数据展现,通过web方式将监控结果呈现出来,常用于在数据中心监控网络设备。
2、Nagios
官网链接:https://www.nagios.org/
Nagios用来监视系统和网络的开源应⽤软件,利用其众多的插件实现对本机和远端服务的监控,当被监控对象发生异常时,会及时向管理员告警,提供一批预设好的监控插件,用户可以之间调用,也可以自定义Shell脚本来监控服务,适合各企业的业务监控,可通过Web页面显示对象状态、日志、告警信息,分层告警机制及自定义监控相对薄弱。
3、SmokePing
https://oss.oetiker.ch/smokeping/
http://blogs.studylinux.net/?p=794
Smokeping是⼀款⽤于⽹络性能监测的开源监控软件,主要⽤于对IDC的⽹络状况,⽹络质量,稳定性等做检测,通过rrdtool制图⽅式,图形化地展示⽹络的时延情况,进⽽能够清楚的判断出⽹络的即时通信情况。
4、Open-falcon
https://www.open-falcon.org/
https://github.com/XiaoMi/open-falcon
小米公司开源出来的监控软件open-falcon(猎鹰),监控能力和性能较强。
5、夜莺
https://n9e.github.io/
一款经过大规模生产环境验证的、分布式高性能的运维监控系统,由滴滴基于open-falcon二次开发后开源出来的分布式监控系统。
安装部署:https://flashcat.cloud/docs/content/flashcat-monitor/nightingale/introduction/
或者https://www.cnblogs.com/wdyjx/p/16521918.html#11%E5%A4%9C%E8%8E%BA%E4%BB%8B%E7%BB%8D
6、Zabbix
https://www.zabbix.com/cn/
目前使用较多的开源监控软件,可横向扩展、自定义监控项、支持多种监控⽅式、可监控网络与服务等。
7、Prometheus
针对容器环境的开源监控软件
8、商业监控解决⽅案
监控宝(https://www.jiankongbao.com/)
听云(https://www.tingyun.com/)
1.4 prometheus 简介
官网链接:https://prometheus.io/
Prometheus是基于go语言开发的一套开源的监控、报警和时间序列数据库的组合,是由SoundCloud公司开发的开源监控系统,Prometheus于2016年加入CNCF(Cloud Native Computing Foundation,云原生计算基⾦会),2018年8月9日prometheus成为CNCF继kubernetes 之后毕业的第二个项目,prometheus在容器和微服务领域中得到了广泛的应用。
其特点主要如下:
使用key-value的多维度(多个维度,多个层面,多个方面)格式保存数据。
数据不使用MySQL这样的传统数据库,而是使用时序数据库,目前使用的是TSDB(Time Series DataBase)
支持第三方dashboard实现更绚丽的图形界面,如grafana(Grafana 2.5.0版本及以上)
组件模块化
不需要依赖存储,数据可以本地保存也可以远程保存(包括NFS存储或第三方存储服务VictoriaMetrics)
平均每个采样点仅占3.5 bytes,且一个Prometheus server可以处理数百万级别的的metrics指标数据。
支持服务自动化发现(基于consul等方式动态发现被监控的目标服务)
强大的数据查询语句功能(PromQL,Prometheus Query Language)
数据可以直接进行算术运算,即可以将查询到的数据进行加减乘除运算
易于横向伸缩
众多官方和第三方的exporter实现不同的指标数据收集
1.4.1 为什么使用Promethues
容器监控的实现方式与虚拟机或物理机的监控实现方式有比较大的区别,比如容器在k8s环境中可以任意横向扩容与缩容,那么就需要监控服务能够自动对新创建的容器进行监控,当容器删除后⼜能够及时的从监控服务中删除,而传统的zabbix的监控方式需要在每个容器中安装启动agent,并且在容器自动发现注册及模板关联方面并没有比较好的实现方式。
1.4.2 Prometheus架构
架构图:
Prometheus组件:
push gateway:数据收集代理服务器(类似于zabbix proxy),不具备抓取数据的功能,只能接收脚本或程序推送过来的数据,作为prometheus server的数据来源之一
prometheus targets: 静态收集的目标服务数据,是prometheus server的数据来源之一
prometheus server:主服务,接受外部http请求,收集、存储与查询数据等。监控数据主要来自于prometheus targets收集的目标服务数据以及push gateway获取到的数据。prometheus目前只支持从prometheus targets和push gateway拉取(pull)数据的模式,不支持prometheus targets和push gateway将数据推送(push)给prometheus server,这种模式会消耗部分prometheus server性能。
service discovery:动态发现服务,主动发现服务并对其进行监控
prometheus alerting:报警通知
data visualization and export: 数据可视化与数据导出(访问客户端)
文章评论