Prometheus与grafana监控

Prometheus是一个开源的系统监控和警报工具包,是由 SoundCloud 开源监控告警解决方案。笔者对prometheus与grafana进行了学习和理解并且整理了所需要的信息以及资源。

特点:

  1. 多维数据模型,时间序列由metric名字和K/V标签标识

  2. 灵活的查询语言(PromQL)

  3. 单机模式,不依赖分布式存储

  4. 基于HTTP采用pull方式收集数据

  5. 支持push数据到中间件(pushgateway)

  6. 通过服务发现或静态配置发现目标

prometheus存储的是时序数据,即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。

时序(time series)是由名字(Metric)以及一组key/value标签定义的,具有相同的名字以及标签属于相同时序。

metric名字:表示metric的功能,如http_request_total。时序的名字由 ASCII 字符,数字,下划线,以及冒号组成,它必须满足正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*, 其名字应该具有语义化,一般表示一个可以度量的指标,例如 http_requests_total, 可以表示 http 请求的总数。

标签:

样本:按照某个时序以时间维度采集的数据,称之为样本。实际的时间序列,每个序列包括一个float64的值和一个毫秒级的时间戳

一个 float64 值

一个毫秒级的 unix 时间戳

格式:Prometheus时序格式与OpenTSDB相似:


<metric name>{<label name>=<label value>, ...}

Metric类型:

Counter: 一种累加的metric,如请求的个数,结束的任务数,出现的错误数等

Gauge: 常规的metric,如温度,可任意加减。其为瞬时的,与时间没有关系的,可以任意变化的数据。

Histogram: 柱状图,用于观察结果采样,分组及统计,如:请求持续时间,响应大小。其主要用于表示一段时间内对数据的采样,并能够对其指定区间及总数进行统计。根据统计区间计算

Summary: 类似Histogram,用于表示一段时间内数据采样结果,其直接存储quantile数据,而不是根据统计区间计算出来的。不需要计算,直接存储结果

Prometheus生态系统由多个组件构成,其中多是可选的,根据具体情况选择

Prometheus server - 收集和存储时间序列数据

Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。

pushgateway - 对于短暂运行的任务,负责接收和缓存时间序列数据,同时也是一个数据源

exporter - 各种专用exporter,面向硬件、存储、数据库、HTTP服务等

alertmanager - 处理报警

webUI等,其他各种支持的工具

安装部署

wget -c https://github.com/prometheus/prometheus/releases/download/v2.9.2/prometheus-2.9.2.linux-amd64.tar.gzwget -c https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz

其中,prometheus-2.9.2.linux-amd64.tar.gz就是服务端程序压缩包,node_exporter-0.17.0.linux-amd64.tar.gz是主机监控指标的包。node_exporter有默认的配置,可以直接使用nohup运行即可,会监听9100的端口。

nohup ./node_exporter &

配置文件

cat prometheus.yml

# my global configglobal:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s).# Alertmanager configurationalerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files: # - "first_rules.yml" # - "second_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090']

默认配置文件里面,使用了静态配置的方式,监控Prometheus的指标。

重载配置

kill -HUP [prometheus_pid]

给Prometheus发现重载配置的信号,就会开始收集node的指标。

服务过程

  1. Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。
  2. Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
  3. Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
  4. PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
  5. Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

Prometheus支持两种Pull方式采集数据

通过配置文件、文本等进行静态配置
支持Zookeeper、Consul、Kubernetes等方式进行动态发现,例如对Kuernetes的动态发现,Prometheus使用Kubernetes的API查询和监控容器信息的变化,动态更新监控对象,这样容器的创建和删除都可以被Prometheus感知
Storage通过一定的规则清理和整理数据,并把得到的结果从年初到新的时间序列中,这里存储的方式有两种

1.本地存储。通过Prometheus自带的时序数据库将数据库数据保存在本地磁盘。但是本地存储的容量毕竟有限,建议不要保存超过一个月的数据 2.另一种是远程存储,适用于存储大量监控数据。通过中间层的适配器的转发,目前Prometheus支持OpenTsdb、InfluxDB、Elasticsearch等后端存储,通过适配器实现Prometheus存储的remote write和remote read接口,便可以接入Prometheus作为远程存储使用。

Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持多种方式的图标可视化,例如Grafana、自带的PromDash及自身提供的模板引擎等。Prometheus还提供HTTP API查询方法,自定义所需要的输出

Prometheus通过Pull方式拉取数据,但某些现有系统是通过Push方式实现的,为了接入这些系统,Prometheus提供了对PushGateway的支持,这些系统主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据

Grafana

Grafana是一个开源平台,用于可视化、监控和分析度量指标。Grafana侧重于时间序列分析。Grafana可以通过众多图形选项(包括线图、热图和条形图)显示所分析的数据。被监控的度量指标超过预定义的阈值时,你会收到警报。

主要功能包括:

警报:可以通过不同的渠道(包括SMS、电子邮件、Slack或PagerDuty)获得警报。如果你更喜欢其他沟通渠道,可以使用一些代码创建自己的通知程序。
仪表板模板化:模板化让你可以创建可重复用于多个使用场景的仪表板。比如说,可以为生产服务器和测试服务器使用同样的仪表板。
配置:可以使用脚本使Grafana中的一切实现自动化。比如说,可以使用含有IP地址、服务器和数据源预设值的脚本,自动启动Grafana和新的Kubernetes集群。
注释:发生错误时适用于数据关联。可以通过在图形中添加文本来手动创建注释,也可以从任何数据源获取数据。
2. cAdvisorc

cAdvisor收集、处理和导出有关运行中容器的性能和资源使用情况信息。cAdvisor直接支持Kubernetes,因为它已集成到Kubelet二进制文件中。

主要功能包括:

  1. 自动发现:自动发现某个节点中的所有容器,并收集统计信息,包括内存、CPU、网络和文件系统的使用情况。
  2. 存储插件:将统计信息导出到不同的存储插件,比如Elasticsearch和InfluxDB。
  3. 机器整体使用情况:通过分析机器上的“root”容器,提供机器整体使用情况。
  4. Web-UI:可以在Web-UI上查看显示有关机器上所有容器的实时信息的度量指标。

每个数据源的查询语言和能力都是不同的。你可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。

DashBoard:仪表盘,就像汽车仪表盘一样可以展示很多信息,包括车速,水箱温度等。Grafana的DashBoard就是以各种图形的方式来展示从Datasource拿到的数据。

Row:行,DashBoard的基本组成单元,一个DashBoard可以包含很多个row。一个row可以展示一种信息或者多种信息的组合,比如系统内存使用率,CPU五分钟及十分钟平均负载等。所以在一个DashBoard上可以集中展示很多内容。

Panel:面板,实际上就是row展示信息的方式,支持表格(table),列表(alert list),热图(Heatmap)等多种方式,具体可以去官网上查阅。

Query Editor:查询编辑器,用来指定获取哪一部分数据。类似于sql查询语句,比如你要在某个row里面展示test这张表的数据,那么Query Editor里面就可以写成select *from test。这只是一种比方,实际上每个DataSource获取数据的方式都不一样,所以写法也不一样(http://docs.grafana.org/features/datasources/),比如像zabbix,数据是以指定某个监控项的方式来获取的。

Organization:组织,org是一个很大的概念,每个用户可以拥有多个org,grafana有一个默认的main org。用户登录后可以在不同的org之间切换,前提是该用户拥有多个org。不同的org之间完全不一样,包括datasource,dashboard等都不一样。创建一个org就相当于开了一个全新的视图,所有的datasource,dashboard等都要再重新开始创建。

User:用户,这个概念应该很简单,不用多说。Grafana里面用户有三种角色admin,editor,viewer。admin权限最高,可以执行任何操作,包括创建用户,新增Datasource,创建DashBoard。editor角色不可以创建用户,不可以新增Datasource,可以创建DashBoard。viewer角色仅可以查看DashBoard。在2.1版本及之后新增了一种角色read only editor(只读编辑模式),这种模式允许用户修改DashBoard,但是不允许保存。每个user可以拥有多个organization。

下载安装

官方下载地址:https://grafana.com/grafana/download
安装指南:https://grafana.com/docs/grafana/latest/installation/rpm/
下载安装完成后,输入命令 service grafana-server start 启动服务,打开浏览器,输入IP+端口,3000为Grafana的默认侦听端口。
系统默认用户名和密码为admin/admin,第一次登陆系统会要求修改密码,修改密码后登陆

Grafana使用方法

  1. 添加数据源

首先是添加数据源,点击左上角的grafana图标

  1. 创建DashBoard

创建好数据源之后,就需要创建DashBoard(仪表盘),可以自定义,也可以导入你需要的仪表盘,官方提供了很多的可选仪表盘。

BashBoard地址:https://grafana.com/grafana/dashboards?dataSource=influxdb
更多入门方式:https://grafana.com/docs/grafana/latest/getting-started/getting-started/

参考:
https://www.jianshu.com/p/93c840025f01
https://baijiahao.baidu.com/s?id=1643112707938591118&wfr=spider&for=pc
https://baijiahao.baidu.com/s?id=1666356806483543992&wfr=spider&for=pc
https://www.cnblogs.com/chenqionghe/p/10494868.html
https://baijiahao.baidu.com/s?id=1636696940034915956&wfr=spider&for=pc
https://www.jianshu.com/p/7e7e0d06709b
https://www.cnblogs.com/imyalost/p/9873641.html
https://grafana.com/docs/grafana/latest/getting-started/getting-started/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值