Prometheus 介绍
Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会(CNCF),成为继Kubernetes之后的第二个托管项目。
相关网站:
- 官方网站:https://prometheus.io
- 项目托管:https://github.com/prometheus
Prometheus 具有以下特点:
1、多维数据模型:由度量名称和键值对标识的时间序列数据
2、PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
3、不依赖分布式存储,单个服务器节点可直接工作
4、基于HTTP的pull方式采集时间序列数据
5、推送时间序列数据通过PushGateway组件支持
6、通过服务发现或静态配置发现目标
7、多种图形模式及仪表盘支持(grafana)
8、适用于以机器为中心的监控以及高度动态面向服务架构的监控
Prometheus 组织架构
Prometheus 由多个组件组成,但是其中许多组件是可选的:
- 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。
这种方式主要用于服务层面的 metrics:
- exporter:用于暴露已有的第三方服务的 metrics 给 Prometheus。
- alertmanager:从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
- Web UI:Prometheus内置一个简单的Web控制台,可以查询指标,查看配置信息或者Service Discovery等,实际工作中,查看指标或者创建仪表盘通常使用Grafana,Prometheus作为Grafana的数据源;
注:大多数 Prometheus 组件都是用 Go 编写的,因此很容易构建和部署为静态的二进制文件。
Prometheus 安装部署
下载二进制包 wget https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz
[root@mariadb tools]# tar -zxvf prometheus-2.28.1.linux-amd64.tar.gz -C /opt/ # 解压压缩包
prometheus-2.28.1.linux-amd64/
prometheus-2.28.1.linux-amd64/consoles/
prometheus-2.28.1.linux-amd64/consoles/index.html.example
......
[root@mariadb opt]# mv prometheus-2.28.1.linux-amd64/ prometheus #修改名称
[root@mariadb prometheus]# vim /opt/prometheus/prometheus.yml #根据需求修改文件
global:
scrape_interval: 15s # 默认情况下,每15s拉取一次目标采样点数据。
external_labels: # 我们可以附加一些指定标签到采样点度量标签列表中, 用于和第三方系统进行通信, 包括:federation, remote storage, Alertmanager
monitor: 'codelab-monitor' # 下面就是拉取自身服务采样点数据配置
scrape_configs: # job名称会增加到拉取到的所有采样点上,同时还有一个instance目标服务的host:port标签也会增加到采样点上
- job_name: 'prometheus' # 覆盖global的采样点,拉取时间间隔5s
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
注:Prometheus从目标机上通过http方式拉取采样点数据, 它也可以拉取自身服务数据并监控自身的健康状况。
启用Promtheus服务
cd /opt/prometheus #进入目录
./prometheus --config.file=prometheus.yml #启动程序
[root@mariadb prometheus]# netstat -tunlp|grep pro #查看程序启动状态
tcp6 0 0 :::9090 :::* LISTEN 9586/./prometheus
将Prometheus注册为服务
cat > /usr/lib/systemd/system/prometheus.service << EOF
> [Unit]
> Description=https://prometheus.io
>
> [Service]
> Restart=on-failure
> ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml
>
> [Install]
> WantedBy=multi-user.target
> EOF
测试重启Promtheus
systemctl daemon-reload
systemctl stop prometheus.service
systemctl start prometheus.service
Dokcer容器部署方式:
参考地址:https://prometheus.io/docs/prometheus/latest/installation/
#绑定主机上的配置文件:prometheus.yml
docker run \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
#或者使用额外的卷
docker run -p 9090:9090 -v /prometheus-data \
prom/prometheus --config.file=/prometheus-data/prometheus.yml
注意.yml配置文件路径;
Prometheus.yml文件
# 全局配置global:
# 默认抓取周期,可用单位ms、smhdwy #设置每15s采集数据一次,默认1分钟
[ scrape_interval: <duration> | default = 1m ]
# 默认抓取超时
[ scrape_timeout: <duration> | default = 10s ]
# 估算规则的默认周期 # 每15秒计算一次规则。默认1分钟
[ evaluation_interval: <duration> | default = 1m ]
# 和外部系统(例如AlertManager)通信时为时间序列或者警情(Alert)强制添加的标签列表
external_labels:
[ <labelname>: <labelvalue> ... ]
# 规则文件列表
rule_files:
[ - <filepath_glob> ... ]
# 抓取配置列表
scrape_configs:
[ - <scrape_config> ... ]
# Alertmanager相关配置
alerting:
alert_relabel_configs:
[ - <relabel_config> ... ]
alertmanagers:
[ - <alertmanager_config> ... ]
# 远程读写特性相关的配置
remote_write:
[ - <remote_write> ... ]
remote_read:
[ - <remote_read> ... ]