Files
homelab-infra/infrastructure/shared-data-monitoring/ansible/site.yml
T
panxiao81 0d633cf0cc
yaml / yaml (pull_request) Successful in 51s
ansible / collection-test (pull_request) Successful in 2m28s
ansible / lint (pull_request) Successful in 4m5s
fix: 使用 PrometheusRule 并按 exporter 版本获取官方校验和
2026-09-27 17:29:40 +00:00

147 lines
5.2 KiB
YAML

---
- name: 采集共享数据服务维护指标
hosts: shared_data_monitoring
become: true
gather_facts: false
vars:
data_monitor_root: /opt/homelab-data-monitoring
data_monitor_exporter_version: 1.9.1
data_monitor_download_base: https://github.com/prometheus/node_exporter/releases/download
data_monitor_archive: "node_exporter-{{ data_monitor_exporter_version }}.linux-amd64"
tasks:
- name: 检查仅支持 amd64
ansible.builtin.command: uname -m
register: data_monitor_arch
changed_when: false
- name: 拒绝错误架构
ansible.builtin.assert:
that: data_monitor_arch.stdout == 'x86_64'
- name: 创建 root 管理目录
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: '0755'
loop:
- "{{ data_monitor_root }}"
- /etc/homelab-data-monitoring
- /var/lib/homelab-data-monitoring
- name: 下载 exporter 并校验同版本官方摘要
ansible.builtin.get_url:
url: >-
{{ data_monitor_download_base }}/v{{ data_monitor_exporter_version }}/{{ data_monitor_archive }}.tar.gz
dest: "{{ data_monitor_root }}/node_exporter.tar.gz"
checksum: >-
sha256:{{ data_monitor_download_base }}/v{{ data_monitor_exporter_version }}/sha256sums.txt
owner: root
group: root
mode: '0644'
- name: 解压 exporter(保留上游许可证)
ansible.builtin.unarchive:
src: "{{ data_monitor_root }}/node_exporter.tar.gz"
dest: "{{ data_monitor_root }}"
remote_src: true
creates: "{{ data_monitor_root }}/node_exporter-{{ data_monitor_exporter_version }}.linux-amd64/node_exporter"
- name: 安装只读采集程序
ansible.builtin.copy:
src: ../files/collect.py
dest: "{{ data_monitor_root }}/collect.py"
owner: root
group: root
mode: '0755'
- name: 配置明确的证书与检查清单
ansible.builtin.template:
src: config.json.j2
dest: /etc/homelab-data-monitoring/config.json
owner: root
group: root
mode: '0644'
- name: 安装采集 service
ansible.builtin.copy:
dest: /etc/systemd/system/homelab-data-collect.service
mode: '0644'
content: |
[Unit]
Description=Read-only shared data maintenance checks
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 {{ data_monitor_root }}/collect.py \
--config /etc/homelab-data-monitoring/config.json \
--output /var/lib/homelab-data-monitoring/health.prom
Environment=LC_ALL=C
Environment=PGCONNECT_TIMEOUT=5
Environment="PGOPTIONS=-c statement_timeout=5000"
TimeoutStartSec=50
UMask=0022
ProtectSystem=strict
ReadWritePaths=/var/lib/homelab-data-monitoring
PrivateTmp=true
MemoryMax=96M
Nice=10
- name: 安装每分钟采集 timer
ansible.builtin.copy:
dest: /etc/systemd/system/homelab-data-collect.timer
mode: '0644'
content: |
[Unit]
Description=Collect shared data maintenance metrics every minute
[Timer]
OnBootSec=30s
OnUnitActiveSec=60s
AccuracySec=5s
[Install]
WantedBy=timers.target
- name: 安装仅内网 textfile exporter
ansible.builtin.copy:
dest: /etc/systemd/system/homelab-data-exporter.service
mode: '0644'
content: |
[Unit]
Description=Shared data textfile metrics
After=network-online.target
Wants=network-online.target
[Service]
DynamicUser=true
ExecStart={{ data_monitor_root }}/{{ data_monitor_archive }}/node_exporter \
--web.listen-address={{ ansible_host }}:9109 \
--collector.disable-defaults --collector.textfile \
--collector.textfile.directory=/var/lib/homelab-data-monitoring --web.disable-exporter-metrics
Restart=on-failure
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
MemoryMax=64M
[Install]
WantedBy=multi-user.target
notify: Restart shared data exporter
- name: 重载 unit 声明
ansible.builtin.systemd_service:
daemon_reload: true
- name: 首次只读采集并检查程序能够完成
ansible.builtin.command:
argv:
- /usr/bin/python3
- "{{ data_monitor_root }}/collect.py"
- --config
- /etc/homelab-data-monitoring/config.json
- --output
- /var/lib/homelab-data-monitoring/health.prom
environment:
LC_ALL: C
PGCONNECT_TIMEOUT: '5'
PGOPTIONS: '-c statement_timeout=5000'
changed_when: false
- name: 启用监控服务
ansible.builtin.systemd_service:
name: "{{ item }}"
enabled: true
state: started
loop: [homelab-data-collect.timer, homelab-data-exporter.service]
handlers:
- name: Restart shared data exporter
ansible.builtin.systemd_service:
name: homelab-data-exporter.service
state: restarted