官方网站:https://prometheus.io/docs/prometheus/latest/getting_started/
参考:https://www.cnblogs.com/weidongliu/p/11021622.html
一、监控概述
1、监控概述
监控是度量和管理技术系统的工具和系统。监控提供从系统和应用程序生成的指标到业务价值的转换。监控指标转换为用户体验的度量,为业务和技术提供反馈,指示业务的工作状态以及持续改进。
良好的监控系统应该:从上而下的监控、协助故障诊断、基础架构应用程序开发和业务人员的信息源。
监控机制
应用程序监控的两种方法:探测、自省
执行监控的两种方法:推、拉
监控数据的主要的两种类型:Metrics、logs
2、prometheus介绍
Prometheus有GO语言编写而成,采用Pull方式获取监控信息,并提供了多维度的数据模型和灵活的查询接口。Prometheus不仅可以通过静态文件配置监控对象,还支持自动发现机制,能够通过Kubernetes,Consul,DNS等多种方式动态获取监控对象。在数据采集方面,借助Go语言的高并发特性,单机Prometheus可以采集数百个节点的监控数据;在数据存储方面,随着本地时序数据库的不断优化,单机Prometheus每秒可以采集一千万个指标,如果需要存储大量的历史监控数据,则还支持远端存储。
prometheus是为短期监视和警报需求而设计的。默认它会在本地数据库保留15天的数据。如果需要保留更长时间的数据,可以使用第三方数据存储,比如influxDB、OpenTSDB、Elasticsearch等。
Metric名字:时间序列的名称通常描述收集的时间写数据的一般性质。名称可以包含ASCII字母、数字、下划线和冒号。例:website_visits_total网站访问总数。
标签(labels):以_ 为前缀的标签名称保留给prometheus内部使用。
二、prometheus组件组成
转自:https://my.oschina.net/54188zz/blog/3070367
Prometheus Server
Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。 Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。最后Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。
Prometheus Server内置的Express Browser UI,通过这个UI可以直接通过PromQL实现数据的查询以及可视化。
Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据,因此在大规模监控的情况下,可以通过联邦集群以及功能分区的方式对Prometheus Server进行扩展。
Exporters
Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。
一般来说可以将Exporter分为2类:
-
直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。
-
间接采集:间接采集,原有监控目标并不直接支持Prometheus,因此我们需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如: Mysql Exporter,JMX Exporter,Consul Exporter等。
AlertManager
在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。在AlertManager中我们可以用邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。AlertManager即Prometheus体系中的告警处理中心。
PushGateway
由于Prometheus数据采集基于Pull模型进行设计,因此在网络环境的配置上必须要让Prometheus Server能够直接与Exporter进行通信。 当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转。可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据。
补充说明:Prometheus抓取数据的两种模式 (1) push 模式(2)pull模式
push 模式 :这种模式我们可以灵活的在被监控端使用各种语言编写数据采集脚本,通过PushGateway传输给Prometheus,传输方式为http
pull 模式 :我们直接使用采集数据客户端xxx_exporters将数据传输给Prometheus,已经有很多xxx_exporters详见官档,同样也是http