prometheus是由SoundCloud开源的CNCF旗下的监控系统,是Google BorgMon监控系统的开源版本,提供了完善的监控和告警功能.
prometheus自身并不提供所有的监控和告警功能,而是通过prometheus生态中的其他组件搭配共同完成,因为架构设计上的扩展性,目前prometheus能够支持基础资源资源、应用程序监控、中间件监控等众多场景,并且对于传统应用和设备也具备比较好的兼容性,正逐步成为容器监控的标准,在云原生的时代背景下更是首选。
一、prometheus的优点
- 提供多维度的数据模型和灵活的查询方式,监控数据可以任意组合,提供PromQL和HTTP查询接口.
- 支持本地存储和第三方存储,例如OpenTSDB
- 定义开放数据指标标准,Pull为主+Push相结合的采集方式,应对多数场景
- 支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集,Prometheus目前已经支持Kubernetes、etcd、Consul等多种服务发现机制
- 支持容器部署,支持云原生
- 支持联邦部署,支持大规模集群监控
- 大量的exporter组件可以开箱即用,减少工作量
二、prometheus架构设计
以上为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
下载prometheus压缩包并解压缩,执行prometheus脚本即可启动:
tar xvfz prometheus-*.tar.gz cd prometheus-* ./prometheus
访问http://127.0.0.1:9090,默认端口是9090,可以看到以下的页面,在默认情况下prometheus本身的指标也进行了收集,可以输入"up"点击Execute进行查询up指标,可以看到有指标名称,实例的IP和端口信息,job名称等。
四、使用grafana进行监控的图形化展示
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。
在使用之前添加对应的数据源,例如这里以添加prometheus数据源为例,点击settings->Data Sources->Add data source。
填写prometheus相关的IP和端口信息,点击Save&Tests
如果添加成功并且测试通过会有以下提示:
由于prometheus本身也收集了自身的指标,所以这里直接以prometheus为例演示如何使用grafana可视化监控指标。
以prometheus的一个指标
prometheus_http_requests_total为例,点击grafana面板左侧+号->create,创建一个面板,选择Add panel,在填写表达式,效果如下
这里是最简单的prometheus和grafana配合进行监控的案例,实际需要的情况下可以自己收集监控指标配置面板,实现一个全面的监控平台。