1 Promethus基本概念
Prometheus 是由 SoundCloud 开源监控告警解决方案。
prometheus存储的是时序数据,即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。时序(time series)是由名字(Metric)以及一组key/value标签定义的,具有相同的名字以及标签属于相同时序。
-
Prometheus Server:用于收集指标和存储时间序列数据,并提供查询接口
-
client Library:客户端库(例如Go,Python,Java等),为需要监控的服务产生相应的/metrics并暴露给Prometheus Server。目前已经有很多的软件原生就支持Prometheus,提供/metrics,可以直接使用。对于像操作系统已经不提供/metrics,可以使用exporter,或者自己开发exporter来提供/metrics服务。
-
push gateway:主要用于临时性的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。对此Jobs定时将指标push到pushgateway,再由Prometheus Server从Pushgateway上pull。
-
exporter:用于暴露已有的第三方服务的 metrics 给 Prometheus。
-
alertmanager:从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
-
Web UI:Prometheus内置一个简单的Web控制台,可以查询指标,查看配置信息或者Service Discovery等,实际工作中,查看指标或者创建仪表盘通常使用Grafana,Prometheus作为Grafana的数据源。
2 安装
官网下载对应的安装包
https://prometheus.io/download/
解压文件,开箱即可用
tar –zxvf prometheus-2.20.0.linux-amd64.tar.gz
cd进入目录,执行命令
./prometheus --web.listen-address=0.0.0.0:8090 --config.file="prometheus.yml"
在浏览器输入ip:8090即可访问如下页面
3 安装Node Exporter
Promethus Server并不直接监控特定目标,其主要任务是负责数据的手机、存储、并对外提供数据查询支持。因此为了能够监控,需要使用Node Exporter。Promethus周期性地从Exporter暴露的HTTP服务地址拉去监控样本数据。Exporter是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。
官网下载:
https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-arm64.tar.gz
解压并安装
tar -zxvf node_exporter-1.0.1.linux-arm64.tar.gz -C software/
进入目录并启动./node_exporter
报错,以为是没有权限,使用命令chmod 777 xxx 再运行还是不对,发现安装包有问题。应该下载linux_amd版本
重新选择下载地址
https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
解压、进入目录,执行脚本
进入目录并启动./node_exporter
访问10.3.xx.xx:9100
访问http://10.3.xx.xx:9100/metrics
可以看到当前主机的所有监控资源
Help 用于解释当前指标的含义
Type 说明当前指标的数据类型
从Node_exporter收集监控数据
打开./promethus.yml 在里面加上如下内容
刷新页面,输入up看到如下页面:
0 表示异常 1 表示正常
选择Graph面板,选择node_load1,即可以查看主机的负载样本数据。
Promethus内置了很多函数,如rate(node_cpu_seconds_total[2m])可以计算在单位时间内样本数据的变化情况,即增长率。通过该函数可以近似地通过CPU使用时间计算CPU的利用率。avg without(cpu) (rate(node_cpu_seconds_total[2m])) 忽略CPU维度,将CPU标签去除后聚合数据即可
4 监控数据可视化
Promethus UI提供了快速验证PromQL以及临时可视化支持的能力,而在大多数场景下引入监控系统还需要构建可以长期使用的监控表盘,这时候可以考虑使用第三方可视化工具Granfana,Grafana是一个开源的可视化平台,并提供了对Promethus的完整支持。
4.1 安装Grafana
下载安装包并安装
https://dl.grafana.com/oss/release/grafana-7.1.0-1.x86_64.rpm
yum install grafana-7.1.0-1.x86_64.rpm
启动
/etc/init.d/grafana-server start
访问浏览器10.3.xx.xx:3000
默认账户:admin
默认密码:admin
登录之后修改密码,进入页面
Promethus Server是Promethus组件的核心,负责实现对监控的获取、存储以及查询。Promethus Server可以通过静态配置管理监控目标,也可以配合Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。Promethus Server需要对采集到的监控数据进行存储,其本身就是时序数据库,将采集的数据按照时间序列的方式存储到本地磁盘。
3.2 Granfana相关概念
将10.3.xx.xx服务器作为数据源增加到Granfana中
5 告警神器
Alertmanager 用于发送告警, 是真正发送信息给用户的模块。Alertmanager 会接受Prometheus发送过来的警告信息,再由Alertmanager来发送。
Prometheus的配置文件中,有alertmanager_config这一项,他配置的就是alertmanager的地址,如果prometheus产生了告警,就会根据这个配置的url,进行发送。告警信息就会发送到alertmanager中,所有prometheus的任务就是产生告警的信息,其余的处理都会在alertmanager中做。
访问github进行下载:
https://github.com/prometheus/alertmanager
5.1 告警状态:
Inactive 这里什么都没发生
Pending 已触发阈值,但未满足告警持续时间
Firing 已触发阈值且满足告警持续时间,将警报发送给接受者
5.2 告警收敛
Group 分组 将类似性质的警报分类为单个通知
Inhibition 抑制 当警报触发后,停止重复发送由此警报而引发的其他警报
Silence 静默 一种简单的特定时间静音提醒机制
alertmanager.yml文件
[root@es2 config]# cat alertmanager.yml
global:
smtp_smarthost: 'smtp.exmail.qq.com:25' # smtp地址
smtp_from: 'sijy@jubaozhu.com' # 谁发邮件
smtp_auth_username: 'sijy@jubaozhu.com' # 邮箱用户
smtp_auth_password: 'xxxxx' # 邮箱密码
smtp_require_tls: false
route:
group_by: ["instance"] # 分组名
group_wait: 30s # 当收到告警的时候,等待三十秒看是否还有告警,如果有就一起发出去
group_interval: 5m # 发送警告间隔时间
repeat_interval: 3h # 重复报警的间隔时间
receiver: mail # 全局报警组,这个参数是必选的,和下面报警组名要相同
receivers:
- name: 'mail' # 报警组名
email_configs:
- to: 'sijiayong000@163.com' # 发送给谁
需要在prometheus中定义相关的报警规则,即rules.yml,已触发相应的告警。并在prometheus.yml配置文件中添加告警机器的ip地址
6 相关概念
Counter:递增的计数器
适合:API 接口请求次数,重试次数。
• Gauge:可以任意变化的数值
适合:cpu变化,类似波浪线不均匀。
• Histogram:对一段时间范围内数据进行采样,并对所有数值求和与统计数量、柱状图
适合:将web 一段时间进行分组,根据标签度量名称,统计这段时间这个度量名称有多少条。
适合:某个时间对某个度量值,分组,一段时间http相应大小,请求耗时的时间。
• Summary:与Histogram类似