Prometheus
Prometheus简介
什么是普罗米修斯?
- Prometheus是一个
开源的系统监控工具
。根据配置的任务(job)以http/s周期性的收刮scrape/pull)指定目标(target)上的指标(metric)。目标(target)可以以静态方式或者自动发现方式指定。Prometheus将收刮(scrape)的指标(metric)保存在本地或者远程存储上
。 - Prometheus以pull方式来收集指标。对比push方式,pull可以集中配置、针对不同的视角搭建不同的监控系统;
- Prometheus于2016年加入CNCF,是继kubernetes之后,第二个加入CNCF的开源项目!
prometheus的特征
- 提供多维度数据模型,使用指标名称和键值对标识的时间序列数据
- 提供灵活的PromQL查询方式,还提供了HTTP查询接口,可以很方便地结合Grafana等组件展示数据。
- 不依赖外部存储,支持单节点的本地存储。通过Prometheus自带的时序数据库,可以完成每秒百万及的数据存储,如果需要存储大量历史数据,还可以对接第三方的时序数据库。
- 时间序列收集通过HTTP的拉取方式进行,并提供了开放的指标数据标准。
- 支持向中间网关推送时序数据,可以更加灵活地适用于多种监控场景。
- 支持通过动态服务发现和静态文件配置获取监控对象,目前已支持Kubernetes、Etcd、Consul等多种服务发现机制。
- 支持多种模式的图形展示和仪表盘。
- 大多数Prometheus的组件都是使用
Go语言
编写的,这使得它们很容易以二进制文件的形式构建和部署。
prometheus的组件
- Prometheus Server:用于收集、存储和查询时间序列数据。通过静态配置文件管理监控目标,也可以配合使用动态服务发现的方式动态管理监控目标,并从这些监控目标中获取数据。它将采集到的数据按照时间序列的方式存储在本地磁盘当中或者外部的时序数据库中,可通过PromQL语言对数据的查询以及分析。
- Client Library:为被监控的应用生成相应的指标(Metric)数据并暴露给Prometheus Server。当Prometheus Server 来拉取时,直接返回实时状态的指标数据。
- Push Gateway:主要用于短期存在的Jobs。由于这类Jobs存在时间较短,可能在Prometheus Server来拉取数据之前就消失了。所以,Jobs可以直接向Push Gateway推送它们的指标数据,然后Prometheus Server再从Push Gateway拉取。
- Exporters:用于暴露已有的第三方服务的指标数据通过HTTP服务的形式暴露给Prometheus Server,比如HAProxy、StatsD、Graphite等等。Prometheus Server通过访问该Exporter提供的Endpoint,即可获取到需要采集的监控数据。
- Alertmanager:从Prometheus Server接收到告警后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。Alertmanager的告警方式非常灵活,支持通过邮件、slack或钉钉等多种途径发出告警。
Prometheus的配置
配置共分为三部分,分别是全局配置、告警配置、收集数据配置
vim /usr/local/prometheus/prometheus.yml
#全局配置
global:
scrape_interval: 15s #每隔15秒向目标抓取一次数,默认为一分钟
evaluation_interval: 15s #每隔15秒执行一次告警规则,默认为一分钟
# scrape_timeout: 600s #抓取数据的超时时间,默认为10s
#告警配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093 #alertmanager所部署机器的ip和端口
#定义告警规则和阈值的yml文件
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
#收集数据配置
#以下是Prometheus自身的一个配置.
scrape_configs:
#这个配置是表示在这个配置内的时间序例,每一条都会自动添加上这个{job_name:"prometheus"}的标签.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs: #静态配置
- targets: ["localhost:9090"]
prometheus的架构
工作流程
- Prometheus Server直接从HTTP接口或者Push Gateway拉取指标(Metric)数据。
- Prometheus Server在本地存储所有采集的指标(Metric)数据,并在这些数据上运行规则,从现有数据中聚合和记录新的时间序列,或者生成告警。
- Alertmanager根据配置文件,对接收到的告警进行处理,发出报警。
- 在Grafana或其他API客户端中,可视化收集的数据。
Prometheus部署
环境说明
主机 | IP |
---|---|
master | 192.168.129.135 |
slave | 192.168.129.136 |
Prometheus
//安装go语言
[root@master ~]# yum -y install go
[root@master ~]# go version
go version go1.16.7 linux/amd64
//解压
[root@master src]# ls
debug kernels
[root@master src]# ls
debug kernels prometheus-2.31.1.linux-amd64.tar.gz
[root@master src]# tar xf prometheus-2.31.1.linux-amd64.tar.gz -C /usr/local/
[root@master src]# ls /usr/local/
bin etc games include lib lib64 libexec prometheus-2.31.1.linux-amd64 sbin share src
//创建软连接
[root@master src]# ln -s /usr/local/prometheus-2.31.1.linux-amd64/ prometheus
[root@master src]# ls /usr/local/
bin games lib libexec prometheus-2.31.1.linux-amd64 share
etc include lib64 prometheus sbin src
//启动
[root@master src]# /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml &
//设置开机自启
[root@master ~]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=The Prometheus Server
After=network.target
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
ExecStop=/bin/kill -HUP $MAINPID
RestartSec=15s
[Install]
WantedBy=multi-user.target
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl enable --now prometheus
Created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service → /usr/lib/systemd/system/prometheus.service.
[root@master ~]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:9090 *:*
LISTEN 0 128 [::]:22 [::]:*
验证
浏览器打开IP:9090端口即可打开普罗米修斯自带的监控页面
node_exporter
提供安装包
node_exporter-1.3.0.linux-amd64.tar.gz
//解压
[root@slave ~]# /usr/src/
[root@slave src]# ls
debug kernels node_exporter-1.3.0.linux-amd64.tar.gz
[root@p2 src]# tar xf node_exporter-1.3.0.linux-amd64.tar.gz -C /usr/local/
//创建软连接
[root@p2 src]# ln -s /usr/local/node_exporter-1.3.0.linux-amd64/ node_exporter
[root@p2 src]# ls /usr/local/
bin games lib libexec node_exporter-1.3.0.linux-amd64 share
etc include lib64 node_exporter sbin src
//启动
[root@slave ~]# /usr/local/node_exporter/node_exporter
ts=2021-11-25T14:30:06.826Z caller=node_exporter.go:182 level=info msg="Starting node_exporter" version="(version=1.3.0, branch=HEAD, revision=c65f870ef90a4088210af0319498b832360c3366)"
ts=2021-11-25T14:30:06.826Z caller=node_exporter.go:183 level=info msg="Build context" build_context="(go=go1.17.3, user=root@4801f8f250a6, date=20211118-16:34:14)"
//设置开机自启
[root@slave ~]# vim /etc/systemd/system/node_exporter.service
[unit]
Description=The node_exporter Server
After=network.target
[Service]
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
RestartSec=15s
SyslogIdentifier=node_exporter
[Install]
WantedBy=multi-user.target
//重新加载
[root@slave ~]# systemctl daemon-reload
[root@slave ~]# systemctl enable --now node_exporter
Created symlink /etc/systemd/system/multi-user.target.wants/node_exporter.service → /etc/systemd/system/node_exporter.service.
//查看状态
[root@slave ~]# systemctl status node_exporter
● node_exporter.service
Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2021-11-25 22:34:49 CST; 1min 38s ago
Main PID: 65492 (node_exporter)
Tasks: 4 (limit: 11300)
Memory: 8.7M
CGroup: /system.slice/node_exporter.service
└─65492 /usr/local/node_exporter/node_exporter
11月 25 22:34:49 slave node_exporter[65492]: ts=2021-11-25T14:34:49.349Z caller=node_exporter.go:115>
11月 25 22:34:49 slave node_exporter[65492]: ts=2021-11-25T14:34:49.349Z caller=node_exporter.go:115>
[root@slave ~]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:9100 *:*
LISTEN 0 128 [::]:22 [::]:*
查看监控数据
浏览器打开IP:9090/metrics
修改Prometheus 配置,监控Linux机器
[root@master ~]# cat /usr/local/prometheus/prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 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:
- targets: ['localhost:9090']
- job_name: 'Linux' #添加以下5行
static_configs:
- targets: ['192.168.129.136:9100'] #添加被控机的ip以及端口
labels:
instance: Linux
//重启
[root@master ~]# systemctl restart prometheus
grafana
[root@master ~]# yum -y install grafana
[root@master ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
installing alexanderzobnin-zabbix-app @ 4.1.5
from: https://grafana.com/api/plugins/alexanderzobnin-zabbix-app/versions/4.1.5/download
into: /var/lib/grafana/plugins
✔ Installed alexanderzobnin-zabbix-app successfully
Restart grafana after installing plugins . <service grafana-server restart>
[root@master ~]# systemctl start grafana-server
[root@master ~]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 *:3000 *:*
LISTEN 0 128 *:9090 *:*
LISTEN 0 128 *:80 *:*
网页登录
- 首次登陆时需要ip+端口号(默认为3000)
- 默认账号:admin 密码:admin
再次输入(因为你是首次登陆)