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.
btop
Dustin 2022-02-13 12:11:45 -06:00
parent 8176eaf694
commit 0785fda26b
14 changed files with 211 additions and 0 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
/.vault-secret.gpg /.vault-secret.gpg
.fact-cache .fact-cache
/victoria-metrics-*.tar.gz
/victoria-metrics-*/

2
hosts
View File

@ -154,6 +154,8 @@ smtp1.pyrocufflink.blue
[synapse] [synapse]
matrix0.pyrocufflink.blue matrix0.pyrocufflink.blue
[victoria-metrics]
[vm-hosts] [vm-hosts]
[wheelhost] [wheelhost]

View File

@ -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 }}"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,7 @@
- block:
- import_tasks: install.yml
tags:
- install
- import_tasks: deploy.yml
tags:
- victoria-metrics

View File

@ -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 %}

View File

@ -0,0 +1,2 @@
vm_arch: arm64

View File

@ -0,0 +1 @@
vm_arch: '{{ ansible_architecture }}'

View File

@ -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 }}

View File

@ -0,0 +1 @@
vm_arch: amd64

4
victoria-metrics.yml Normal file
View File

@ -0,0 +1,4 @@
- hosts: victoria-metrics
roles:
- role: victoria-metrics
tags: victoria-metrics