节点导出器
本页内容
简介
以下快速入门提供了Node Exporter的设置说明和预配置的仪表板、警报规则和记录规则。完成本快速入门中的步骤后,您将拥有
设置并配置了Node Exporter以收集Linux系统指标,如CPU负载和磁盘I/O。Node Exporter将这些指标暴露为Prometheus风格的指标。
配置Prometheus以抓取Node Exporter指标,并可选择将它们发送到Grafana Cloud。
设置一组预配置和精选的记录规则,以缓存频繁查询。
导入Grafana仪表板以可视化您的指标数据。
设置Prometheus警报规则以对您的指标数据发出警报。
指标使用
默认情况下,此导出器发布大约500个Prometheus时间序列。要查看此导出器默认提供的指标列表,请下载示例指标抓取此处。
请注意,根据其配置,Node Exporter可能收集和发布比默认集更多的指标。有关配置Node Exporter和切换其收集器的更多信息,请参阅Node Exporter的GitHub存储库。
除了切换Node Exporter的设置外,您还可以通过删除不需要在Prometheus或Grafana Cloud中存储的时间序列来减少指标使用。有关如何进行此操作的更多信息,请参阅Grafana Cloud文档中的使用重标签减少Prometheus指标使用。
Grafana Cloud的Linux节点集成
如果您使用Grafana Cloud,可以通过安装Linux Server Integration来跳过本指南中的所有步骤,该Integration旨在帮助您通过几个命令和点击即可快速启动。 免费注册。
有关如何使用Linux Server Integration设置Node Exporter的信息,请参阅Grafana Cloud文档中的使用Linux主机集成监控Linux主机。
本页内容
Node导出器快速入门
在本指南中,您将学习如何设置和配置Node Exporter以收集Linux系统指标,如CPU负载和磁盘I/O,并将它们暴露为Prometheus风格的指标。然后,您将配置Prometheus以抓取Node Exporter指标,并可选择将它们发送到Grafana Cloud。最后,您将设置一组预配置和精选的记录规则、Grafana 仪表板和警报规则。在本指南结束时,您将拥有可以用于可视化Linux系统指标的仪表板和一组预配置的警报。
如果您使用Grafana Cloud,Linux Server Integration可以帮助您快速启动。Linux集成将Node Exporter嵌入到Grafana Agent中,并自动提供警报规则和仪表板,因此您无需执行本指南中的步骤。有关如何使用Linux Server Integration设置Node Exporter的信息,请参阅Grafana Cloud文档中的使用Linux主机集成监控Linux主机。
先决条件
在您开始之前,您应该有以下资源可用
- 与Node Exporter版本兼容的Linux机器。要查看可用的版本列表,请参阅版本。
- 在您的环境中运行或在Linux机器上直接运行Prometheus。有关如何安装Prometheus的说明,请参阅Prometheus文档中的安装部分。
- 在您的环境中运行或在Linux机器上直接运行Grafana。有关如何安装Grafana的说明,请参阅Grafana文档中的安装Grafana部分。
- (可选) 一个Grafana Cloud账户。Grafana Cloud托管Grafana和一个基于Mimir的Prometheus指标端点。您仍然需要抓取指标,可以使用您环境中安装的Prometheus或Grafana Agent。有关Grafana Cloud的更多信息,请参阅Grafana Cloud。
步骤1:设置Node Exporter
在此步骤中,您将在Linux机器上设置Node Exporter以收集和公开系统指标。
首先,登录到您的机器并下载相应的Node Exporter二进制文件。在本指南中,我们将使用linux-amd64
,但您应选择与您的系统OS和架构相对应的版本
wget https://github.com/prometheus/node_exporter/releases/download/v1.1.1/node_exporter-1.1.1.linux-amd64.tar.gz
将1.1.1
替换为您要安装的版本。本指南可能会过时,因此最好检查Node Exporter的发布页面以获取最新稳定版本。
解压tarball并使用cd
进入目录
tar xvfz node_exporter-*.*-amd64.tar.gz
cd node_exporter-*.*-amd64
运行Node Exporter二进制文件
./node_exporter
level=info ts=2021-02-15T03:35:18.396Z caller=node_exporter.go:178 msg="Starting node_exporter" version="(version=1.1.1, branch=HEAD, revision=4e837d4da79cc59ee3ed1471ba9a0d9547e95540)"
level=info ts=2021-02-15T03:35:18.396Z caller=node_exporter.go:179 msg="Build context" build_context="(go=go1.15.8, user=root@7abcc101f1c2, date=20210213-13:30:54)"
level=warn ts=2021-02-15T03:35:18.396Z caller=node_exporter.go:181 msg="Node Exporter is running as root user. This exporter is designed to run as unpriviledged user, root is not required."
level=info ts=2021-02-15T03:35:18.397Z caller=filesystem_common.go:74 collector=filesystem msg="Parsed flag --collector.filesystem.ignored-mount-points" flag=^/(dev|proc|sys|var/lib/docker/.+)($|/)
level=info ts=2021-02-15T03:35:18.397Z caller=filesystem_common.go:76 collector=filesystem msg="Parsed flag --collector.filesystem.ignored-fs-types" flag=^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$
level=info ts=2021-02-15T03:35:18.397Z caller=node_exporter.go:106 msg="Enabled collectors"
level=info ts=2021-02-15T03:35:18.397Z caller=node_exporter.go:113 collector=arp
level=info ts=2021-02-15T03:35:18.397Z caller=node_exporter.go:113 collector=bcache
. . .
level=info ts=2021-02-15T03:38:01.468Z caller=node_exporter.go:113 collector=zfs
level=info ts=2021-02-15T03:38:01.468Z caller=node_exporter.go:195 msg="Listening on" address=:9100
level=info ts=2021-02-15T03:38:01.468Z caller=tls_config.go:191 msg="TLS is disabled." http2=false
如果您看到上面的输出,您已成功运行Node Exporter。
Node Exporter在端口9100
上以Prometheus格式发布系统指标。您可以使用curl
进行测试。您需要打开新的SSH会话或将Node Exporter进程置于后台才能使用curl
。
curl https://127.0.0.1:9100/metrics
. . .
process_virtual_memory_max_bytes 1.8446744073709552e+19
## HELP promhttp_metric_handler_errors_total Total number of internal errors encountered by the promhttp metric handler.
## TYPE promhttp_metric_handler_errors_total counter
promhttp_metric_handler_errors_total{cause="encoding"} 0
promhttp_metric_handler_errors_total{cause="gathering"} 0
## HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
## TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
## HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
## TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 0
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0
如果您看到上面的输出,您就可以开始使用Prometheus抓取Node Exporter指标了。
为了避免从命令行运行和管理Node Exporter,您可以创建一个systemd
服务。有关如何进行此操作,请参阅创建systemd服务以管理代理。将代理二进制文件的路径替换为Node Exporter的路径。
步骤2:使用Prometheus抓取Node Exporter
现在,Node Exporter已在您的机器上启动并运行,您可以配置Prometheus抓取作业以收集和存储Node Exporter指标。
将以下抓取作业配置添加到scrape_configs
部分中的prometheus.yml
配置文件
- job_name: node
static_configs:
- targets: ['linux_machine_IP_address:9100']
将linux_machine_IP_address
替换为运行Node Exporter的机器的IP地址。如果您在相同机器上运行Prometheus,这将将是localhost
。有关配置Prometheus的更多信息,请参阅Prometheus文档中的配置部分。
如果您没有prometheus.yml
配置文件,可以使用您喜欢的文本编辑器创建一个简单的文件。打开您首选的文本编辑器,粘贴以下Prometheus配置
global:
scrape_interval: 15s
scrape_configs:
- job_name: node
static_configs:
- targets: ['linux_machine_IP_address:9100']
此配置告诉Prometheus每15秒抓取所有作业一次。唯一配置的抓取作业名为node
,并定义了一个linux_machine_IP_address:9100
目标。默认情况下,Prometheus将使用HTTP抓取/metrics
端点。
保存并关闭文件。然后,您可以使用以下命令运行 Prometheus 并使用该文件:
./prometheus --config.file=./prometheus.yml
将指标发送到 Grafana Cloud
要将 Node Exporter 指标从 Prometheus 发送到 Grafana Cloud,请在您的 prometheus.yml
配置文件中配置 remote_write
参数。有关更多信息,请参阅 Grafana Cloud 文档中的 指标 — Prometheus。有关 remote_write
参数的更多信息,请参阅 Prometheus 文档中的 remote_write
。
步骤3:配置记录规则
使用记录规则,您可以预先计算并缓存经常查询的指标。例如,如果一个仪表板面板使用像 rate()
这样的计算密集型查询,您可以为定期以较低间隔运行并保存密集查询结果的新的时间序列创建一个记录规则。这样可以避免每次刷新仪表板时获取和计算数据。有关 Prometheus 记录规则的更多信息,请参阅 Prometheus 文档中的 记录规则。
您应该在加载本指南中的仪表板之前加载以下记录规则。仪表板查询使用记录规则来降低 Prometheus 或 Grafana Cloud 指标服务器上的负载,具体取决于您在哪里评估规则。
您可以从这里获取记录规则 YAML 文件。
将记录规则加载到 Prometheus 中
要将记录规则加载到 Prometheus 中,请在您的 prometheus.yml
配置文件中添加以下内容:
rule_files:
- "node_exporter_recording_rules.yml"
请确保将 node_exporter_recording_rules.yml
替换为您的 Node Exporter 记录规则 YAML 文件的路径。
将记录规则加载到 Grafana Cloud 中
有关如何将记录规则加载到 Grafana Cloud 的信息,请参阅 使用 cortextool 的 Prometheus 和 Loki 规则。
步骤4:配置仪表板
此快速入门包括以下三个仪表板:
- 节点仪表板
- USE 方法 / 节点仪表板
- USE 方法 / 集群仪表板
有关如何将仪表板导入 Grafana 的信息,请参阅 Grafana 文档中的 导入仪表板。
仪表板查询依赖于上一步骤中定义的记录规则。确保在导入仪表板之前导入这些规则。
您可以从这里获取仪表板。
步骤5:配置警报
使用 Prometheus 告警规则,您可以在 PromQL 表达式超过某些阈值或满足指定条件的一段时间内定义告警。例如,您可以定义一个当请求延迟指标在一段时间内大于某个阈值时触发的 HighRequestLatency
告警。一旦触发告警条件,告警就移动到 Pending
状态。在满足 for
参数定义的时间段的条件后,告警就移动到 Firing
状态。您可以使用像 Alertmanager 这样的工具配置告警的路由和通知。Alertmanager 也内置到 Grafana Cloud 中。
您可以从这里获取告警规则 YAML 文件。
将告警规则加载到 Prometheus 中
要将告警规则加载到 Prometheus 中,请在您的 prometheus.yml
配置文件中添加以下内容:
rule_files:
- "node_exporter_alerting_rules.yml"
请确保将 node_exporter_alerting_rules.yml
替换为您的 Node Exporter 告警规则 YAML 文件的路径。
将告警规则加载到 Grafana Cloud 中
有关如何将告警规则加载到 Grafana Cloud 的信息,请参阅 使用 cortextool 的 Prometheus 和 Loki 规则。
结论
在此快速入门中,您已在您的 Linux 机器上安装并运行了 Node Exporter。然后,您配置 Prometheus 来抓取 Node Exporter 提供的系统指标。您将记录规则和告警规则加载到 Prometheus 中,最后导入 Grafana 仪表板以可视化您的 Linux 系统指标。
如果您使用Grafana Cloud,可以通过安装带有Grafana Agent的Linux服务器集成来跳过本指南中的所有步骤。此集成将预配置的Node Exporter嵌入到代理中,并自动部署Grafana仪表板、Prometheus警报和记录规则,因此您无需手动导入。有关如何设置Linux服务器集成的信息,请参阅使用Linux主机集成监控Linux主机。
仪表板、记录规则和警报规则是使用Node Exporter Mixin生成的。Mixin是仪表板、记录规则和警报的复用模板,由领域专家精心挑选和设计。要了解更多信息,请参阅Node Mixin存储库。
本页内容
您应该在加载本指南中的仪表板之前加载以下记录规则。仪表板查询使用记录规则来降低 Prometheus 或 Grafana Cloud 指标服务器上的负载,具体取决于您在哪里评估规则。
此快速入门指南包括以下记录规则
instance:node_num_cpu:sum
instance:node_cpu_utilisation:rate1m
instance:node_load1_per_cpu:ratio
instance:node_memory_utilisation:ratio
instance:node_vmstat_pgmajfault:rate1m
instance_device:node_disk_io_time_seconds:rate1m
instance_device:node_disk_io_time_weighted_seconds:rate1m
instance:node_network_receive_bytes_excluding_lo:rate1m
instance:node_network_transmit_bytes_excluding_lo:rate1m
instance:node_network_receive_drop_excluding_lo:rate1m
instance:node_network_transmit_drop_excluding_lo:rate1m
"groups":
- "name": "node-exporter.rules"
"rules":
- "expr": |
count without (cpu) (
count without (mode) (
node_cpu_seconds_total{job="node"}
)
)
"record": "instance:node_num_cpu:sum"
- "expr": |
1 - avg without (cpu, mode) (
rate(node_cpu_seconds_total{job="node", mode="idle"}[1m])
)
"record": "instance:node_cpu_utilisation:rate1m"
- "expr": |
(
node_load1{job="node"}
/
instance:node_num_cpu:sum{job="node"}
)
"record": "instance:node_load1_per_cpu:ratio"
- "expr": |
1 - (
node_memory_MemAvailable_bytes{job="node"}
/
node_memory_MemTotal_bytes{job="node"}
)
"record": "instance:node_memory_utilisation:ratio"
- "expr": |
rate(node_vmstat_pgmajfault{job="node"}[1m])
"record": "instance:node_vmstat_pgmajfault:rate1m"
- "expr": |
rate(node_disk_io_time_seconds_total{job="node", device!=""}[1m])
"record": "instance_device:node_disk_io_time_seconds:rate1m"
- "expr": |
rate(node_disk_io_time_weighted_seconds_total{job="node", device!=""}[1m])
"record": "instance_device:node_disk_io_time_weighted_seconds:rate1m"
- "expr": |
sum without (device) (
rate(node_network_receive_bytes_total{job="node", device!="lo"}[1m])
)
"record": "instance:node_network_receive_bytes_excluding_lo:rate1m"
- "expr": |
sum without (device) (
rate(node_network_transmit_bytes_total{job="node", device!="lo"}[1m])
)
"record": "instance:node_network_transmit_bytes_excluding_lo:rate1m"
- "expr": |
sum without (device) (
rate(node_network_receive_drop_total{job="node", device!="lo"}[1m])
)
"record": "instance:node_network_receive_drop_excluding_lo:rate1m"
- "expr": |
sum without (device) (
rate(node_network_transmit_drop_total{job="node", device!="lo"}[1m])
)
"record": "instance:node_network_transmit_drop_excluding_lo:rate1m"
此记录规则YAML文件是使用Node Exporter mixin 生成的。它默认使用 job=node
标签选择器来查询指标。如果您需要使用不同的选择器,请修改config.libsonnet中的选择器,并按照Mixin存储库中的说明重新生成仪表板。
本页内容
注意:这些仪表板依赖于上一选项卡中的记录规则。在导入仪表板之前,请确保导入这些规则。
节点仪表板
此仪表板包括以下指标的面板
- CPU使用率
- 平均负载
- 内存使用率
- 磁盘I/O
- 磁盘使用率
- 网络接收
- 网络传输
您可以直接使用以下仪表板ID导入仪表板:13978
您也可以从这里直接下载仪表板JSON:此处。
USE 方法 / 节点仪表板
此仪表板包括以下指标的面板。有关USE(利用率、饱和度和错误)指标的更多信息,请参阅USE方法
- CPU利用率
- CPU饱和度(每CPU负载)
- 内存利用率
- 内存饱和度(主要页面错误)
- 网络利用率(接收/传输字节数)
- 网络饱和度(接收/传输丢弃的字节数)
- 磁盘I/O利用率
- 磁盘I/O饱和度
您可以直接使用以下仪表板ID导入仪表板:13977
您也可以从这里直接下载仪表板JSON:此处。
USE 方法 / 集群仪表板
此仪表板类似于USE方法/节点仪表板,但提供相同指标的集群级视图。它包括以下指标的面板
- CPU利用率
- CPU饱和度(每CPU负载)
- 内存利用率
- 内存饱和度(主要页面错误)
- 网络利用率(接收/传输字节数)
- 网络饱和度(接收/传输丢弃的字节数)
- 磁盘I/O利用率
- 磁盘I/O饱和度
您可以使用以下仪表板ID直接导入仪表板:13971
您也可以从这里直接下载仪表板JSON:此处。
这些仪表板是使用节点导出器的mixin生成的。它们默认使用job=node
标签选择器查询指标。如果您需要使用不同的选择器,请在config.libsonnet中修改选择器,并按照mixin存储库中的说明重新生成仪表板。
本页内容
此快速入门包括以下警报规则
NodeFilesystemSpaceFillingUp
实例设备上的文件系统只剩X可用空间,正在被填满。
NodeFilesystemAlmostOutOfSpace
实例设备上的文件系统只剩X可用空间。
NodeFilesystemFilesFillingUp
实例设备上的文件系统只剩X可用inode,正在被填满。
NodeFilesystemAlmostOutOfFiles
实例设备上的文件系统只剩X可用inode。
NodeNetworkReceiveErrs
实例接口设备在过去的两分钟内遇到了X个接收错误。
NodeHighNumberConntrackEntriesUsed
conntrack条目使用的百分比。
NodeTextFileCollectorScrapeError
节点导出器文本文件收集器无法抓取。
NodeClockSkewDetected
实例上的时钟与标准时间差超过300秒。请确保在此主机上正确配置了NTP。
NodeClockNotSynchronising
实例上的时钟没有同步。请确保在此主机上配置了NTP。
NodeRAIDDegraded
由于一个或多个磁盘故障,实例上的RAID数组‘设备’处于降级状态。备用驱动器数量不足以自动解决问题。
NodeRAIDDiskFailure
实例上的RAID数组至少有一个设备故障。数组‘设备’需要关注,可能需要更换磁盘。
"groups":
- "name": "node-exporter"
"rules":
- "alert": "NodeFilesystemSpaceFillingUp"
"annotations":
"description": "Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \"%.2f\" $value }}% available space left and is filling up."
"summary": "Filesystem is predicted to run out of space within the next 24 hours."
"expr": |
(
node_filesystem_avail_bytes{job="node",fstype!=""} / node_filesystem_size_bytes{job="node",fstype!=""} * 100 < 40
and
predict_linear(node_filesystem_avail_bytes{job="node",fstype!=""}[6h], 24*60*60) < 0
and
node_filesystem_readonly{job="node",fstype!=""} == 0
)
"for": "1h"
"labels":
"severity": "warning"
- "alert": "NodeFilesystemSpaceFillingUp"
"annotations":
"description": "Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \"%.2f\" $value }}% available space left and is filling up fast."
"summary": "Filesystem is predicted to run out of space within the next 4 hours."
"expr": |
(
node_filesystem_avail_bytes{job="node",fstype!=""} / node_filesystem_size_bytes{job="node",fstype!=""} * 100 < 20
and
predict_linear(node_filesystem_avail_bytes{job="node",fstype!=""}[6h], 4*60*60) < 0
and
node_filesystem_readonly{job="node",fstype!=""} == 0
)
"for": "1h"
"labels":
"severity": "critical"
- "alert": "NodeFilesystemAlmostOutOfSpace"
"annotations":
"description": "Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \"%.2f\" $value }}% available space left."
"summary": "Filesystem has less than 5% space left."
"expr": |
(
node_filesystem_avail_bytes{job="node",fstype!=""} / node_filesystem_size_bytes{job="node",fstype!=""} * 100 < 5
and
node_filesystem_readonly{job="node",fstype!=""} == 0
)
"for": "1h"
"labels":
"severity": "warning"
- "alert": "NodeFilesystemAlmostOutOfSpace"
"annotations":
"description": "Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \"%.2f\" $value }}% available space left."
"summary": "Filesystem has less than 3% space left."
"expr": |
(
node_filesystem_avail_bytes{job="node",fstype!=""} / node_filesystem_size_bytes{job="node",fstype!=""} * 100 < 3
and
node_filesystem_readonly{job="node",fstype!=""} == 0
)
"for": "1h"
"labels":
"severity": "critical"
- "alert": "NodeFilesystemFilesFillingUp"
"annotations":
"description": "Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \"%.2f\" $value }}% available inodes left and is filling up."
"summary": "Filesystem is predicted to run out of inodes within the next 24 hours."
"expr": |
(
node_filesystem_files_free{job="node",fstype!=""} / node_filesystem_files{job="node",fstype!=""} * 100 < 40
and
predict_linear(node_filesystem_files_free{job="node",fstype!=""}[6h], 24*60*60) < 0
and
node_filesystem_readonly{job="node",fstype!=""} == 0
)
"for": "1h"
"labels":
"severity": "warning"
- "alert": "NodeFilesystemFilesFillingUp"
"annotations":
"description": "Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \"%.2f\" $value }}% available inodes left and is filling up fast."
"summary": "Filesystem is predicted to run out of inodes within the next 4 hours."
"expr": |
(
node_filesystem_files_free{job="node",fstype!=""} / node_filesystem_files{job="node",fstype!=""} * 100 < 20
and
predict_linear(node_filesystem_files_free{job="node",fstype!=""}[6h], 4*60*60) < 0
and
node_filesystem_readonly{job="node",fstype!=""} == 0
)
"for": "1h"
"labels":
"severity": "critical"
- "alert": "NodeFilesystemAlmostOutOfFiles"
"annotations":
"description": "Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \"%.2f\" $value }}% available inodes left."
"summary": "Filesystem has less than 5% inodes left."
"expr": |
(
node_filesystem_files_free{job="node",fstype!=""} / node_filesystem_files{job="node",fstype!=""} * 100 < 5
and
node_filesystem_readonly{job="node",fstype!=""} == 0
)
"for": "1h"
"labels":
"severity": "warning"
- "alert": "NodeFilesystemAlmostOutOfFiles"
"annotations":
"description": "Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \"%.2f\" $value }}% available inodes left."
"summary": "Filesystem has less than 3% inodes left."
"expr": |
(
node_filesystem_files_free{job="node",fstype!=""} / node_filesystem_files{job="node",fstype!=""} * 100 < 3
and
node_filesystem_readonly{job="node",fstype!=""} == 0
)
"for": "1h"
"labels":
"severity": "critical"
- "alert": "NodeNetworkReceiveErrs"
"annotations":
"description": "{{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} receive errors in the last two minutes."
"summary": "Network interface is reporting many receive errors."
"expr": |
rate(node_network_receive_errs_total[2m]) / rate(node_network_receive_packets_total[2m]) > 0.01
"for": "1h"
"labels":
"severity": "warning"
- "alert": "NodeNetworkTransmitErrs"
"annotations":
"description": "{{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} transmit errors in the last two minutes."
"summary": "Network interface is reporting many transmit errors."
"expr": |
rate(node_network_transmit_errs_total[2m]) / rate(node_network_transmit_packets_total[2m]) > 0.01
"for": "1h"
"labels":
"severity": "warning"
- "alert": "NodeHighNumberConntrackEntriesUsed"
"annotations":
"description": "{{ $value | humanizePercentage }} of conntrack entries are used."
"summary": "Number of conntrack are getting close to the limit."
"expr": |
(node_nf_conntrack_entries / node_nf_conntrack_entries_limit) > 0.75
"labels":
"severity": "warning"
- "alert": "NodeTextFileCollectorScrapeError"
"annotations":
"description": "Node Exporter text file collector failed to scrape."
"summary": "Node Exporter text file collector failed to scrape."
"expr": |
node_textfile_scrape_error{job="node"} == 1
"labels":
"severity": "warning"
- "alert": "NodeClockSkewDetected"
"annotations":
"description": "Clock on {{ $labels.instance }} is out of sync by more than 300s. Ensure NTP is configured correctly on this host."
"summary": "Clock skew detected."
"expr": |
(
node_timex_offset_seconds > 0.05
and
deriv(node_timex_offset_seconds[5m]) >= 0
)
or
(
node_timex_offset_seconds < -0.05
and
deriv(node_timex_offset_seconds[5m]) <= 0
)
"for": "10m"
"labels":
"severity": "warning"
- "alert": "NodeClockNotSynchronising"
"annotations":
"description": "Clock on {{ $labels.instance }} is not synchronising. Ensure NTP is configured on this host."
"summary": "Clock not synchronising."
"expr": |
min_over_time(node_timex_sync_status[5m]) == 0
and
node_timex_maxerror_seconds >= 16
"for": "10m"
"labels":
"severity": "warning"
- "alert": "NodeRAIDDegraded"
"annotations":
"description": "RAID array '{{ $labels.device }}' on {{ $labels.instance }} is in degraded state due to one or more disks failures. Number of spare drives is insufficient to fix issue automatically."
"summary": "RAID Array is degraded"
"expr": |
node_md_disks_required - ignoring (state) (node_md_disks{state="active"}) > 0
"for": "15m"
"labels":
"severity": "critical"
- "alert": "NodeRAIDDiskFailure"
"annotations":
"description": "At least one device in RAID array on {{ $labels.instance }} failed. Array '{{ $labels.device }}' needs attention and possibly a disk swap."
"summary": "Failed device in RAID array"
"expr": |
node_md_disks{state="failed"} > 0
"labels":
"severity": "warning"
此警报规则YAML文件是使用节点导出器的mixin生成的。它默认使用job=node
标签选择器查询指标。如果您需要使用不同的选择器,请在config.libsonnet中修改选择器,并按照mixin存储库中的说明重新生成仪表板。
本页内容
Grafana Cloud附带了一套不断扩展的集成,可以快速在几分钟内搭建起可观察性堆栈。内置在Grafana Agent中的Linux节点集成暴露并抓取关键系统指标,并将它们推送到Grafana Cloud。代理将使用嵌入的节点导出器抓取指标,Grafana Cloud将自动提供定制的Grafana仪表板和警报,用于可视化和操作这些数据。
要了解更多信息,请查看Grafana Cloud 文档。
它是如何工作的
配置、安装、连接和维护Prometheus监控组件通常需要深厚的专业知识。从设置到仪表板和警报可能需要相当长的时间。作为Grafana的创建者——Prometheus和Cortex的核心贡献者——我们构建简单的集成来抽象一些工作,以便快速开始。它是如何工作的
- 注册(或登录)免费Grafana Cloud账户。
- 选择您想要观察的目标(不断扩展的目录)。
- 运行一条单行命令来安装Grafana Agent。代理内置并预先配置导出器以暴露默认指标,并将它们推送到Grafana Cloud指标后端。
- 哇!您将看到定制的Grafana仪表板,并从合理的警报默认设置中受益。
正在寻找不同的导出器或集成?查看我们为MySQL、Postgres、Redis、Memcached等流行组件的不断增长的集成库。