add thanos role
This commit is contained in:
parent
04dfdbd399
commit
4c64613a90
113
roles/thanos/defaults/main.yaml
Normal file
113
roles/thanos/defaults/main.yaml
Normal file
@ -0,0 +1,113 @@
|
||||
---
|
||||
thanos_go_arch_map:
|
||||
i386: '386'
|
||||
x86_64: 'amd64'
|
||||
|
||||
thanos_go_arch: "{{ thanos_go_arch_map[ansible_architecture] | default('amd64') }}"
|
||||
|
||||
thanos_services:
|
||||
- thanos-sidecar
|
||||
- thanos-query
|
||||
- thanos-store
|
||||
- thanos-compact
|
||||
- thanos-query-frontend
|
||||
|
||||
thanos_ports:
|
||||
sidecar: { grpc: 10901, http: 10902 }
|
||||
query: { grpc: 10903, http: 10904 }
|
||||
store: { grpc: 10905, http: 10906 }
|
||||
receive: { grpc: 10907, http: 10909, http_remote_write: 10908 }
|
||||
rule: { grpc: 10910, http: 10911 }
|
||||
compact: { http: 10912 }
|
||||
query_frontend: { http: 10913 }
|
||||
|
||||
|
||||
thanos_sidecar_service_name: thanos-sidecar.service
|
||||
thanos_sidecar_service_enabled: true
|
||||
thanos_sidecar_service_state: started
|
||||
|
||||
thanos_query_service_name: thanos-query.service
|
||||
thanos_query_service_enabled: true
|
||||
thanos_query_service_state: started
|
||||
|
||||
thanos_store_service_name: thanos-store.service
|
||||
thanos_store_service_enabled: true
|
||||
thanos_store_service_state: started
|
||||
|
||||
thanos_compact_service_name: thanos-compact.service
|
||||
thanos_compact_service_enabled: true
|
||||
thanos_compact_service_state: started
|
||||
|
||||
thanos_query_frontend_service_name: thanos-query-frontend.service
|
||||
thanos_query_frontend_service_enabled: true
|
||||
thanos_query_frontend_service_state: started
|
||||
|
||||
thanos_version_regex: ^thanos, version ([\d.]+)
|
||||
|
||||
thanos_checksum_algo: sha256
|
||||
thanos_github_rel_path: thanos-io/thanos
|
||||
thanos_github_project_url: "https://github.com/{{ thanos_github_rel_path }}"
|
||||
thanos_release_file: "thanos-{{ thanos_version }}.{{ ansible_system | lower }}-{{ thanos_go_arch }}.tar.gz"
|
||||
thanos_release_url: "{{ thanos_github_project_url }}/releases/download/v{{ thanos_version }}/{{ thanos_release_file }}"
|
||||
thanos_checksum_url: "{{ thanos_github_project_url }}/releases/download/v{{ thanos_version }}/{{ thanos_checksum_algo }}sums.txt"
|
||||
thanos_download_path: "/tmp/{{ thanos_release_file }}"
|
||||
thanos_unarchive_dest_path: /tmp
|
||||
thanos_extracted_path: "{{ thanos_download_path | replace('.tar.gz', '') }}"
|
||||
thanos_binaries:
|
||||
- thanos
|
||||
|
||||
thanos_user: thanos
|
||||
thanos_user_state: present
|
||||
thanos_user_shell: /usr/sbin/nologin
|
||||
|
||||
thanos_group: thanos
|
||||
thanos_group_state: "{{ thanos_user_state | default('present') }}"
|
||||
|
||||
thanos_etc_path: /etc/thanos
|
||||
thanos_etc_owner: root
|
||||
thanos_etc_group: root
|
||||
thanos_etc_mode: "0755"
|
||||
|
||||
thanos_var_path: /var/lib/thanos
|
||||
thanos_var_owner: "{{ thanos_user }}"
|
||||
thanos_var_group: "{{ thanos_group }}"
|
||||
thanos_var_mode: "0755"
|
||||
|
||||
thanos_bin_path: /usr/local/bin
|
||||
|
||||
thanos_sidecar_tsdb_path: /var/lib/prometheus
|
||||
thanos_sidecar_objstore_config_file: "{{ thanos_etc_path }}/bucket.yaml"
|
||||
thanos_sidecar_objstore_config_file_owner: "{{ thanos_user }}"
|
||||
thanos_sidecar_objstore_config_file_group: "{{ thanos_group }}"
|
||||
thanos_sidecar_objstore_config_file_mode: "0600"
|
||||
thanos_sidecar_prometheus_url: http://localhost:9090
|
||||
thanos_sidecar_http_address: "0.0.0.0:{{ thanos_ports.sidecar.http }}"
|
||||
thanos_sidecar_grpc_address: "0.0.0.0:{{ thanos_ports.sidecar.grpc }}"
|
||||
|
||||
thanos_query_http_address: "0.0.0.0:{{ thanos_ports.query.http }}"
|
||||
thanos_query_grpc_address: "0.0.0.0:{{ thanos_ports.query.grpc }}"
|
||||
thanos_query_store:
|
||||
- "127.0.0.1:{{ thanos_ports.sidecar.grpc }}"
|
||||
- "127.0.0.1:{{ thanos_ports.store.grpc }}"
|
||||
|
||||
thanos_store_data_dir: "{{ thanos_var_path }}/store"
|
||||
thanos_store_objstore_config_file: "{{ thanos_sidecar_objstore_config_file }}"
|
||||
thanos_store_http_address: "0.0.0.0:{{ thanos_ports.store.http }}"
|
||||
thanos_store_grpc_address: "0.0.0.0:{{ thanos_ports.store.grpc }}"
|
||||
|
||||
thanos_compact_data_dir: "{{ thanos_var_path }}/compact"
|
||||
thanos_compact_objstore_config_file: "{{ thanos_sidecar_objstore_config_file }}"
|
||||
thanos_compact_http_address: "0.0.0.0:{{ thanos_ports.compact.http }}"
|
||||
thanos_compact_wait: true
|
||||
|
||||
thanos_query_frontend_http_address: "0.0.0.0:{{ thanos_ports.query_frontend.http }}"
|
||||
thanos_query_frontend_downstream_url: "http://127.0.0.1:{{ thanos_ports.query.http }}"
|
||||
thanos_query_frontend_cache_config:
|
||||
type: IN-MEMORY
|
||||
config:
|
||||
max_size: 256M
|
||||
max_size_items: 0
|
||||
validity: 0s
|
||||
|
||||
thanos_bucket_config: {}
|
||||
thanos_config: {}
|
35
roles/thanos/handlers/main.yaml
Normal file
35
roles/thanos/handlers/main.yaml
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
- name: restart thanos sidecar
|
||||
systemd:
|
||||
name: "{{ thanos_sidecar_service_name }}"
|
||||
daemon_reload: true
|
||||
state: restarted
|
||||
listen: restart thanos
|
||||
|
||||
- name: restart thanos query
|
||||
systemd:
|
||||
name: "{{ thanos_query_service_name }}"
|
||||
daemon_reload: true
|
||||
state: restarted
|
||||
listen: restart thanos
|
||||
|
||||
- name: restart thanos store
|
||||
systemd:
|
||||
name: "{{ thanos_store_service_name }}"
|
||||
daemon_reload: true
|
||||
state: restarted
|
||||
listen: restart thanos
|
||||
|
||||
- name: restart thanos compact
|
||||
systemd:
|
||||
name: "{{ thanos_compact_service_name }}"
|
||||
daemon_reload: true
|
||||
state: restarted
|
||||
listen: restart thanos
|
||||
|
||||
- name: restart thanos query frontend
|
||||
systemd:
|
||||
name: "{{ thanos_query_frontend_service_name }}"
|
||||
daemon_reload: true
|
||||
state: restarted
|
||||
listen: restart thanos
|
15
roles/thanos/tasks/configure-component.yaml
Normal file
15
roles/thanos/tasks/configure-component.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
- name: "{{ item }}: configure systemd"
|
||||
template:
|
||||
src: "{{ item }}.service.j2"
|
||||
dest: "/etc/systemd/system/{{ item }}.service"
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0444
|
||||
notify: "restart {{ item | replace('-', ' ')}}"
|
||||
|
||||
- name: "{{ item }}: manage service"
|
||||
service:
|
||||
name: "{{ item }}.service"
|
||||
enabled: "{{ lookup('vars', item | replace('-', '_') + '_service_enabled') }}"
|
||||
state: "{{ lookup('vars', item | replace('-', '_') + '_service_state') }}"
|
63
roles/thanos/tasks/configure.yaml
Normal file
63
roles/thanos/tasks/configure.yaml
Normal file
@ -0,0 +1,63 @@
|
||||
---
|
||||
- name: sysctl fs.protected_hardlinks
|
||||
sysctl:
|
||||
name: fs.protected_hardlinks
|
||||
value: "0"
|
||||
sysctl_set: yes
|
||||
state: present
|
||||
|
||||
- name: create group
|
||||
group:
|
||||
name: "{{ thanos_group }}"
|
||||
system: true
|
||||
state: "{{ thanos_group_state | default('present') }}"
|
||||
|
||||
- name: create user
|
||||
user:
|
||||
name: "{{ thanos_user }}"
|
||||
system: true
|
||||
shell: "{{ thanos_user_shell }}"
|
||||
group: "{{ thanos_group }}"
|
||||
groups: "{{ prometheus_group }}"
|
||||
createhome: false
|
||||
home: "{{ thanos_var_path }}"
|
||||
state: "{{ thanos_user_state | default('present') }}"
|
||||
append: true
|
||||
|
||||
- name: create etc path
|
||||
file:
|
||||
path: "{{ thanos_etc_path }}"
|
||||
state: directory
|
||||
owner: "{{ thanos_etc_owner }}"
|
||||
group: "{{ thanos_etc_group }}"
|
||||
mode: "{{ thanos_etc_mode }}"
|
||||
|
||||
- name: create var path
|
||||
file:
|
||||
path: "{{ thanos_var_path }}"
|
||||
state: directory
|
||||
owner: "{{ thanos_var_owner }}"
|
||||
group: "{{ thanos_var_group }}"
|
||||
mode: "{{ thanos_var_mode }}"
|
||||
|
||||
- name: configure bucket
|
||||
copy:
|
||||
dest: "{{ thanos_sidecar_objstore_config_file }}"
|
||||
content: "{{ (thanos_bucket_config | default({})) | to_nice_yaml }}"
|
||||
owner: "{{ thanos_sidecar_objstore_config_file_owner }}"
|
||||
group: "{{ thanos_sidecar_objstore_config_file_group }}"
|
||||
mode: "{{ thanos_sidecar_objstore_config_file_mode }}"
|
||||
notify: restart thanos sidecar
|
||||
|
||||
- name: configure thanos query frontend cache
|
||||
copy:
|
||||
dest: "{{ thanos_etc_path }}/cache.yaml"
|
||||
content: "{{ (thanos_query_frontend_cache_config | default({})) | to_nice_yaml }}"
|
||||
owner: "{{ thanos_user }}"
|
||||
group: "{{ thanos_group }}"
|
||||
mode: "0444"
|
||||
notify: restart thanos query frontend
|
||||
|
||||
- name: configure thanos components
|
||||
include: configure-component.yaml
|
||||
loop: "{{ thanos_services }}"
|
0
roles/thanos/tasks/default.yaml
Normal file
0
roles/thanos/tasks/default.yaml
Normal file
30
roles/thanos/tasks/install.yaml
Normal file
30
roles/thanos/tasks/install.yaml
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
- block:
|
||||
- name: download tar
|
||||
get_url:
|
||||
url: "{{ thanos_release_url }}"
|
||||
dest: "{{ thanos_download_path }}"
|
||||
checksum: "{{ thanos_checksum }}"
|
||||
register: dl
|
||||
until: dl is success
|
||||
retries: 5
|
||||
delay: 10
|
||||
|
||||
- name: extract tar
|
||||
unarchive:
|
||||
src: "{{ thanos_download_path }}"
|
||||
dest: "{{ thanos_unarchive_dest_path }}"
|
||||
creates: "{{ thanos_extracted_path }}"
|
||||
remote_src: true
|
||||
|
||||
- name: install binaries
|
||||
copy:
|
||||
src: "{{ thanos_extracted_path }}/{{ item }}"
|
||||
dest: "{{ thanos_bin_path }}/{{ item }}"
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0755
|
||||
remote_src: true
|
||||
loop: "{{ thanos_binaries }}"
|
||||
notify: restart thanos
|
||||
when: thanos_version != thanos_local_version
|
30
roles/thanos/tasks/main.yaml
Normal file
30
roles/thanos/tasks/main.yaml
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
- name: gather os specific variables
|
||||
include_vars: "{{ lookup('first_found', possible_files) }}"
|
||||
vars:
|
||||
possible_files:
|
||||
files:
|
||||
- "{{ ansible_distribution }}-{{ ansible_distribution_version }}.yaml"
|
||||
- "{{ ansible_distribution }}.yaml"
|
||||
- "{{ ansible_os_family }}.yaml"
|
||||
- "default.yaml"
|
||||
paths:
|
||||
- vars
|
||||
|
||||
- name: include os specific tasks
|
||||
include_tasks: "{{ lookup('first_found', possible_files) }}"
|
||||
vars:
|
||||
possible_files:
|
||||
files:
|
||||
- "{{ ansible_distribution }}-{{ ansible_distribution_version }}.yaml"
|
||||
- "{{ ansible_distribution }}.yaml"
|
||||
- "{{ ansible_os_family }}.yaml"
|
||||
- "default.yaml"
|
||||
paths:
|
||||
- tasks
|
||||
|
||||
- include: pre.yaml
|
||||
|
||||
- include: install.yaml
|
||||
|
||||
- include: configure.yaml
|
54
roles/thanos/tasks/pre.yaml
Normal file
54
roles/thanos/tasks/pre.yaml
Normal file
@ -0,0 +1,54 @@
|
||||
---
|
||||
- name: determine if installed
|
||||
stat:
|
||||
path: "{{ thanos_bin_path }}/thanos"
|
||||
register: st
|
||||
|
||||
- name: set thanos_installed
|
||||
set_fact:
|
||||
thanos_installed: "{{ st.stat.exists | bool }}"
|
||||
|
||||
- block:
|
||||
- name: determine latest version
|
||||
uri:
|
||||
url: "https://api.github.com/repos/{{ thanos_github_rel_path }}/releases/latest"
|
||||
return_content: true
|
||||
body_format: json
|
||||
register: _latest_version
|
||||
until: _latest_version.status == 200
|
||||
retries: 3
|
||||
|
||||
- name: set thanos_version
|
||||
set_fact:
|
||||
thanos_version: "{{ _latest_version.json['tag_name'] | regex_replace('^v', '') }}"
|
||||
|
||||
- block:
|
||||
- name: determine installed version
|
||||
command: "{{ thanos_bin_path }}/thanos --version"
|
||||
register: _installed_version_string
|
||||
changed_when: false
|
||||
|
||||
- name: set thanos_local_version
|
||||
set_fact:
|
||||
thanos_local_version: "{{ _installed_version_string.stdout | regex_search(thanos_version_regex, '\\1') | first }}"
|
||||
rescue:
|
||||
- name: set thanos_local_version
|
||||
set_fact:
|
||||
thanos_local_version: "{{ _installed_version_string.stderr | regex_search(thanos_version_regex, '\\1') | first }}"
|
||||
when: thanos_installed
|
||||
|
||||
- name: set thanos_local_version to 0
|
||||
set_fact:
|
||||
thanos_local_version: "0"
|
||||
when: not thanos_installed
|
||||
|
||||
- block:
|
||||
- name: get checksums
|
||||
set_fact:
|
||||
_checksums: "{{ lookup('url', thanos_checksum_url, wantlist=True) }}"
|
||||
|
||||
- name: set thanos_checksum
|
||||
set_fact:
|
||||
thanos_checksum: "{{ thanos_checksum_algo }}:{{ item.split(' ') | first }}"
|
||||
loop: "{{ _checksums }}"
|
||||
when: "thanos_release_file in item"
|
29
roles/thanos/templates/thanos-compact.service.j2
Normal file
29
roles/thanos/templates/thanos-compact.service.j2
Normal file
@ -0,0 +1,29 @@
|
||||
{{ ansible_managed | comment }}
|
||||
|
||||
[Unit]
|
||||
Description=Thanos Store Compactor
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
After=prometheus.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User={{ thanos_user }}
|
||||
Group={{ thanos_group }}
|
||||
SyslogIdentifier=thanos-compact
|
||||
ExecStart={{ thanos_bin_path }}/thanos compact \
|
||||
{% if thanos_compact_data_dir %}
|
||||
--data-dir={{ thanos_compact_data_dir }} \
|
||||
{% endif %}
|
||||
{% if thanos_compact_objstore_config_file %}
|
||||
--objstore.config-file={{ thanos_compact_objstore_config_file }} \
|
||||
{% endif %}
|
||||
{% if thanos_compact_http_address %}
|
||||
--http-address={{ thanos_compact_http_address }} \
|
||||
{% endif %}
|
||||
{% if thanos_compact_wait %}
|
||||
--wait \
|
||||
{% endif %}
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
25
roles/thanos/templates/thanos-query-frontend.service.j2
Normal file
25
roles/thanos/templates/thanos-query-frontend.service.j2
Normal file
@ -0,0 +1,25 @@
|
||||
{{ ansible_managed | comment }}
|
||||
|
||||
[Unit]
|
||||
Description=Thanos Query Frontend
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
After=prometheus.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User={{ thanos_user }}
|
||||
Group={{ thanos_group }}
|
||||
SyslogIdentifier=thanos-query-frontend
|
||||
ExecStart={{ thanos_bin_path }}/thanos query-frontend \
|
||||
--query-range.response-cache-config-file={{ thanos_etc_path }}/cache.yaml \
|
||||
--labels.response-cache-config-file={{ thanos_etc_path }}/cache.yaml \
|
||||
{% if thanos_query_frontend_http_address %}
|
||||
--http-address={{ thanos_query_frontend_http_address }} \
|
||||
{% endif %}
|
||||
{% if thanos_query_frontend_downstream_url %}
|
||||
--query-frontend.downstream-url={{ thanos_query_frontend_downstream_url }} \
|
||||
{% endif %}
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
28
roles/thanos/templates/thanos-query.service.j2
Normal file
28
roles/thanos/templates/thanos-query.service.j2
Normal file
@ -0,0 +1,28 @@
|
||||
{{ ansible_managed | comment }}
|
||||
|
||||
[Unit]
|
||||
Description=Thanos Query
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
After=prometheus.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User={{ thanos_user }}
|
||||
Group={{ thanos_group }}
|
||||
SyslogIdentifier=thanos-query
|
||||
ExecStart={{ thanos_bin_path }}/thanos query \
|
||||
{% if thanos_query_http_address %}
|
||||
--http-address={{ thanos_query_http_address }} \
|
||||
{% endif %}
|
||||
{% if thanos_query_grpc_address %}
|
||||
--grpc-address={{ thanos_query_grpc_address }} \
|
||||
{% endif %}
|
||||
{% if thanos_query_store %}
|
||||
{% for s in thanos_query_store %}
|
||||
--store={{ s }} \
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
32
roles/thanos/templates/thanos-sidecar.service.j2
Normal file
32
roles/thanos/templates/thanos-sidecar.service.j2
Normal file
@ -0,0 +1,32 @@
|
||||
{{ ansible_managed | comment }}
|
||||
|
||||
[Unit]
|
||||
Description=Thanos Sidecar
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
After=prometheus.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User={{ thanos_user }}
|
||||
Group={{ thanos_group }}
|
||||
SyslogIdentifier=thanos-sidecar
|
||||
ExecStart={{ thanos_bin_path }}/thanos sidecar \
|
||||
{% if thanos_sidecar_tsdb_path %}
|
||||
--tsdb.path={{ thanos_sidecar_tsdb_path }} \
|
||||
{% endif %}
|
||||
{% if thanos_sidecar_objstore_config_file %}
|
||||
--objstore.config-file={{ thanos_sidecar_objstore_config_file }} \
|
||||
{% endif %}
|
||||
{% if thanos_sidecar_prometheus_url %}
|
||||
--prometheus.url={{ thanos_sidecar_prometheus_url }} \
|
||||
{% endif %}
|
||||
{% if thanos_sidecar_http_address %}
|
||||
--http-address={{ thanos_sidecar_http_address }} \
|
||||
{% endif %}
|
||||
{% if thanos_sidecar_grpc_address %}
|
||||
--grpc-address={{ thanos_sidecar_grpc_address }} \
|
||||
{% endif %}
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
29
roles/thanos/templates/thanos-store.service.j2
Normal file
29
roles/thanos/templates/thanos-store.service.j2
Normal file
@ -0,0 +1,29 @@
|
||||
{{ ansible_managed | comment }}
|
||||
|
||||
[Unit]
|
||||
Description=Thanos Store Gateway
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
After=prometheus.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User={{ thanos_user }}
|
||||
Group={{ thanos_group }}
|
||||
SyslogIdentifier=thanos-store
|
||||
ExecStart={{ thanos_bin_path }}/thanos store \
|
||||
{% if thanos_store_data_dir %}
|
||||
--data-dir={{ thanos_store_data_dir }} \
|
||||
{% endif %}
|
||||
{% if thanos_store_objstore_config_file %}
|
||||
--objstore.config-file={{ thanos_store_objstore_config_file }} \
|
||||
{% endif %}
|
||||
{% if thanos_store_http_address %}
|
||||
--http-address={{ thanos_store_http_address }} \
|
||||
{% endif %}
|
||||
{% if thanos_store_grpc_address %}
|
||||
--grpc-address={{ thanos_store_grpc_address }} \
|
||||
{% endif %}
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
0
roles/thanos/vars/default.yaml
Normal file
0
roles/thanos/vars/default.yaml
Normal file
Loading…
Reference in New Issue
Block a user