Prometheus+Grafana搭建
一、Prometheus介绍
Prometheus由Go语言编写而成,采用Pull方式获取监控信息,并提供了多维度的数据模型和灵活的查询接口。Prometheus不仅可以通过静态文件配置监控对象,还支持自动发现机制,能通过Kubernetes、Consl、DNS等多种方式动态获取监控对象。在数据采集方面,借助Go语言的高并发特性,单机Prometheus可以采取数百个节点的监控数据;在数据存储方面,随着本地时序数据库的不断优化,单机Prometheus每秒可以采集一千万个指标,如果需要存储大量的历史监控数据,则还支持远程存储。
Prometheus的运行原理
通过Http协议周期性抓取被监控组件的状态。输出被监控组件信息的Http接口称为exporter。
常用组件大部分都有exporter可以直接使用,比如haproxy,Nginx,MySQL,Linux系统信息(磁盘、内存、CPU、网络等)
Prometheus主要特点
- 一个多维数据模型(时间序列由metrics指标名字和设置key/value键/值的labels构成)
- 非常高效的存储,平均一个采样数据占3.5字节左右,320万的字节时件序列,每30秒采样,保持60天,消耗磁盘大概228G
- 一种灵活的查询语言–PromQL
- 无依赖存储,支持local和remote不同类型
- 采用http协议,使用pull模式,拉取数据
- 监控目标,可以采用服务器发现或静态配置的方式
- 多种模式的图像和仪表支持,图形化友好
- 通过中间网关支持推送时间
Prometheus组件
Prometheus由多个组件组成,但是其中很多组件是可选的
Prometeus Server:收集和存储时间序列数据
Client Library:客户端库,为需要监控的服务生成相应的
metrics:并暴露给Prometheus server,当Prometheus server来Pull时,直接返回实时状态的metrics
pushgateway对于短暂运行的任务,负责接受和缓存时间序列数据,同时也是一个数据源
exporter:各种exporter,面向硬件、存储、数据库、Http服务等
alertmanager:处理报警
webUI:其他各种支持的工具,本身的界面值适合用来语句查询,数据可视化,需要第三方组件,比如Granfana
说明:
- Prometheus server:服务核心组件,采用 pull 方式收集 apiserver、scheduler、controller-manager、kubelet 组件数据, 通过 http 协议传输。并存储时间序列数据
- Exporters/Jobs:负责收集不支持Instrumentation的目标对象(host, container…)的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。
- Node-Exporter:用于收集k8s集群中各node节点的物理指标状态数据,如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据,需要部署到所有运算节点。
- Kube-State-Metrics:为prometheus采集k8s资源数据的exporter,通过监听APIServer收集kubernetes集群内资源对象的状态指标数据,例如pod、deployment、service等等。同时它也提供自己的数据,主要是资源采集个数和采集发生的异常次数统计。 需要注意的是kube-state-metrics只是简单的提供一个metrics数据,并不会存储这些指标数据,所以可以使用Prometheus来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,比如Deployment、Pod、副本状态等;调度了多少个replicas?现在可用的有几个?多少个Pod是running/stopped/terminated状态?Pod重启了多少次?有多少job在运行中。
- cadvisor:用来监控容器内部使用资源的信息,比如 CPU、内存、网络I/O、磁盘I/O。
- blackbox-exporter:监控业务容器存活性。
- Service Discovery:服务发现,Prometheus支持多种服务发现机制:文件,DNS,Consul,Kubernetes,OpenStack,EC2等等。 基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus查询到需要监控的Target列表,然后轮训这些Target获取监控数据。
- Alertmanager:是一个独立的告警模块,从 Prometheus server 端接收到 alerts 后,会进行去重、分组, 并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉等。
- Pushgateway:类似一个中转站,Prometheus 的 server 端只会使用 pull 方式拉取数据,但是某些节点因为某些原因只能使用 push 方式推送数据,那么它就是用来接收 push 而来的数据并暴露给 Prometheus 的 server 拉取的中转站。 可以理解成目标主机可以上报短期任务的数据到 Pushgateway,然后 Prometheus server 统一从 Pushgateway 拉取数据
- Grafana:是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件。
- Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等。
Grafana介绍
Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和说几句统计,带有告警功能。
特点
- 可视化:快速和灵活的客户端图形具有多种选项,面板插件为许多不同的方式可视化指标和日志。
- 报警:可视化地为最重要的指标定义警报规则,Granfana将持续评估他们,并发送通知。
- 通知:警报更改状态时,他会发出通知,接受电子邮件通知
- 动态仪表盘:使用模板变量创建动态和可重用的仪表盘,这些模板变量作为下拉菜单出现在仪表板顶部。
- 混合数据源:在同一个图中混合不同的数据源,可以根据每个查询指定数据源,这甚至适用于自定义数据源。
- 注释:注释来自不同数据源图标,将鼠标悬停在事件上可以显示完整的事件元数据和标记。