Prometheus Grafana
使用 prometheus 配合 grafana 监控 nas 主机和磁盘状态。
node_exporter 选择直接安装到物理机,其他使用 docker 部署。
介绍
Prometheus 是由前 Google 工程师从 2012 年开始在 Soundcloud 以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了 Prometheus 作为监控告警工具。Prometheus 的开发者和用户社区非常活跃,它现在是一个独立的开源项目,可以独立于任何公司进行维护。为了证明这一点,Prometheus 于 2016 年 5 月加入 CNCF 基金会,成为继 Kubernetes 之后的第二个 CNCF 托管项目。
Prometheus 的主要优势有:
- 由指标名称和和键/值对标签标识的时间序列数据组成的多维数据模型。
- 强大的查询语言 PromQL。
- 不依赖分布式存储;单个服务节点具有自治能力。
- 时间序列数据是服务端通过 HTTP 协议主动拉取获得的。
- 也可以通过中间网关来推送时间序列数据。
- 可以通过静态配置文件或服务发现来获取监控目标。
- 支持多种类型的图表和仪表盘。
Prometheus 生态系统由多个组件组成,其中有许多组件是可选的:
- Prometheus Server 作为服务端,用来存储时间序列数据。
- 客户端库 用来检测应用程序代码。
- 用于支持临时任务的推送网关。
- Exporter 用来监控 HAProxy,StatsD,Graphite 等特殊的监控目标,并向 Prometheus 提供标准格式的监控样本数据。
- alartmanager 用来处理告警。
- 其他各种周边工具。
其中大多数组件都是用 Go 编写的,因此很容易构建和部署为静态二进制文件。
安装 exporter
本文只安装 node_exporter 和硬盘信息采集脚本。
官方的各种 exporter 下载地址:https://prometheus.io/download/
node_exporter 下载地址:https://prometheus.io/download/#node_exporter
官方给出的是的二进制类型的可执行程序。下载下来并解压缩并移动二进制文件到自己定义的位置。
因为是二进制文件使用也是很简单,只需要给二进制文件配置可执行权限即可。
为了方便我们来修改下默认的端口,并指定自定义采集数据文件的位置:
1 | sudo ./node_exporter --web.listen-address=:49100 --collector.textfile.directory=/your/path/textfile_collector |
--web.listen-address
:自定义端口,prometheus 服务端通过该端口访问 exporter 获取采集到的信息。--collector.textfile.directory
:自定义采集数据位置,采集文件内的数据格式必须是 prometheus 规定的格式。- 执行 node_exporter 必须使用 root 权限进行。否则个别信息无法采集。
为了方便启动和管理 node_exporter 我们把它设置为 service,使其能被 systemctl 管理。
创建文件并写入下列配置:sudo vi /etc/systemd/system/node_exporter.service
1 | [Unit] |
创建完成后启动,并且设置为开机自动启动。
1 | sudo systemctl start node_exporter.service |
可以尝试使用浏览器访问,会得到很多字符串形式的数据。
安装 prometheus
prometheus 本文采用 docker 进行安装
- 首先准备好配置文件:
prometheus.yml
,并写入以下内容:
1 | # my global config |
注意我们需要修改 scrape_configs
下的配置信息,如果需要监控多台主机的话,这里复制粘贴job_name
这个配置,修改下面的targets
内部的信息。
如果是监控多个集群的话,job_name
就是表示一个集群,相应的targets
里面写的就是集群内所有主机的地址信息,注意job_name
不可以重复。
- 其次我们需要
准备一个目录存放数据
,prometheus 的配置数据和采集数据。 - prometheus 默存只存储 15 天的数据。官方文档:operational-aspects
以下是本文使用 docker 命令:
1 | docker run -d --name prometheus\ |
注意修改命令中的参数。
采集硬盘 SMART 信息
这里采用大佬写好的脚本进行采集,大佬的仓库地址:https://github.com/micha37-martins/S.M.A.R.T-disk-monitoring-for-Prometheus
此仓库 README 中还推荐了两个配套使用的 grafana 面板配置。
- 安装 smartctl 命令,本文是 ubuntu 22.04 其他操作系统请自行搜索安装
1 | sudo apt install smartmontools |
- 下载仓库中的采集数据脚本:smartmon.sh ,该脚本必须使用 root 权限运行。
- 设置 root 用户的计划任务,执行命令:
sudo crontab -u root -e
,添加以下计划任务- 注意此步需要上面安装 node_exporter 时指定的
--collector.textfile.directory
位置 - 简单来讲就是运行脚本,把结果存储到
--collector.textfile.directory
指定的位置中。
- 注意此步需要上面安装 node_exporter 时指定的
1 | */5 * * * * /your/path/smartmon.sh > /your/path/promethues/node_exporter/textfile_collector/smart_metrics.prom |
- 采集的间隔时间,修改计划任务的时间即可,上述示例为:每五分钟采集一次。
安装 grafana
grafana 用来展示 prometheus 中存储的采集数据。
采用 docker 部署。
- 首先我们需要 run 一个 grafana 容器,把配置文件搞出来,方便以后修改。
1 | # 随便运行一下 |
- 配置文件不用修改,本文使用默认的配置文件。
- 准备一个存储数据的目录。
- grafana 默认使用的端口是 3000。
以下是本文使用 docker 命令:
1 | docker run -d --name grafana \ |
默认的用户名和密码均为:
admin
第一次登录过后会提示修改密码。grafana 面板配置分享网站:
https://grafana.com/grafana/dashboards/
- 这里推荐几个面板ID:
1860
,8919
- smart 硬盘信息展示面板:
10530
- 这里推荐几个面板ID:
面板配置使用:
- 设置数据源:左侧菜单
Configuration
,Data sources
,Add data source
。添加即可 - 如果是配置 prometheus 数据源,默认没有认证,写完地址之后直接保存即可。
- 使用现成的面板:左侧菜单
Dashboards
,+ Import
。根据提示填入面板 ID 或者面板的 JSON 配置数据。点击load
- 根据提示,选择数据源,确认面板名称,点击
import
即可导入。 - 导入后在左侧菜单
Dashboards
,Browse
中即可看见。点击即可进入面板 - 其他面板操作,创建。请自行搜索学习。
- 设置数据源:左侧菜单