Prometheus监控系统(10)使用Grafana出图配置教程
43410
2019-06-13
一、Prometheus介绍
在云原生时代,从可观测性来将监控系统分为了指标监控(Metrics)、日志监控(Logging)、链路跟踪(Tracing)。指标监控记录的是一些随时间推移产生的可聚合数据,代表产品有老牌Zabbix和当下最火的Prometheus;日志监控记录了离散式的日志或事件,代表产品为ELK;链路跟踪则是对分布式应用调用链跟踪,代表产品有Zipkin、Jaeger、Pinpoint等。谷歌对监控提出了延迟、流量、错误、饱和度四个黄金指标,其中延迟是指服务请求成功的所需时长;流量是衡量服务的容量需求,如每秒处理的HTTP请求数或者数据库QPS;错误则是请求失败的情况;饱和度通常用来衡量资源的使用情况,如CPU、内存、磁盘资源情况
Prometheus通过多种数学算法能实现强大的监控需求,基于cadvisor原生支持K8S服务发现,能监控容器的动态变化。并且结合Grafana能绘出漂亮图形,然后使用alertmanager或Grafana实现报警。它与其他监控相比有以下主要优势:
· 数据格式是Key/Value形式,简单、速度快
· 监控数据的精细程度是绝对的领先,达到秒级(但正因为数据采集精度高,对磁盘消耗大,存在性能瓶颈,而且不支持集群,但可以通过联邦能力进行扩展)
· 不依赖分布式存储,数据直接保存在本地,可以不需要额外的数据库配置。但是如果对历史数据有较高要求,可以结合OpenTSDB
· 周边插件丰富,如果对监控要求不是特别严格的话,默认的几个成品插件已经足够使用
· 本身基于数学计算模型,有大量的函数可用,可以实现很复杂的监控(所以学习成本高,需要有一定数学思维,独有的数学命令行很难入门)
· 可以嵌入很多开源工具的内部去进行监控,数据更可信。
二、Prometheus部署与基本配置
1、下载Prometheus二进制包
通过Prometheus官网(http://prometheus.io)可以下载二进制包。如果不考虑任何参数的话解压安装包之后直接运行./prometheus脚本就可以启动服务,服务启动后默认监听9090端口。Prometheus服务端所采集到的数据(metrics)会先存放在内存中,再定期写入硬盘。如果服务重新启动的话会将硬盘数据写回到内存中,所以对内存有一定消耗。监控数据库默认只会保留15天。
2、Prometheus的配置文件
prometheus.yml为主配置文件,该文件大致分为了global全局配置、alerting告警配置、rules_file、scrape_configs被监控端配置。下面是一个基础配置文件说明
global: #这里的配置项可以单独配置在某个job中 scrape_interval: 15s #采集数据间隔,默认15秒 evaluation_interval: 15s #告警规则监测频率,比如已经设置了内存使用大于70%就告警的规则,这里就会每15秒执行一次告警规则 scrape_timeout:10s #采集数据超时时间 #alerting: # alertmanagers: # - static_configs: # - targets: # - alertmanager:9093 scrape_configs: - job_name: 'prometheus-server' #被监控资源的组名称为job metrics_path defaults to '/metrics' #该行可不写,获取数据URI默认为/metrics scheme defaults to 'http' #默认http方式采集 static_configs: - targets: ['localhost:9090','192.168.1.100:9100'] #节点地址与获取Metrics数据端口,多个地址用逗号分隔,也可以写多行 - job_name: 'nodes' file_sd_configs: static_configs: - targets: - 192.168.1.101:9100 - 192.168.1.102:9100 - 192.168.1.103:9100
三、Prometheus的标签配置
Prometheus通过标签可以实现查询过滤,并且还支持重新标签实现动态生成标签、过滤、删除无用标签等灵活配置。在采集数据之前可以使用relabel_configs进行重新标记,存储数据之前可以使用metric_relabel_configs重新标记。两种重新打标签的方式都支持以下动作:
· replace:默认动作,将匹配到的标签内容做替换
• keep:通过正则表达式与source_label进行匹配,如果匹配则保留
• drop:通过正则表达式与source_label进行匹配,如果匹配则删除
• labeldrop:删除指定标签,比如一些默认标签并不需要,可以用该动作删除
• labelkeep:仅保留指定标签
下面是包含标签信息的配置文件说明
global: scrape_interval: 15s evaluation_interval: 15s scrape_timeout:10s #alerting: # alertmanagers: # - static_configs: # - targets: # - alertmanager:9093 scrape_configs: - job_name: 'prometheus-server' metrics_path defaults to '/metrics' scheme defaults to 'http' static_configs: - targets: ['localhost:9090'] #节点地址与获取Metrics数据端口,多个地址用逗号分隔 - job_name: 'web_node' #定义另一个监控组 metrics_path defaults to '/metrics' #获取数据URI默认为/metrics scheme defaults to 'http' #默认http方式采集 static_configs: - targets: ['10.160.2.107:9100','192.168.1.100:9100'] #组内多个被监控主机 labels: #自定义标签,通过标签可以进行查询过滤 server:nginx #将上面2个主机打上server标签,值为nginx - job_name: 'mysql_node' static_configs: - targets: ['10.160.2.110:9100','192.168.1.111:9100'] metric_relable_configs: #声明开始重命名标签,可以配置多个action - action: replace #指定第一个action为replace,也是默认动作,代表替换标签 source_labels: ['job'] #指定需要被action所操作的原标签名 regex: (.*) #通过正则进行匹配,如果原标签名所对应的值匹配,则进行action replacement: $1 #原标签需要被替换的部分,$1代表regex正则的第一个分组 target_label: idc #将$1内容赋值给idc标签 - action: drop #指定第二个action为drop,符合条件的将被删除 regex: "192.168.100.*" source_labels: ["__address__"] #需要进行正则匹配的原标签 - action: labeldrop #直接删除标签示例 regex: "job" #直接写标签名即可
4、在启动Prometheus之前可以使用protool工具对配置文件进行检查
protool check config prometheus.yml
5、配置文件检查没有问题后运行prometheus脚本启动服务,,该目录中那些一长串一长串的文件夹都是已经写入到磁盘中的历史数据。在写入磁盘前这些数据放在内存中,如果发生断电等情况就会使用硬盘中的数据进行恢复
prometheus --config.file="/usr/local/prometheus-2.16.0.linux-amd64/prometheus.yml" --web.listen-address="0.0.0.0:9090" --storage.tsdb.path="/data/prometheus" --storage.tsdb.retention.time=15d --web.enable-lifecycle & # --config.file="/usr/local/prometheus/prometheus.yml" # 指定配置文件路径,如果未指定默认从prometheus进程所在目录查找 # --web.listen-address="0.0.0.0:9090" # 指定服务端口 # --storage.tsdb.path="/data/prometheus" # 指定数据存储路径,如果未指定默认将监控数据存放在prometheus/data # --storage.tsdb.retention.time=15d # 数据保留时间 # --collector.systemd # 开启systemd的服务状态监控,开启后在WEB上可以看到多出相关监控项 # --collector.systemd.unit-whitelist=(sshd|nginx).service # 对systemd具体要监控的服务名 # --web.enable-lifecycle # 开启HTTP热加载配置 # --web.enable-admin-api # 开启该选项后可以通过HTTP进行高级管理操作,如创建数据快照、删除时间序列数据等 # --log.level=info # 开启日志,日志文件在配置文件中定义 # --log.format=logfmt # 日志格式
6、重启Prometheus可以通过两种热加载方式来操作,一个是直接用kill命令发送HUP信号,一个是开启web.enable-lifecycle选项后使用curl命令
kill -HUP `pidof prometheus`
curl -X POST http://localhost:9090/-/reload
7、Prometheus服务管理脚本
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus \
--storage.tsdb.path=/usr/local/prometheus/data \
--config.file=/usr/local/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target
8、通过浏览器访问9090端口可以进入到Prometheus WEB管理界面。如下图就是查看已经监控的节点列表
9、在进行数据查询时需要使用统一的查询语法,可以根据监控指标名和标签名进行过滤、聚合等操作,label标签支持正则表达式,多个标签用逗号分隔
http_requests_total{environment=~"staging|testing|development",method!="GET"}
http_request_total{}[5m] #选择最近5分钟内的所有样本数据,还支持s,h,d,w,y等单位
http_request_total{}[1d] offset 1d #区间向量表达式是以当前时间为基准,如果想查询昨天一天的区间数据可以使用位移操作offset
发表评论
暂时没有评论,来抢沙发吧~