如何快速搭建Prometheus系统?

云原生标配的监控系统显然就是 Prometheus,而且 Prometheus 的部署非常简单,所以这一讲我们就先来自己动手搭建 Prometheus。

Prometheus 比较容易搭建,是因为它把服务端组件,包括时序库、告警引擎、数据展示三大块,整合成了一个进程,组件的数量大幅减少。Prometheus 生态的采集器就是各种 Exporter,告警发送靠的是 AlertManager 组件,下面我们先来部署 Prometheus 模块。

部署 Prometheus

把 Prometheus 和 Alertmanager 两个包都下载下来。注:Prometheus 的下载地址:https://prometheus.io/download/

下载之后解压缩,使用 systemd 托管启动,你可以参考下面的命令。

mkdir -p /opt/prometheus
 wget https://github.com/prometheus/prometheus/releases/download/v2.37.1/prometheus-2.37.1.linux-amd64.tar.gz
 tar xf prometheus-2.37.1.linux-amd64.tar.gz
 cp -far prometheus-2.37.1.linux-amd64/*  /opt/prometheus/# service 
 cat <<EOF >/etc/systemd/system/prometheus.service
 [Unit]
 Description="prometheus"
 Documentation=https://prometheus.io/
 After=network.target[Service]
 Type=simpleExecStart=/opt/prometheus/prometheus  --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data --web.enable-lifecycle --enable-feature=remote-write-receiver --query.lookback-delta=2m --web.enable-admin-api
Restart=on-failure
 SuccessExitStatus=0
 LimitNOFILE=65536
 StandardOutput=syslog
 StandardError=syslog
 SyslogIdentifier=prometheus[Install]
 WantedBy=multi-user.target
 EOFsystemctl enable prometheus
 systemctl start prometheus
 systemctl status prometheus关注Prometheus 进程的启动参数
 --config.file=/opt/prometheus/prometheus.yml
 指定 Prometheus 的配置文件路径--storage.tsdb.path=/opt/prometheus/data


指定 Prometheus 时序数据的硬盘存储路径

--web.enable-lifecycle
启用生命周期管理相关的 API,比如调用 /-/reload 接口就需要启用该项

--enable-feature=remote-write-receiver
启用 remote write 接收数据的接口,启用该项之后,categraf、grafana-agent 等 agent 就可以通过 /api/v1/write 接口推送数据给 Prometheus

--query.lookback-delta=2m
即时查询在查询当前最新值的时候,只要发现这个参数指定的时间段内有数据,就取最新的那个点返回,这个时间段内没数据,就不返回了

--web.enable-admin-api
启用管理性 API,比如删除时间序列数据的 /api/v1/admin/tsdb/delete_series 接口

如果正常启动,Prometheus 默认会在 9090 端口监听,访问这个端口就可以看到 Prometheus 的 Web 页面,输入下面的 PromQL 可以查到一些监控数据。

数据Prometheus 自己抓取自己的,Prometheus 会在 /metrics 接口暴露监控数据,你可以访问这个接口看一下输出。同时 Prometheus 在配置文件里配置了抓取规则,打开 prometheus.yml 就可以看到了。

    

scrape_configs:
   - job_name: 'prometheus'
     static_configs:
     - targets: ['localhost:9090']

ocalhost:9090 是暴露监控数据的地址,没有指定接口路径,默认使用 /metrics,没有指定 scheme,默认使用 HTTP,所以实际请求的是 http://localhost:9090/metrics。了解了 Prometheus 自监控的方式,下面我们来看一下机器监控。

部署 Node-Exporter

Prometheus 生态的机器监控比较简单,就是在所有的目标机器上部署 Node-Exporter,然后在抓取规则中给出所有 Node-Exporter 的地址就可以了。首先,下载 Node-Exporter(Download | Prometheus。你可以选择当下比较稳定的版本 1.3.1,下载之后解压就可以直接运行了,比如使用 nohup(生产环境建议使用 systemd 托管) 简单启动的话,可以输入下面这一行命令。

nohup ./node_exporter &> output.log &

Node-Exporter 默认的监听端口是 9100,我们可以通过下面的命令看到 Node-Exporter 采集的指标。

     

curl -s localhost:9100/metrics

然后把 Node-Exporter 的地址配置到 prometheus.yml 中即可。修改了配置之后,记得给 Prometheus 发个 HUP 信号,让 Prometheus 重新读取配置:kill -HUP <prometheus pid>。最终 scrape_configs 部分变成下面这段内容。

scrape_configs:
   - job_name: 'prometheus'
     static_configs:
     - targets: ['localhost:9090']  - job_name: 'node_exporter'
     static_configs:
     - targets: ['localhost:9100']

如果要监控更多机器,就在 targets 中写上多个 Node-Exporter 的地址,用逗号隔开。之后在 Prometheus 的 Web 上(菜单位置 Status -> Targets),就可以看到相关的 Targets 信息了。

Node-Exporter 默认内置了很多 collector,比如 cpu、loadavg、filesystem 等,可以通过命令行启动参数来控制这些 collector,比如要关掉某个 collector,使用 --no-collector.<name>,如果要开启某个 collector,使用 --collector.<name>。具体可以参考 Node-Exporter 的 README。Node-Exporter 默认采集几百个指标,有了这些数据,我们就可以演示告警规则的配置了。

配置告警规则

Prometheus 进程内置了告警判断引擎,prometheus.yml 中可以指定告警规则配置文件,默认配置中有个例子。

我们可以把不同类型的告警规则拆分到不同的配置文件中,然后在 prometheus.yml 中引用。比如 Node-Exporter 相关的规则,我们命名为 node_exporter.yml,最终这个 rule_files 就变成了如下配置。

rule_files:
   - "node_exporter.yml"最后,给 Prometheus 进程发个 HUP 信号,让它重新加载配置文件。
 kill -HUP `pidof prometheus`
告警分成 3 个状态,Inactive、Pending、Firing

如果我们还希望在告警的时候收到消息通知,比如邮件、短信等,就需要引入 AlertManager 组件了。

部署 Alertmanager

把上面的 prometheus.service 拿过来改一下给 Alertmanager 使用即可,下面是我改好的 alertmanager.service。

改好的:
 [Unit]
 Description="alertmanager"
 After=network.target[Service]
 Type=simpleExecStart=/usr/local/alertmanager/alertmanager
 WorkingDirectory=/usr/local/alertmanagerRestart=on-failure
 SuccessExitStatus=0
 LimitNOFILE=65536
 StandardOutput=syslog
 StandardError=syslog
 SyslogIdentifier=alertmanager[Install]
 WantedBy=multi-user.target Alertmanager 解压到 /usr/local/alertmanager 目录,通过 ExecStart 可以看出,直接执行二进制就可以,实际 Alertmanager 会读取二进制同级目录下的 alertmanager.yml 配置文件。
 global:
   smtp_from: 'username@163.com'
   smtp_smarthost: 'smtp.163.com:465'
   smtp_auth_username: 'username@163.com'
   smtp_auth_password: '这里填写授权码'
   smtp_require_tls: false
   
 route:
   group_by: ['alertname']
   group_wait: 30s
   group_interval: 1m
   repeat_interval: 1h
   receiver: 'email'receivers:
   - name: 'web.hook'
     webhook_configs:
       - url: 'http://127.0.0.1:5001/'  - name: 'email'
     email_configs:
     - to: 'ulricqin@163.com'inhibit_rules:
   - source_match:
       severity: 'critical'
     target_match:
       severity: 'warning'
     equal: ['alertname', 'dev', 'instance']

Prometheus 自带的看图工具,是给专家用的,需要对指标体系非常了解,经验没法沉淀,而且绘图工具单一,只有折线图。如果你希望有一个更好用的 UI 工具,可以试试 Grafana。

Grafana 是一个数据可视化工具,有丰富的图表类型,视觉效果很棒,插件式架构,支持各种数据源,是开源监控数据可视化的标杆之作。Grafana 可以直接对接 Prometheus,大部分使用 Prometheus 的用户,也都会使用 Grafana,

小结

prometheus框架图

运维监控监控指标有哪些 运维监控设备_容器

Pushgateway:用于接收短生命周期任务的指标上报,是 PUSH 的接收方式。因为 Prometheus 主要是 PULL 的方式拉取监控数据,这就要求在拉取的时刻,监控对象得活着,但是很多短周期任务,比如 cronjob,可能半秒就运行结束了,就没法拉取了。为了应对这种情况,才单独做了 Pushgateway 组件作为整个生态的补充。Service discovery:我们演示抓取数据时,是直接在 prometheus.yml 中配置的多个 Targets。这种方式虽然简单直观,但是也有弊端,典型的问题就是如果 Targets 是动态变化的,而且变化得比较频繁,那就会造成管理上的灾难。所以 Prometheus 提供了多种服务发现机制,可以动态获取要监控的目标,比如 Kubernetes 的服务发现,可以通过调用 kube-apiserver 动态获取到需要监控的目标对象,大幅降低了抓取目标的管理成本。

运维监控监控指标有哪些 运维监控设备_docker_02