Prometheus安装配置
Prometheus 特点
- 多维数据模型:由度量名称和键值对标识的时间序列数据。
- PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询。
- 不依赖分布式存储,单个服务器节点可直接工作。
- 基于HTTP的pull方式采集时间序列数据。
- 推送时间序列数据通过PushGateway组件支持。
- 通过服务发现或静态配置发现目标。
- 多种图形模式及仪表盘支持(grafana)。
Prometheus 工作原理
通过HTTP周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口并符合Prometheus定义的数据格式,就可以接入Prometheus监控;Prometheus Server负责定时在目标上抓取metrics(指标)数据,每个抓取目标都需要暴露一个HTTP服务接口用于Prometheus定时抓取。这种调用被监控对象获取监控数据的方式被称为Pull(拉);Pull方式体现了Prometheus独特的设计哲学与大多数采用Push(推)方式的监控不同。
优点
- 强大的多维度数据模型
- 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。
- 易于管理: Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
- 高效:平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。
- 使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。
- 可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端
- 可以通过服务发现或者静态配置去获取监控的 targets。
- 有多种可视化图形界面。
- 易于伸缩。
组件
Prometheus 生态圈中包含了多个组件,其中许多组件是可选的:
- Prometheus Server: 用于收集和存储时间序列数据。
- Client Library:客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。
- Push Gateway: 主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
- Exporters: 用于暴露已有的第三方服务的 metrics 给 Prometheus。
- Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
架构
从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。它大致使用逻辑是这样:
- Prometheus server 定期从静态配置的 targets 或者服务发现的 targets 拉取数据。
- 当新拉取的数据大于配置内存缓存区的时候,Prometheus 会将数据持久化到磁盘(如果使用 remote storage 将持久化到云端)。
- Prometheus 可以配置 rules,然后定时查询数据,当条件触发的时候,会将 alert 推送到配置的 Alertmanager。
- Alertmanager 收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。
- 可以使用 API, Prometheus Console 或者 Grafana 查询和聚合数据。
部署 Prometheus
下载promethues
wget https://github.com/prometheus/prometheus/releases/download/v2.31.1/prometheus-2.31.1.linux-amd64.tar.gz
解压并重命名
[root@master ~]
[root@master ~]
[root@master local]
bin include libexec share
etc lib prometheus-2.31.1.linux-amd64 src
games lib64 sbin
[root@master local]
[root@master local]
bin games lib libexec sbin src
etc include lib64 prometheus share
[root@master local]
[root@master local]
[root@master local]
配置
配置共分为三部分,分别是全局配置、告警配置、收集数据配置
vim /usr/local/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
配置service文件
[root@master ~]
[Unit]
Description=The Prometheus Server
After=network.target
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
RestartSec=15s
[Install]
WantedBy=multi-user.target
[root@master ~]
启动参数介绍
--config.file
--web.listen-address
--web.enable-lifecycle
--storage.tsdb.retention
--storage.tsdb.path
启动服务
[root@master ~]
[root@master ~]
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 [::]:*
访问测试
node_exporter部署
软件包
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.0/node_exporter-1.3.0.linux-amd64.tar.gz
解压并重命名
[root@client ~]
[root@client ~]
[root@client ~]
[root@client local]
bin include libexec share
etc lib node_exporter-1.3.0.linux-amd64 src
games lib64 sbin
[root@client local]
[root@client local]
bin games lib libexec sbin src
etc include lib64 node_exporter share
启动参数介绍
注意:相关启动的参数
--web.listen-address
--collector.systemd
--collector.systemd.unit-whitelist
".+"
"(docker|sshd|nginx).service"
配置service
[root@client local]
[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@client local]
启动服务
[root@client local]
[root@client local]
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:用prometheus那台的ip(192.168.200.136),后面跟上targets
修改配置文件
[root@master ~]
timeseries scraped from this config.
- job_name: "prometheus"
static_configs:
- targets: ["192.168.200.137:9100"] // 修改这行
重启访问
[root@master ~]
[root@master ~]
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 [::]:*
|