<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Node exporter on Grafana Labs</title><link>https://grafana.com/oss/prometheus/exporters/node-exporter/</link><description>Recent content in Node exporter on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/oss/prometheus/exporters/node-exporter/index.xml" rel="self" type="application/rss+xml"/><item><title>Alerting rules</title><link>https://grafana.com</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://grafana.com</guid><description>&lt;p>This quickstart includes the following alerting rules:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;code>NodeFilesystemSpaceFillingUp&lt;/code>&lt;/p>
&lt;p>Filesystem on device at instace has only X available space left and is filling up.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeFilesystemAlmostOutOfSpace&lt;/code>&lt;/p>
&lt;p>Filesystem on device at instance has only X available space left.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeFilesystemFilesFillingUp&lt;/code>&lt;/p>
&lt;p>Filesystem on device at instance has only X available inodes left and is filling up.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeFilesystemAlmostOutOfFiles&lt;/code>&lt;/p>
&lt;p>Filesystem on device at instance has only X available inodes left&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeNetworkReceiveErrs&lt;/code>&lt;/p>
&lt;p>Instance interface device has encountered X receive errors in the last two minutes.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeHighNumberConntrackEntriesUsed&lt;/code>&lt;/p>
&lt;p>% of conntrack entries are used.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeTextFileCollectorScrapeError&lt;/code>&lt;/p>
&lt;p>Node Exporter text file collector failed to scrape.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeClockSkewDetected&lt;/code>&lt;/p>
&lt;p>Clock on instance is out of sync by more than 300s. Ensure NTP is configured correctly on this host.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeClockNotSynchronising&lt;/code>&lt;/p>
&lt;p>Clock on instance is not synchronising. Ensure NTP is configured on this host.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeRAIDDegraded&lt;/code>&lt;/p>
&lt;p>RAID array &amp;lsquo;device&amp;rsquo; on instance is in degraded state due to one or more disks failures. Number of spare drives is insufficient to fix issue automatically.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>NodeRAIDDiskFailure&lt;/code>&lt;/p>
&lt;p>At least one device in RAID array on instance failed. Array &amp;lsquo;device&amp;rsquo; needs attention and possibly a disk swap.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;a class="btn btn--primary br-5 mb-1" href="assets/node_alerts.yaml" rel="noopener noreferrer">Download the following alerting rules YAML file&lt;/a>
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">YAML&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-yaml">&amp;#34;groups&amp;#34;:
- &amp;#34;name&amp;#34;: &amp;#34;node-exporter&amp;#34;
&amp;#34;rules&amp;#34;:
- &amp;#34;alert&amp;#34;: &amp;#34;NodeFilesystemSpaceFillingUp&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \&amp;#34;%.2f\&amp;#34; $value }}% available space left and is filling up.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Filesystem is predicted to run out of space within the next 24 hours.&amp;#34;
&amp;#34;expr&amp;#34;: |
(
node_filesystem_avail_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} / node_filesystem_size_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} * 100 &amp;lt; 40
and
predict_linear(node_filesystem_avail_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;}[6h], 24*60*60) &amp;lt; 0
and
node_filesystem_readonly{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} == 0
)
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeFilesystemSpaceFillingUp&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \&amp;#34;%.2f\&amp;#34; $value }}% available space left and is filling up fast.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Filesystem is predicted to run out of space within the next 4 hours.&amp;#34;
&amp;#34;expr&amp;#34;: |
(
node_filesystem_avail_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} / node_filesystem_size_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} * 100 &amp;lt; 20
and
predict_linear(node_filesystem_avail_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;}[6h], 4*60*60) &amp;lt; 0
and
node_filesystem_readonly{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} == 0
)
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;critical&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeFilesystemAlmostOutOfSpace&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \&amp;#34;%.2f\&amp;#34; $value }}% available space left.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Filesystem has less than 5% space left.&amp;#34;
&amp;#34;expr&amp;#34;: |
(
node_filesystem_avail_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} / node_filesystem_size_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} * 100 &amp;lt; 5
and
node_filesystem_readonly{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} == 0
)
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeFilesystemAlmostOutOfSpace&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \&amp;#34;%.2f\&amp;#34; $value }}% available space left.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Filesystem has less than 3% space left.&amp;#34;
&amp;#34;expr&amp;#34;: |
(
node_filesystem_avail_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} / node_filesystem_size_bytes{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} * 100 &amp;lt; 3
and
node_filesystem_readonly{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} == 0
)
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;critical&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeFilesystemFilesFillingUp&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \&amp;#34;%.2f\&amp;#34; $value }}% available inodes left and is filling up.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Filesystem is predicted to run out of inodes within the next 24 hours.&amp;#34;
&amp;#34;expr&amp;#34;: |
(
node_filesystem_files_free{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} / node_filesystem_files{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} * 100 &amp;lt; 40
and
predict_linear(node_filesystem_files_free{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;}[6h], 24*60*60) &amp;lt; 0
and
node_filesystem_readonly{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} == 0
)
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeFilesystemFilesFillingUp&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \&amp;#34;%.2f\&amp;#34; $value }}% available inodes left and is filling up fast.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Filesystem is predicted to run out of inodes within the next 4 hours.&amp;#34;
&amp;#34;expr&amp;#34;: |
(
node_filesystem_files_free{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} / node_filesystem_files{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} * 100 &amp;lt; 20
and
predict_linear(node_filesystem_files_free{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;}[6h], 4*60*60) &amp;lt; 0
and
node_filesystem_readonly{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} == 0
)
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;critical&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeFilesystemAlmostOutOfFiles&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \&amp;#34;%.2f\&amp;#34; $value }}% available inodes left.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Filesystem has less than 5% inodes left.&amp;#34;
&amp;#34;expr&amp;#34;: |
(
node_filesystem_files_free{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} / node_filesystem_files{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} * 100 &amp;lt; 5
and
node_filesystem_readonly{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} == 0
)
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeFilesystemAlmostOutOfFiles&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Filesystem on {{ $labels.device }} at {{ $labels.instance }} has only {{ printf \&amp;#34;%.2f\&amp;#34; $value }}% available inodes left.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Filesystem has less than 3% inodes left.&amp;#34;
&amp;#34;expr&amp;#34;: |
(
node_filesystem_files_free{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} / node_filesystem_files{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} * 100 &amp;lt; 3
and
node_filesystem_readonly{job=&amp;#34;node&amp;#34;,fstype!=&amp;#34;&amp;#34;} == 0
)
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;critical&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeNetworkReceiveErrs&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;{{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \&amp;#34;%.0f\&amp;#34; $value }} receive errors in the last two minutes.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Network interface is reporting many receive errors.&amp;#34;
&amp;#34;expr&amp;#34;: |
rate(node_network_receive_errs_total[2m]) / rate(node_network_receive_packets_total[2m]) &amp;gt; 0.01
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeNetworkTransmitErrs&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;{{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \&amp;#34;%.0f\&amp;#34; $value }} transmit errors in the last two minutes.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Network interface is reporting many transmit errors.&amp;#34;
&amp;#34;expr&amp;#34;: |
rate(node_network_transmit_errs_total[2m]) / rate(node_network_transmit_packets_total[2m]) &amp;gt; 0.01
&amp;#34;for&amp;#34;: &amp;#34;1h&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeHighNumberConntrackEntriesUsed&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;{{ $value | humanizePercentage }} of conntrack entries are used.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Number of conntrack are getting close to the limit.&amp;#34;
&amp;#34;expr&amp;#34;: |
(node_nf_conntrack_entries / node_nf_conntrack_entries_limit) &amp;gt; 0.75
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeTextFileCollectorScrapeError&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Node Exporter text file collector failed to scrape.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Node Exporter text file collector failed to scrape.&amp;#34;
&amp;#34;expr&amp;#34;: |
node_textfile_scrape_error{job=&amp;#34;node&amp;#34;} == 1
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeClockSkewDetected&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Clock on {{ $labels.instance }} is out of sync by more than 300s. Ensure NTP is configured correctly on this host.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Clock skew detected.&amp;#34;
&amp;#34;expr&amp;#34;: |
(
node_timex_offset_seconds &amp;gt; 0.05
and
deriv(node_timex_offset_seconds[5m]) &amp;gt;= 0
)
or
(
node_timex_offset_seconds &amp;lt; -0.05
and
deriv(node_timex_offset_seconds[5m]) &amp;lt;= 0
)
&amp;#34;for&amp;#34;: &amp;#34;10m&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeClockNotSynchronising&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;Clock on {{ $labels.instance }} is not synchronising. Ensure NTP is configured on this host.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Clock not synchronising.&amp;#34;
&amp;#34;expr&amp;#34;: |
min_over_time(node_timex_sync_status[5m]) == 0
and
node_timex_maxerror_seconds &amp;gt;= 16
&amp;#34;for&amp;#34;: &amp;#34;10m&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeRAIDDegraded&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;RAID array &amp;#39;{{ $labels.device }}&amp;#39; on {{ $labels.instance }} is in degraded state due to one or more disks failures. Number of spare drives is insufficient to fix issue automatically.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;RAID Array is degraded&amp;#34;
&amp;#34;expr&amp;#34;: |
node_md_disks_required - ignoring (state) (node_md_disks{state=&amp;#34;active&amp;#34;}) &amp;gt; 0
&amp;#34;for&amp;#34;: &amp;#34;15m&amp;#34;
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;critical&amp;#34;
- &amp;#34;alert&amp;#34;: &amp;#34;NodeRAIDDiskFailure&amp;#34;
&amp;#34;annotations&amp;#34;:
&amp;#34;description&amp;#34;: &amp;#34;At least one device in RAID array on {{ $labels.instance }} failed. Array &amp;#39;{{ $labels.device }}&amp;#39; needs attention and possibly a disk swap.&amp;#34;
&amp;#34;summary&amp;#34;: &amp;#34;Failed device in RAID array&amp;#34;
&amp;#34;expr&amp;#34;: |
node_md_disks{state=&amp;#34;failed&amp;#34;} &amp;gt; 0
&amp;#34;labels&amp;#34;:
&amp;#34;severity&amp;#34;: &amp;#34;warning&amp;#34;&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>This alerting rule YAML file was generated using the Node-exporter &lt;a href="https://github.com/prometheus/node_exporter/tree/master/docs/node-mixin" target="_blank" rel="noopener noreferrer">mixin&lt;/a>. It uses the &lt;code>job=node&lt;/code> label selector to query metrics by default. If you need to use a different selector, modify the selector in &lt;a href="https://github.com/prometheus/node_exporter/blob/master/docs/node-mixin/config.libsonnet" target="_blank" rel="noopener noreferrer">config.libsonnet&lt;/a> and regenerate the dashboard following the instructions in the mixin repository.&lt;/p></description></item><item><title>Cloud integration</title><link>https://grafana.com</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://grafana.com</guid><description>
&lt;div class="bg-solitude p-1 mb-1" style="">
&lt;p>Grafana Cloud comes with an ever-expanding set of integrations to quickly get an observability stack up and running in minutes. The Linux Node Integration, built-in to the Grafana Agent, exposes and scrapes essential system metrics and pushes them to Grafana Cloud. The agent will scrape metrics using an embedded Node Exporter, and Grafana Cloud will automatically provision tailored Grafana dashboards and alerts for visualizing and acting on this data.&lt;/p>
&lt;div>
&lt;a class="btn btn--primary br-5 " href="/auth/sign-up/create-user?pg=oss-prom-node-exporter&amp;amp;plcmt=body-btn1-integration" rel="noopener noreferrer">Sign up for a free account to get started&lt;/a>
&lt;/div>
&lt;/div>
&lt;p>To learn more, check out the Grafana Cloud &lt;a href="/docs/grafana-cloud/getting-started/gs-integrations/">docs&lt;/a>.&lt;/p>
&lt;h4 id="how-it-works">How it works&lt;/h4>
&lt;p>Configuring, installing, connecting, and maintaining Prometheus monitoring components typically involves significant domain knowledge. It can take quite a while to go from setup to dashboard and alerts. As the creators of Grafana - and core contributors to Prometheus and Cortex - we build simple integrations to abstract some of this work away in order to quickly get started. How it works:&lt;/p>
&lt;ol>
&lt;li>Sign up (or log in) for a &lt;a href="/auth/sign-up/create-user?pg=oss-prom-node-exporter&amp;amp;plcmt=body-txt-integration">free Grafana Cloud account&lt;/a>.&lt;/li>
&lt;li>Select the target you’d like to observe (an ever-expanding catalogue).&lt;/li>
&lt;li>Run a one-line command to install the Grafana Agent. The agent embeds and preconfigures Exporters to expose default metrics, and pushes them to the Grafana Cloud metrics backend.&lt;/li>
&lt;li>Voila! You’ll see tailored Grafana dashboards and will benefit from sane alerting defaults.&lt;/li>
&lt;/ol>
&lt;p>Looking for a different Exporter or integration? Check out our &lt;a href="/docs/grafana-cloud/integrations/">growing library of integrations for popular components&lt;/a> like MySQL, Postgres, Redis, Memcached and more.&lt;/p></description></item><item><title>Dashboards</title><link>https://grafana.com</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://grafana.com</guid><description>&lt;p>&lt;strong>Note: These dashboards depend on the recording rules in the previous tab. Be sure to import these before importing the dashboards.&lt;/strong>&lt;/p>
&lt;h3 id="nodes-dashboard">&lt;a href="/grafana/dashboards/13978">Nodes Dashboard&lt;/a>&lt;/h3>
&lt;p>&lt;img
class="lazyload d-inline-block"
src="/api/dashboards/13978/images/9972/image"
alt="Nodes Dashboard"/>&lt;/p>
&lt;p>This dashboard includes panels for the following metrics:&lt;/p>
&lt;ul>
&lt;li>CPU Usage&lt;/li>
&lt;li>Load Average&lt;/li>
&lt;li>Memory Usage&lt;/li>
&lt;li>Disk I/O&lt;/li>
&lt;li>Disk Usage&lt;/li>
&lt;li>Network Received&lt;/li>
&lt;li>Network Transmitted&lt;/li>
&lt;/ul>
&lt;p>You can import the dashboard directly using the following dashboard ID: &lt;strong>&lt;code>13978&lt;/code>&lt;/strong>&lt;/p>
&lt;p>You can also download the dashboard JSON directly &lt;a href="/api/dashboards/13978/revisions/1/download">here&lt;/a>.&lt;/p>
&lt;h3 id="use-method--node-dashboard">&lt;a href="/grafana/dashboards/13977">USE Method / Node Dashboard&lt;/a>&lt;/h3>
&lt;p>&lt;img
class="lazyload d-inline-block"
src="/api/dashboards/13977/images/9971/image"
alt="USE Method / Node Dashboard"/>&lt;/p>
&lt;p>This dashboard includes panels for the following metrics. To learn more about USE (Utilization, Saturation, and Errors) metrics, please see &lt;a href="http://www.brendangregg.com/usemethod.html" target="_blank" rel="noopener noreferrer">The USE Method&lt;/a>:&lt;/p>
&lt;ul>
&lt;li>CPU Utilization&lt;/li>
&lt;li>CPU Saturation (Load per CPU)&lt;/li>
&lt;li>Memory Utilisation&lt;/li>
&lt;li>Memory Saturation (Major Page Faults)&lt;/li>
&lt;li>Net Utilization (Bytes Receive/Transmit)&lt;/li>
&lt;li>Net Saturation (Drops Receive/Transmit)&lt;/li>
&lt;li>Disk I/O Utilization&lt;/li>
&lt;li>Disk I/O Saturation&lt;/li>
&lt;/ul>
&lt;p>You can import the dashboard directly using the following dashboard ID: &lt;strong>&lt;code>13977&lt;/code>&lt;/strong>&lt;/p>
&lt;p>You can also download the dashboard JSON directly &lt;a href="/api/dashboards/13978/revisions/1/download">here&lt;/a>.&lt;/p>
&lt;h3 id="use-method--cluster-dashboard">&lt;a href="/grafana/dashboards/13971">USE Method / Cluster Dashboard&lt;/a>&lt;/h3>
&lt;p>&lt;img
class="lazyload d-inline-block"
src="/api/dashboards/13971/images/9969/image"
alt="USE Method / Cluster Dashboard"/>&lt;/p>
&lt;p>This dashboard is similar to the USE Method / Node Dashboard but provides a cluster-level view of the same metrics. It includes panels for the following metrics:&lt;/p>
&lt;ul>
&lt;li>CPU Utilization&lt;/li>
&lt;li>CPU Saturation (Load per CPU)&lt;/li>
&lt;li>Memory Utilisation&lt;/li>
&lt;li>Memory Saturation (Major Page Faults)&lt;/li>
&lt;li>Net Utilization (Bytes Receive/Transmit)&lt;/li>
&lt;li>Net Saturation (Drops Receive/Transmit)&lt;/li>
&lt;li>Disk I/O Utilization&lt;/li>
&lt;li>Disk I/O Saturation&lt;/li>
&lt;/ul>
&lt;p>You can import the dashboard directly using the following dashboard ID: &lt;strong>&lt;code>13971&lt;/code>&lt;/strong>&lt;/p>
&lt;p>You can also download the dashboard JSON directly &lt;a href="/api/dashboards/13978/revisions/1/download">here&lt;/a>.&lt;/p>
&lt;p>These dashboards were generated using the Node Exporter &lt;a href="https://github.com/prometheus/node_exporter/tree/master/docs/node-mixin" target="_blank" rel="noopener noreferrer">mixin&lt;/a>. They use the &lt;code>job=node&lt;/code> label selector to query metrics by default. If you need to use a different selector, modify the selector in &lt;a href="https://github.com/prometheus/node_exporter/blob/master/docs/node-mixin/config.libsonnet" target="_blank" rel="noopener noreferrer">config.libsonnet&lt;/a> and regenerate the dashboard following the instructions in the mixin repository.&lt;/p></description></item><item><title>Install</title><link>https://grafana.com</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://grafana.com</guid><description>&lt;h2 id="node-exporter-quickstart">Node exporter quickstart&lt;/h2>
&lt;p>In this guide you&amp;rsquo;ll learn how to set up and configure &lt;a href="https://github.com/prometheus/node_exporter" target="_blank" rel="noopener noreferrer">Node Exporter&lt;/a> to collect Linux system metrics like CPU load and disk I/O and expose them as Prometheus-style metrics. You&amp;rsquo;ll then configure &lt;a href="https://prometheus.io/" target="_blank" rel="noopener noreferrer">Prometheus&lt;/a> to scrape Node Exporter metrics and optionally ship them to Grafana Cloud. Finally, you&amp;rsquo;ll set up a preconfigured and curated set of &lt;a href="https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/" target="_blank" rel="noopener noreferrer">recording rules&lt;/a>, Grafana &lt;a href="/grafana/dashboards">dashboards&lt;/a>, and &lt;a href="https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/" target="_blank" rel="noopener noreferrer">alerting rules&lt;/a>. At the end of this guide you&amp;rsquo;ll have dashboards that you can use to visualize your Linux system metrics, and set of preconfigured alerts.&lt;/p>
&lt;p>If you&amp;rsquo;re using &lt;a href="/products/cloud/">Grafana Cloud&lt;/a>, the Linux Server Integration can help you get up and running quickly. The Linux Integration embeds Node Exporter into the &lt;a href="https://github.com/grafana/agent" target="_blank" rel="noopener noreferrer">Grafana Agent&lt;/a> and automatically provisions alerting rules and dashboards, so you don&amp;rsquo;t have to run through the steps in this guide. To learn how to set up Node Exporter using the Linux Server Integration, please see &lt;a href="/docs/grafana-cloud/quickstart/agent_linuxnode/#monitoring-a-linux-host-using-the-linux-host-integration">Monitoring a Linux host using the Linux host integration&lt;/a> from the Grafana Cloud docs.&lt;/p>
&lt;h3 id="prerequisites">Prerequisites&lt;/h3>
&lt;p>Before you get started, you should have the following available to you:&lt;/p>
&lt;ul>
&lt;li>A Linux machine compatible with a Node Exporter release. To see a list of available releases, please see &lt;a href="https://github.com/prometheus/node_exporter/releases/" target="_blank" rel="noopener noreferrer">Releases&lt;/a>.&lt;/li>
&lt;li>Prometheus running in your environment or directly on the Linux machine. To learn how to install Prometheus, please see &lt;a href="https://prometheus.io/docs/prometheus/latest/installation/" target="_blank" rel="noopener noreferrer">Installation&lt;/a> from the Prometheus docs.&lt;/li>
&lt;li>Grafana running in your environment or directly on the Linux machine. To learn how to install Grafana, please see &lt;a href="/docs/grafana/latest/installation/">Install Grafana&lt;/a> from the Grafana docs.&lt;/li>
&lt;li>(Optional) A Grafana Cloud account. Grafana Cloud hosts Grafana and a &lt;a href="/oss/mimir/">Mimir&lt;/a>-based Prometheus metrics endpoint. You will still need to scrape metrics, using either Prometheus installed in your environment, or the &lt;a href="https://github.com/grafana/agent" target="_blank" rel="noopener noreferrer">Grafana Agent&lt;/a>. To learn more about Grafana Cloud, please see &lt;a href="/products/cloud/?pg=oss-prom-node-exporter&amp;amp;plcmt=body-txt-installation">Grafana Cloud&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h3 id="step-1-setting-up-node-exporter">Step 1: Setting up Node Exporter&lt;/h3>
&lt;p>In this step you&amp;rsquo;ll set up Node Exporter on your Linux machine to collect and expose system metrics.&lt;/p>
&lt;p>To begin, log in to your machine and download the relevant Node Exporter binary. In this guide we&amp;rsquo;ll use &lt;code>linux-amd64&lt;/code> but you should choose the one corresponding to your system&amp;rsquo;s OS and architecture:&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">wget https://github.com/prometheus/node_exporter/releases/download/v1.1.1/node_exporter-1.1.1.linux-amd64.tar.gz&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>Replace &lt;code>1.1.1&lt;/code> with the version you&amp;rsquo;d like to install. This guide may become stale so it&amp;rsquo;s best to check the Node Exporter &lt;a href="https://github.com/prometheus/node_exporter/releases/" target="_blank" rel="noopener noreferrer">Releases&lt;/a> page for the latest stable version.&lt;/p>
&lt;p>Unzip the tarball and &lt;code>cd &lt;/code> into the directory:&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">tar xvfz node_exporter-*.*-amd64.tar.gz
cd node_exporter-*.*-amd64&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>Run the Node Exporter binary:&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">./node_exporter&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">level=info ts=2021-02-15T03:35:18.396Z caller=node_exporter.go:178 msg=&amp;#34;Starting node_exporter&amp;#34; version=&amp;#34;(version=1.1.1, branch=HEAD, revision=4e837d4da79cc59ee3ed1471ba9a0d9547e95540)&amp;#34;
level=info ts=2021-02-15T03:35:18.396Z caller=node_exporter.go:179 msg=&amp;#34;Build context&amp;#34; build_context=&amp;#34;(go=go1.15.8, user=root@7abcc101f1c2, date=20210213-13:30:54)&amp;#34;
level=warn ts=2021-02-15T03:35:18.396Z caller=node_exporter.go:181 msg=&amp;#34;Node Exporter is running as root user. This exporter is designed to run as unpriviledged user, root is not required.&amp;#34;
level=info ts=2021-02-15T03:35:18.397Z caller=filesystem_common.go:74 collector=filesystem msg=&amp;#34;Parsed flag --collector.filesystem.ignored-mount-points&amp;#34; flag=^/(dev|proc|sys|var/lib/docker/.&amp;#43;)($|/)
level=info ts=2021-02-15T03:35:18.397Z caller=filesystem_common.go:76 collector=filesystem msg=&amp;#34;Parsed flag --collector.filesystem.ignored-fs-types&amp;#34; 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=&amp;#34;Enabled collectors&amp;#34;
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=&amp;#34;Listening on&amp;#34; address=:9100
level=info ts=2021-02-15T03:38:01.468Z caller=tls_config.go:191 msg=&amp;#34;TLS is disabled.&amp;#34; http2=false&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>If you see the above output, you successfully ran Node Exporter.&lt;/p>
&lt;p>Node Exporter publishes your system metrics in Prometheus format on port &lt;code>9100&lt;/code>. You can test this using &lt;code>curl&lt;/code>. You will need to open a new SSH session or background the Node Exporter process to use &lt;code>curl&lt;/code>.&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">curl http://localhost:9100/metrics&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">. . .
process_virtual_memory_max_bytes 1.8446744073709552e&amp;#43;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=&amp;#34;encoding&amp;#34;} 0
promhttp_metric_handler_errors_total{cause=&amp;#34;gathering&amp;#34;} 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=&amp;#34;200&amp;#34;} 0
promhttp_metric_handler_requests_total{code=&amp;#34;500&amp;#34;} 0
promhttp_metric_handler_requests_total{code=&amp;#34;503&amp;#34;} 0&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>If you see the above output, you&amp;rsquo;re ready to begin scraping Node Exporter metrics using Prometheus.&lt;/p>
&lt;p>To avoid running and managing Node Exporter from the command line, you can create a &lt;code>systemd&lt;/code> service. To learn how to do this, please see &lt;a href="/docs/grafana-cloud/agent/agent_as_service/">Creating a systemd service to manage the agent&lt;/a>. Replace the path to the agent binary with the path to Node Exporter.&lt;/p>
&lt;h3 id="step-2-scraping-node-exporter-using-prometheus">Step 2: Scraping Node Exporter using Prometheus&lt;/h3>
&lt;p>Now that Node Exporter is up and running on your machine, you can configure a Prometheus scrape job to collect and store Node Exporter metrics.&lt;/p>
&lt;p>Add the following scrape job config to the &lt;code>scrape_configs&lt;/code> section of your &lt;code>prometheus.yml&lt;/code> configuration file:&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">- job_name: node
static_configs:
- targets: [&amp;#39;linux_machine_IP_address:9100&amp;#39;]&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>Replace &lt;code>linux_machine_IP_address&lt;/code> with the IP address of the machine running Node Exporter. If you&amp;rsquo;re running Prometheus on the same machine, this will be &lt;code>localhost&lt;/code>. To learn more about configuring Prometheus, please see &lt;a href="https://prometheus.io/docs/prometheus/latest/configuration/configuration/" target="_blank" rel="noopener noreferrer">Configuration&lt;/a> from the Prometheus docs.&lt;/p>
&lt;p>If you don&amp;rsquo;t have a &lt;code>prometheus.yml&lt;/code> configuration file, create a simple one using your favorite text editor. Open your preferred text editor and paste in the following Prometheus configuration:&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">global:
scrape_interval: 15s
scrape_configs:
- job_name: node
static_configs:
- targets: [&amp;#39;linux_machine_IP_address:9100&amp;#39;]&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>This configuration tells Prometheus to scrape all jobs every 15 seconds. The only configured scrape job is called &lt;code>node&lt;/code> and defines a &lt;code>linux_machine_IP_address:9100&lt;/code> target. By default, Prometheus will scrape the &lt;code>/metrics&lt;/code> endpoint using HTTP.&lt;/p>
&lt;p>Save and close the file. You can then run Prometheus with the file using the following command:&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">./prometheus --config.file=./prometheus.yml&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;h4 id="shipping-metrics-to-grafana-cloud">Shipping metrics to Grafana Cloud&lt;/h4>
&lt;p>To ship Node Exporter metrics to Grafana Cloud from Prometheus, configure the &lt;code>remote_write&lt;/code> parameter in your &lt;code>prometheus.yml&lt;/code> configuration file. To learn more, please see &lt;a href="/docs/grafana-cloud/metrics/prometheus/">Metrics — Prometheus&lt;/a> from the Grafana Cloud docs. To learn more about the &lt;code>remote_write&lt;/code> parameter, please see &lt;a href="https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write" target="_blank" rel="noopener noreferrer">&lt;code>remote_write&lt;/code>&lt;/a> from the Prometheus docs.&lt;/p>
&lt;h3 id="step-3-configuring-recording-rules">Step 3: Configuring recording rules&lt;/h3>
&lt;p>Using recording rules, you can precompute and cache frequently queried metrics. For example, if a dashboard panel uses a computationally intensive query like a &lt;code>rate()&lt;/code>, you can create a recording rule that runs at a regular reduced interval and saves the result of the intensive query in a new time series. This avoids fetching and computing data every time the dashboard gets refreshed. To learn more about Prometheus recording rules, please see &lt;a href="https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/" target="_blank" rel="noopener noreferrer">Recording Rules&lt;/a> from the Prometheus docs.&lt;/p>
&lt;p>&lt;strong>You should load the following recording rules before loading the dashboards in this guide.&lt;/strong> The dashboard queries use recording rules to reduce load on the Prometheus or Grafana Cloud Metrics servers, depending on where you&amp;rsquo;re evaluating the rules.&lt;/p>
&lt;p>You can fetch the recording rule YAML file &lt;a href="?tab=recording-rules">here&lt;/a>.&lt;/p>
&lt;h4 id="load-recording-rules-into-prometheus">Load recording rules into Prometheus&lt;/h4>
&lt;p>To load recording rules into Prometheus, add the following to your &lt;code>prometheus.yml&lt;/code> configuration file:&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">rule_files:
- &amp;#34;node_exporter_recording_rules.yml&amp;#34;&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>Be sure to replace &lt;code>node_exporter_recording_rules.yml&lt;/code> with the path to your Node Exporter recording rules YAML file.&lt;/p>
&lt;h4 id="load-recording-rules-into-grafana-cloud">Load recording rules into Grafana Cloud&lt;/h4>
&lt;p>To learn how to load recording rules into Grafana Cloud, please see &lt;a href="/docs/grafana-cloud/alerts/alerts-rules/#prometheus-and-loki-rules-with-cortextool">Prometheus and Loki rules with cortextool&lt;/a>.&lt;/p>
&lt;h3 id="step-4-configuring-dashboards">Step 4: Configuring dashboards&lt;/h3>
&lt;p>This quickstart includes the following three dashboards:&lt;/p>
&lt;ul>
&lt;li>Nodes Dashboard&lt;/li>
&lt;li>USE Method / Node Dashboard&lt;/li>
&lt;li>USE Method / Cluster Dashboard&lt;/li>
&lt;/ul>
&lt;p>To learn how to import these dashboards into Grafana, please see &lt;a href="/docs/grafana/latest/dashboards/export-import/#importing-a-dashboard">Importing a dashboard&lt;/a> from the Grafana docs.&lt;/p>
&lt;p>&lt;strong>The dashboard queries depend on the recording rules defined in the previous step. Be sure to import these before importing the dashboards.&lt;/strong>&lt;/p>
&lt;p>You can fetch the dashboards &lt;a href="?tab=dashboards">here&lt;/a>.&lt;/p>
&lt;h3 id="step-5-configuring-alerts">Step 5: Configuring alerts&lt;/h3>
&lt;p>With Prometheus alerting rules, you can define alerts that fire when PromQL expressions breach some threshold or satisfy specified conditions over a period of time. For example, you can define a &lt;code>HighRequestLatency&lt;/code> alert that fires when a request latency metric is greater than some threshold over a period of time. As soon as the alerting condition is triggered, the alert moves into &lt;code>Pending&lt;/code> state. After satisfying the condition for the period of time defined by the &lt;code>for&lt;/code> parameter, the alert moves into &lt;code>Firing&lt;/code> state. You can configure routing and notifications for firing alerts using a tool like &lt;a href="https://prometheus.io/docs/alerting/latest/alertmanager/" target="_blank" rel="noopener noreferrer">Alertmanager&lt;/a>. Alertmanager is also built-in to Grafana Cloud.&lt;/p>
&lt;p>You can fetch the alerting rule YAML file &lt;a href="?tab=alerting-rules">here&lt;/a>.&lt;/p>
&lt;h4 id="load-alerting-rules-into-prometheus">Load alerting rules into Prometheus&lt;/h4>
&lt;p>To load alerting rules into Prometheus, add the following to your &lt;code>prometheus.yml&lt;/code> configuration file:&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">rule_files:
- &amp;#34;node_exporter_alerting_rules.yml&amp;#34;&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>Be sure to replace &lt;code>node_exporter_alerting_rules.yml&lt;/code> with the path to your Node Exporter alerting rules YAML file.&lt;/p>
&lt;h4 id="load-alerting-rules-into-grafana-cloud">Load alerting rules into Grafana Cloud&lt;/h4>
&lt;p>To learn how to load alerting rules into Grafana Cloud, please see &lt;a href="/docs/grafana-cloud/alerts/alerts-rules/#prometheus-and-loki-rules-with-cortextool">Prometheus and Loki rules with cortextool&lt;/a>.&lt;/p>
&lt;h3 id="conclusion">Conclusion&lt;/h3>
&lt;p>In this quickstart you installed and ran Node Exporter on your Linux machine. You then configured Prometheus to scrape the system metrics exposed by Node Exporter. You loaded recording rules and alerting rules into Prometheus, and finally imported Grafana dashboards to visualize your Linux system metrics.&lt;/p>
&lt;p>If you&amp;rsquo;re using Grafana Cloud, you can skip all of the steps in this guide by installing the Linux Server integration with the Grafana Agent. This integration embeds a preconfigured Node Exporter into the agent and automatically provisions Grafana dashboards and Prometheus alerting and recording rules, so you don&amp;rsquo;t have to import them manually. To learn how to set up the Linux Server integration, please see &lt;a href="/docs/grafana-cloud/quickstart/agent_linuxnode/">Monitoring a Linux host using the Linux host integration&lt;/a>.&lt;/p>
&lt;p>The dashboards, recording rules, and alerting rules were generated using the Node Exporter Mixin. Mixins are reusable templates for dasboards, recording rules, and alerts curated and designed by subject matter experts. To learn more, please see the &lt;a href="https://github.com/prometheus/node_exporter/tree/master/docs/node-mixin" target="_blank" rel="noopener noreferrer">Node Mixin&lt;/a> repository.&lt;/p></description></item><item><title>Recording rules</title><link>https://grafana.com</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://grafana.com</guid><description>&lt;p>&lt;strong>You should load the following recording rules before loading the dashboards in this guide.&lt;/strong> The dashboard queries use recording rules to reduce load on the Prometheus or Grafana Cloud Metrics servers, depending on where you&amp;rsquo;re evaluating the rules.&lt;/p>
&lt;p>This quickstart includes the following recording rules:&lt;/p>
&lt;ul>
&lt;li>&lt;code>instance:node_num_cpu:sum&lt;/code>&lt;/li>
&lt;li>&lt;code>instance:node_cpu_utilisation:rate1m&lt;/code>&lt;/li>
&lt;li>&lt;code>instance:node_load1_per_cpu:ratio&lt;/code>&lt;/li>
&lt;li>&lt;code>instance:node_memory_utilisation:ratio&lt;/code>&lt;/li>
&lt;li>&lt;code>instance:node_vmstat_pgmajfault:rate1m&lt;/code>&lt;/li>
&lt;li>&lt;code>instance_device:node_disk_io_time_seconds:rate1m&lt;/code>&lt;/li>
&lt;li>&lt;code>instance_device:node_disk_io_time_weighted_seconds:rate1m&lt;/code>&lt;/li>
&lt;li>&lt;code>instance:node_network_receive_bytes_excluding_lo:rate1m&lt;/code>&lt;/li>
&lt;li>&lt;code>instance:node_network_transmit_bytes_excluding_lo:rate1m&lt;/code>&lt;/li>
&lt;li>&lt;code>instance:node_network_receive_drop_excluding_lo:rate1m&lt;/code>&lt;/li>
&lt;li>&lt;code>instance:node_network_transmit_drop_excluding_lo:rate1m&lt;/code>&lt;/li>
&lt;/ul>
&lt;a class="btn btn--primary br-5 mb-1" href="assets/node_rules.yaml" rel="noopener noreferrer">Download the following recording rules YAML file&lt;/a>
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">YAML&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-yaml">&amp;#34;groups&amp;#34;:
- &amp;#34;name&amp;#34;: &amp;#34;node-exporter.rules&amp;#34;
&amp;#34;rules&amp;#34;:
- &amp;#34;expr&amp;#34;: |
count without (cpu) (
count without (mode) (
node_cpu_seconds_total{job=&amp;#34;node&amp;#34;}
)
)
&amp;#34;record&amp;#34;: &amp;#34;instance:node_num_cpu:sum&amp;#34;
- &amp;#34;expr&amp;#34;: |
1 - avg without (cpu, mode) (
rate(node_cpu_seconds_total{job=&amp;#34;node&amp;#34;, mode=&amp;#34;idle&amp;#34;}[1m])
)
&amp;#34;record&amp;#34;: &amp;#34;instance:node_cpu_utilisation:rate1m&amp;#34;
- &amp;#34;expr&amp;#34;: |
(
node_load1{job=&amp;#34;node&amp;#34;}
/
instance:node_num_cpu:sum{job=&amp;#34;node&amp;#34;}
)
&amp;#34;record&amp;#34;: &amp;#34;instance:node_load1_per_cpu:ratio&amp;#34;
- &amp;#34;expr&amp;#34;: |
1 - (
node_memory_MemAvailable_bytes{job=&amp;#34;node&amp;#34;}
/
node_memory_MemTotal_bytes{job=&amp;#34;node&amp;#34;}
)
&amp;#34;record&amp;#34;: &amp;#34;instance:node_memory_utilisation:ratio&amp;#34;
- &amp;#34;expr&amp;#34;: |
rate(node_vmstat_pgmajfault{job=&amp;#34;node&amp;#34;}[1m])
&amp;#34;record&amp;#34;: &amp;#34;instance:node_vmstat_pgmajfault:rate1m&amp;#34;
- &amp;#34;expr&amp;#34;: |
rate(node_disk_io_time_seconds_total{job=&amp;#34;node&amp;#34;, device!=&amp;#34;&amp;#34;}[1m])
&amp;#34;record&amp;#34;: &amp;#34;instance_device:node_disk_io_time_seconds:rate1m&amp;#34;
- &amp;#34;expr&amp;#34;: |
rate(node_disk_io_time_weighted_seconds_total{job=&amp;#34;node&amp;#34;, device!=&amp;#34;&amp;#34;}[1m])
&amp;#34;record&amp;#34;: &amp;#34;instance_device:node_disk_io_time_weighted_seconds:rate1m&amp;#34;
- &amp;#34;expr&amp;#34;: |
sum without (device) (
rate(node_network_receive_bytes_total{job=&amp;#34;node&amp;#34;, device!=&amp;#34;lo&amp;#34;}[1m])
)
&amp;#34;record&amp;#34;: &amp;#34;instance:node_network_receive_bytes_excluding_lo:rate1m&amp;#34;
- &amp;#34;expr&amp;#34;: |
sum without (device) (
rate(node_network_transmit_bytes_total{job=&amp;#34;node&amp;#34;, device!=&amp;#34;lo&amp;#34;}[1m])
)
&amp;#34;record&amp;#34;: &amp;#34;instance:node_network_transmit_bytes_excluding_lo:rate1m&amp;#34;
- &amp;#34;expr&amp;#34;: |
sum without (device) (
rate(node_network_receive_drop_total{job=&amp;#34;node&amp;#34;, device!=&amp;#34;lo&amp;#34;}[1m])
)
&amp;#34;record&amp;#34;: &amp;#34;instance:node_network_receive_drop_excluding_lo:rate1m&amp;#34;
- &amp;#34;expr&amp;#34;: |
sum without (device) (
rate(node_network_transmit_drop_total{job=&amp;#34;node&amp;#34;, device!=&amp;#34;lo&amp;#34;}[1m])
)
&amp;#34;record&amp;#34;: &amp;#34;instance:node_network_transmit_drop_excluding_lo:rate1m&amp;#34;&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>This recording rule YAML file was generated using the Node Exporter &lt;a href="https://github.com/prometheus/node_exporter/tree/master/docs/node-mixin" target="_blank" rel="noopener noreferrer">mixin&lt;/a>. It uses the &lt;code>job=node&lt;/code> label selector to query metrics by default. If you need to use a different selector, modify the selector in &lt;a href="https://github.com/prometheus/node_exporter/blob/master/docs/node-mixin/config.libsonnet" target="_blank" rel="noopener noreferrer">config.libsonnet&lt;/a> and regenerate the dashboard following the instructions in the mixin repository.&lt;/p></description></item></channel></rss>