13-Prometheus 配置 Grafana 展示与报警
1.二进制包部署Prometheus
环境准备工作
Prometheus服务器 192.168.109.138 Prometheus、node_exporter grafana服务器 192.168.109.138 Grafana 被监控服务器 192.168.109.0/24 node_exporter部署
上传
prometheus-2.35.0.linux-amd64.tar.gz到/opt目录中, 并解压。#解压上传后的软件包 root@localhost opt]# tar xf prometheus-2.35.0.linux-amd64.tar.gz #移动并命名 [root@localhost opt]# mv prometheus-2.35.0.linux-amd64 /usr/local/prometheus [root@localhost opt]# cd /usr/local/prometheus [root@localhost prometheus]# ls console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool
配置文件
cat /usr/local/prometheus/prometheus.yml | grep -v "^#" global: #用于prometheus的全局配置, 比如采集间隔, 抓取超时时间等 scrape_interval: 15s #采集目标主机监控数据的时间间隔, 默认为1m evaluation_interval: 15s #触发告警生成alert的时间间隔, 默认是1m # scrape_timeout is set to the global default (10s). scrape_timeout: 10s #数据采集超时时间, 默认10s alerting: #用于alertmanager实例的配置, 支持静态配置和动态服务发现的机制 alertmanagers: - static_configs: - targets: # - alertmanager:9093 rule_files: #用于加载告警规则相关的文件路径的配置, 可以使用文件名通配机制 # - "first_rules.yml" # - "second_rules.yml" scrape_configs: #用于采集时序数据源的配置 # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "prometheus" #每个被监控实例的集合用job_name命名, 支持静态配置(static_configs)和动态服务发现的机制(*_sd_configs) # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: #静态目标配置, 固定从某个target拉取数据 - targets: ["localhost:9090"]
配置系统启动文件, 启动
Prometheustcat > /usr/lib/systemd/system/prometheus.service <<'EOF' [Unit] Description=Prometheus Server Documentation=https://prometheus.io After=network.target [Service] Type=simple ExecStart=/usr/local/prometheus/prometheus \ --config.file=/usr/local/prometheus/prometheus.yml \ --storage.tsdb.path=/usr/local/prometheus/data/ \ --storage.tsdb.retention=15d \ --web.enable-lifecycle ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target EOF --------------------------------------------------------------- [Unit] #服务单元 Description=Prometheus Server #描述 Documentation=https://prometheus.io After=network.target #依赖关系 [Service] Type=simple ExecStart=/usr/local/prometheus/prometheus \ --config.file=/usr/local/prometheus/prometheus.yml \ #配置文件 --storage.tsdb.path=/usr/local/prometheus/data/ \ #数据目录 --storage.tsdb.retention=15d \ #保存时间 --web.enable-lifecycle #开启热加载 ExecReload=/bin/kill -HUP $MAINPID #重载 Restart=on-failure [Install] WantedBy=multi-user.target
启动
systemctl start prometheus systemctl enable prometheus netstat -natp | grep :9090
浏览器访问: http://192.168.109.138:9090 , 访问到
Prometheus的Web UI界面。点击页面的Status -> Targets, 如看到Target状态都为UP, 说明Prometheus能正常采集到数据。

http://192.168.109.138:9090/metrics , 可以看到
Prometheus采集到自己的指标数据。

2. 部署 Exporters
部署
Node Exporter监控系统级指标, 上传node_exporter-1.3.1.linux-amd64.tar.gz到/opt目录中, 并解压。cd /opt/ tar xf node_exporter-1.3.1.linux-amd64.tar.gz mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin
配置启动文件
cat > /usr/lib/systemd/system/node_exporter.service <<'EOF' [Unit] Description=node_exporter Documentation=https://prometheus.io/ After=network.target [Service] Type=simple ExecStart=/usr/local/bin/node_exporter \ --collector.ntp \ --collector.mountstats \ --collector.systemd \ --collector.tcpstat ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target EOF
启动
systemctl start node_exporter systemctl enable node_exporter netstat -natp | grep :9100
浏览器访问: http://192.168.109.138:9100/metrics , 可以看到
Node Exporter采集到的指标数据。
常用的各指标:
node_cpu_seconds_totalnode_memory_MemTotal_bytesnode_filesystem_size_bytes{mount_point=PATH}node_system_unit_state{name=}node_vmstat_pswpin: 系统每秒从磁盘读到内存的字节数node_vmstat_pswpout: 系统每秒钟从内存写到磁盘的字节数
修改
prometheus配置文件, 加入到prometheus监控中。vim /usr/local/prometheus/prometheus.yml #在尾部增加如下内容 - job_name: nodes metrics_path: "/metrics" static_configs: - targets: - 192.168.109.138:9100 - 192.168.109.137:9100 - 192.168.109.136:9100 labels: service: kubernetes
重新载入配置
curl -X POST http://192.168.109.138:9090/-/reload #热加载 或systemctl reload prometheus浏览器查看
Prometheus页面的Status -> Targets

3.部署Grafana进行展示
下载和安装
下载地址:
https://grafana.com/grafana/download
https://mirrors.bfsu.edu.cn/grafana/yum/rpm/
#使用yum解决依赖关系 我这边直接上传软件包到opt yum install -y grafana-7.4.0-1.x86_64.rpm
systemctl start grafana-server systemctl enable grafana-server netstat -natp | grep :3000
浏览器访问: http://192.168.109.138:3000 , 默认账号和密码为
admin/admin。
配置数据源
Configuration -> Data Sources -> Add data source -> 选择 Prometheus。HTTP -> URL输入 http://192.168.109.138:9090, 点击Save & Test。


点击 上方菜单
Dashboards,Import所有默认模板。Dashboards -> Manage, 选择Prometheus 2.0 Stats或Prometheus Stats即可看到Prometheus job实例的监控图像。



导入
grafana监控面板浏览器访问: https://grafana.com/grafana/dashboards , 在页面中搜索
node exporter, 选择适合的面板, 点击Copy ID或者Download JSON。


在
grafana页面中,+ Create -> Import, 输入面板ID号或者上传JSON文件, 点击Load, 即可导入监控面板。



4. 部署 Prometheus 服务发现
4.1 基于文件的服务发现
基于文件的服务发现是仅仅略优于静态配置的服务发现方式, 它不依赖于任何平台或第三方服务, 因而也是最为简单和通用的实现方式。
Prometheus Server 会定期从文件中加载 Target 信息, 文件可使用 YAML 和 JSON 格式, 它含有定义的 Target 列表, 以及可选的标签信息。
创建用于服务发现的文件, 在文件中配置所需的 target。
cd /usr/local/prometheus
mkdir targets
vim targets/node-exporter.yaml
- targets:
- 192.168.109.131:9100
- 192.168.109.132:9100
- 192.168.109.133:9100
labels:
app: node-exporter
job: node
#修改 prometheus 配置文件, 发现 target 的配置, 定义在配置文件的 job 之中
vim /usr/local/prometheus/prometheus.yml
......
scrape_configs:
- job_name: nodes
file_sd_configs: #指定使用文件服务发现
- files: #指定要加载的文件列表
- targets/node*.yaml #文件加载支持通配符
refresh_interval: 2m #每隔 2 分钟重新加载一次文件中定义的 Targets, 默认为 5m
systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets前提是该node节点装好node-exporter组件, 这个步骤在前面就不展示了, 可以使用scp命令从普罗米修斯机子传过去。





4.2 基于 Consul 的服务发现
Consul 是一款基于 golang 开发的开源工具, 主要面向分布式, 服务化的系统提供服务注册、服务发现和配置管理的功能。提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。
部署
Consul服务cd /opt/ unzip consul_1.9.2_linux_amd64.zip mv consul /usr/local/bin/ #创建 Consul 服务的数据目录和配置目录 mkdir /var/lib/consul-data mkdir /etc/consul/ #使用 server 模式启动 Consul 服务 consul agent \ -server \ -bootstrap \ -ui \ -data-dir=/var/lib/consul-data \ -config-dir=/etc/consul/ \ -bind=192.168.109.138 \ -client=0.0.0.0 \ -node=consul-server01 &> /var/log/consul.log & #查看 consul 集群成员 consul members
在
Consul上注册Services#在配置目录中添加文件 vim /etc/consul/nodes.json { "services": [ { "id": "node_exporter-node01", "name": "node01", "address": "192.168.109.138", "port": 9100, "tags": ["nodes"], "checks": [{ "http": "http://192.168.109.138:9100/metrics", "interval": "5s" }] }, { "id": "node_exporter-node02", "name": "node02", "address": "192.168.109.134", "port": 9100, "tags": ["nodes"], "checks": [{ "http": "http://192.168.109.134:9100/metrics", "interval": "5s" }] } ] } #让 consul 重新加载配置信息 consul reload

浏览器访问:
http://192.168.109.138:8500
修改
prometheus配置文件vim /usr/local/prometheus/prometheus.yml ...... - job_name: nodes consul_sd_configs: #指定使用 consul 服务发现 - server: 192.168.109.138:8500 #指定 consul 服务的端点列表 tags: #指定 consul 服务发现的 services 中哪些 service 能够加入到 prometheus 监控的标签 - nodes refresh_interval: 2m
systemctl reload prometheus浏览器查看
Prometheus页面的Status -> Targets
#让 consul 注销 Service consul services deregister -id="node_exporter-node02"


#重新注册 consul services register /etc/consul/nodes.json


5. Grafana+onealert报警
Prometheus 报警需要使用 alertmanager 这个组件, 而且报警规则需要手动编写(对运维来说不友好)。所以我这里选用 grafana+onealert 报警。注意: 实现报警前把所有机器时间同步再检查一遍。
登陆http://www.onealert.com/→注册帐户→登入后台管理



在Grafana中配置Webhook URL
在
Grafana中创建Notification channel, 选择类型为Webhook;推荐选中
Send on all alerts和Include image,Cloud Alert体验更佳;将第一步中生成的
Webhook URL填入Webhook settings Url;URL格式: http://api.aiops.com/alert/api/event/grafana/v1/7a2eb59ab2d24483847b17e74bd9b255/Http Method选择POST;Send Test&Save;
在grafana增加通知通道



现在可以去设置一个报警来测试了(这里以我们前面加的 cpu 负载监控来做测试)



保存后就可以测试了, 如果 agent1上的 cpu 负载还没有到 0.3, 你可以试试 0.1, 或者运行一些程序把 agent1负载调大。

最终的邮件报警效果:


参考链接
构建企业级监控平台系列(二十四): Prometheus 配置 Grafana 展示与报警 (qq.com)