Prometheus Node Exporter をAnsibleでインストールする(Rocky Linux 8)
PrometheusのExporterのひとつである、Node ExporterをAnsibleでインストールした時のメモ。
PrometheusやNode Exporterの設定は以下記事に記載してある。
環境
- Node Exporter:1.4.0
- 管理対象サーバ(Ansibleの実行先)のOS:RockyLinux8.6
- ansible:6.4.0
- ansible-core:2.13.4
実施内容
Ansibleのplaybookを準備
以下のディレクトリ、ファイルを作成した。
ディレクトリ構成は、Ansible公式ドキュメントのBest Practiceを参考にしている。
# tree --charset=c ansible ansible |-- ansible.cfg |-- inventories | `-- production | |-- group_vars | | `-- testservers.yml | `-- hosts |-- roles | `-- install_node_exporter | |-- defaults | | `-- main.yml | |-- files | | `-- node_exporter-1.4.0.linux-amd64.tar.gz | |-- tasks | | `-- main.yml | `-- templates | |-- node_exporter.service.j2 | `-- node_exporter_envfile.j2 |-- site.yml `-- testservers.yml
ansible/ansible.cfg
ansible実行時の設定。Ansibleが管理対象サーバへSSHする際に、ホスト鍵のチェックをしないようにしている。
[defaults] host_key_checking = False
ansible/inventories/production/group_vars/testservers.yml
管理対象サーバへのアクセス情報を記載。
--- ansible_ssh_user: root ansible_ssh_pass: password
ansible/inventories/production/hosts
管理対象サーバの接続先を記載。
[testservers] 192.168.10.123
roles/install_node_exporter/defaults/main.yml このロールで使う変数を定義している。
--- work_dir: /root/ansible_work/node_exporter # このタスクの作業用ディレクトリ node_exporter_user: node_exporter # Node Exporterの実行ユーザ node_exporter_group: "{{ node_exporter_user }}" # Node Exporterの実行ユーザの所属グループ node_exporter_id: 65541 # Node Exporterの実行ユーザ・グループのID(任意の値でよい) node_exporter_version: 1.4.0 # インストールするNode Exporterのバージョン prometheus_dir: /opt/prometheus # Node Exporterの配置先 node_exporter_bin: /usr/local/bin # Node Exporterの実行ファイルリンク配置先 node_exporter_envfile: /etc/sysconfig/node_exporter # Node Exporterの変数定義ファイル textfile_collector_dir: /var/lib/node_exporter/textfile_collector # Textfile Collector用ファイルの配置先
ansible/roles/install_node_exporter/tasks/main.yml
実行するタスクを記載。Node Exporterをインストール、起動する内容。
--- - name: create work directory file: path: "{{ work_dir }}" state: directory owner: root group: root mode: 0755 - name: add group for node exporter group: name: "{{ node_exporter_group }}" gid: "{{ node_exporter_id }}" - name: add user for node exporter user: name: "{{ node_exporter_user }}" group: "{{ node_exporter_group }}" uid: "{{ node_exporter_id }}" create_home: no shell: /sbin/nologin - name: copy node exporter tarball copy: src: "node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz" dest: "{{ work_dir }}" - name: create prometheus directory file: path: "{{ prometheus_dir }}" state: directory owner: root group: root mode: "0755" - name: extract node exporter tarball unarchive: remote_src: yes src: "{{ work_dir }}/node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz" dest: "{{ prometheus_dir }}" owner: "{{ node_exporter_user }}" group: "{{ node_exporter_group }}" - name: create node exporter symbolic link file: path: "{{ node_exporter_bin }}/node_exporter" state: link src: "{{ prometheus_dir }}/node_exporter-{{ node_exporter_version }}.linux-amd64/node_exporter" - name: create node exporter systemd file template: src: node_exporter.service.j2 dest: /etc/systemd/system/node_exporter.service owner: root group: root mode: 0664 - name: create node exporter environment directory template: src: node_exporter_envfile.j2 dest: "{{ node_exporter_envfile }}" owner: root group: root mode: 0664 - name: create textfile collector directory file: path: "{{ textfile_collector_dir }}" state: directory owner: "{{ node_exporter_user }}" group: "{{ node_exporter_group }}" mode: 0755 - name: enable and start node_exporter systemd: daemon_reload: yes enabled: yes state: started name: node_exporter.service
roles/install_node_exporter/files/
管理対象サーバにアップロードする用のファイルを置く。
今回はインストール対象のNode Exporterのtarballを事前にダウンロードして配置している。
tarballはここからダウンロードできる。
# ls -l roles/install_node_exporter/files/ 合計 9876 -rw-r--r-- 1 root root 10111972 9月 26 12:39 node_exporter-1.4.0.linux-amd64.tar.gz
roles/install_node_exporter/templates/node_exporter.service.j2
Node ExporterのSysytemdService用テンプレートファイル。
[Unit] Description=Node Exporter [Service] User={{ node_exporter_user }} EnvironmentFile=-{{ node_exporter_envfile }} ExecStart={{ node_exporter_bin }}/node_exporter $OPTIONS [Install] WantedBy=multi-user.target
roles/install_node_exporter/templates/node_exporter_envfile.j2
Node Exporter実行時のオプション設定ファイルのテンプレートファイル。
OPTIONS="--collector.textfile.directory {{ textfile_collector_dir }}"
ansible/site.yml
実行するplaybook。個別のplaybookをimportして使う。
--- - import_playbook: testservers.yml
ansible/testservers.yml
個別のplaybook。
--- - hosts: testservers roles: - install_node_exporter
ansibleの実行
ansible-playbookを実行する。
# ansible-playbook -i inventories/production/hosts site.yml
管理対象のサーバに接続し、node_exporterサービスが正常に起動していればOK。
# systemctl status node_exporter ● node_exporter.service - Node Exporter Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2022-10-11 11:27:43 UTC; 1h 42min ago Main PID: 36046 (node_exporter) Tasks: 5 (limit: 10992) Memory: 18.7M CGroup: /system.slice/node_exporter.service mq36046 /usr/local/bin/node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.337Z caller=node_exporter.go:115 level=info collector=thermal_zone 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.337Z caller=node_exporter.go:115 level=info collector=time 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.337Z caller=node_exporter.go:115 level=info collector=timex 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.337Z caller=node_exporter.go:115 level=info collector=udp_queues 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.337Z caller=node_exporter.go:115 level=info collector=uname 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.337Z caller=node_exporter.go:115 level=info collector=vmstat 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.337Z caller=node_exporter.go:115 level=info collector=xfs 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.337Z caller=node_exporter.go:115 level=info collector=zfs 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.338Z caller=node_exporter.go:199 level=info msg="Listening on" address=:9100 10月 11 11:27:43 ip-192-168-10-123.ap-northeast-1.compute.internalmydomain.local node_exporter[36046]: ts=2022-10-11T11:27:43.338Z caller=tls_config.go:195 level=info msg="TLS is disabled." http2=false
まとめ
- RockyLinux8へのPrometheus Node ExporterのインストールをAnsibleで自動化できた。