commit 153d45afab6a2ca347f68262c4b8c8d3259ab8c8 Author: ikerbs Date: Wed Dec 22 15:03:21 2021 +0300 add role for victoriametrics v1.71.0 diff --git a/README.md b/README.md new file mode 100644 index 0000000..0ece40e --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +Setup VictoriaMetrics 1.71.0 cluster + +Example hosts file: + + [vmstorage] + vm-1 + vm-2 + vm-3 + + [vminsert] + vm-1 + vm-2 + vm-3 + + [vmselect] + vm-1 + vm-2 + vm-3 + + [vmauth] + vm-1 + vm-2 + vm-3 + + [vmagent] + vm-1 + vm-2 + vm-3 + +Example group_vars: + + victoriametrics_vmauth_users: + - id: "1" + username: "foobar" + password: "foobar" + + victoriametrics_vmagent_prometheus_config: + global: + scrape_interval: '1m' + scrape_timeout: '1m' + scrape_configs: + - job_name: 'rgw' + stream_parse: true + static_configs: + - targets: ['127.0.0.1:9242'] + diff --git a/defaults/main.yaml b/defaults/main.yaml new file mode 100644 index 0000000..2dd90e9 --- /dev/null +++ b/defaults/main.yaml @@ -0,0 +1,38 @@ +victoriametrics_corp_repo: "antonpatsev/VictoriaMetrics" +victoriametrics_version: "1.71.0" + +victoriametrics_vmstorage_group: 'vmstorage' +victoriametrics_vmstorage_version: "{{ victoriametrics_version }}" +victoriametrics_vmstorage_data_dir: "/var/lib/victoria-metrics-cluster-data" + +victoriametrics_vmselect_group: 'vmselect' +victoriametrics_vmselect_version: "{{ victoriametrics_version }}" + +victoriametrics_vminsert_group: 'vminsert' +victoriametrics_vminsert_version: "{{ victoriametrics_version }}" +victoriametrics_vminsert_replication_factor: "2" + + +victoriametrics_vmauth_group: 'vmauth' +victoriametrics_vmauth_version: "{{ victoriametrics_version }}" +victoriametrics_vmauth_config_file: "/etc/victoriametrics/vmauth/config.yml" + +victoriametrics_vmauth_users: [] +# - id: "1" +# username: "foobar" +# password: "foobar" + +victoriametrics_vmagent_group: 'vmagent' +victoriametrics_vmagent_version: "{{ victoriametrics_version }}" +victoriametrics_vmagent_promscrape_config_file: "/etc/victoriametrics/vmagent/prometheus.yml" +victoriametrics_vmagent_remoteWrite_tmpDataPath: "/var/lib/vmagent-remotewrite-data" + +victoriametrics_vmagent_prometheus_config: [] +victoriametrics_vmagent_prometheus_config_default: + global: + scrape_interval: '1m' + scrape_timeout: '1m' + scrape_configs: + - job_name: 'vmagent' + static_configs: + - targets: ['127.0.0.1:8429'] diff --git a/handlers/main.yaml b/handlers/main.yaml new file mode 100644 index 0000000..75a93b0 --- /dev/null +++ b/handlers/main.yaml @@ -0,0 +1,39 @@ +- name: Restart vmstorage + systemd: + name: vmstorage + state: restarted + enabled: yes + daemon_reload: yes + when: not vmstorage_setup.changed + +- name: Restart vminsert + systemd: + name: vminsert + state: restarted + enabled: yes + daemon_reload: yes + when: not vminsert_setup.changed + +- name: Restart vmselect + systemd: + name: vmselect + state: restarted + enabled: yes + daemon_reload: yes + when: not vmselect_setup.changed + +- name: Restart vmauth + systemd: + name: vmauth + state: restarted + enabled: yes + daemon_reload: yes + when: not vmauth_setup.changed + +- name: Restart vmagent + systemd: + name: vmagent + state: restarted + enabled: yes + daemon_reload: yes + when: not vmagent_setup.changed diff --git a/meta/main.yaml b/meta/main.yaml new file mode 100644 index 0000000..1c9e18d --- /dev/null +++ b/meta/main.yaml @@ -0,0 +1,7 @@ +--- +galaxy_info: + description: VictoriaMetrics + galaxy_tags: + - victoriametrics + +dependencies: [] diff --git a/tasks/main.yaml b/tasks/main.yaml new file mode 100644 index 0000000..5502d1e --- /dev/null +++ b/tasks/main.yaml @@ -0,0 +1,33 @@ +- name: Install yum corp plugin + dnf: + name: yum-plugin-copr + state: present + +- name: Check corp repo antonpatsev/VictoriaMetrics is enabled + shell: dnf -y copr list --enabled + register: corp_repo + changed_when: false + +- name: Enable corp repo antonpatsev/VictoriaMetrics + shell: dnf -y copr enable antonpatsev/VictoriaMetrics + when: '"antonpatsev/VictoriaMetrics" not in corp_repo.stdout' + +- name: Include vmstorage {{ victoriametrics_vmstorage_version }} deploy + include: vmstorage.yaml + when: inventory_hostname in groups[victoriametrics_vmstorage_group] + +- name: Include vminsert {{ victoriametrics_vminsert_version }} deploy + include: vminsert.yaml + when: inventory_hostname in groups[victoriametrics_vminsert_group] + +- name: Include vmselect {{ victoriametrics_vmselect_version }} deploy + include: vmselect.yaml + when: inventory_hostname in groups[victoriametrics_vmselect_group] + +- name: Include vmauth {{ victoriametrics_vmauth_version }} deploy + include: vmauth.yaml + when: inventory_hostname in groups[victoriametrics_vmauth_group] + +- name: Include vmagent {{ victoriametrics_vmagent_version }} deploy + include: vmagent.yaml + when: inventory_hostname in groups[victoriametrics_vmagent_group] diff --git a/tasks/vmagent.yaml b/tasks/vmagent.yaml new file mode 100644 index 0000000..749b27e --- /dev/null +++ b/tasks/vmagent.yaml @@ -0,0 +1,35 @@ +- name: Install vmagent {{ victoriametrics_vmagent_version }} + dnf: + name: "vmagent-{{ victoriametrics_vmagent_version }}" + state: present + register: vmagent_setup + notify: Restart vmagent + +- name: Template vmagent config + template: + src: etc/victoriametrics/vmagent/vmagent.conf.j2 + dest: /etc/victoriametrics/vmagent/vmagent.conf + notify: Restart vmagent + +- name: Merge prometheus config values + set_fact: + victoriametrics_vmagent_prometheus_config_combined: "{{ victoriametrics_vmagent_prometheus_config_default | combine(victoriametrics_vmagent_prometheus_config, recursive=true) | to_nice_yaml(indent=2) }}" + +#- name: Template vmagent prometheus config +# copy: +# content: "{{ victoriametrics_vmagent_prometheus_config }}" +# dest: /etc/victoriametrics/vmagent/prometheus.yml +# notify: Restart vmagent + +- name: Template vmagent prometheus config + template: + src: etc/victoriametrics/vmagent/prometheus.yml.j2 + dest: /etc/victoriametrics/vmagent/prometheus.yml + notify: Restart vmagent + +- name: Enable and start vmagent service + systemd: + name: vmagent + state: started + enabled: yes + daemon_reload: yes diff --git a/tasks/vmauth.yaml b/tasks/vmauth.yaml new file mode 100644 index 0000000..7196f09 --- /dev/null +++ b/tasks/vmauth.yaml @@ -0,0 +1,27 @@ +- name: Install vmauth {{ victoriametrics_vmauth_version }} + dnf: + name: "vmauth-{{ victoriametrics_vmauth_version }}" + state: present + register: vmauth_setup + notify: Restart vmauth + +- name: Template vmauth config + template: + src: etc/victoriametrics/vmauth/vmauth.conf.j2 + dest: /etc/victoriametrics/vmauth/vmauth.conf + notify: Restart vmauth + +- name: Template vmauth users config + template: + src: etc/victoriametrics/vmauth/config.yml.j2 + dest: "{{ victoriametrics_vmauth_config_file }}" + notify: Restart vmauth + +- name: Enable and start vmauth service + systemd: + name: vmauth + state: started + enabled: yes + daemon_reload: yes + + diff --git a/tasks/vminsert.yaml b/tasks/vminsert.yaml new file mode 100644 index 0000000..70e5757 --- /dev/null +++ b/tasks/vminsert.yaml @@ -0,0 +1,20 @@ +- name: Install vminsert {{ victoriametrics_vminsert_version }} + dnf: + name: "vminsert-{{ victoriametrics_vminsert_version }}" + state: present + register: vminsert_setup + notify: Restart vminsert + +- name: Template vminsert config + template: + src: etc/victoriametrics/vmcluster/vminsert.conf.j2 + dest: /etc/victoriametrics/vmcluster/vminsert.conf + notify: Restart vminsert + +- name: Enable and start vminsert service + systemd: + name: vminsert + state: started + enabled: yes + daemon_reload: yes + diff --git a/tasks/vmselect.yaml b/tasks/vmselect.yaml new file mode 100644 index 0000000..3f0ccd2 --- /dev/null +++ b/tasks/vmselect.yaml @@ -0,0 +1,19 @@ +- name: Install vmselect {{ victoriametrics_vmselect_version }} + dnf: + name: "vmselect-{{ victoriametrics_vmselect_version }}" + state: present + register: vmselect_setup + notify: Restart vmselect + +- name: Template vmselect config + template: + src: etc/victoriametrics/vmcluster/vmselect.conf.j2 + dest: /etc/victoriametrics/vmcluster/vmselect.conf + notify: Restart vmselect + +- name: Enable and start vmselect service + systemd: + name: vmselect + state: started + enabled: yes + daemon_reload: yes diff --git a/tasks/vmstorage.yaml b/tasks/vmstorage.yaml new file mode 100644 index 0000000..eb38746 --- /dev/null +++ b/tasks/vmstorage.yaml @@ -0,0 +1,32 @@ +- name: Install vmstorage {{ victoriametrics_vmstorage_version }} + dnf: + name: "vmstorage-{{ victoriametrics_vmstorage_version }}" + state: present + register: vmstorage_setup + notify: Restart vmstorage + +- name: Create data directory {{ victoriametrics_vmstorage_data_dir }} + file: + path: "{{ victoriametrics_vmstorage_data_dir }}" + state: directory + owner: victoriametrics + group: victoriametrics + +- name: Template vmstorage config + template: + src: etc/victoriametrics/vmcluster/vmstorage.conf.j2 + dest: /etc/victoriametrics/vmcluster/vmstorage.conf + notify: Restart vmstorage + +#- debug: +# msg: "{{ groups['vmstorage'] | map('extract', hostvars, ['ansible_host']) | join(':8400,') }}:8400" + +#- debug: +# msg: "{{ groups['vmstorage'] | map('extract', hostvars, ['inventory_hostname']) | join(':8400,') }}:8400" + +- name: Enable and start vmstorage service + systemd: + name: vmstorage + state: started + enabled: yes + daemon_reload: yes diff --git a/templates/etc/victoriametrics/vmagent/prometheus.yml.j2 b/templates/etc/victoriametrics/vmagent/prometheus.yml.j2 new file mode 100644 index 0000000..5897df7 --- /dev/null +++ b/templates/etc/victoriametrics/vmagent/prometheus.yml.j2 @@ -0,0 +1,50 @@ +# https://docs.victoriametrics.com/ +# +# https://github.com/VictoriaMetrics/VictoriaMetrics/blob/cluster/deployment/docker/prometheus.yml +# +# Example to use vmagent with VictoriaMetrics Cluster +# +# global: +# scrape_interval: 1s +# evaluation_interval: 1s +# +# scrape_configs: +# - job_name: 'vmagent' +# static_configs: +# - targets: ['vmagent:8429'] +# - job_name: 'vmalert' +# static_configs: +# - targets: ['vmalert:8880'] +# - job_name: 'vminsert' +# static_configs: +# - targets: ['vminsert:8480'] +# - job_name: 'vmselect' +# static_configs: +# - targets: ['vmselect:8481'] +# - job_name: 'vmstorage' +# static_configs: +# - targets: ['vmstorage:8482'] +# +# Example to use vmagent with VictoriaMetrics Single +{{ victoriametrics_vmagent_prometheus_config_combined }} +- job_name: 'vmagent' + static_configs: + - targets: ['127.0.0.1:8429'] +- job_name: 'vminsert' + static_configs: + - targets: +{% for insert in groups[victoriametrics_vminsert_group] %} + - {{ hostvars[insert]['inventory_hostname'] }}:8480 +{% endfor %} +- job_name: 'vmselect' + static_configs: + - targets: +{% for select in groups[victoriametrics_vmselect_group] %} + - {{ hostvars[select]['inventory_hostname'] }}:8481 +{% endfor %} +- job_name: 'vmstorage' + static_configs: + - targets: +{% for storage in groups[victoriametrics_vmstorage_group] %} + - {{ hostvars[storage]['inventory_hostname'] }}:8482 +{% endfor %} diff --git a/templates/etc/victoriametrics/vmagent/vmagent.conf.j2 b/templates/etc/victoriametrics/vmagent/vmagent.conf.j2 new file mode 100644 index 0000000..07ced9c --- /dev/null +++ b/templates/etc/victoriametrics/vmagent/vmagent.conf.j2 @@ -0,0 +1,15 @@ +# https://docs.victoriametrics.com/vmagent.html +# +# Example command line: +# /path/to/vmagent -promscrape.config=/path/to/prometheus.yml -remoteWrite.url=https://victoria-metrics-host:8428/api/v1/write +# +# Please note that to write scraped data from vmagent to VictoriaMetrics Cluster you should use url like in this example -remoteWrite.url=http://vminsert-ip:8480/insert/0/prometheus/ . +# See more information here https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#url-format. +# +# If you only need to collect Influx data, then the following command is sufficient: +# +# /path/to/vmagent -remoteWrite.url=https://victoria-metrics-host:8428/api/v1/write +# +# Then send Influx data to http://vmagent-host:8429. See these https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#how-to-send-data-from-influxdb-compatible-agents-such-as-telegraf for more details. + +ARGS="-promscrape.config={{ victoriametrics_vmagent_promscrape_config_file }} -remoteWrite.url={% for host in groups[victoriametrics_vmauth_group] %}http://{{ hostvars[host]['inventory_hostname'] }}:8427/api/v1/write{% if not loop.last %},{% endif %}{% endfor %} -remoteWrite.tmpDataPath={{ victoriametrics_vmagent_remoteWrite_tmpDataPath }} -remoteWrite.basicAuth.password=foobar,foobar,foobar -remoteWrite.basicAuth.username=foobar,foobar,foobar" diff --git a/templates/etc/victoriametrics/vmauth/config.yml.j2 b/templates/etc/victoriametrics/vmauth/config.yml.j2 new file mode 100644 index 0000000..8fcf8f1 --- /dev/null +++ b/templates/etc/victoriametrics/vmauth/config.yml.j2 @@ -0,0 +1,92 @@ +# # https://docs.victoriametrics.com/vmauth.html#auth-config +# # Arbitrary number of usernames may be put here. +# # Usernames must be unique. + +# users: +# # Requests with the 'Authorization: Bearer XXXX' header are proxied to http://localhost:8428 . +# # For example, http://vmauth:8427/api/v1/query is proxied to http://localhost:8428/api/v1/query +# - bearer_token: "XXXX" +# url_prefix: "http://localhost:8428" + +# # The user for querying local single-node VictoriaMetrics. +# # All the requests to http://vmauth:8427 with the given Basic Auth (username:password) +# # will be proxied to http://localhost:8428 . +# # For example, http://vmauth:8427/api/v1/query is proxied to http://localhost:8428/api/v1/query +# - username: "local-single-node" +# password: "***" +# url_prefix: "http://localhost:8428" + +# # The user for querying local single-node VictoriaMetrics with extra_label team=dev. +# # All the requests to http://vmauth:8427 with the given Basic Auth (username:password) +# # will be routed to http://localhost:8428 with extra_label=team=dev query arg. +# # For example, http://vmauth:8427/api/v1/query is routed to http://localhost:8428/api/v1/query?extra_label=team=dev +# - username: "local-single-node" +# password: "***" +# url_prefix: "http://localhost:8428?extra_label=team=dev" + +# # The user for querying account 123 in VictoriaMetrics cluster +# # See https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#url-format +# # All the requests to http://vmauth:8427 with the given Basic Auth (username:password) +# # will be load-balanced among http://vmselect1:8481/select/123/prometheus and http://vmselect2:8481/select/123/prometheus +# # For example, http://vmauth:8427/api/v1/query is proxied to the following urls in a round-robin manner: +# # - http://vmselect1:8481/select/123/prometheus/api/v1/select +# # - http://vmselect2:8481/select/123/prometheus/api/v1/select +# - username: "cluster-select-account-123" +# password: "***" +# url_prefix: +# - "http://vmselect1:8481/select/123/prometheus" +# - "http://vmselect2:8481/select/123/prometheus" + +# # The user for inserting Prometheus data into VictoriaMetrics cluster under account 42 +# # See https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#url-format +# # All the requests to http://vmauth:8427 with the given Basic Auth (username:password) +# # will be load-balanced between http://vminsert1:8480/insert/42/prometheus and http://vminsert2:8480/insert/42/prometheus +# # For example, http://vmauth:8427/api/v1/write is proxied to the following urls in a round-robin manner: +# # - http://vminsert1:8480/insert/42/prometheus/api/v1/write +# # - http://vminsert2:8480/insert/42/prometheus/api/v1/write +# - username: "cluster-insert-account-42" +# password: "***" +# url_prefix: +# - "http://vminsert1:8480/insert/42/prometheus" +# - "http://vminsert2:8480/insert/42/prometheus" + + +# # A single user for querying and inserting data: +# # - Requests to http://vmauth:8427/api/v1/query, http://vmauth:8427/api/v1/query_range +# # and http://vmauth:8427/api/v1/label//values are proxied to the following urls in a round-robin manner: +# # - http://vmselect1:8481/select/42/prometheus +# # - http://vmselect2:8481/select/42/prometheus +# # For example, http://vmauth:8427/api/v1/query is proxied to http://vmselect1:8480/select/42/prometheus/api/v1/query +# # or to http://vmselect2:8480/select/42/prometheus/api/v1/query . +# # - Requests to http://vmauth:8427/api/v1/write are proxied to http://vminsert:8480/insert/42/prometheus/api/v1/write +# - username: "foobar" +# url_map: +# - src_paths: +# - "/api/v1/query" +# - "/api/v1/query_range" +# - "/api/v1/label/[^/]+/values" +# url_prefix: +# - "http://vmselect1:8481/select/42/prometheus" +# - "http://vmselect2:8481/select/42/prometheus" +# - src_paths: ["/api/v1/write"] +# url_prefix: "http://vminsert:8480/insert/42/prometheus" + +users: +{% for user in victoriametrics_vmauth_users %} + - username: {{ user.username }} + password: {{ user.password }} + url_map: + - src_paths: + - "/api/v1/query" + - "/api/v1/query_range" + - "/api/v1/label/[^/]+/values" + url_prefix: +{% for select in groups[victoriametrics_vmselect_group] %} + - "http://{{ hostvars[select]['inventory_hostname'] }}:8481/select/{{ user.id }}/prometheus" +{% endfor %} + - src_paths: ["/api/v1/write"] + url_prefix: +{% for insert in groups[victoriametrics_vminsert_group] %} + - "http://{{ hostvars[insert]['inventory_hostname'] }}:8480/insert/{{ user.id }}/prometheus" +{% endfor %} +{% endfor %} diff --git a/templates/etc/victoriametrics/vmauth/vmauth.conf.j2 b/templates/etc/victoriametrics/vmauth/vmauth.conf.j2 new file mode 100644 index 0000000..2cccb77 --- /dev/null +++ b/templates/etc/victoriametrics/vmauth/vmauth.conf.j2 @@ -0,0 +1,4 @@ +# https://docs.victoriametrics.com/vmauth.html +# + +ARGS="-auth.config={{ victoriametrics_vmauth_config_file }}" diff --git a/templates/etc/victoriametrics/vmcluster/vminsert.conf.j2 b/templates/etc/victoriametrics/vmcluster/vminsert.conf.j2 new file mode 100644 index 0000000..98b1f6a --- /dev/null +++ b/templates/etc/victoriametrics/vmcluster/vminsert.conf.j2 @@ -0,0 +1,6 @@ +# https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html +# +# https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#architecture-overview +# +#ARGS="-storageNode=127.0.0.1:8400" +ARGS="-storageNode={{ groups[victoriametrics_vmstorage_group] | map('extract', hostvars, ['inventory_hostname']) | join(':8400,') }}:8400 -replicationFactor={{ victoriametrics_vminsert_replication_factor }}" diff --git a/templates/etc/victoriametrics/vmcluster/vmselect.conf.j2 b/templates/etc/victoriametrics/vmcluster/vmselect.conf.j2 new file mode 100644 index 0000000..efd8779 --- /dev/null +++ b/templates/etc/victoriametrics/vmcluster/vmselect.conf.j2 @@ -0,0 +1,6 @@ +# https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html +# +# https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#architecture-overview +# +#ARGS="-storageNode=127.0.0.1:8401" +ARGS="-storageNode={{ groups[victoriametrics_vmselect_group] | map('extract', hostvars, ['inventory_hostname']) | join(':8401,') }}:8401" diff --git a/templates/etc/victoriametrics/vmcluster/vmstorage.conf.j2 b/templates/etc/victoriametrics/vmcluster/vmstorage.conf.j2 new file mode 100644 index 0000000..759bfe1 --- /dev/null +++ b/templates/etc/victoriametrics/vmcluster/vmstorage.conf.j2 @@ -0,0 +1,5 @@ +# https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html +# +# https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#architecture-overview +# +ARGS="-storageDataPath={{ victoriametrics_vmstorage_data_dir }}"