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被监控服务器的显示名称,可以自定义