基于prometheus,node_exporter,alertmanager,grafana的服务器可视化监控告警系统部署(不需要docker)

avatar
作者
筋斗云
阅读量:1

1 Prometheus介绍

Prometheus是一个开源的系统监控和报警系统,由CNCF基金会托管,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。

2 Prometheus部署

下载地址Release 2.51.0+dedupelabels / 2024-03-19 · prometheus/prometheus · GitHub

或者https://prometheus.io/download/

根据需要部署的服务器选择对应版本下载

 2.1 Windows部署

在windows环境中可以直接将对应压缩文件解压到自定义的文件目录中

解压完成之后右键管理员运行,会弹出黑窗口,不要关闭。

说明已经启动成功

 2.2 Linux部署

将对应包上传到服务器,然后解压并修改名称

进入服务修改配置,之后编辑启动文件

sudo vi /usr/lib/systemd/system/prometheus.service

上图ExecStart之后为程序所在启动工具,--config为主配置文件 –storage为数据存储路径,需要保证USER配置的用户拥有该目录权限。

之后进行启动,查看状态,制作开机启动。

之后查看页面,说明监控链路成功


3 Node_exporter介绍

Exporter是Prometheus的指标数据收集组件。它负责从目标Jobs收集数据,并把收集到的数据转换为Prometheus支持的时序数据格式。 和传统的指标数据收集组件不同的是,他只负责收集,并不向Server端发送数据,而是等待Prometheus Server 主动抓取,node-exporter 默认的抓取url地址:http://ip:9100/metrics


4 Node_exporter部署

下载地址Releases · prometheus/node_exporter · GitHub

或者https://prometheus.io/download/

根据被监控服务器系统下载对应版本压缩包。

这里以ubuntu为例进行部署说明,选择node_exporter-1.8.0.linux-amd64.tar.gz进行下载

下载完成后把文件上传到服务器,建议放到home登录的用户文件中,并进行解压


可以直接./node_exporter启动看看效果。

接下来是要做启动命令和开机启动(确保是root用户,或者有sudo权限)。

首先sudo touch /usr/lib/systemd/system/node.service 创建启动文件

然后填充内容 sudo vi /usr/lib/systemd/system/node.service


然后保存退出,然后sudo systemctl start node 进行启动。

再增加开机启动sudo systemctl enable node.service


完事看看是否成功。默认端口9100,如下图说明启动成功


5 AlertManager介绍

AlertManager是Prometheus 包含一个报警模块,主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重,降噪,分组等,是一款前卫的告警通知系统。

6 AlertManager部署

下载地址:或者https://prometheus.io/download/


下载对应系统版本的压缩文件。

到服务器上进行解压


之后进入目录并修改yml配置文件

说明:与prometheus链接并不需要进行配置,保存配置后右键管理员启动alertmanager


完成后浏览器访问测试一下是否启动成功。


说明启动成功。


7 Grafana介绍

Grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的 可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,在监控系统中并不是必须组件,但是没有该组件监控信息将很难被可视化。

8 Grafana部署

下载地址Download Grafana | Grafana Labs


8.1 Windows部署

Windows部署较为简单,只要下载软件包,在服务器解压,并点击启动即可。

进入解压目录,进入bin目录,双击grafana-server.exe启动,不要关闭黑框。

首先需要增加数据源。选择prometheus

完成后设置界面模式,推荐该样式

Node Exporter Dashboard EN 20201010-StarsL.cn | Grafana Labs


选择download json,完成后打开文件并复制json内容。

之后复制json内容到数据框。


选择数据源

完成后效果如下图

注意,grafana最好和prometheus服务在同一服务器上进行部署,这样不需要修改复杂的配置文件。

8.2 Linux部署

下载对应软件包,上传到服务器并解压,修改文件名称

之后创建启动服务文件


这里注意,首先需要指定root用户启动,否则需要修改grafana配置文件修改全部存储路径和工作空间。之后注意设置启动服务是grafana-server不是grafana,另外指定服务目录。

之后启动sudo systemctl start grafana

浏览器查看效果,默认用户名密码admin/admin,第一次启动会要求输入新密码。

之后步骤与windows安装情况一致。


9 配置说明

AlertManager配置,主要是告警发送方式和发送相关的配置

Prometheus配置
监控服务配置,这也是为什么alertmanager不需要配置链接的原因。


配置监控专用配置文件


编写该文件,这里只是部分监控规则配置

groups:    - name: alert_rules     rules:       - alert: Cpu警报         expr: sum(avg(irate(node_cpu_seconds_total{mode!='idle'}[5m])) without (cpu)) by (instance) > 0.80         for: 2m         labels:           level: 警戒         annotations:           summary: "{{ $labels.instance }} CPU使用过高"           description: "{{ $labels.instance }} CPU占用超80% (当前: {{ $value }})"       - alert: Cpu警报         #expr: sum(avg(irate(node_cpu_seconds_total{mode!='idle'}[5m])) without (cpu)) by (instance) > 0.95         expr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{job=~".*",mode="idle"}[5m])) * 100)) > 95         for: 3m         labels:           level: 严重         annotations:           summary: "{{ $labels.instance }} CPU使用过高"           description: "{{ $labels.instance }} CPU占用超95% (当前: {{ $value }})"       - alert: 内存警报         expr: avg by(instance) ((1 - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes) * 100) > 80         for: 2m         labels:           level: 警戒         annotations:           summary: "{{ $labels.instance }} 内存警报"           description: "{{$labels.instance}}: 服务器内存使用已达到80% (当前: {{ $value }})"       - alert: 内存警报         expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.90         for: 3m         labels:           level: 严重         annotations:           summary: "{{ $labels.instance }} 内存警报"           description: "{{ $labels.instance }} 服务器内存使用已达到90% (当前: {{ $value }})"       - alert: 磁盘警报         expr: (1 - node_filesystem_free_bytes{fstype!="rootfs",mountpoint!="",mountpoint!~"/(run|var|sys|dev).*"} / node_filesystem_size_bytes) * 100 > 80         for: 5m         labels:           level: 警戒         annotations:           summary: "{{ $labels.instance }} 磁盘空间不足"           description: "{{$labels.instance}}: 磁盘使用超过80% (当前: {{ $value }})"       - alert: 磁盘警报         expr: (1 - node_filesystem_free_bytes{fstype!="rootfs",mountpoint!="",mountpoint!~"/(run|var|sys|dev).*"} / node_filesystem_size_bytes) * 100 > 90         for: 5m         labels:           level: 严重         annotations:           summary: "{{ $labels.instance }} 磁盘空间不足"           description: "{{$labels.instance}}: 磁盘使用超过90% (当前: {{ $value }})"       - alert: 文件系统警报         expr: avg by (instance) (node_filefd_allocated{} / node_filefd_maximum{}) * 100 > 60         for: 5m         labels:           level: 警戒         annotations:           summary: "{{ $labels.instance }} 文件系统使用率过高"           description: "{{$labels.instance}}: 文件系统使用率超过60% (当前: {{ $value }})"       - alert: 负载警报         expr: avg by (instance) (node_load15{}) > 80         for: 5m         labels:           level: 警戒         annotations:           summary: "{{ $labels.instance }} Load15负载过高"           description: "{{$labels.instance}}: Load15负载以超80 (当前: {{ $value }})"       - alert: 监控断开警报         expr: avg by (instance) (up{}) == 0         for: 5m         labels:           level: 警戒         annotations:           summary: "{{$labels.instance}}: 已断开监控"           description: "{{$labels.instance}}: Node_Exporter代理已关闭 (当前: {{ $value }})"       - alert: 进程堵塞         expr: avg by (instance) (node_procs_blocked{}) > 10         for: 5m         labels:           level: 警戒         annotations:           summary: "{{ $labels.instance }}  进程阻塞率过高"           description: "{{$labels.instance}}: 进程阻塞率过高! 超过10 (当前: {{ $value }})"

该文件里面都是各种警报规则。

配置各监控服务地址


按照这个格式修改job_name,这个是本监控群的任务名称。

-targets是单个监控的服务器,包含ip和端口号

Instance被监控服务器的显示名称,可以自定义

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!