1"use strict";(globalThis.webpackChunkrunme_dev=globalThis.webpackChunkrunme_dev||[]).push([[9086],{9702(e,n,r){r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>t,toc:()=>u});const t=JSON.parse('{"id":"guide/monitoring-stack","title":"Monitoring Stack","description":"In this guide, we will walk you through configuring a monitoring stack and creating a Runbook for your application setup and configuration using Runme.","source":"@site/docs/guide/monitoring-stack.md","sourceDirName":"guide","slug":"/guide/monitoring-stack","permalink":"/guide/monitoring-stack","draft":false,"unlisted":false,"editUrl":"https://github.com/runmedev/docs.runme.dev/edit/main/docs/guide/monitoring-stack.md","tags":[],"version":"current","frontMatter":{"runme":{"id":"01HX525D9GDAKP0662NVFVSDR8","version":"v3"}},"sidebar":"tutorialSidebar","previous":{"title":"Foyle AI","permalink":"/guide/foyle"},"next":{"title":"Python venvs","permalink":"/guide/pythonenv"}}');var s=r(74848),o=r(28453);const a={runme:{id:"01HX525D9GDAKP0662NVFVSDR8",version:"v3"}},i="Monitoring Stack",l={},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Install a Node Exporter",id:"install-a-node-exporter",level:2},{value:"Configure Your Node Exporter In Your Runbook",id:"configure-your-node-exporter-in-your-runbook",level:2},{value:"Install Prometheus",id:"install-prometheus",level:2},{value:"Configure your Prometheus",id:"configure-your-prometheus",level:2},{value:"Install Grafana",id:"install-grafana",level:2},{value:"Install Alertmanager",id:"install-alertmanager",level:2},{value:"Configure and Run Your Alertmanager",id:"configure-and-run-your-alertmanager",level:2},{value:"Why use Runme",id:"why-use-runme",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.header,{children:[(0,s.jsx)(n.h1,{id:"monitoring-stack",children:"Monitoring Stack"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://runme.dev/api/runme?repository=https%3A%2F%2Fgithub.com%2Frunmedev%2Fdocs.runme.dev.git&fileToOpen=docs/guide/monitoring-stack.md",title:"Open with runme",children:(0,s.jsx)(n.img,{src:"https://badgen.net/badge/Open%20with/Runme/5B3ADF?icon=https://runme.dev/img/logo.svg",alt:"Runme badge",title:"Open with runme"})})})]}),"\n",(0,s.jsx)(n.p,{children:"In this guide, we will walk you through configuring a monitoring stack and creating a Runbook for your application setup and configuration using Runme."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To follow up on the steps in this guide, ensure you have the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Runme Extension: Install the ",(0,s.jsx)(n.a,{href:"https://marketplace.visualstudio.com/items?itemName=stateful.runme",children:"Runme extension"})," in your VS Code editor. You can make Runme your ",(0,s.jsx)(n.a,{href:"/installation/vscode#how-to-set-vs-code-as-your-default-markdown-viewer",children:"default Markdown viewer"}),", ensuring all your Markdown files are automatically opened as a Runme Notebook. Additionally, it provides other client interfaces where you can run your Markdown file. See the ",(0,s.jsx)(n.a,{href:"/installation/",children:"Runme installation"})," guide."]}),"\n",(0,s.jsxs)(n.li,{children:["Clone Repository: We have provided an example repo to help you follow this tutorial. Clone the ",(0,s.jsx)(n.a,{href:"https://github.com/stateful/blog-examples/tree/main/kubernetes/monitoring-stack",children:"repository here"}),". If you are a Linux user, navigate to the ",(0,s.jsx)(n.a,{href:"https://github.com/stateful/blog-examples/blob/main/kubernetes/monitoring-stack/linux.md",children:"Linux file"}),". For Mac users, see the ",(0,s.jsx)(n.a,{href:"https://github.com/stateful/blog-examples/blob/main/kubernetes/monitoring-stack/mac.md",children:"Mac file"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"This guide focuses on the Linux README.md file; other operating systems also work."}),"\n",(0,s.jsx)(n.h2,{id:"install-a-node-exporter",children:"Install a Node Exporter"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://github.com/prometheus/node_exporter",children:"Node Exporter"})," allows for detailed monitoring of system-level metrics like CPU usage, memory usage, disk, and network activity, providing valuable insights into the health and performance of the underlying infrastru
1cture."]}),"\n",(0,s.jsx)(n.p,{children:"To install a Node Exporter run the command below in your Runme cell."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY82ZK9JD52ER5HBMN93PAN"}',children:"export version\nexport platform\n\n# Download the Node Exporter binary (adjust the version as necessary)\nwget https://github.com/prometheus/node_exporter/releases/download/v${version}/node_exporter-${version}.${platform}-arm64.tar.gz\n\n# Extract the binary\ntar -xzf node_exporter-${version}.${platform}-arm64.tar.gz\n\n# Move the binary to a suitable location (e.g., /usr/local/bin)\nsudo mv node_exporter-${version}.${platform}-arm64/node_exporter /usr/local/bin/\n\n# Optionally, create a system service file (e.g., for systemd)\nsudo nano /etc/systemd/system/node_exporter.service\n"})}),"\n",(0,s.jsx)(n.p,{children:"When the command is executed successfully, this is what you will see in your Runme terminal."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"install node exporter",src:r(3933).A+"",width:"1994",height:"810"})}),"\n",(0,s.jsxs)(n.p,{children:["Runme uses its ",(0,s.jsx)(n.a,{href:"/configuration/cell-level#environment-variable-prompts",children:"environment variable prompt feature"})," to prompt users to enter a value for the version and the platform. Runme will store these values, so you no longer need to enter them when working on this project."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"env prompt for node exporter",src:r(20766).A+"",width:"1600",height:"260"})}),"\n",(0,s.jsx)(n.h2,{id:"configure-your-node-exporter-in-your-runbook",children:"Configure Your Node Exporter In Your Runbook"}),"\n",(0,s.jsx)(n.p,{children:"After installing your node exporter, the next step is to configure your node exporter. To do this, you must follow three steps."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Step One"}),": Set Up Node Exporter as a Service"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Create a ",(0,s.jsx)(n.code,{children:"systemd"})," service file that ensures the Node Exporter is properly configured as a background service. This will allow it to continuously collect and export system metrics to Prometheus for monitoring and analysis. To do this, run the command below in your Runme cell."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY82FRQB5GC3S9EZRBBBQ0B"}',children:"cat <<EOF > sudo tee /etc/systemd/system/node_exporter.service > /dev/null\n[Unit]\nDescription=Prometheus Node Exporter\nAfter=network.target\n\n[Service]\nExecStart=/usr/local/bin/node_exporter\n\n[Install]\nWantedBy=default.target\n\nEOF\n"})}),"\n",(0,s.jsx)(n.p,{children:"Here is a visual representation of the command in a Runme cell and how it outputs when executed."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Node exporter service",src:r(23999).A+"",width:"1994",height:"816"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Step Two: Run Node Exporter as a Service"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"In this step, you are required to run your Node Exporter as a service, check its status, and restart it if necessary. To do this, run the command below in your Runme cell."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY82FRQB5GC3S9EZVBK1XP3"}',children:'sudo cp -rf ${PWD}/node_exporter/node_exporter.service /etc/systemd/system/\n\nsudo systemctl daemon-reload\n\nsudo systemctl enable node_exporter\necho "node exporter enable"\n\nsudo systemctl start node_exporter\necho "node_exporter has started."\n\n\nsudo systemctl status node_exporter\n\nsudo systemctl restart node_exporter\n'})}),"\n",(0,s.jsx)(n.p,{children:"Here is a visual representation of the command in your Runme cell and its output when executed successfully."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"node exporter service",src:r(61892).A+"",width:"1990",height:"791"})}),"\n",(0,s.jsx)(n.h2,{id:"install-prometheus",children:"Install Prometheus"}),"\n",(0,s.jsx)(n.p,{children:"In a monitoring stack, Prometheus gathers metrics, monitors system and application health, generates alerts based on a predefined rule, and provides insights into system and application performance and availability."}),"\n",(0,s.jsx)(n.p,{children:"To install Prometheus with Runme, run the command below."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY8DVDW4P8MA98M1YJTP4R2"}',children:"export version\n\ncurl -LO https://github.com/prometheus/prometheus/releases/download/v${version}/prometheus-${version}.linux-amd64.tar.gz\n\ntar -xzf prometheus-${version}.linux-amd64.tar.gz\nmkdir -p ${PWD}/prometheus\n\ncp -r prometheus-${version}.linux-amd64/prometheus ${PWD}/prometheus\ncp -r prometheus-${version}.linux-amd64/promtool ${PWD}/prometheus\n"})}),"\n",(0,s.jsx)(n.p,{children:"Here is a visual representation of the command in a Runme cell and the output when executed successfully."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Install prometheus",src:r(68292).A+"",width:"1994",height:"836"})}),"\n",(0,s.jsx)(n.p,{children:"Runme will leverage its environment prompt feature to prompt you to input the version of Prometheus you want to install. Once you input the version, you will have an output similar to the one above."}),"\n",(0,s.jsx)(n.h2,{id:"configure-your-prometheus",children:"Configure your Prometheus"}),"\n",(0,s.jsx)(n.p,{children:"In the previous section, you installed Prometheus on your local machine. Now, you need to configure Prometheus. To configure your Prometheus, you will be required to follow three steps:"}),"\n",(0,s.jsx)(n.p,{children:"Step One: Setup your Prometheus configuration"}),"\n",(0,s.jsx)(n.p,{children:"Create a Prometheus configuration file that specifies how Prometheus should collect metrics from the Node Exporter. To create this Prometheus configuration file, run the commands below."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY82FRQB5GC3S9EZWX0VT68"}',children:"cat <<EOF > ${PWD}/prometheus/prometheus.yml\nglobal:\n scrape_interval: 15s\n evaluation_interval: 15s\nscrape_configs:\n - job_name: 'node_'\n metrics_path: /metrics\n static_configs:\n - targets:\n - 10.90.2.1:9116\nEOF\n"})}),"\n",(0,s.jsx)(n.p,{children:"This is a visual representation of the command in a Runme cell."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"promtheus yaml file",src:r(56868).A+"",width:"2000",height:"528"})}),"\n",(0,s.jsx)(n.p,{children:"Step Two: Set up Prometheus as a service"}),"\n",(0,s.jsxs)(n.p,{children:["Now that you have successfully set up your Prometheus configuration, you need to set it up as a service. To do this, create a ",(0,s.jsx)(n.code,{children:"systemd"})," service file for the Prometheus Agent Mode, which facilitates federation and data collection from multiple Prometheus instances or remote targets. Ru
1n the command below in your Runme cell."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY82FRQB5GC3S9EZXV5MNAD"}',children:"cat <<EOF > ${PWD}/prometheus/prometheus.service\n[Unit]\nDescription=Prometheus Agent Mode\nAfter=network-online.target\n[Service]\nUser=${USER}\nWorkingDirectory=${PWD}\nExecStart=${PWD}/prometheus/prometheus --config.file=${PWD}/prometheus/prometheus.yml --enable-feature=agent\n[Install]\nWantedBy=multi-user.target\nEOF\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Output"}),":"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"prometheus service",src:r(64947).A+"",width:"2000",height:"515"})}),"\n",(0,s.jsx)(n.p,{children:"Step Three: Run Prometheus as a Service"}),"\n",(0,s.jsx)(n.p,{children:"After successfully carrying out steps one and two, run Prometheus as a service. To do this, run the command below."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY8NP75SR6YEE5CCVMYDDFA"}',children:'sudo cp -rf ${PWD}/prometheus/prometheus.service /etc/systemd/system/\n\nsudo systemctl daemon-reload\n\nsudo systemctl enable prometheus\necho "prometheus enable"\n\nsudo systemctl start prometheus\necho "prometheus has started."\n\nsudo systemctl status prometheus\n\nsudo systemctl restart prometheus\n'})}),"\n",(0,s.jsx)(n.p,{children:"This is what this command and its output, when executed successfully, looks like in a Runme cell."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"prometheus",src:r(78442).A+"",width:"1975",height:"890"})}),"\n",(0,s.jsx)(n.p,{children:"Step four: Open the app"}),"\n",(0,s.jsx)(n.p,{children:"Run the code below in your Runme cell, it will open the prometheus User Interface page."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY82FRQB5GC3S9F00CFJH09"}',children:"open http://localhost:9090\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-grafana",children:"Install Grafana"}),"\n",(0,s.jsx)(n.p,{children:"Grafana provides a user-friendly interface for visualizing and analyzing metrics, logs, and other monitoring data in your monitoring stack. To install Grafana for your monitoring stack, run the command below in your Runme cell."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY8QJDCGYPWFS2ZC44S0JHW"}',children:"sudo apt-get install -y adduser libfontconfig1\nwget https://dl.grafana.com/enterprise/release/grafana-enterprise_9.4.7_amd64.deb\nsudo dpkg -i grafana-enterprise_9.4.7_amd64.deb\nsudo apt-get install grafana\nsystemctl enable --now grafana-server\nsystemctl restart grafana-server\n"})}),"\n",(0,s.jsx)(n.p,{children:"Here is a pictorial representation of the code in the Runme cell and the output in the Runme terminal when executed successfully."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Install Grafana",src:r(5064).A+"",width:"1989",height:"798"})}),"\n",(0,s.jsx)(n.p,{children:"Open the App:"}),"\n",(0,s.jsx)(n.p,{children:"In the previous section, you installed Grafana on your local machine using Runme. Now, you need to open the Grafana app on your local machine. To do this, enter the command below in your Runme cell and run the command."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY82FRQB5GC3S9F00R3P5T7"}',children:"open http://localhost:3000\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-alertmanager",children:"Install Alertmanager"}),"\n",(0,s.jsx)(n.p,{children:"An alert manager is a component of a monitoring stack that handles alerts sent by monitoring tools like Prometheus. It is responsible for grouping, deduplication, and routing alerts to the appropriate recipients. To install an alert manager and make it a part of your monitoring stack, run the command below in your Runme cell."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY8S6C54F9DH89R6JEFJCA6"}',children:"curl -LO https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz\n\n# Extract the binary\ntar -xzf alertmanager-${version}.${platform}-amd64.tar.gz\n\n# Move the binary to a suitable location (e.g., /usr/local/bin)\nsudo mv alertmanager-${version}.${platform}-amd64/alertmanager /usr/local/bin/\n\n# Move the binary to a suitable location (e.g., /etc)\ncp alertmanager-<version>.${platform}-amd64/alertmanager.yml /etc/alertmanager/\n\nalertmanager --config.file=/etc/alertmanager/alertmanager.yml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can edit your ",(0,s.jsx)(n.code,{children:"alertmanager.yml"}
1)," file to define the alerting configurations, notification integrations, and routing rules. To do that, run this command in your Runme cell"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY8T3SJSTCYCG8P8VMA0R99"}',children:"nano /etc/alertmanager/alertmanager.yml\n"})}),"\n",(0,s.jsx)(n.h2,{id:"configure-and-run-your-alertmanager",children:"Configure and Run Your Alertmanager"}),"\n",(0,s.jsx)(n.p,{children:"After installing your alert manager, you will follow the three steps below to configure and run your alert manager."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Step One:"})," Set Up Alert Manager as a Service"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Run the command below to create a ",(0,s.jsx)(n.code,{children:"systemd"})," service file for Alertmanager and specify its description, user-startup command, and target for activation."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY8WEC4G0RC9Z01KYCG0EZE"}',children:"cat <<EOF > ${PWD}/alertmanager/alertmanager.service\n[Unit]\nDescription=Alertmanager\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nUser=alertmanager\nGroup=alertmanager\nType=simple\nExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml\n\n[Install]\nWantedBy=multi-user.target\nEOF\n"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Step Two: Run Alert Manager as a Service"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Now, you can run your alert manager as a service. To do this, run the command below"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY9011CT194JY2S3ZCK68H3"}',children:"cat <<EOF > ${PWD}/alertmanager/alertmanager.service\n[Unit]\nDescription=Alertmanager\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nUser=alertmanager\nGroup=alertmanager\nType=simple\nExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml\n\n[Install]\nWantedBy=multi-user.target\nEOF\n"})}),"\n",(0,s.jsx)(n.p,{children:"Step Three: Open the app"}),"\n",(0,s.jsx)(n.p,{children:"To open the Alertmanager page on your local machine, run the command below in your Runme cell."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",metastring:'{"id":"01HXY82FRQB5GC3S9F04BZAKFN"}',children:"open http://localhost:9093\n"})}),"\n",(0,s.jsx)(n.h2,{id:"why-use-runme",children:"Why use Runme"}
1),"\n",(0,s.jsx)(n.p,{children:"Rather than having your codes, commands, or processes in separate files or performing a task repeatedly, Runme enables you to have everything inside your Markdown file, which can be automated whenever you need to run this process."}),"\n",(0,s.jsx)(n.p,{children:"Some key features of Runme that make it a choice platform for your monitoring stack include:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Environment Variable Prompts"}),"\n",(0,s.jsxs)(n.p,{children:["As you can see from the procedure above, the ",(0,s.jsx)(n.a,{href:"/configuration/cell-level#environment-variable-prompts",children:"environment variable prompt"})," is one feature that makes it a choice platform for this task. This feature comes in handy when your runbooks need user-specific values. It allows you to input values directly within your notebook environment, thus making your task execution more efficient."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Run Sections"}),"\n",(0,s.jsxs)(n.p,{children:["Runme makes ",(0,s.jsx)(n.a,{href:"/usage/run-section",children:"running the script by section"})," possible. For example, in your monitoring-stack notebook, you can choose to run each section (\u201cNode Exporter,\u201d \u201cPrometheus,\u201d \u201cGrafana\u201d) rather than individual cells. This feature makes running this task easier and faster."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Auto-Save"}),"\n",(0,s.jsxs)(n.p,{children:["Runme makes saving your outputs easier without manual intervention by triggering the ",(0,s.jsx)(n.a,{href:"/usage/auto-save",children:"auto-save feature"}),". This way, you can focus on your task and run your commands without worrying about losing your outputs."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Share Runbook With Members of Your Team"}),"\n",(0,s.jsx)(n.p,{children:"Runme makes sharing of outputs from an executed cell with team members easy. You only need to leverage Runme\u2019s autosave feature to save your output, and you have unlocked the access to share that output with your team members."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["These are just a few features of Runme. We continually work to improve your experience with Runme by providing you with more features and updates to enhance your documentation and automation processes. To explore other features of Runme, see the ",(0,s.jsx)(n.a,{href:"/guide",children:"Runme guide"})," for comprehensive details."]})]})}function d(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},23999(e,n,r){r.d(n,{A:()=>t});const t=r.p+"assets/images/create-node-exporters-service-685367ed953fbd7b5cdb1b1d616cb2db.png"},64947(e,n,r){r.d(n,{A:()=>t});const t=r.p+"assets/images/create-prometheus-service-41e8c3e083e9de2edd11f46efdfaa4a3.jpeg"},68292(e,n,r){r.d(n,{A:()=>t});const t=r.p+"assets/images/install-prometheuss-cbf47e4a3e9f878286b282b8fa7d052b.png"},5064(e,n,r){r.d(n,{A:()=>t});const t=r.p+"assets/images/installgrafana-runme-a4119933f9ca1ac30542931edaa3dc0a.png"},20766(e,n,r){r.d(n,{A:()=>t});const t=r.p+"assets/images/node-exporter-env-prompt-d0438238a276d300aa1965d988533d99.png"},78442(e,n,r){r.d(n,{A:()=>t});const t=r.p+"assets/images/prometheus-services-runme-44446d751ba6eb17d748a41319ce5075.png"},61892(e,n,r){r.d(n,{A:()=>t});const t=r.p+"assets/images/runme-node-exporter-services-81bf31c1677878c8f6d89ff1d829f59b.png"},3933(e,n,r){r.d(n,{A:()=>t});const t=r.p+"assets/images/runme-node-exporter-92562aad84f4f9f828910b024ce4de4f.png"},56868(e,n,r){r.d(n,{A:()=>t});const t=r.p+"assets/images/runme-prometheus-yaml-a2810ac557fc5fe1f41cfc02c8d9df13.jpeg"},28453(e,n,r){r.d(n,{R:()=>a,x:()=>i});var t=r(96540);const s={},o=t.createContext(s);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.