{"id":22351,"date":"2021-07-12T08:48:01","date_gmt":"2021-07-12T08:48:01","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=22351"},"modified":"2021-10-01T10:24:54","modified_gmt":"2021-10-01T10:24:54","slug":"prometheus-promql-example-query-node-exporter","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/prometheus-promql-example-query-node-exporter\/","title":{"rendered":"Prometheus PromQL Example Query: node exporter"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Example PromQL for Prometheus Server<\/h2>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">prometheus_http_requests_total\r\nprometheus_http_requests_total{job=<span class=\"hljs-string\">\"prometheus\"<\/span>,group=<span class=\"hljs-string\">\"canary\"<\/span>}\r\nprometheus_http_requests_total{environment=~<span class=\"hljs-string\">\"staging|testing|development\"<\/span>,method!=<span class=\"hljs-string\">\"GET\"<\/span>}\r\nprometheus_http_requests_total{job=~<span class=\"hljs-string\">\".*\"<\/span>} <span class=\"hljs-comment\"># Bad!<\/span>\r\nprometheus_http_requests_total{job=~<span class=\"hljs-string\">\".+\"<\/span>} <span class=\"hljs-comment\"># Good!<\/span>\r\nprometheus_http_requests_total{job=~<span class=\"hljs-string\">\".*\"<\/span>,method=<span class=\"hljs-string\">\"get\"<\/span>} <span class=\"hljs-comment\"># Good!<\/span>\r\nprometheus_http_requests_total&#91;<span class=\"hljs-number\">5<\/span>m]\r\nprometheus_http_requests_total{job=<span class=\"hljs-string\">\"prometheus\"<\/span>,group=<span class=\"hljs-string\">\"canary\"<\/span>}&#91;<span class=\"hljs-number\">2<\/span>h]\r\nprometheus_http_requests_total{environment=~<span class=\"hljs-string\">\"staging|testing|development\"<\/span>,method!=<span class=\"hljs-string\">\"GET\"<\/span>}&#91;<span class=\"hljs-number\">60<\/span>m]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><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\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Prometheus PromQL Example Query: node exporter<\/h2>\n\n\n\n<p>Metrics specific to the Node Exporter are prefixed with node_ and include metrics like node_cpu_seconds_total and node_exporter_build_info.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table><thead><tr><th>Metric<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td>rate(node_cpu_seconds_total{mode=&#8221;system&#8221;}[1m])<\/td><td>The average amount of CPU time spent in system mode, per second, over the last minute (in seconds)<\/td><\/tr><tr><td>node_filesystem_avail_bytes<\/td><td>The filesystem space available to non-root users (in bytes)<\/td><\/tr><tr><td>rate(node_network_receive_bytes_total[1m])<\/td><td>The average network traffic received, per second, over the last minute (in bytes)<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Modern CPUs don<span class=\"hljs-string\">'t run at one constant frequency.\n\nTo save power CPUs can reduce the frequency they run at, which is quite useful for battery based devices like laptops. So while CPU metrics give you the proportion of time in each mode, one second of user time isn'<\/span>t always represent same amount of work <span class=\"hljs-keyword\">as<\/span> another second of user time. This can be a problem when running benchmarks.\n\nLinux provides information about this under \/sys\/devices\/system\/cpu<span class=\"hljs-comment\">\/*\/cpufreq\/, and on my desktop the node exporter produces:\n\n# HELP node_cpu_frequency_max_hertz Maximum cpu thread frequency in hertz.\n# TYPE node_cpu_frequency_max_hertz gauge\nnode_cpu_frequency_max_hertz{cpu=\"0\"} 3.4e+09\nnode_cpu_frequency_max_hertz{cpu=\"1\"} 3.4e+09\n\n# HELP node_cpu_frequency_min_hertz Minimum cpu thread frequency in hertz.\n# TYPE node_cpu_frequency_min_hertz gauge\nnode_cpu_frequency_min_hertz{cpu=\"0\"} 1.6e+09\nnode_cpu_frequency_min_hertz{cpu=\"1\"} 1.6e+09\n\n# HELP node_cpu_scaling_frequency_hertz Current scaled cpu thread frequency in hertz.\n# TYPE node_cpu_scaling_frequency_hertz gauge\nnode_cpu_scaling_frequency_hertz{cpu=\"0\"} 2.352192e+09\nnode_cpu_scaling_frequency_hertz{cpu=\"1\"} 2.243048e+09\n\n# HELP node_cpu_scaling_frequency_max_hertz Maximum scaled cpu thread frequency in hertz.\n# TYPE node_cpu_scaling_frequency_max_hertz gauge\nnode_cpu_scaling_frequency_max_hertz{cpu=\"0\"} 3.4e+09\nnode_cpu_scaling_frequency_max_hertz{cpu=\"1\"} 3.4e+09\n\n# HELP node_cpu_scaling_frequency_min_hertz Minimum scaled cpu thread frequency in hertz.\n# TYPE node_cpu_scaling_frequency_min_hertz gauge\nnode_cpu_scaling_frequency_min_hertz{cpu=\"0\"} 1.6e+09\nnode_cpu_scaling_frequency_min_hertz{cpu=\"1\"} 1.6e+09\n\n# Linux provides scheduling metrics in \/proc\/schedstat, which the node exporter uses.\n# The node exporter current exposes three of these:\n\n# HELP node_schedstat_running_seconds_total Number of seconds CPU spent running a process.\n# TYPE node_schedstat_running_seconds_total counter\nnode_schedstat_running_seconds_total{cpu=\"0\"} 1.093032217430793e+06\nnode_schedstat_running_seconds_total{cpu=\"1\"} 1.07527722232456e+06\n\n# HELP node_schedstat_timeslices_total Number of timeslices executed by CPU.\n# TYPE node_schedstat_timeslices_total counter\nnode_schedstat_timeslices_total{cpu=\"0\"} 5.965185464e+09\nnode_schedstat_timeslices_total{cpu=\"1\"} 5.266658269e+09\n\n# HELP node_schedstat_waiting_seconds_total Number of seconds spent by processing waiting for this CPU.\n# TYPE node_schedstat_waiting_seconds_total counter\nnode_schedstat_waiting_seconds_total{cpu=\"0\"} 217918.365216207\nnode_schedstat_waiting_seconds_total{cpu=\"1\"} 218559.331226331\n\nUsing the group() aggregator in PromQL\n\nIf you wanted to count the number of unique values a label has, such as say the number of values the cpu label had in node_cpu_seconds_total per instance the standard pattern is:\n\ncount without(cpu) (\n  count without(mode) (node_cpu_seconds_total)\n)\n\ncount without(cpu) (\n  group without(mode) (node_cpu_seconds_total)\n)\n\nNetwork interface metrics from the node exporter\n\nAlong with many others, the node exporter exposes network interface metrics.\n\nNetwork interface metrics have the prefix node_network_ on the node exporter's \/metrics, and a device label. These are distinct from the node_netstat_ metrics which are about the kernel's network subsystem in general.\n\n  rate(node_network_transmit_errs_total&#91;5m]) \n\/ \n  rate(node_network_transmit_packets_total&#91;5m])\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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\"><\/h2>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/cpu-scheduling-metrics-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">CPU scheduling metrics from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/cpu-frequency-scaling-metrics-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">CPU frequency scaling metrics from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/arp-cache-metrics-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">ARP cache metrics from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/using-the-group-aggregator-in-promql\" target=\"_blank\" rel=\"noopener\">Using the group() aggregator in PromQL<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/linux-software-raid-metrics-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">Linux software RAID metrics from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/time-metric-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">Time metric from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/using-letsencrypt-with-the-node-exporter\" target=\"_blank\" rel=\"noopener\">Using Letsencrypt with the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/conntrack-metrics-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">Conntrack metrics from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/kernel-file-descriptor-metrics-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">Kernel file descriptor metrics from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/temperature-and-hardware-monitoring-metrics-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">Temperature and hardware monitoring metrics from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/network-interface-metrics-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">Network interface metrics from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/filesystem-metrics-from-the-node-exporter\" target=\"_blank\" rel=\"noopener\">Filesystem metrics from the node exporter<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/analyse-a-metric-by-kernel-version\" target=\"_blank\" rel=\"noopener\">Analyse a metric by kernel version<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/mapping-iostat-to-the-node-exporters-node_disk_-metrics\" target=\"_blank\" rel=\"noopener\">Mapping iostat to the node exporter\u2019s node_disk_* metrics<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/using-the-textfile-collector-from-a-shell-script\" target=\"_blank\" rel=\"noopener\">Using the textfile collector from a shell script<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/new-features-in-node-exporter-0-16-0\" target=\"_blank\" rel=\"noopener\">New Features in Node Exporter 0.16.0<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/using-group_left-to-calculate-label-proportions\" target=\"_blank\" rel=\"noopener\">Using group_left to calculate label proportions<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/understanding-machine-cpu-usage\" target=\"_blank\" rel=\"noopener\">Understanding Machine CPU usage<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.robustperception.io\/monitoring-directory-sizes-with-the-textfile-collector\" target=\"_blank\" rel=\"noopener\">Monitoring directory sizes with the Textfile Collector<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Example PromQL for Prometheus Server Prometheus PromQL Example Query: node exporter Metrics specific to the Node Exporter are prefixed with node_ and include metrics like node_cpu_seconds_total and node_exporter_build_info. Metric Meaning&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[5013],"tags":[],"class_list":["post-22351","post","type-post","status-publish","format-standard","hentry","category-prometheus"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/22351","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=22351"}],"version-history":[{"count":6,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/22351\/revisions"}],"predecessor-version":[{"id":23973,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/22351\/revisions\/23973"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=22351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=22351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=22351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}