We are going to install node_exporter and configure Prometheus to monitor Linux servers.
The node_exporter service is a Prometheus exporter for hardware and OS metrics exposed by Linux kernels.
Pre-requisites
We are using our Kubernetes homelab in this article.
Install and Configure Node Exporter
Ansible Playbook to Configure Node Exporter
I use Ansible to manage my homelab, including Linux servers and node_exporter.
Below is an excerpt from the file main.yml
of the Ansible role that manages node_exporter.
- name: Ensure group {{ prometheus_user }} exists group: state: present system: yes name: "{{ prometheus_user }}" - name: Create user {{ prometheus_user }} user: state: present system: yes name: "{{ prometheus_user }}" groups: "{{ prometheus_user }}" shell: "/sbin/nologin" - name: Open node exporter firewall port tcp {{ node_exporter_port }} firewalld: immediate: yes permanent: yes state: enabled port: "{{ node_exporter_port }}/tcp" - name: Unarchive a file that needs to be downloaded unarchive: src: "{{ node_exporter_url }}" dest: "/usr/local/bin" remote_src: yes owner: root group: root creates: "/usr/local/bin/{{ node_exporter_binary }}" extra_opts: - "--strip-components" - "1" - name: Copy {{ node_exporter_systemd_service }} template: src: "{{ node_exporter_systemd_service }}.j2" dest: "/etc/systemd/system/{{ node_exporter_systemd_service }}" owner: root group: root mode: "0644" - name: systemctl daemon-reload command: systemctl daemon-reload - name: Start and enable service {{ node_exporter_systemd_service }} service: name: "{{ node_exporter_systemd_service }}" state: started enabled: yes
We are going to break it down in to tasks.
Create a User/Group
We are going to create a user/group called “prometheus” to run the systemd service as.
Run the following commands on Linux servers where you want node exporter configured:
$ sudo groupadd prometheus $ sudo useradd --system -s /sbin/nologin -g prometheus prometheus
Configure Firewall
Configure firewall to allow inbound access on a TCP port 9100.
Run the following commands on Linux servers where you want node exporter configured:
$ sudo firewall-cmd --permanent --add-port=9100/tcp $ sudo firewall-cmd --reload
Install node_exporter
Run the following commands on Linux servers where you want node exporter configured:
$ wget -q https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz $ sudo tar --strip-components=1 -xf node_exporter-1.0.1.linux-amd64.tar.gz -C /usr/local/bin/ $ sudo chown -R root: /usr/local/bin/
Create node_exporter Systemd Service
Create a file /etc/systemd/system/node_exporter.service
on Linux servers with the following content:
[Unit] Description=Prometheus Documentation=https://github.com/prometheus/node_exporter Wants=network-online.target After=network-online.target [Service] Type=simple User=prometheus Group=prometheus ExecReload=/bin/kill -HUP $MAINPID ExecStart=/usr/local/bin/node_exporter \ --collector.cpu \ --collector.diskstats \ --collector.filesystem \ --collector.loadavg \ --collector.meminfo \ --collector.filefd \ --collector.netdev \ --collector.stat \ --collector.netstat \ --collector.systemd \ --collector.uname \ --collector.vmstat \ --collector.time \ --collector.tcpstat \ --collector.hwmon \ --collector.arp \ --web.max-requests=40 \ --web.listen-address=0.0.0.0:9100 \ --web.telemetry-path=/metrics SyslogIdentifier=prometheus Restart=always [Install] WantedBy=multi-user.target
Set appropriate permissions:
$ sudo chown -R root: /etc/systemd/system/node_exporter.service $ sudo chmod 0644 /etc/systemd/system/node_exporter.service
Enable and start the service:
$ sudo systemctl daemon-reload $ sudo systemctl enable --now node_exporter
Configure Prometheus Scraping
Add static configs that match your Linux servers to the Prometheus config map and restart the pod:
- job_name: 'admin1' static_configs: - targets: ['10.11.1.2:9100'] labels: alias: admin1 - job_name: 'admin2' static_configs: - targets: ['10.11.1.3:9100'] labels: alias: admin2 - job_name: 'kvm1' static_configs: - targets: ['10.11.1.21:9100'] labels: alias: kvm1 - job_name: 'kvm2' static_configs: - targets: ['10.11.1.22:9100'] labels: alias: kvm2 - job_name: 'kvm3' static_configs: - targets: ['10.11.1.23:9100'] labels: alias: kvm3 - job_name: 'k8s-master1' static_configs: - targets: ['10.11.1.31:9100'] labels: alias: k8s-master1 - job_name: 'k8s-master2' static_configs: - targets: ['10.11.1.32:9100'] labels: alias: k8s-master2 - job_name: 'k8s-master3' static_configs: - targets: ['10.11.1.33:9100'] labels: alias: k8s-master3 - job_name: 'k8s-node1' static_configs: - targets: ['10.11.1.34:9100'] labels: alias: k8s-node1 - job_name: 'k8s-node2' static_configs: - targets: ['10.11.1.35:9100'] labels: alias: k8s-node2 - job_name: 'k8s-node3' static_configs: - targets: ['10.11.1.36:9100'] labels: alias: k8s-node3
Add Grafana Dashboard for HAProxy
Install the “Node Exporter Full” Grafana dashboard: https://grafana.com/grafana/dashboards/1860
The end result should look something like this:
References
https://github.com/prometheus/node_exporter
Merci beaucoup!
Très utile