一、Prometheus和Grafana简介
1.1、Prometheus是最受欢迎的云原生监控方案之一
prometheus是由SoundCloud开源的CNCF旗下的监控系统,是Google BorgMon监控系统的开源版本,提供了完善的监控和告警功能.
prometheus使用拉模型来收集时间序列数据,并通过PromQL查询语言进行查询和聚合,prometheus自身并不提供所有的监控和告警功能,而是通过prometheus生态中的其他组件搭配共同完成,因为架构设计上的扩展性,目前prometheus能够支持基础资源资源、应用程序监控、中间件监控等众多场景,并且对于传统应用和设备也具备比较好的兼容性,正逐步成为容器监控的标准,在云原生的时代背景下更是首选。它被广泛应用于DevOps和SRE领域,并在多个企业和组织中得到了广泛采用。
Prometheus可以与Kubernetes、Docker等容器编排和管理工具无缝集成,也可以与Grafana等可视化工具结合使用,以便更好地展示监控数据。
在市场地位方面,根据CNCF(云原生计算基金会)的2021年度调查报告,Prometheus是最受欢迎的云原生监控解决方案之一,它在使用率和满意度方面排名在前几位。
1.2、Grafana是最流行的开源可视化平台
Grafana是一款流行的开源数据可视化和监控分析平台,它提供了灵活、易用和可定制的仪表盘、报表、警报和日志分析等功能。Grafana最初是由瑞典的Torkel Ödegaard在2014年创建的,现在已经成为了全球最受欢迎的数据可视化平台之一。
Grafana的主要特点包括:
- 多种数据源支持:Grafana支持从多种数据源获取数据,包括Prometheus、InfluxDB、Elasticsearch、Graphite、MySQL等,用户可以根据自己的需求选择合适的数据源。
- 强大的可视化功能:Grafana提供了多种可视化图表类型,包括线图、柱状图、表格、地图等,用户可以自由组合、定制和分享这些图表。
- 灵活的告警功能:Grafana可以根据用户设置的阈值和规则,自动发送通知和警报,帮助用户及时发现和解决问题。
- 可扩展性:Grafana是一个可扩展的平台,用户可以编写自己的插件、面板和数据源,以满足自己的需求。
Grafana在市场上的地位越来越重要,它已经成为了企业、开发人员和数据科学家们的首选数据可视化和监控分析工具。根据2021年的一份报告显示,Grafana在全球最受欢迎的数据可视化工具中排名第二,仅次于Tableau。Grafana的用户群体涵盖了各个行业和领域,包括IT运维、物联网、金融、医疗等,而且Grafana还被广泛应用于开源项目和云服务中,如Kubernetes、AWS、Azure、Google Cloud等。
二、Prometheus的优势
Prometheus之所以能够成为在云原生背景下最受欢迎的云原生监控方案之一,在于其相对于其他的解决方案有独特的优势:
- 提供多维度的数据模型和灵活的查询方式,监控数据可以任意组合,提供PromQL和HTTP查询接口;
- 支持本地存储和第三方存储,例如OpenTSDB;
- 定义开放数据指标标准,Pull为主+Push相结合的采集方式,应对多数场景;
- 支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集,Prometheus目前已经支持Kubernetes、etcd、Consul等多种服务发现机制;
- 支持容器部署,支持云原生;
- 支持联邦部署,支持大规模集群监控;
- 大量的exporter组件可以开箱即用,减少工作量。
三、Prometheus架构原理
img
以上为prometheus架构图,可以看到,prometheus server是核心组件,它定时地从目标对象上pull metrics,对于一些短周期的任务,允许将数据推送到Pushgateway,prometheus server从Pushgateway上抓取数据指标。
数据存储支持本地存储和远端存储,目前远端存储支持OpenTSDB、InfluxDB和Elasticsearch等。
对于拉取数据指标的对象,可以有两种方式进行配置,一种是通过配置文件进行静态配置,另一种是支持ZooKeeper、Consul、Kubernetes等方式进行动态发现。
AlertManager 是独立于 Prometheus 的一个组件,在触发了预先设置在Prometheus 中的高级规则后,Prometheus 便会推送告警信息到 AlertManager,由AlertManager发送邮件、钉钉等告警信息,AlertManager支持高可用部署,为了解决多个AlertManager重复告警的问题,引入了Gossip,在多个AlertManager之间通过Gossip同步告警信息。
特别注意,prometheus架构数据采集选择pull的模式有一些明显的好处,一是主动拉取,不会类似推的模式一样容易造成被采集应用程序因为推送数据指标失败等情况而造成对应用程序本身的影响,二是更加灵活和容易扩展,只要提供的http接口符合prometheus定义的数据格式即可.
可以看到prometheus的设计保障了其灵活性,不管是中间件、网络还是应用服务,只要编写提供metrics的符合规范的接口以供prometheus pull相关的数据即可实现灵活的监控,特别是关于应用服务的业务指标监控,只要编写切面统一收集数据或者埋点,就可以实现细粒度的监控,例如springboot应用集成prometheus实现JVM监控、业务指标监控,都是非常简单的事情。
另外,目前市场上存在大量的开箱即用的exporter组件,例如用于系统资源资源的node_exporter、用于mysql监控的mysqld_exporter、用于redis监控的redis_exporter等等。
四、Prometheus和Grafana安装部署
下载prometheus压缩包并解压缩,执行prometheus脚本即可启动:
tar xvfz prometheus-*.tar.gz
cd prometheus-*
./prometheus
访问http://192.168.56.11:9090,默认端口是9090,可以看到以下的页面,在默认情况下prometheus本身的指标也进行了收集,可以输入"up"点击Execute进行查询up指标,可以看到有指标名称,实例的IP和端口信息,job名称等。
img
prometheus实现了一个灵活的监控数据采集方案,但是缺少UI不够直观,无法满足企业级的监控需求,基于此grafana应运而生。
Grafana是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据进行可视化展示,配置告警。其内置多种图表、支持多数据源、安装部署简单,基本实现可开箱即用,应用十分广泛,主要特点有:
1、丰富的图表支持:具有丰富的仪表盘插件,支持多种开箱即用的图表,例如折线图、饼图、柱形图等等,还有官方和社区提供的内置多种dashboard,针对具体的应用场景可以快速导入,无需自己组织图表,具体可以查看https://grafana.com/grafana/dashboards。
2、丰富的数据源支持:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
3、通知提醒:以可视方式定义警报规则,在配置的规则下发送告警通知,页面上可以配置对应告警级别的不同颜色的图表。
4、图表和数据映射简单:通过编写表达式,可以简单地实现图表的数据展示规则,并且可实现导入导出。
grafana的安装非常简单,下载对应的版本解压缩以后进入bin目录,执行grafana-server脚本即可,启动以后初始账号密码:admin/admin。
img
在使用之前添加对应的数据源,例如这里以添加prometheus数据源为例,点击settings->Data Sources->Add data source
img
填写prometheus相关的IP和端口信息,点击Save&Tests
img
如果添加成功并且测试通过会有以下提示:
img
由于prometheus本身也收集了自身的指标,所以这里直接以prometheus为例演示如何使用grafana可视化监控指标。
以prometheus的一个指标prometheus_http_requests_total为例,点击grafana面板左侧+号->create,创建一个面板,选择Add panel,再填写表达式,效果如下
img
这里是最简单的prometheus和grafana配合进行监控的案例,实际需要的情况下可以自己收集监控指标配置面板,实现一个全面的监控平台。