{"id":75277,"date":"2026-04-29T08:12:32","date_gmt":"2026-04-29T08:12:32","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=75277"},"modified":"2026-04-29T08:12:34","modified_gmt":"2026-04-29T08:12:34","slug":"grafana-13-x-recording-rules-lab-manual-with-graphite","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/grafana-13-x-recording-rules-lab-manual-with-graphite\/","title":{"rendered":"Grafana 13.x Recording Rules Lab Manual with Graphite"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Using Graphite + Telegraf Linux Metrics<\/h2>\n\n\n\n<p>You are on the correct screen now: <strong>Alerting \u2192 Alert rules \u2192 New recording rule<\/strong>.<\/p>\n\n\n\n<p>But one important point first: <strong>Grafana recording rules are not stored back into Graphite.<\/strong> In Grafana 13, a Grafana-managed recording rule can read from a supported data source such as Graphite, but the recorded result must be written into a <strong>Prometheus-compatible data source<\/strong>. Grafana does not include its own time-series database for recording rule output. (<a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/alerting\/alerting-rules\/create-recording-rules\/create-grafana-managed-recording-rules\/\">Grafana Labs<\/a>)<\/p>\n\n\n\n<p>Your Graphite data is valid for this lab. The real metric prefix is:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span>.*\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The uploaded metric output also confirms that <code>servers.*<\/code> returns empty, so this lab will not use <code>servers.*<\/code>. It will only use the real captured Telegraf metrics from Graphite.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. What is a Grafana Recording Rule?<\/h1>\n\n\n\n<p>A <strong>recording rule<\/strong> pre-calculates a query result and saves it as a new metric.<\/p>\n\n\n\n<p>Example:<\/p>\n\n\n\n<p>Instead of repeatedly querying this Graphite metric:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Grafana can evaluate it every 1 minute and store the result as a new Prometheus-style metric:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">linux_cpu_usage_active_percent\n<\/code><\/span><\/pre>\n\n\n<p>Then dashboards and alerts can query the new recorded metric.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Simple explanation for students<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Normal dashboard query:\nGrafana asks Graphite every time the dashboard loads.\n\nRecording rule:\nGrafana runs the query on schedule and stores the result <span class=\"hljs-keyword\">as<\/span> a <span class=\"hljs-keyword\">new<\/span> metric.\n\nAlert rule:\nGrafana checks a metric and fires an alert when a condition is <span class=\"hljs-literal\">true<\/span>.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Very Important: Recording Rule vs Alert Rule<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Option<\/th><th>Purpose<\/th><th>Use in this lab?<\/th><\/tr><\/thead><tbody><tr><td><strong>New alert rule<\/strong><\/td><td>Creates alert condition like CPU &gt; 90%<\/td><td>Yes<\/td><\/tr><tr><td><strong>New recording rule<\/strong><\/td><td>Creates a new precomputed metric<\/td><td>Yes, for this lab<\/td><\/tr><tr><td><strong>New recording rule with CloudWatch<\/strong><\/td><td>Not for your Graphite lab<\/td><td>No<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>In your screenshot, the query section currently shows <strong>CloudWatch<\/strong>. That is why you see an error about CloudWatch statistics. For this lab, students must select the <strong>Graphite data source<\/strong> as the query source.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Architecture for This Recording Rule Lab<\/h1>\n\n\n\n<p>The flow should be explained like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Telegraf\n   \u2193\nGraphite\n   \u2193\nGrafana recording rule reads Graphite metric\n   \u2193\nGrafana writes recorded result into Prometheus-compatible data source\n   \u2193\nDashboard <span class=\"hljs-keyword\">and<\/span> alert can <span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">the<\/span> <span class=\"hljs-title\">recorded<\/span> <span class=\"hljs-title\">metric<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>So we need two Grafana data sources:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-number\">1.<\/span> Graphite\n   Used <span class=\"hljs-keyword\">as<\/span> the source query data source.\n\n<span class=\"hljs-number\">2.<\/span> Prometheus-compatible data source\n   Used <span class=\"hljs-keyword\">as<\/span> the target data source to store recording rule output.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Grafana documentation says Grafana-managed recording rules can query alerting-supported data sources, but the result must be stored in a Prometheus-compatible database. (<a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/alerting\/alerting-rules\/create-recording-rules\/create-grafana-managed-recording-rules\/\">Grafana Labs<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Prerequisites for Students<\/h1>\n\n\n\n<p>Before starting this lab, students should already have:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Grafana<\/span> 13<span class=\"hljs-selector-class\">.x<\/span> <span class=\"hljs-selector-tag\">running<\/span> <span class=\"hljs-selector-tag\">on<\/span> <span class=\"hljs-selector-tag\">port<\/span> 3000\n<span class=\"hljs-selector-tag\">Graphite<\/span> <span class=\"hljs-selector-tag\">running<\/span> <span class=\"hljs-selector-tag\">on<\/span> <span class=\"hljs-selector-tag\">port<\/span> 8080\n<span class=\"hljs-selector-tag\">Telegraf<\/span> <span class=\"hljs-selector-tag\">sending<\/span> <span class=\"hljs-selector-tag\">Linux<\/span> <span class=\"hljs-selector-tag\">metrics<\/span> <span class=\"hljs-selector-tag\">to<\/span> <span class=\"hljs-selector-tag\">Graphite<\/span>\n<span class=\"hljs-selector-tag\">Graphite<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span> <span class=\"hljs-selector-tag\">added<\/span> <span class=\"hljs-selector-tag\">in<\/span> <span class=\"hljs-selector-tag\">Grafana<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Current valid Graphite metrics include:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span>.*\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.mem<\/span>.*\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.disk<\/span>.*\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.diskio<\/span>.*\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.net<\/span>.*\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.kernel<\/span>.*\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.processes<\/span>.*\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.swap<\/span>.*\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.system<\/span>.*\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Do not use:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">servers.*\n<\/code><\/span><\/pre>\n\n\n<p>Do not use <code>.wsp<\/code> in Grafana queries.<\/p>\n\n\n\n<p>Correct:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Wrong:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span><span class=\"hljs-selector-class\">.wsp<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Add a Prometheus-Compatible Target for Recording Rules<\/h1>\n\n\n\n<p>If your <strong>Target data source<\/strong> dropdown is empty or does not show a Prometheus-compatible data source, you need to add one.<\/p>\n\n\n\n<p>For a classroom lab, the simplest option is to run a small Prometheus container as the recording-rule target.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Create a Prometheus config file<\/h2>\n\n\n\n<p>On the Linux VM, run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">mkdir -p ~\/prometheus-recording-lab\ncd ~\/prometheus-recording-lab\n<\/code><\/span><\/pre>\n\n\n<p>Create a file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; prometheus.yml &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-keyword\">global<\/span>:\n  scrape_interval: <span class=\"hljs-number\">15<\/span>s\n  evaluation_interval: <span class=\"hljs-number\">15<\/span>s\n\nscrape_configs:\n  - job_name: prometheus\n    static_configs:\n      - targets: &#91;<span class=\"hljs-string\">\"localhost:9090\"<\/span>]\nEOF\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 2: Start Prometheus container<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker run -d \\\n  --name prometheus-recording \\\n  --restart unless-stopped \\\n  -p <span class=\"hljs-number\">9090<\/span>:<span class=\"hljs-number\">9090<\/span> \\\n  -v ~<span class=\"hljs-regexp\">\/prometheus-recording-lab\/<\/span>prometheus.yml:<span class=\"hljs-regexp\">\/etc\/<\/span>prometheus\/prometheus.yml \\\n  prom\/prometheus:latest \\\n  --config.file=<span class=\"hljs-regexp\">\/etc\/<\/span>prometheus\/prometheus.yml \\\n  --web.enable-remote-write-receiver \\\n  --web.enable-lifecycle\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Prometheus can receive remote-write data when the remote write receiver is enabled, and its receiver endpoint is <code>\/api\/v1\/write<\/code>. (<a href=\"https:\/\/prometheus.io\/docs\/prometheus\/latest\/querying\/api\/?utm_source=chatgpt.com\">Prometheus<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Verify Prometheus is running<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker ps\n<\/code><\/span><\/pre>\n\n\n<p>Expected container:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">prometheus-recording\n<\/code><\/span><\/pre>\n\n\n<p>Test from the Linux VM:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">curl <span class=\"hljs-string\">\"http:\/\/localhost:9090\/-\/ready\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Prometheus Server is Ready.\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Add Prometheus as a Grafana Data Source<\/h1>\n\n\n\n<p>In Grafana 13.x left menu:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Connections \u2192 Add <span class=\"hljs-keyword\">new<\/span> connection\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Search:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Prometheus\n<\/code><\/span><\/pre>\n\n\n<p>Click:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Add <span class=\"hljs-keyword\">new<\/span> data source\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Use this name:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">prometheus-recording\n<\/code><\/span><\/pre>\n\n\n<p>Use this URL if Grafana is installed directly on the same VM:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">http:<span class=\"hljs-comment\">\/\/localhost:9090<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If Grafana is running inside Docker, <code>localhost<\/code> may not work because it points to the Grafana container itself. In that case, use the VM private IP, public IP, or Docker network name.<\/p>\n\n\n\n<p>Click:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Save &amp; test\n<\/code><\/span><\/pre>\n\n\n<p>Expected result:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Successfully queried the Prometheus API.\n<\/code><\/span><\/pre>\n\n\n<p>In Prometheus data source settings, Grafana has an alerting option called <strong>Allow as recording rules target<\/strong>, which allows that data source to appear as a target when creating Grafana-managed recording rules. (<a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/datasources\/prometheus\/configure\/\">Grafana Labs<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Verify Graphite Query Before Creating Recording Rule<\/h1>\n\n\n\n<p>Before creating recording rules, students should test the Graphite query.<\/p>\n\n\n\n<p>In Grafana:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Explore\n<\/code><\/span><\/pre>\n\n\n<p>Select data source:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Graphite\n<\/code><\/span><\/pre>\n\n\n<p>Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If data appears, the query is correct.<\/p>\n\n\n\n<p>Also test:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.mem<\/span><span class=\"hljs-selector-class\">.used_percent<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.disk<\/span><span class=\"hljs-selector-class\">.used_percent<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Create First Recording Rule: CPU Usage<\/h1>\n\n\n\n<p>Now go to:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Alerting \u2192 Alert rules \u2192 <span class=\"hljs-keyword\">New<\/span> recording rule\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Your screen has these main sections:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-number\">1.<\/span> Enter recording rule and metric name\n<span class=\"hljs-number\">2.<\/span> Define recording rule\n<span class=\"hljs-number\">3.<\/span> Add folder and labels\n<span class=\"hljs-number\">4.<\/span> <span class=\"hljs-built_in\">Set<\/span> evaluation behavior\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Section 1: Enter Recording Rule and Metric Name<\/h2>\n\n\n\n<p>Fill the fields like this:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Name<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">record_cpu_usage_active_percent\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Metric<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">linux_cpu_usage_active_percent\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Target data source<\/h3>\n\n\n\n<p>Select:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">prometheus-recording\n<\/code><\/span><\/pre>\n\n\n<p>Important: the metric name must follow Prometheus metric naming style and must not contain spaces. Grafana\u2019s recording rule documentation also says the metric name must be a Prometheus metric name with no whitespace. (<a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/alerting\/alerting-rules\/create-recording-rules\/create-grafana-managed-recording-rules\/\">Grafana Labs<\/a>)<\/p>\n\n\n\n<p>Do not use dots in the recorded metric name.<\/p>\n\n\n\n<p>Wrong:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">linux<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage<\/span><span class=\"hljs-selector-class\">.active<\/span><span class=\"hljs-selector-class\">.percent<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Correct:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">linux_cpu_usage_active_percent\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Section 2: Define Recording Rule<\/h2>\n\n\n\n<p>In the query area, change the data source from CloudWatch to:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Graphite\n<\/code><\/span><\/pre>\n\n\n<p>Use this Graphite query:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Set time range:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">10m to now\n<\/code><\/span><\/pre>\n\n\n<p>Click:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Run queries\n<\/code><\/span><\/pre>\n\n\n<p>You should see data in the preview graph.<\/p>\n\n\n\n<p>Now add an expression:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Add expression \u2192 Reduce\n<\/code><\/span><\/pre>\n\n\n<p>Set:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Input<\/span>: A\n<span class=\"hljs-attribute\">Function<\/span>: Last\n<span class=\"hljs-attribute\">Mode<\/span>: Strict\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Click:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Preview\n<\/code><\/span><\/pre>\n\n\n<p>Then click:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-built_in\">Set<\/span> <span class=\"hljs-keyword\">as<\/span> recording rule output\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Use the <strong>Reduce output<\/strong> as the recording rule output.<\/p>\n\n\n\n<p>Why Reduce? Because Graphite returns a time series. The recording rule should store a clean value at every evaluation interval.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Section 3: Add Folder and Labels<\/h2>\n\n\n\n<p>Folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Linux Monitoring Lab\n<\/code><\/span><\/pre>\n\n\n<p>If it does not exist, click:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">New<\/span> folder\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Add labels:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">source = graphite\nhost = linux-demo\ncollector = telegraf\nlab = grafana13\n<\/code><\/span><\/pre>\n\n\n<p>Labels help students search, filter, and organize rules.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Section 4: Set Evaluation Behavior<\/h2>\n\n\n\n<p>Create or select evaluation group:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">graphite-recording-rules-1m\n<\/code><\/span><\/pre>\n\n\n<p>Evaluation interval:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">1m\n<\/code><\/span><\/pre>\n\n\n<p>This means Grafana will run the recording rule every 1 minute.<\/p>\n\n\n\n<p>Click:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Save rule\n<\/code><\/span><\/pre>\n\n\n<p>or:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Save rule <span class=\"hljs-keyword\">and<\/span> <span class=\"hljs-keyword\">exit<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Verify the Recorded Metric<\/h1>\n\n\n\n<p>Wait 1\u20132 minutes.<\/p>\n\n\n\n<p>Go to:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Explore\n<\/code><\/span><\/pre>\n\n\n<p>Select data source:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">prometheus-recording\n<\/code><\/span><\/pre>\n\n\n<p>Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">linux_cpu_usage_active_percent\n<\/code><\/span><\/pre>\n\n\n<p>If labels were added, you can also query:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_cpu_usage_active_percent{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Expected result:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">A <span class=\"hljs-keyword\">new<\/span> Prometheus-style metric appears.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This metric was created from the original Graphite metric:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Required Recording Rules for Student Lab<\/h1>\n\n\n\n<p>Create these recording rules one by one. They only use the real Graphite metrics captured in your environment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 1: CPU Active Usage<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_cpu_usage_active_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_cpu_usage_active_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-30\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 2: Memory Used Percent<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-31\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_memory_used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_memory_used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.mem<\/span><span class=\"hljs-selector-class\">.used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-31\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 3: Disk Used Percent<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_disk_used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_disk_used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.disk<\/span><span class=\"hljs-selector-class\">.used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 4: Disk Inodes Used Percent<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-33\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_disk_inodes_used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_disk_inodes_used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.disk<\/span><span class=\"hljs-selector-class\">.inodes_used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-33\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 5: Swap Used Percent<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-34\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_swap_used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_swap_used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.swap<\/span><span class=\"hljs-selector-class\">.used_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-34\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 6: System Load 1 Minute<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-35\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_system_load1<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_system_load1<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.system<\/span><span class=\"hljs-selector-class\">.load1<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-35\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 7: Running Processes<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-36\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_processes_running<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_processes_running<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.processes<\/span><span class=\"hljs-selector-class\">.running<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-36\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 8: Zombie Processes<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-37\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_processes_zombies<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_processes_zombies<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.processes<\/span><span class=\"hljs-selector-class\">.zombies<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-37\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 9: Blocked Processes<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-38\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_processes_blocked<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_processes_blocked<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.processes<\/span><span class=\"hljs-selector-class\">.blocked<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-38\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 10: Disk I\/O Utilization<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-39\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_diskio_util_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_diskio_util_percent<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.diskio<\/span><span class=\"hljs-selector-class\">.io_util<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-39\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 11: Network Receive Bytes per Second<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-40\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_network_receive_bytes_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_network_receive_bytes_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">perSecond<\/span>(<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.net<\/span><span class=\"hljs-selector-class\">.bytes_recv<\/span>)\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-40\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 12: Network Transmit Bytes per Second<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-41\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_network_transmit_bytes_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_network_transmit_bytes_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">perSecond<\/span>(<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.net<\/span><span class=\"hljs-selector-class\">.bytes_sent<\/span>)\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-41\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 13: Disk Read Bytes per Second<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-42\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_disk_read_bytes_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_disk_read_bytes_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">perSecond<\/span>(<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.diskio<\/span><span class=\"hljs-selector-class\">.read_bytes<\/span>)\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-42\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 14: Disk Write Bytes per Second<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-43\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_disk_write_bytes_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_disk_write_bytes_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">perSecond<\/span>(<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.diskio<\/span><span class=\"hljs-selector-class\">.write_bytes<\/span>)\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-43\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 15: Network Input Errors<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-44\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_network_input_errors<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_network_input_errors<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.net<\/span><span class=\"hljs-selector-class\">.err_in<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-44\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 16: Network Output Errors<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-45\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_network_output_errors<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_network_output_errors<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.net<\/span><span class=\"hljs-selector-class\">.err_out<\/span>\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-45\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Rule 17: Kernel Context Switches per Second<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-46\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Name<\/span>:\n<span class=\"hljs-selector-tag\">record_kernel_context_switches_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Metric<\/span>:\n<span class=\"hljs-selector-tag\">linux_kernel_context_switches_per_second<\/span>\n\n<span class=\"hljs-selector-tag\">Source<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">Graphite<\/span>\n\n<span class=\"hljs-selector-tag\">Query<\/span>:\n<span class=\"hljs-selector-tag\">perSecond<\/span>(<span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.kernel<\/span><span class=\"hljs-selector-class\">.context_switches<\/span>)\n\n<span class=\"hljs-selector-tag\">Expression<\/span>:\n<span class=\"hljs-selector-tag\">Reduce<\/span> \u2192 <span class=\"hljs-selector-tag\">Last<\/span>\n\n<span class=\"hljs-selector-tag\">Target<\/span> <span class=\"hljs-selector-tag\">data<\/span> <span class=\"hljs-selector-tag\">source<\/span>:\n<span class=\"hljs-selector-tag\">prometheus-recording<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-46\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Recommended Student Practice Sequence<\/h1>\n\n\n\n<p>Do not ask students to create all rules immediately. Use this classroom sequence:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beginner Practice<\/h2>\n\n\n\n<p>Create only these 5 recording rules:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">linux_cpu_usage_active_percent\nlinux_memory_used_percent\nlinux_disk_used_percent\nlinux_system_load1\nlinux_processes_zombies\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Intermediate Practice<\/h2>\n\n\n\n<p>Add these:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">linux_swap_used_percent\nlinux_diskio_util_percent\nlinux_network_receive_bytes_per_second\nlinux_network_transmit_bytes_per_second\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Advanced Practice<\/h2>\n\n\n\n<p>Add these:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">linux_disk_read_bytes_per_second\nlinux_disk_write_bytes_per_second\nlinux_network_input_errors\nlinux_network_output_errors\nlinux_kernel_context_switches_per_second\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Create Dashboard Panels from Recorded Metrics<\/h1>\n\n\n\n<p>After recording rules are working, create a new dashboard.<\/p>\n\n\n\n<p>Go to:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-47\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Dashboards \u2192 <span class=\"hljs-keyword\">New<\/span> \u2192 <span class=\"hljs-keyword\">New<\/span> dashboard \u2192 Add visualization\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-47\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Select data source:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">prometheus-recording\n<\/code><\/span><\/pre>\n\n\n<p>Now use the recorded metrics, not Graphite.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Panel 1: Recorded CPU Usage<\/h2>\n\n\n\n<p>Panel title:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Recorded CPU Usage %\n<\/code><\/span><\/pre>\n\n\n<p>Query:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-48\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_cpu_usage_active_percent{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-48\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Visualization:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Stat\n<\/code><\/span><\/pre>\n\n\n<p>Unit:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Percent\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Panel 2: Recorded Memory Usage<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-49\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_memory_used_percent{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-49\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Visualization:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Gauge\n<\/code><\/span><\/pre>\n\n\n<p>Unit:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Percent\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Panel 3: Recorded Disk Usage<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-50\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_disk_used_percent{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-50\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Visualization:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Gauge\n<\/code><\/span><\/pre>\n\n\n<p>Unit:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Percent\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Panel 4: Recorded System Load<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-51\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_system_load1{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-51\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Visualization:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Time series\n<\/code><\/span><\/pre>\n\n\n<p>Unit:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">None\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Panel 5: Recorded Network Traffic<\/h2>\n\n\n\n<p>Queries:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-52\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_network_receive_bytes_per_second{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\nlinux_network_transmit_bytes_per_second{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-52\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Visualization:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Time series\n<\/code><\/span><\/pre>\n\n\n<p>Unit:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Bytes\/sec\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Create Alerts from Recorded Metrics<\/h1>\n\n\n\n<p>Now students can create alert rules using the <strong>recorded metrics<\/strong>.<\/p>\n\n\n\n<p>Go to:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-53\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Alerting \u2192 Alert rules \u2192 <span class=\"hljs-keyword\">New<\/span> alert rule\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-53\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This time use <strong>New alert rule<\/strong>, not New recording rule.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Alert 1: High Recorded CPU Usage<\/h2>\n\n\n\n<p>Name:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">High CPU Usage - Recorded\n<\/code><\/span><\/pre>\n\n\n<p>Data source:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">prometheus-recording\n<\/code><\/span><\/pre>\n\n\n<p>Query:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-54\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_cpu_usage_active_percent{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-54\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Condition:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">WHEN Last OF QUERY IS ABOVE 90\n<\/code><\/span><\/pre>\n\n\n<p>Evaluate every:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">1m\n<\/code><\/span><\/pre>\n\n\n<p>Pending period:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">5m\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Alert 2: High Recorded Memory Usage<\/h2>\n\n\n\n<p>Query:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-55\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_memory_used_percent{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-55\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Condition:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">IS ABOVE 90\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Alert 3: High Recorded Disk Usage<\/h2>\n\n\n\n<p>Query:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-56\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_disk_used_percent{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-56\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Condition:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">IS ABOVE 90\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Alert 4: Zombie Processes Detected<\/h2>\n\n\n\n<p>Query:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-57\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_processes_zombies{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-57\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Condition:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">IS ABOVE 0\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Alert 5: Network Input Errors<\/h2>\n\n\n\n<p>Query:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-58\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">linux_network_input_errors{host=<span class=\"hljs-string\">\"linux-demo\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-58\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Condition:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">IS ABOVE 0\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. Why Your Screenshot Shows an Error<\/h1>\n\n\n\n<p>Your screenshot shows this error:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">query must have either statistic or statistics field\n<\/code><\/span><\/pre>\n\n\n<p>That error is from <strong>CloudWatch<\/strong>, not Graphite.<\/p>\n\n\n\n<p>It happened because the query data source is currently set to:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cloudwatch\n<\/code><\/span><\/pre>\n\n\n<p>For this lab, change it to:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Graphite\n<\/code><\/span><\/pre>\n\n\n<p>Then use a Graphite metric such as:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-59\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-59\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Also make sure the <strong>Target data source<\/strong> at the top is:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">prometheus-recording\n<\/code><\/span><\/pre>\n\n\n<p>Not CloudWatch.<\/p>\n\n\n\n<p>Not Graphite.<\/p>\n\n\n\n<p>The target is where Grafana stores the newly recorded metric.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. Troubleshooting Guide<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: Target data source dropdown is empty<\/h2>\n\n\n\n<p>Reason:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-60\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">No Prometheus-compatible data source is available <span class=\"hljs-keyword\">as<\/span> recording-rule target.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-60\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Fix:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-61\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Add Prometheus <span class=\"hljs-keyword\">as<\/span> a data source.\nEnable or keep enabled: Allow <span class=\"hljs-keyword\">as<\/span> recording rules target.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-61\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: Graphite does not appear in query data source<\/h2>\n\n\n\n<p>Reason:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-62\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Graphite data source may not be configured or may not support alerting <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-keyword\">this<\/span> Grafana setup.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-62\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Fix:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Connections \u2192 Data sources \u2192 Graphite \u2192 Save &amp; test\n<\/code><\/span><\/pre>\n\n\n<p>Then try again.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: Rule saves but metric does not appear<\/h2>\n\n\n\n<p>Wait:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">1 to 2 minutes\n<\/code><\/span><\/pre>\n\n\n<p>Then query in Explore using Prometheus:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">linux_cpu_usage_active_percent\n<\/code><\/span><\/pre>\n\n\n<p>Also check:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Alerting \u2192 Alert rules\n<\/code><\/span><\/pre>\n\n\n<p>Make sure the rule is not paused.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: Student used <code>.wsp<\/code><\/h2>\n\n\n\n<p>Wrong:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-63\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span><span class=\"hljs-selector-class\">.wsp<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-63\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Correct:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-64\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-64\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: Student used <code>servers.*<\/code><\/h2>\n\n\n\n<p>Wrong:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-65\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">servers<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-65\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Correct:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-66\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">telegraf<\/span><span class=\"hljs-selector-class\">.linux-demo<\/span><span class=\"hljs-selector-class\">.cpu<\/span><span class=\"hljs-selector-class\">.usage_active<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-66\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Reason:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Your Graphite data does not contain servers.* metrics.\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. Final Student Lab Summary<\/h1>\n\n\n\n<p>By the end of this lab, students should understand:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-67\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-number\">1.<\/span> Graphite stores the original Telegraf Linux metrics.\n<span class=\"hljs-number\">2.<\/span> Grafana recording rules can read Graphite metrics.\n<span class=\"hljs-number\">3.<\/span> Recording rule output must be stored <span class=\"hljs-keyword\">in<\/span> a Prometheus-compatible data source.\n<span class=\"hljs-number\">4.<\/span> The recorded metric name must use Prometheus-style naming.\n<span class=\"hljs-number\">5.<\/span> Dashboards and alerts can use the <span class=\"hljs-keyword\">new<\/span> recorded metric.\n<span class=\"hljs-number\">6.<\/span> Recording rules are useful <span class=\"hljs-keyword\">for<\/span> frequently used or expensive queries.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-67\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Most important classroom rule:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-68\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Source query:\nUse real Graphite metrics <span class=\"hljs-keyword\">from<\/span> telegraf.linux-demo.*\n\nTarget output:\nStore <span class=\"hljs-keyword\">as<\/span> Prometheus-style metrics such <span class=\"hljs-keyword\">as<\/span> linux_cpu_usage_active_percent\n\nNever use:\nservers.*\n\nNever include:\n.wsp\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-68\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>","protected":false},"excerpt":{"rendered":"<p>Using Graphite + Telegraf Linux Metrics You are on the correct screen now: Alerting \u2192 Alert rules \u2192 New recording rule. But one important point first: Grafana&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-75277","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/75277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=75277"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/75277\/revisions"}],"predecessor-version":[{"id":75278,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/75277\/revisions\/75278"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=75277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=75277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=75277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}