ИНФОРМАТИКА, ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И УПРАВЛЕНИЕ
DOI - 10.32 743/UniTech.2022.98.5.13 795
АВТОМАТИЗАЦИЯ РАЗВЁРТЫВАНИЯ ГЕОРАСПРЕДЕЛЕННЫХ КЛАСТЕРОВ SPLUNK
C ПОМОЩЬЮ TERRAFORM И ANSIBLE
Гумеров Булат Зуфарович
Компания «Д14», старший инженер РФ, Республика Башкортостан, г. Уфа E-mail: bulat.gumerov.z@gmail. com
DEPLOYMENT AUTOMATION OF GEO-DISTRIBUTED SPLUNK CLUSTERS USING TERRAFORM AND ANSIBLE
Bulat Gumerov
Senior engineer, «D14» L.L.C., Russia, Republic of Bashkortostan, Ufa
АННОТАЦИЯ
В современных реалиях жизни требуется думать быстро, делать оперативно и правильно, при этом не допуская ошибок. В статье говорится об автоматизации развёртывания кластеров Splunk с помощью Terraform и Ansible. Использование данных программ позволяет автоматизированно создавать и администрировать кластеры легко, быстро, безопасно и централизованно. До внедрения данных программ создание одного кластера занимало от 3 до 7 рабочих дней и участия двух инженеров, а после внедрения этот процесс занимает от 20 до 40 минут с участием одного сотрудника.
ABSTRACT
In today's realities of life, you have to think fast, do quickly and correctly, while avoiding mistakes. In this article, we will learn how to automate Splunk cluster deployment using Terraform and Ansible. The use of these software allows the automated creation and administration of clusters easily, quickly, securely and centrally. Before the introduction of these programs, the creation of a single cluster took from 3 to 7 working days and the participation of two engineers, and now the process takes 20 to 40 minutes with a single employee.
Ключевые слова: Splunk, Terraform, Ansible, DevOps, автоматизация, кластеризация.
Keywords: Splunk, Terraform, Ansible, DevOps, automation, clusterization.
Terraform
Terraform это один из популярных инструментов с открытым исходным кодом для описания инфраструктуры в виде кода. Он позволяет просто и быстро описывать инфраструктуру в виде кода, который можно запустить в облаке, виртуальной машине или локально. Terraform позволяет использовать декларативный подход для описания инфраструктуры и получить более простой и понятный код, который можно просматривать и исправлять в любой момент [2]. Terraform поддерживает множество облачных провайдеров, например Amazon web services, Azure, Google cloud, OpenStack, VMware, Cloudflare и многие другие. Помимо этого поддерживаются системы оркестрации контейнеров (Kubernetes, Openshift, Rancher, Docker), системы Continuous Integration/Deployment (CI/CD), базы дан-m^MSSQL, MySQL, Elasticsearch), сетевые устрой-ства(PaloAlto, Fortinet, Checkpoint) и многие другие.
В приведенном в статье примере будет использован официальный провайдер VMware Vsphere. Данное программное обеспечение написано на языке программирования Golang компанией Hashicorp.
Ansible
Ansible это открытая система управления конфигурациями, которая используется для автоматизации развёртывания и последующей настройки программного обеспечения, написанное на языке программирования Python. Для подключения к серверам с Unix-подобными операционными системами, такими как Linux, BSD, macOS, используется протокол SSH, либо WinRM для ОС Windows. Также Ansible поддерживает работу с сетевыми устройствами, на которых доступны SSH и Python. В настоящее время Ansible разрабатывается и поддерживается компанией Red Hat [3].
Библиографическое описание: Гумеров Б.З. АВТОМАТИЗАЦИЯ РАЗВЁРТЫВАНИЯ КЛАСТЕРОВ SPLUNK C ПОМОЩЬЮ TERRAFORM И ANSIBLE В МУЛЬТИОБЛАЧНОМ ОКРУЖЕНИИ // Universum: технические науки : электрон. научн. журн. 2022. 5(98). URL: https://7universum. com/ru/tech/archive/item/13795
№ 5 (98)
А1
UNIVERSUM:
ТЕХНИЧЕСКИЕ НАУКИ
май, 2022 г.
Перечень задач, которые нужно совершить на серверах, описаны в плейбуках и ролях. Это список действий в формате YAML, которые должны будут выполнены на определенной группе хостов.
Ansible позволяет управлять сразу множеством серверов, которые описаны в inventory файле — текстовом документе в форматах YAML, JSON, либо INI. Также можно использовать динамический inventory, например, обратившись к облачному провайдеру посредством API и получить список облачных серверов с IP-адресами. Данный подход помогает избежать ошибок при составлении статичных текстовых inventory файлов, а также упрощает и ускоряет работу по написанию плейбуков.
Splunk
Splunk это проприетарное программное обеспечение для поиска, мониторинга и анализа больших объемов машинных данных и событий. Обладает удобным веб интерфейсом и API. Splunk Enterprise Security это довольно мощный инструмент для обработки и анализа лог-файлов и событий информационной безопасности, собираемых с таких источников как антивирусы, файрволлы, системы идентификации и управления доступа, сетевые устройства, виртуальные машины, сервера и различные облачные провайдеры и т.д [1].
Установка и настройка кластера Splunk вручную занимает довольно длительное время. Сначало необходимо подобрать характеристики виртуальных машин под каждый из компонентов кластера Splunk -cluster master, indexer, search head, heavy forwarder. Затем нужно рассчитать объем индексируемых log-файлов в сутки, количество горячих, холодных и замороженных бакетов с помощью калькулятора [4].
terraform {
required providers { vsphere = {
source = "hashicorp/vsphere" version = "2.0.2"
Деплой геораспределенного кластера Splunk
Для повышения отказоустойчивости и ускорения работы при индексировании и анализе больших объемов данных необходимо создать геораспределен-ный (то есть multisite по официальной терминологии) кластер Splunk. В каждом из датацентров будет располагаться по два indexer, три search head и один cluster master.
Сердцем Splunk является indexer, который принимает, обрабатывает, индексирует и хранит логи. Для минимальной работы Splunk indexer необходимо иметь высокопроизводительные SSD-диски с хорошим IOPS, серверный процессор с 12 физическими ядрами (или 24 потока), 12 ГБ оперативной памяти.
Splunk search head занимаются распределением поисковых запросов в кластере индексеров и сбором результатов. Минимальные системные требования следующие: серверный процессор c 16 физическими ядрами, 12 ГБ оперативной памяти. Для поиска событий обычно открывается порт HTTP(S) 8000 для доступа к веб-интерфейсу аналитикам по информационной безопасности.
Splunk cluster master управляет всеми компонентами кластера, при этом возможна работа только одного активного cluster master, второй cluster master во втором датацентре используется в качестве резервного. Системные требования здесь минимальные, 1 ГБ оперативной памяти и процессор с одним ядром успешно справляются с задачей. Так же не лишним будет напомнить, что скорость сетевых интерфейсов на каждом из серверов должна быть не менее 1 Гб/сек.
Предлагаемая инфраструктура в Terraform: имеются два датацентра в Москве и Санкт-Петербурге, которые работают на VMware Vsphere и соединены друг с другом через VPN по протоколу IPSEC со скоростью соединения до 1 Гб/сек. Для начала следует инициализировать используемых провайдеров в файле providers.tf:
}
}
provider "vsphere" {
alias =
user =
password =
vsphere server =
allow unverified ssl =
}
"msk"
"your [email protected]" "your password" "10.07251.100" true
provider "vsphere" {
alias =
user =
password =
vsphere server =
allow unverified ssl =
}
"spb"
"your [email protected]" "your password" "10.17251.100" true
В файле main.tf необходимо описать требуемую позволят уменьшить объем кода и повысить его чи-
инфраструктуру для каждого из компонентов кла- таемость. Полный код приведен в репозитории [5].
стера. Для этого будут использованы модули, которые Ниже приведена часть кода для создания Splunk
indexer cluster в московском датацентре:
module "splunk-indexer-msk-linuxvm" { providers = {
vsphere = vsphere.msk #Указываем датацентр — Москва либо Санкт-Петербург
}
source = "Terraform-VMWare-Modules/vm/vsphere" version = "3.1.0" #Используется модульная архитектура dc = "MSK-Datacenter"
vmrp = "/MSK-Datacenter/host/vSAN Cluster/Resources" vmfolder = "CT/CT21" is windows image = false
vmtemp = "tpl-centos8" #Образ для клонирования ВМ firmware = "efi"
instances = 2 #Количество виртуальных машин и их
cpu number = 16 #характеристики
ram size = 32768
vmname = "msk-srv-ct21-idx"
domain = "example.com"
network = {
"Customer21 Network" = ["10.0.21.20", "10.0.21.21"]
}
ipv4submask = ["24"] network type = ["vmxnet3"]
dns_server_list = ["10.0.250.10", "10.1.250.10"] vmgateway = "10.0.21.1" tags = {
"terraform-category" = "terraform-tag" "env" = "production" "role" = "splunk-indexer"
}
data disk = { #Здесь описаны два диска для хранения данных
hot disk = {
size_gb = 2000, thin provisioned = false, data_disk_scsi_controller = 0, datastore id = "datastore-1"
}
frozen disk = { size_gb = 3000, thin provisioned = false, data_disk_scsi_controller = 0, datastore id = "datastore-2"
}
}
scsi_bus_sharing = "physicalSharing" scsi type = "pvscsi" scsi_controller = 0 enable disk uuid = true
}
Из приведенного выше части кода следует, что с помощью terraform будут созданы необходимые виртуальные машины. Запуск процесса создания виртуальных машин в скрипте происходит с помощью команды:
terraform apply -auto-approve
Через две минуты виртуальные машины готовы и можно приступить к началу конфигурации кластера Splunk с помощью АшЛ1е. А^Ме умеет динамически выгружать списки серверов через плагин vmware_vm_inventory:
plugin: community.vmware.vmware vm inventory strict: False
hostname: 10.0.251.100 #IP адрес VMware Vsphere и данные для входа
username: your [email protected]
password: 'your_password'
validate certs: False
# with tags: True
properties:
- 'runtime.powerState'
- 'config.name'
- 'guest.ipAddress' filters:
- runtime.powerState == "poweredOn" and (config.name is search('msk-srv-splunk') or config.name is search('spb-srv-splunk')) #Фильтруем по имени серверов Splunk hostnames:
- config.name
Компания Splunk разрабатывает и поддерживает официальную роль Ansible для развёртывания их продукта внутри контейнеров docker [6].
Далее будет использован динамический скрипт inventory, с помощью которого задаются основные параметры кластера, такие как версия Splunk, пароли для веб-интерфейса, ключи для searchhead и indexer кластеризации, фактор репликации и тому подобные настройки.
Но прежде чем приступить к запуску официальной роли Splunk, необходимо подготовить операционную систему и окружение для запуска кластера,
так как эта роль предназначена для работы только внутри контейнеров docker, в которых уже имеется всё необходимое. К примеру, необходимо обновить все пакеты в системе, создать пользователя и группу splunk с ограниченными правами доступа, а также пользователя деплоя с полными правами для ansible, отключить transparent huge pages, включить синхронизацию времени на сервере по протоколу NTP и т.д. Поскольку фактически ничего этого нет, запустим созданную роль prepare, которая все подготовит и затем запустит основную официальную роль Splunk:
- hosts: all
gather facts: yes strategy: free vars:
version: 8.2.1 #Устанавливаемая версия Splunk build: ddff1c41e5cf
license uri: https://172.17.240.40:8089 #IP адрес Splunk license master password: your_password
shc pass4symmkey: your shc pass4symmkey #Параметры searchhead кластера shc label: your shc label
idxc pass4symmkey: your idxc pass4symmkey #Параметры indexer кластера
idxc discoverypass4symmkey: your idxc pass4symmkey
idxc label: your idxc label
pass4symmkey: your shc pass4symmkey
multisite replication factor origin: 1
multisite replication factor total: 3
multisite search factor origin: 1
multisite search factor total: 3
all sites: #Здесь задаются наши датацентры
- site1 # В Москве
- site2 # и Санкт-Петербурге roles:
- prepare post tasks:
- name: Touch ansible log file #Логи пишутся в этот файл ansible.builtin.file:
path: /opt/container artifact/ansible.log state: touch owner: ansible group: ansible become: yes
#Запуск официального плейбука splunk-ansible: - name: Execute splunk-ansible deployment
shell: cd /opt/ansible/ && ansible-playbook -i inventory/environ.py -connection local site.yml become: yes
Заключение
В данной статье показано как с помощью современных DevOps инструментов можно уменьшить скорость развёртывания кластера Splunk от нескольких дней до 20 - 30 минут. Кроме того, это уменьшает вероятность возникновения ошибок при развёртывании путём минимизации человеческого фактора. Также данный подход можно использовать для развёртывания нескольких кластеров для различных сред - тестовых и основных рабочих. В рабочих средах важна надёжность и отказоустойчивость работы,
а в тестовых стендах обычно тестируются новые интеграции с различными системами и сервисами. Предлагаемый подход к автоматизации развертывания геораспределённых кластеров позволяет быстро создать новый кластер, что-то в нём протестировать и поэкспериментировать, а затем также быстро его выключить и удалить.
Весь исходный код проекта доступен в репози-ториях GitHub:
https://github.com/Bulat-Gumerov/prepare-splunk https://github.com/Bulat-Gumerov/splunk-muШsite-duster
Список литературы:
1. James D. Miller. // Mastering Splunk 8. Birmingham, UK, Packt Publishing - 2020 ISBN: 978-1-83898-748-0
2. Евгений Брикман. // Terraform: Up & Running. Birmingham, UK, Packt Publishing - 2020. ISBN 978-1-492-04690-5
3. Daniel Oh, James Freeman, Fabio Alessandro Locati. // Practical Ansible 2. Birmingham, UK, Packt Publishing -2021. ISBN: 978-1-78980-746-2
4. http://splunk-sizing.appspot.com/
5. https://github.com/Bulat-Gumerov/splunk-multisite-cluster
6. https ://github.com/splunk/splunk-ansible