Добро пожаловать в это руководство по развертыванию сервера Graylog на системе Ubuntu/Debian/CentOS Linux с помощью Ansible.
Graylog – это бесплатный инструмент для агрегации и управления логами с открытым исходным кодом.
Он используется для сбора, анализа, визуализации журналов и отправки оповещений.
Сервер Graylog состоит из 4 компонентов, а именно:
- Graylog Server – сервер, который передает журналы для визуализации на веб-интерфейсе.
- MongoDB – это сервер базы данных, используемый для хранения данных и конфигураций.
- ElasticSearch – это инструмент анализа журналов для Graylog Server.
- Java – обеспечивает среду выполнения для ElasticSearch.
Все эти инструменты работают вместе для достижения главной цели – агрегации и управления журналами.
Использование Ansible для развертывания сервера Graylog Server позволяет легко автоматизировать рекурсивную задачу.
Ansible, как и другие инструменты оркестрации, должен быть установлен на управляющем узле, чтобы иметь возможность управлять подключенными хостами.
Эта установка с помощью ansible в настоящее время работает в следующих системах:
- CentOS / RHEL: CentOS 7/8, RHEL 7/8
- Debian: Debian 10 / Debian 9
- Ubuntu: Ubuntu 20.04 / Ubuntu 18.04
Шаг 1. Установка и настройка Ansible
Ansible может быть установлен на управляющей ноде несколькими методами.
Самый простой способ установить его на любой дистрибутив Linux – это использование PIP.
Прежде чем приступить к этому методу, необходимо установить Python и PIP.
##На Ubuntu
sudo apt update
sudo apt install python3 python3-pip -y
##На CentOS
sudo yum install python3 python3-pip -y
Теперь используйте установленный PIP для установки Ansible.
sudo pip3 install ansible
На macOS вы можете использовать brew для установки Ansible
brew install ansible
Проверьте правильность установки.
$ ansible --version
ansible [core 2.12.4]
config file = None
configured module search path = ['/home/ubuntu/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
ansible collection location = /home/ubuntu/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
jinja version = 2.10.1
libyaml = True
Ansible также может быть установлен из репозиториев пакетов по умолчанию:
##На Ubuntu / Debian
sudo apt install ansible
##На CentOS
sudo yum install epel-release
sudo yum install ansible
Создайте файл инвентари хостов nsible
Этот файл состоит из хостов, управляемых Ansible.
$ sudo vim /etc/ansible/hosts
[graylog]
192.168.205.9 ansible_ssh_user=username
Замените “username” в приведенной ниже команде на имя пользователя главного хоста.
Сгенерируйте и скопируйте SSH-ключи управляемого хоста на управляющую ноду.
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub username@192.168.205.9
Это позволит вам управлять добавленными хостами без пароля.
Проверьте, работает ли это:
$ ansible -m ping all
192.168.205.9 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
Шаг 2. Установите роль Graylog Ansible
Роль Graylog Ansible позволяет установить и настроить Graylog.
Ее можно установить с помощью команды:
$ ansible-galaxy install graylog2.graylog
Starting galaxy role install process
- downloading role 'graylog', owned by graylog2
- downloading role from https://github.com/Graylog2/graylog-ansible-role/archive/3.3.7.tar.gz
- extracting graylog2.graylog to /Users/jkmutai/.ansible/roles/graylog2.graylog
- graylog2.graylog (3.3.7) was installed successfully
- adding dependency: lean_delivery.java (7.1.0)
- adding dependency: elastic.elasticsearch (main)
- downloading role 'java', owned by lean_delivery
- downloading role from https://github.com/lean-delivery/ansible-role-java/archive/7.1.0.tar.gz
- extracting lean_delivery.java to /Users/jkmutai/.ansible/roles/lean_delivery.java
- lean_delivery.java (7.1.0) was installed successfully
- extracting elastic.elasticsearch to /Users/jkmutai/.ansible/roles/elastic.elasticsearch
- elastic.elasticsearch (main) was installed successfully
Из приведенного выше результата вы заметите, что следующие зависимости были установлены.
- Java
- Elasticsearch
Проверьте, были ли установлены зависимости роли , используя команду:
ansible-galaxy install -r ~/.ansible/roles/graylog2.graylog/requirements.yml
Не забудьте заменить ~/.ansible/roles/graylog2.graylog/ на правильный путь к вашей роли Graylog Ansible.
Шаг 3. Развертывание сервера Graylog с помощью Ansible Roles
Создайте playbook YAML для установки сервера Graylog в одном экземпляре.
vim graylog-playbook.yaml
Файл будет содержать следующие строки:
- hosts: "graylog"
remote_user: "username"
become: True
vars:
#Elasticsearch vars
es_major_version: "7.x"
es_version: "7.10.2"
es_enable_xpack: False
es_instance_name: "graylog"
es_heap_size: "1g"
es_config:
node.name: "graylog"
cluster.name: "graylog"
http.port: 9200
transport.tcp.port: 9300
network.host: "127.0.0.1"
discovery.seed_hosts: "localhost:9300"
cluster.initial_master_nodes: "graylog"
oss_version: True
es_action_auto_create_index: False
#Graylog vars
graylog_version: 4.2
graylog_install_java: True
graylog_password_secret: "ncc4jque0VvGImadZ7jzX26NrESt30dY4U4nNfZWAXubcvUGDKnMjbC4eEAU0KcfWX6CDk4ME80CrYPP9ErpvyFPXc2H2xKf" # Insert your own here. Generate with: pwgen -s 96 1
graylog_root_password_sha2: "434e27fac24a15cbf8b160b7b28c143a67d9e6939cbb388874e066e16cb32d75" # Insert your own root_password_sha2 here.
graylog_http_bind_address: "{{ ansible_default_ipv4.address }}:9000"
graylog_http_publish_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
graylog_http_external_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
roles:
- role: "graylog2.graylog"
tags:
- "graylog"
Не забудьте заменить сгенерированный командой graylog_password_secret:
$ pwgen -N 1 -s 96
ncc4jque0VvGImadZ7jzX26NrESt30dY4U4nNfZWAXubcvUGDKnMjbC4eEAU0KcfWX6CDk4ME80CrYPP9ErpvyFPXc2H2xKf
Также замените graylog_root_password_sha2, созданный с помощью команды:
$ echo -n "Enter Password: " && head -1 </dev/stdin | tr -d 'n' | sha256sum | cut -d" " -f1
Enter Password: Str0ngPassw0rd
434e27fac24a15cbf8b160b7b28c143a67d9e6939cbb388874e066e16cb32d75
Теперь разверните сервер Graylog.
ansible-playbook graylog-playbook.yaml
## With custom inventory file ###
ansible-playbook graylog-playbook.yaml -i myinventory
Проверьте, запущен ли Elasticsearch:
$ curl -X GET localhost:9200
{
"name" : "graylog",
"cluster_name" : "graylog",
"cluster_uuid" : "O6qVFbgjQvmTDZ3j-cAVSg",
"version" : {
"number" : "7.10.2",
"build_flavor" : "oss",
"build_type" : "rpm",
"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
"build_date" : "2021-01-13T00:42:12.435326Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Развертывание кластера Graylog с помощью Ansible (необязательно для HA)
Также можно развернуть кластер Graylog с большим количеством экземпляров Elasticsearch и Graylog.
Приведенный ниже пример включает 3 экземпляра Elasticsearch и 3 экземпляра Graylog.
Начните с развертывания кластера Elasticsearch:
- hosts: "elasticsearch"
vars:
es_major_version: "7.x"
es_version: "7.10.2"
es_enable_xpack: False
es_instance_name: "graylog"
es_heap_size: "1g"
es_config:
node.name: "{{ ansible_hostname }}"
cluster.name: "graylog"
http.port: 9200
transport.port: 9300
network.host: "0.0.0.0"
discovery.seed_hosts: "elasticsearch01:9300, elasticsearch02:9300, elasticsearch03:9300"
cluster.initial_master_nodes: "elasticsearch01, elasticsearch02, elasticsearch03"
oss_version: True
es_action_auto_create_index: False
roles:
- role: "elastic.elasticsearch"
Затем перейдите к развертыванию экземпляров MongoDB:
- hosts: "graylog"
vars:
mongodb_version: "4.4"
bind_ip: "0.0.0.0"
repl_set_name: "rs0"
authorization: "disabled"
roles:
- community.mongodb.mongodb_repository
- community.mongodb.mongodb_mongod
tasks:
- name: "Start MongoDB"
service:
name: "mongod"
state: "started"
enabled: "yes"
- hosts: "graylog01"
tasks:
- name: "Install PyMongo"
apt:
update_cache: yes
name: "python3-pymongo"
state: "latest"
- name: Configure replicaset
community.mongodb.mongodb_replicaset:
login_host: "localhost"
replica_set: "rs0"
members:
- graylog01
- graylog02
- graylog03
Наконец, разверните экземпляр Graylog:
- hosts: "graylog"
vars:
graylog_is_master: "{{ True if ansible_hostname == 'graylog01' else False }}"
graylog_version: 4.2
graylog_install_java: False
graylog_install_elasticsearch: False
graylog_install_mongodb: False
graylog_password_secret: "" # Insert your own here. Generate with: pwgen -s 96 1
graylog_root_password_sha2: "" # Insert your own root_password_sha2 here.
graylog_http_bind_address: "{{ ansible_default_ipv4.address }}:9000"
graylog_http_publish_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
graylog_http_external_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
graylog_elasticsearch_hosts: "http://elasticsearch01:9200,http://elasticsearch02:9200,http://elasticsearch03:9200"
graylog_mongodb_uri: "mongodb://graylog01:27017,graylog02:27017,graylog03:27017/graylog"
roles:
- role: "graylog2.graylog"
Таким образом, у вас будет кластер Graylog с 3 экземплярами Elasticsearch и 3 экземплярами Graylog.
Шаг 4. Получите доступ к веб-интерфейсу Graylog
Теперь разрешите порт 9000 на брандмауэре:
##На Firewalld
sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --reload
##На UFW
sudo ufw allow 9000/tcp
Войдите в систему, используя стандартного пользователя admin и пароль, заданный с помощью graylog_root_password_sha2.
После успешной аутентификации вы должны получить доступ.