Prometheus是什么
Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,
拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算
基金会(CNCF),成为继Kubernetes之后的第二个托管项目。
https://prometheus.io
Prometheus特点:
• 多维数据模型:由度量名称和键值对标识的时间序列数据
• PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
• 不依赖分布式存储,单个服务器节点可直接工作
• 基于HTTP的pull方式采集时间序列数据
• 推送时间序列数据通过PushGateway组件支持
• 通过服务发现或静态配置发现目标
• 多种图形模式及仪表盘支持(grafana)
Prometheus组成及架构
• Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
• ClientLibrary:客户端库
• Push Gateway:短期存储指标数据。主要用于临时性的任务
• Exporters:采集已有的第三方服务监控指标并暴露metrics
• Alertmanager:告警
• Web UI:简单的Web控制台
1、首先,核心是一个Prometheus Server服务端,然后它默认会定时的通过http的方式去拉取客户端的数据,或者对于一些短期的任务可以通过Push Gateway组件由客户端推送到Push Gateway,然后server端去拉取Push Gateway的存储的数据。
2、再接收到数据后,普罗米会把数据存储在TSDB(时间序列数据库)中,不需要依赖于其他存储,当然,在大规模的应用中,其本身的存储是远远不够的,所以我们需要配置存储路径来存储数据。--storage.tsdb.path=/data/prometheus/prometheus/data/ 在启动普罗米时用这个参数配置存储路径
3、对于普罗米的服务发现功能(service discovery),普罗米内置了很多配置可以帮助我们更好的去监控我们的客户端,比如说file_sd,可以通过文件去发现主机,并打上各种标签便于管理和区分。目前,普罗米对于kubernetes是市面上最为兼容的监控器,我们可以通过简单地配置就可以管理上kubernetes里的所有主机,这也普罗米兴起的一个重要原因。
4、普罗米内置了很多http api,其他产品都可以通过api来获取普罗米的数据,比如说grafana通过PromSQL去获取数据以便展示。
5、普罗米在获取了数据后,我们需要有个机器人能帮助我们一直监控这些数据的健康状态,那么就需要一个报警组件altermanager,通过2遍的配置对接后,alertmanager对数据进行监控,并可以通过邮件、微信等方式发送告警。
监控系统的搭建
服务器配置:
系统:centos 7.x
Cpu:4核
内存:16G
主目录:/data/prometheus/
prometheus
1、安装
二进制部署:https://prometheus.io/docs/prometheus/latest/getting_started/
Docker部署:https://prometheus.io/docs/prometheus/latest/installation/
访问Web:http://localhost:9090
cat prometheus.yml
scrape_interval:收集数据间隔
evaluation_interval:评估规则间隔
alerting:配置连接alertmanager
rule_files:监控规则文件的目录
scrape_configs:定义监控的项目及配置
file_sd_config:基于文件发现规则
2、配置后台服务
vim /usr/lib/systemd/system/prometheus.service
########################################
[Unit]
Description=Prometheus server daemon
[Service]
ExecStart=/data/prometheus/prometheus/prometheus --config.file=/data/prometheus/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/prometheus/data/
Restart=on-failure
[Install]
WantedBy=multi-user.target
###########################################
systemctl daemon-reload
systemctl start Prometheus
安装grafana展示数据
1、安装
https://grafana.com/grafana/download
2、添加data sources
3、添加或创建展示页
这里我用的是别人创建好的页面(id:8919),如果不满意,我们可以把这个导出json格式,然后修改再导进去生成新的展示页
3、 用PromSQL创建我们想要展示的数据
node_online_keepalive{instance=~"$node"}
安装alertmanager
1、安装
地址1:https://prometheus.io/download/
地址2:https://github.com/prometheus/alertmanager/releases
2、配置后台服务,与普罗米一样,看前面
/data/prometheus/alertmanager/alertmanager --config.file=/data/prometheus/alertmanager/alertmanager.yml
3、配置文件
Alertermanager配置路由和接收者
Prometheus配置告警规则
4、配置普罗米与alertmanager通信
普罗米定义监控规则,把告警传给alertmanager,alertmanager根据路由选择发送方式
5、告警状态
• Inactive:这里什么都没有发生。
• Pending:已触发阈值,但未满足告警持续时间
• Firing:已触发阈值且满足告警持续时间。警报发送给接受者
6、告警收敛(分组,抑制,静默)
分组(group):将类似性质的警报分类为单个通知
抑制(Inhibition):当警报发出后,停止重复发送由此警报引发的其他警报
静默(Silences):是一种简单的特定时间静音提醒的机制
客户端数据的采集方案
需求:由于项目需求,我们往往需要采集exporter不能采集到的数据,那么用go在短时间内定制exporter和后期交接的维护都会存在时间成本,所有我们可以用通过node_exporter --collector.textfile.directory参数,用shell或者python来收集数据。
流程:
1、所有客户端都安装一个node_exporter,我们通过node的接口让普罗米来拉数据
/data/prometheus/node_exporter/node_exporter --collector.textfile.directory=/data/prometheus/node_exporter/textfile_collector --web.listen-address=:9999
2、新建数据采集脚本(不能带有exit等退出的语句,原因后期讲到)
cd /data/prometheus/node_exporter/textfile_scpripts/
vim node_online_keepalive
3、创建调度
vim /data/prometheus/node_exporter/cron.d/cron_node_exporter_textfile_common
#如果搭服后调度没运行了,那么把下面几步都加在搭服脚本中吧
chown root:root cron_node_exporter_textfile_common chmod 644 cron_node_exporter_textfile_common
ln -s /data/prometheus/node_exporter/cron.d/cron_node_exporter_textfile_common /etc/cron.d
systemctl restart crond
4、创建runner脚本批量运行采集脚本
cat /data/prometheus/node_exporter/textfile_scpripts/runner
5、查看有无收集到数据
cat /data/prometheus/node_exporter/textfile_collector/node_online_keepalive.prom
web界面查看metrics