
The curator retention policies will now query the storage nodes within a given deployment and set a suitable index retention policy based on the total amount of storage each index is assumed to produce every day. To ensure we're minimizing the storage required and optimizing search performance several actions are now being taken: * Indexes will be shrunk after a quarter of their retention time. * Indexes will be deleted should they exceed the retention time. Change-Id: I8bf548620b5404d25deaadba8fda93452ef64fa0 Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
168 lines
5.1 KiB
YAML
168 lines
5.1 KiB
YAML
---
|
|
# Copyright 2018, Rackspace US, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
- name: Install Curator
|
|
hosts: "elastic-logstash"
|
|
become: true
|
|
gather_facts: false
|
|
vars:
|
|
haproxy_ssl: false
|
|
|
|
vars_files:
|
|
- vars/variables.yml
|
|
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
|
|
pre_tasks:
|
|
- include_tasks: common_task_data_node_hosts.yml
|
|
tags:
|
|
- always
|
|
|
|
- name: Query es storage
|
|
uri:
|
|
url: "http://127.0.0.1:9200/_nodes/{{ (data_nodes | map('extract', hostvars, 'ansible_host') | list) | join(',') }}/stats/fs"
|
|
method: GET
|
|
register: elk_data
|
|
until: elk_data is success
|
|
retries: 3
|
|
delay: 5
|
|
run_once: true
|
|
|
|
- name: Set available storage fact
|
|
set_fact:
|
|
es_total_available_storage: "{{ ((elk_data['json']['nodes'].values() | list) | map(attribute='fs.total.total_in_bytes') | list | sum) // 1024 // 1024 }}"
|
|
|
|
- name: Set assumed buffer storage fact
|
|
set_fact:
|
|
es_assumed_buffer_storage: "{{ ((es_total_available_storage | int) * 0.25) | round | int }}"
|
|
|
|
- name: Set usable buffer storage fact(s)
|
|
set_fact:
|
|
es_usable_buffer_storage: "{{ (es_total_available_storage | int) - (es_assumed_buffer_storage | int) }}"
|
|
es_expected_storage: "{{ ((elastic_beat_retention_policy_hosts.values() | map('int') | list) | sum) * (elastic_beat_storage_constant | int) }}"
|
|
|
|
- name: Set buffer storage fact
|
|
set_fact:
|
|
es_assumed_usable_storage_per_node: "{{ (es_usable_buffer_storage | int) // (data_nodes | length | int) }}"
|
|
|
|
- name: Set storage the mulitplier
|
|
set_fact:
|
|
es_storage_multiplier: "{{ ((es_usable_buffer_storage | int) < (es_expected_storage | int)) | ternary(((elastic_beat_storage_constant | int) * 2), elastic_beat_storage_constant | int) }}"
|
|
|
|
- name: Set retention facts
|
|
set_fact: "elastic_{{ item.key }}_retention={{ (es_assumed_usable_storage_per_node | int) // ((item.value | int) * (es_storage_multiplier | int)) }}"
|
|
when:
|
|
- hostvars[inventory_hostname]["elastic_" + item.key + "_retention"] is undefined
|
|
with_dict: "{{ elastic_beat_retention_policy_hosts }}"
|
|
|
|
- name: Ensure virtualenv is installed
|
|
apt:
|
|
name: "{{ item }}"
|
|
state: "present"
|
|
update_cache: true
|
|
with_items:
|
|
- python-virtualenv
|
|
- virtualenv
|
|
tags:
|
|
- package_install
|
|
|
|
- name: Ensure curator is installed
|
|
pip:
|
|
name: "elasticsearch-curator<6"
|
|
state: "{{ elk_package_state | default('present') }}"
|
|
extra_args: --isolated
|
|
virtualenv: /opt/elasticsearch-curator
|
|
register: _pip_task
|
|
until: _pip_task is success
|
|
retries: 3
|
|
delay: 2
|
|
tags:
|
|
- package_install
|
|
|
|
- name: exit playbook after uninstall
|
|
meta: end_play
|
|
when:
|
|
- elk_package_state | default('present') == 'absent'
|
|
|
|
tasks:
|
|
- name: create the system group
|
|
group:
|
|
name: "curator"
|
|
state: "present"
|
|
system: "yes"
|
|
|
|
- name: Create the curator system user
|
|
user:
|
|
name: "curator"
|
|
group: "curator"
|
|
comment: "curator user"
|
|
shell: "/bin/false"
|
|
createhome: "yes"
|
|
home: "/var/lib/curator"
|
|
|
|
- name: Create curator data path
|
|
file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
owner: "curator"
|
|
group: "curator"
|
|
mode: "0755"
|
|
recurse: true
|
|
with_items:
|
|
- "/var/lib/curator"
|
|
- "/var/log/curator"
|
|
- "/etc/curator"
|
|
|
|
- name: Drop curator conf file
|
|
template:
|
|
src: templates/curator.yml.j2
|
|
dest: /var/lib/curator/curator.yml
|
|
|
|
- name: Drop curator action file
|
|
template:
|
|
src: templates/curator-actions.yml.j2
|
|
dest: /var/lib/curator/actions.yml
|
|
|
|
post_tasks:
|
|
- name: Run the systemd service role
|
|
include_role:
|
|
name: systemd_service
|
|
private: true
|
|
vars:
|
|
systemd_service_enabled: true
|
|
systemd_user_name: curator
|
|
systemd_group_name: curator
|
|
systemd_services:
|
|
- service_name: "curator"
|
|
execstarts:
|
|
- /opt/elasticsearch-curator/bin/curator
|
|
--config /var/lib/curator/curator.yml
|
|
/var/lib/curator/actions.yml
|
|
timer:
|
|
state: "started"
|
|
options:
|
|
OnBootSec: 30min
|
|
OnUnitActiveSec: 24h
|
|
Persistent: true
|
|
|
|
- name: Enable and restart curator.timer
|
|
systemd:
|
|
name: "curator.timer"
|
|
enabled: true
|
|
state: restarted
|
|
|
|
tags:
|
|
- beat-install
|