From 0785fda26b7b299ddcaa17933918a2799320d24b Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Sun, 13 Feb 2022 12:11:45 -0600 Subject: [PATCH] r/v-m: Add role for Victoria Metrics The *victoria-metrics* role deploys a single-server instance of the Victoria Metrics time series database server. It installs the selected version by downloading the binary release from Github and copying it to `/usr/local/sbin` on the managed node. Scrape configuration is optional and can be specified with the `scrape_configs` variable. --- .gitignore | 2 + hosts | 2 + roles/victoria-metrics/defaults/main.yml | 13 ++++ .../files/victoria-metrics.service | 15 ++++ roles/victoria-metrics/handlers/main.yml | 14 ++++ roles/victoria-metrics/tasks/deploy.yml | 73 +++++++++++++++++++ roles/victoria-metrics/tasks/install.yml | 61 ++++++++++++++++ roles/victoria-metrics/tasks/main.yml | 7 ++ .../templates/victoria-metrics.sysconfig.j2 | 7 ++ roles/victoria-metrics/vars/aarch64.yml | 2 + roles/victoria-metrics/vars/arch-defaults.yml | 1 + roles/victoria-metrics/vars/install.yml | 9 +++ roles/victoria-metrics/vars/x86_64.yml | 1 + victoria-metrics.yml | 4 + 14 files changed, 211 insertions(+) create mode 100644 roles/victoria-metrics/defaults/main.yml create mode 100644 roles/victoria-metrics/files/victoria-metrics.service create mode 100644 roles/victoria-metrics/handlers/main.yml create mode 100644 roles/victoria-metrics/tasks/deploy.yml create mode 100644 roles/victoria-metrics/tasks/install.yml create mode 100644 roles/victoria-metrics/tasks/main.yml create mode 100644 roles/victoria-metrics/templates/victoria-metrics.sysconfig.j2 create mode 100644 roles/victoria-metrics/vars/aarch64.yml create mode 100644 roles/victoria-metrics/vars/arch-defaults.yml create mode 100644 roles/victoria-metrics/vars/install.yml create mode 100644 roles/victoria-metrics/vars/x86_64.yml create mode 100644 victoria-metrics.yml diff --git a/.gitignore b/.gitignore index 6a9c6f9..baf2027 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /.vault-secret.gpg .fact-cache +/victoria-metrics-*.tar.gz +/victoria-metrics-*/ diff --git a/hosts b/hosts index 83747f8..092b279 100644 --- a/hosts +++ b/hosts @@ -154,6 +154,8 @@ smtp1.pyrocufflink.blue [synapse] matrix0.pyrocufflink.blue +[victoria-metrics] + [vm-hosts] [wheelhost] diff --git a/roles/victoria-metrics/defaults/main.yml b/roles/victoria-metrics/defaults/main.yml new file mode 100644 index 0000000..070ed91 --- /dev/null +++ b/roles/victoria-metrics/defaults/main.yml @@ -0,0 +1,13 @@ +vm_version: 1.72.0 + +vm_retention_period: 12 +vm_self_scrape: true +vm_self_scrape_interval: '{{ vm_default_scrape_interval|d("1m") }}' + +vm_scrape_configs: [] + +vm_config: + global: + scrape_interval: 1m + + scrape_configs: "{{ vm_scrape_configs }}" diff --git a/roles/victoria-metrics/files/victoria-metrics.service b/roles/victoria-metrics/files/victoria-metrics.service new file mode 100644 index 0000000..9077b0a --- /dev/null +++ b/roles/victoria-metrics/files/victoria-metrics.service @@ -0,0 +1,15 @@ +[Unit] +Description=VictoriaMetrics + +[Service] +Type=exec +Environment=httpListenAddr=[::1]:8428 +Environment=storageDataPath=/var/lib/victoria-metrics/data +Environment=loggerDisableTimestamps=true +EnvironmentFile=-/etc/sysconfig/victoria-metrics +ExecStart=/usr/local/sbin/victoria-metrics -enableTCP6 -envflag.enable +User=victoriametrics +LimitNOFILE=1048576 + +[Install] +WantedBy=multi-user.target diff --git a/roles/victoria-metrics/handlers/main.yml b/roles/victoria-metrics/handlers/main.yml new file mode 100644 index 0000000..43d0a33 --- /dev/null +++ b/roles/victoria-metrics/handlers/main.yml @@ -0,0 +1,14 @@ +- name: reload systemd + systemd: + daemon_reload: true + +- name: restart victoria-metrics + service: + name: victoria-metrics + state: restarted + +- name: reload victoria-metrics + uri: + url: http://localhost:8428/-/reload + status_code: 204 + changed_when: true diff --git a/roles/victoria-metrics/tasks/deploy.yml b/roles/victoria-metrics/tasks/deploy.yml new file mode 100644 index 0000000..5924698 --- /dev/null +++ b/roles/victoria-metrics/tasks/deploy.yml @@ -0,0 +1,73 @@ +- name: ensure victoria metrics user exists + user: + name: victoriametrics + system: true + home: /var/lib/victoria-metrics + createhome: false + shell: /sbin/nologin + state: present + tags: + - user + +- name: ensure victoria metrics data data directory exists + file: + path: /var/lib/victoria-metrics + owner: victoriametrics + group: victoriametrics + mode: u=rwx,go=rx + state: directory + tags: + - datadir + +- name: ensure /etc/sysconfig directory exists + file: + path: /etc/sysconfig + mode: u=rwx,go=rx + owner: root + group: root + state: directory + tags: + - config +- name: ensure victoria metrics is configured + template: + src: victoria-metrics.sysconfig.j2 + dest: /etc/sysconfig/victoria-metrics + mode: '0644' + notify: + - restart victoria-metrics + tags: + - config + +- name: ensure victoria metrics config directory exists + file: + path: /etc/victoria-metrics + mode: '0755' + state: directory + tags: + - config +- name: ensure victoria metrics scrape configuration is set + copy: + dest: /etc/victoria-metrics/scrape.yml + content: '{{ vm_config|to_nice_yaml(indent=2) }}' + mode: '0644' + when: vm_config is not none + notify: + - reload victoria-metrics + tags: + - config + - scrape-config + +- name: ensure victoria metrics starts at boot + service: + name: victoria-metrics + enabled: true + tags: + - service + - systemd +- name: ensure victoria metrics is running + service: + name: victoria-metrics + state: started + tags: + - service + - systemd diff --git a/roles/victoria-metrics/tasks/install.yml b/roles/victoria-metrics/tasks/install.yml new file mode 100644 index 0000000..dcc6a7c --- /dev/null +++ b/roles/victoria-metrics/tasks/install.yml @@ -0,0 +1,61 @@ +- name: load installation variables + include_vars: install.yml + +- name: load architecture variables + include_vars: '{{ item }}' + with_first_found: + - '{{ ansible_architecture }}.yml' + - arch-defaults.yml + +- name: ensure victoria metrics release archive is available + delegate_to: localhost + become: false + get_url: + url: '{{ vm_tar_url }}' + checksum: 'sha256:{{ vm_cksm_url }}' + dest: '{{ playbook_dir }}/{{ vm_tar_name }}' + tags: + - download + +- name: ensure victoria metrics unpack dir exists locally + delegate_to: localhost + become: false + file: + path: '{{ vm_extract_dir }}' + mode: '0755' + state: directory + tags: + - unarchive + +- name: ensure victoria metrics archive is unpacked locally + delegate_to: localhost + become: false + unarchive: + src: '{{ playbook_dir }}/{{ vm_tar_name }}' + dest: '{{ vm_extract_dir }}' + remote_src: true + creates: '{{ vm_extract_dir }}/victoria-metrics-prod' + tags: + - unarchive + +- name: ensure victoria metrics is installed + copy: + src: '{{ vm_extract_dir }}/victoria-metrics-prod' + dest: /usr/local/sbin/victoria-metrics + mode: '0755' + diff: false + notify: + - restart victoria-metrics + +- name: ensure victoria metrics systemd unit is installed + file: + src: victoria-metrics.service + dest: /etc/systemd/system/victoria-metrics.service + mode: '0644' + notify: + - reload systemd + - restart victoria-metrics + tags: + - service + - systemd + diff --git a/roles/victoria-metrics/tasks/main.yml b/roles/victoria-metrics/tasks/main.yml new file mode 100644 index 0000000..4a5ce7f --- /dev/null +++ b/roles/victoria-metrics/tasks/main.yml @@ -0,0 +1,7 @@ +- block: + - import_tasks: install.yml + tags: + - install + - import_tasks: deploy.yml + tags: + - victoria-metrics diff --git a/roles/victoria-metrics/templates/victoria-metrics.sysconfig.j2 b/roles/victoria-metrics/templates/victoria-metrics.sysconfig.j2 new file mode 100644 index 0000000..14daf9f --- /dev/null +++ b/roles/victoria-metrics/templates/victoria-metrics.sysconfig.j2 @@ -0,0 +1,7 @@ +retentionPeriod={{ vm_retention_period }} +{% if vm_self_scrape|bool %} +selfScrapeInterval={{ vm_self_scrape_interval }} +{% endif %} +{% if vm_config is not none %} +promscrape_config=/etc/victoria-metrics/scrape.yml +{% endif %} diff --git a/roles/victoria-metrics/vars/aarch64.yml b/roles/victoria-metrics/vars/aarch64.yml new file mode 100644 index 0000000..e30f973 --- /dev/null +++ b/roles/victoria-metrics/vars/aarch64.yml @@ -0,0 +1,2 @@ +vm_arch: arm64 + diff --git a/roles/victoria-metrics/vars/arch-defaults.yml b/roles/victoria-metrics/vars/arch-defaults.yml new file mode 100644 index 0000000..a426978 --- /dev/null +++ b/roles/victoria-metrics/vars/arch-defaults.yml @@ -0,0 +1 @@ +vm_arch: '{{ ansible_architecture }}' diff --git a/roles/victoria-metrics/vars/install.yml b/roles/victoria-metrics/vars/install.yml new file mode 100644 index 0000000..151a168 --- /dev/null +++ b/roles/victoria-metrics/vars/install.yml @@ -0,0 +1,9 @@ +vm_base_url: + https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download +vm_tar_name: victoria-metrics-{{ vm_arch }}-v{{ vm_version }}.tar.gz +vm_tar_url: >- + {{ vm_base_url }}/v{{ vm_version }}/{{ vm_tar_name }} +vm_cksm_url: >- + {{ vm_base_url }}/v{{ vm_version }}/victoria-metrics-{{ vm_arch }}-v{{ vm_version }}_checksums.txt +vm_extract_dir: >- + {{ playbook_dir }}/victoria-metrics-{{ vm_arch }}-v{{ vm_version }} diff --git a/roles/victoria-metrics/vars/x86_64.yml b/roles/victoria-metrics/vars/x86_64.yml new file mode 100644 index 0000000..bbd797f --- /dev/null +++ b/roles/victoria-metrics/vars/x86_64.yml @@ -0,0 +1 @@ +vm_arch: amd64 diff --git a/victoria-metrics.yml b/victoria-metrics.yml new file mode 100644 index 0000000..d30751e --- /dev/null +++ b/victoria-metrics.yml @@ -0,0 +1,4 @@ +- hosts: victoria-metrics + roles: + - role: victoria-metrics + tags: victoria-metrics