Prometheus
一、简介
开源监控系统和警报工具包,从2012年开始由Google工程师在Soundcloud以开源软件形式研发,于2015年早期对外发布早期版本。2016年5月继Kubernates之后成为第二个正式加入CNCF基金会的项目,同年6月正式发布1.0版本。2017年底发布了基于全新存储层的2.0版本,能更好的与容器平台,云平台配合。
二、特点
- 支持多维数据模型由指标名称和键值对标识的时间序列数据。
- 内置时间序列库TSDB(Time Serices Database)。
- 支持PromQL(Prometheus Query Language) ,对数据的查询和分析、图形展示和监控告警。
- 不依赖分布式存储;单个服务器节点是自治的。
- 支持HTTP的拉取(pull)方式收集时间序列数据。
- 通过中间网关Pushgateway推送时间序列。
- 通过服务发现与静态配置2种方式发现目标。
- 支持多种可视化和仪表盘。如grafana。
三、核心组件
- prometheus Server。主要用于抓取数据和存储时序数据,另外还提供查询和Alert Rule 配置管理。
- client libraries。用于检测应用程序代码的客户端库。
- push gateway。用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。
- exporters。收集监控样本数据,并以标准格式向Prometheus提供。例如:收集服务器系统数据的node_exporter,收集MySql监控样本数据的MySql exporter等等。
- alertmanager。用于告警通知管理。
四、基础架构
【业务逻辑】
- Prometheus server 定期从静态配置的targets或者服务发现的targets拉取数据(Targets是Prometheus采集Agent需要抓取的采集目标)。
- 当新拉取的数据大于配置内存缓存区的时候,Prometheus会将数据持久化到硬盘(如果使用remote storage将持久化到云端)。
- Prometheus可以配置rules,然后定时查询数据,当条件触发的时候,会将alerts推送到配置的Alertmanager。
- Alertmanager收到告警的时候,可以根据配置(163,钉钉等),聚合,去重,降噪,最后发送警告。
- 可以使用AP,Prometheus Console或者Grafana查询和聚合数据。
五、Prometheus与Zabbix的对比
小结:监控系统没有绝对的最好,只有最适合。可以参考以下要点:
- 物理机、硬件设配的监控推荐使用Zabbix。
- Docker容器,Kunernates监控推荐使用Prometheus。
- 云服务器厂商自带监控系统,有的监控系统不全面,也可以Zabbix和Prometheus混合使用。
六、安装和配置
说明:安装环境使用Centos7。
6.1、ntp时间同步
说明:安装Prometheus之前必须先安装ntp时间同步,因为prometheus server谁系统时间的准确性要求很高,必须保证本机时间实时同步。执行命令如下:
timedatectl set-timezone Asia/Shanghai contab -e
6.2、Prometheus server 下载
官网下载最新版本。这里我们下载prometheus-2.49.0-rc.1.linux-amd64.tar.gz。
也可以通过Github下载。
Docker镜像也是可以下载的。
6.3、安装与启动Prometheus server
解压即可,然后执行命令可直接启动·。记得修改压缩包名称: prometheus-2.49.0-rc.1.linux-amd64.tar.gz 为
prometheus.tar.gz
tar zxvf prometheus.tar.gz
6.4、修改配置文件
默认解压后其实不用修改配置文件prometheus.yml的,不过不修改的话,它只会监测本机信息。
使用vim命令编辑配置文件。
vim prometheus.yml
# 全局配置 global: scrape_interval: 15s # 每隔15秒采集一次数据 evaluation_interval: 15s # 每隔15秒做一次告警监测 # scrape_timeout is set to the global default (10s). # 告警配置 alerting: alertmanagers: - static_configs: - targets: - 127.0.0.1:9093 #alertmanager配置的ip和端口 # 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: # 可以监控多个节点。节点需要安装node_exporter和Alertmanager - targets: ["localhost:9090",'172.2.3.21:9100','172.2.4.21:9101'] # job可以有多个,多个时,也是同样格式,示例如下: - job_name: "nginx" metrics_path: /status/format/prometheus static_configs: - targets: ["172.16.5.21:9080"]