Prometheus监控系统的从无到有

 

Prometheus是什么

Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,

拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算

基金会(CNCF),成为继Kubernetes之后的第二个托管项目。

 

https://prometheus.io

https://github.com/prometheus

 

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

 

 

posted @ 2020-07-28 10:31  在运维之路上的小汤姆  阅读(659)  评论(0编辑  收藏  举报