Как мне показалось, что данное занятие совсем не тривиальное, решил создать небольшую заметку, как установить и запустить Elastalert. Сам делал по мануалу. Ну и плюс мои заметки.
Установка под RedHat 7.7
Итак, сохраняем все файлы с машины, где есть доступ к интернетам:
yum install --downloadonly --downloaddir=/elasta epel-release python36 python36-setuptools
python36-devel python36-pip gcc
Затем устанавливаем все
yum install -y ...
Качаем последнюю версию elastalert'a и находим там файлик с зависимостями.
Далее сохраняем установочные файлы с помощью pip'a:
pip3 download -r /pathto/elastalert/requirements.txt
Устанавливаем по мануалу, или вкратце так:
Переносим все это добро в /tmp/elasta
Разорхивируем Elastalert в /opt/elastalert
Редактируем setup.py
Коментируем:
#'aws-requests-auth>=0.3.0',
#'boto3>=1.4.4',
#'jira>=1.0.10,<1.0.15'
#'stomp.py>=4.1.17',
#'twilio>=6.0.0,<6.1'
Изменяем версию jsonschema, чтобы подходила под требования.
'jsonschema>=2.6.0,<3.3.0'
Запускаем установку через Pip
python3 -m pip install . --find-links file:/tmp/elasta --no-index
Готово - установка завершена!
Создаем файл конфига:
cp config.yaml.example config.yaml
Редактируем настройки: время выполнения, хост-порт, авторизация и т.д.
После установки хочу запустить Elastalert(а именно сделать индекс под него elastalert-create-index), а получаю ошибку:
ModuleNotFoundError:
Все банальное просто - нужно добавить в env новый путь: /usr/local/bin
Ну или куда вы указали установить Elastalert.
export PATH="$PATH:/usr/local/bin/"
source ~/.bashrc
Также после запуска была такая ошибка:
File "/usr/local/lib/python3.6/site-packages/elastalert/auth.py", line 3, in <module>
import boto3
ModuleNotFoundError: No module named 'boto3'
Т.к. в мануале я выключал установку boto3 то необходимо поправить скрипты запуска, закоментить вызовы бото и другого ПО, которое вы не установили.
vi /usr/local/lib/python3.6/site-packages/elastalert/auth.py
Создаем индекс для алертов:
elastalert-create-index --config /elastalert/config.yaml
Протестировать правило:
elastalert-test-rule --config config.yaml example_rules/example_frequency.yaml
Само правило => проверяем работоспособность апача, если ошибок более 500, отправляем уведомление:
# Rule name, must be unique
name: Example frequency rule
# Type of alert.
# the frequency rule type alerts when num_events events occur with timeframe time
type: frequency
# (Required)
# Index to search, wildcard supported
index: 87*
# (Required, frequency specific)
# Alert when this many documents matching the query occur within a timeframe
num_events: 500
# (Required, frequency specific)
# num_events must occur within this amount of time to trigger an alert
timeframe:
hours: 4
# A list of Elasticsearch filters used for find events
# These filters are joined with AND and nested in a filtered query
# For more info: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl.html
filter:
- term:
service.type: "apache"
# The alert is use when a match is found
alert:
- "email"
# a list of email addresses to send alerts to
email:
- "email@hst.ru"
smtp_host: "10.1.2.5"
Создаем службу для запуска Elastalert
vi /lib/systemd/system/elastalert.service
[Unit]
Description=elastalert
After=multi-user.target
[Service]
Type=simple
WorkingDirectory=/elastalert
ExecStart=/usr/local/bin/elastalert --verbose --rule example_rules/example_frequency.yaml
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
В случае ошибки(или статуса работы) - мониторить:
tail /var/log/messages | grep elasta
Успехов!
Установка под RedHat 7.7
Итак, сохраняем все файлы с машины, где есть доступ к интернетам:
yum install --downloadonly --downloaddir=/elasta epel-release python36 python36-setuptools
python36-devel python36-pip gcc
Затем устанавливаем все
yum install -y ...
Качаем последнюю версию elastalert'a и находим там файлик с зависимостями.
Далее сохраняем установочные файлы с помощью pip'a:
pip3 download -r /pathto/elastalert/requirements.txt
Устанавливаем по мануалу, или вкратце так:
Переносим все это добро в /tmp/elasta
Разорхивируем Elastalert в /opt/elastalert
Редактируем setup.py
Коментируем:
#'aws-requests-auth>=0.3.0',
#'boto3>=1.4.4',
#'jira>=1.0.10,<1.0.15'
#'stomp.py>=4.1.17',
#'twilio>=6.0.0,<6.1'
Изменяем версию jsonschema, чтобы подходила под требования.
'jsonschema>=2.6.0,<3.3.0'
Запускаем установку через Pip
python3 -m pip install . --find-links file:/tmp/elasta --no-index
Готово - установка завершена!
Создаем файл конфига:
cp config.yaml.example config.yaml
Редактируем настройки: время выполнения, хост-порт, авторизация и т.д.
После установки хочу запустить Elastalert(а именно сделать индекс под него elastalert-create-index), а получаю ошибку:
ModuleNotFoundError:
Все банальное просто - нужно добавить в env новый путь: /usr/local/bin
Ну или куда вы указали установить Elastalert.
export PATH="$PATH:/usr/local/bin/"
source ~/.bashrc
Также после запуска была такая ошибка:
File "/usr/local/lib/python3.6/site-packages/elastalert/auth.py", line 3, in <module>
import boto3
ModuleNotFoundError: No module named 'boto3'
Т.к. в мануале я выключал установку boto3 то необходимо поправить скрипты запуска, закоментить вызовы бото и другого ПО, которое вы не установили.
vi /usr/local/lib/python3.6/site-packages/elastalert/auth.py
Создаем индекс для алертов:
elastalert-create-index --config /elastalert/config.yaml
Протестировать правило:
elastalert-test-rule --config config.yaml example_rules/example_frequency.yaml
Само правило => проверяем работоспособность апача, если ошибок более 500, отправляем уведомление:
# Rule name, must be unique
name: Example frequency rule
# Type of alert.
# the frequency rule type alerts when num_events events occur with timeframe time
type: frequency
# (Required)
# Index to search, wildcard supported
index: 87*
# (Required, frequency specific)
# Alert when this many documents matching the query occur within a timeframe
num_events: 500
# (Required, frequency specific)
# num_events must occur within this amount of time to trigger an alert
timeframe:
hours: 4
# A list of Elasticsearch filters used for find events
# These filters are joined with AND and nested in a filtered query
# For more info: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl.html
filter:
- term:
service.type: "apache"
# The alert is use when a match is found
alert:
- "email"
# a list of email addresses to send alerts to
email:
- "email@hst.ru"
smtp_host: "10.1.2.5"
Создаем службу для запуска Elastalert
vi /lib/systemd/system/elastalert.service
[Unit]
Description=elastalert
After=multi-user.target
[Service]
Type=simple
WorkingDirectory=/elastalert
ExecStart=/usr/local/bin/elastalert --verbose --rule example_rules/example_frequency.yaml
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
В случае ошибки(или статуса работы) - мониторить:
tail /var/log/messages | grep elasta
Успехов!