0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ansibleで、Debian/Ubuntuに最新のPrometheus Node Exporterをインストールする

Last updated at Posted at 2023-08-08

Ubuntu に node exporter をインストールしようとしたが、
apt install prometheus-node-exporterでは最新の node exporter がインストールされず、
最新の node exporter をインストールするには、GitHub からバイナリをダウンロードする必要があった。

都度最新のバージョンを確認するのは面倒なため、最新バージョンをインストールする Ansible の playbook を作成した。

(2023/8/8 時点で、apt install でのインストールは1.5.0。 GitHub での最新リリースは1.6.1。)

手順は以下のページを参考にした。
Prometheus Node Exporter Setup

node_exporter_install.yml
---
- name: groupadd -f --system node_exporter
  ansible.builtin.group:
    name: node_exporter
    state: present
    system: true

- name: useradd -g node_exporter --no-create-home --shell /bin/false node_exporter
  ansible.builtin.user:
    name: node_exporter
    group: node_exporter
    state: present
    shell: /bin/false
    create_home: false
    system: true

- name: mkdir -p /etc/node_exporter; chown node_exporter:node_exporter /etc/node_exporter
  ansible.builtin.file:
    path: /etc/node_exporter
    state: directory
    owner: node_exporter
    group: node_exporter
    mode: 0755

- name: Read GitHub API (latest release info)
  ansible.builtin.uri:
    url: https://api.github.com/repos/prometheus/node_exporter/releases/latest
  register: _result_response

- name: set_fact `_tag_name`
  ansible.builtin.set_fact:
    _tag_name: "{{ _result_response.json['tag_name'] }}"

- name: node_exporter - set `_dict_file_name`
  ansible.builtin.set_fact:
    _dict_file_name:
      x86_64: "node_exporter-{{ _tag_name | regex_replace('^v?(.*)$', '\\1') }}.linux-amd64"
      aarch64: "node_exporter-{{ _tag_name | regex_replace('^v?(.*)$', '\\1') }}.linux-arm64"

- name: Show the value of `_dict_file_name`
  ansible.builtin.debug:
    var: _dict_file_name

- name: Unarchive `node_exporter-${VERSION}.linux-<ARCH>.tar.gz` and save it in `/tmp`
  ansible.builtin.unarchive:
    remote_src: yes
    src: "\
      https://github.com/prometheus/node_exporter/releases/download/\
      {{ _tag_name }}/{{ _dict_file_name[ansible_architecture] }}.tar.gz"
    dest: /tmp

- name: Copy `/tmp/node_exporter-${VERSION}.linux-<ARCH>./node_exporter` to `/usr/bin/node_exporter`
  ansible.builtin.copy:
    remote_src: yes
    src: "/tmp/{{ _dict_file_name[ansible_architecture] }}/node_exporter"
    dest: /usr/bin/node_exporter
    owner: node_exporter
    group: node_exporter
    mode: +x

- name: Copy `./node_exporter.service` to `/usr/lib/systemd/system/node_exporter.service`
  ansible.builtin.copy:
    remote_src: no
    src: "{{ playbook_dir }}/tasks/node_exporter.service"
    dest: /usr/lib/systemd/system

- name: systemctl daemon-reload; systemctl enable --now node_exporter.service
  ansible.builtin.systemd:
    name: node_exporter.service
    daemon_reload: true
    scope: system
    state: started
    enabled: yes

- name: rm -r "/tmp/node_exporter-${VERSION}.linux-<ARCH>
  ansible.builtin.file:
    path: "/tmp/{{ _dict_file_name[ansible_architecture] }}/"
    state: absent
/usr/lib/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Documentation=https://prometheus.io/docs/guides/node-exporter/
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
Restart=on-failure
ExecStart=/usr/bin/node_exporter

[Install]
WantedBy=multi-user.target
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?