1. Введение в Эласталерт
Elastalert — это подключаемый модуль аварийных сигналов журнала ELK, разработанный Yelp на основе Python.Elastalert сравнивает записи в Elasticsearch с предопределенными правилами оповещения, чтобы определить, выполняются ли условия оповещения. Когда происходит совпадение, одно или несколько действий по оповещению будут инициированы для этого оповещения. Правила предупреждений определяются правилами Elastalert, и каждое правило определяет запрос.
1.1 Как работает ElastAlert
Периодически запрашивайте Elastsearch и передавайте данные типу правила, которое определяет, какие данные необходимо запрашивать.
Когда правило сопоставляется и срабатывает, выдается один или несколько сигналов тревоги.Для этих сигналов тревоги будет выбран канал сигнала тревоги в соответствии с конфигурацией правила, которое представляет собой поведение сигнала тревоги, например электронная почта, корпоративный WeChat и т. д.
1.2 особенности эласталерта
- Простая архитектура, гибкая настройка
- Поддержка нескольких правил сопоставления (частота, пороговое значение, изменение данных, черный и белый список, скорость изменения и т. д.)
- Поддерживает несколько типов оповещений (почта, HTTP POST, пользовательский сценарий и т. д.)
- Сопоставление сводных предупреждений, подавление повторяющихся предупреждений, повторная попытка и истечение срока действия предупреждения
- Удобство использования, информация о состоянии сохраняется в индексе Elasticsearch.
- Отладка и аудит процессов и т. д.
Во-вторых, развертывание elastalert
Подготовка среды:
Система: центос7.6
эластичность:0.2.4
эластичный поиск: 7.9.3
Питон: 3.6.9
точка: 19,3
2.1 Настройка среды python3.6.9
Установить зависимости
yum -y установить wget openssl openssl-devel gcc gcc-c++
# скачать пакет
wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
# Распаковать, скомпилировать и установить
смола xf Python-3.6.9.tgz
компакт-диск Python-3.6.9
./configure --prefix=/usr/local/python --with-openssl
сделать && сделать установить
#Установить git
yum install –y git
#Настроить, создать софтлинк, обновить пипс
мв /usr/bin/python /usr/bin/python_old
ln -s /usr/local/python/bin/python3 /usr/bin/python
ln -s /usr/local/python/bin/pip3 /usr/bin/pip
pip установить --обновить пип
#Обратите внимание, что все скрипты, которые зависят от python2, должны быть изменены на python2.7, потому что python по умолчанию теперь 3.6
sed -i '1s/python/python2.7/g'/usr/bin/yum
sed -i '1s/python/python2.7/g' /usr/libexec/urlgrabber-ext-down
Проверить: python –V
pip -V
2.2 установить эласталерт
Загрузите установочный пакет
Установить напрямую с помощью pip:
pip install elastalert устанавливается непосредственно на официальном сайте, им непросто пользоваться или загружать исходный код для установки
Или установите, используя исходный код клона:
git-клон https://github.com/Yelp/elastalert.git
# установить
#cd эласталерт
2.1 pip установить elasticsearch >= 7.0.0
- Если об ошибке сообщается после выполнения этой команды:
Причина этой проблемы в том, что внутренняя сеть Python нестабильна, что напрямую приводит к сообщениям об ошибках. Поэтому мы часто используем зеркальные источники для решения этой проблемы.
pip install "elasticsearch>=7.0.0" -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn
- Способ 1: имя установочного пакета pip install -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com // зеркальный веб-сайт Douban
- Способ 2: имя установочного пакета pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com //豆瓣
- Способ 3: pip install имя установочного пакета -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn //Университет Цинхуа
- Существуют также следующие внутренние источники пипсов, вы можете попробовать вышеуказанные методы по очереди.
1) http://mirrors.aliyun.com/pypi/simple/Облако Alibaba
2) https://pypi.mirrors.ustc.edu.cn/simple/ Университет науки и технологий Китая
3) http://pypi.mirrors.ustc.edu.cn/simple/ Университет науки и технологий Китая
2.2 pip install -r требования.txt
2.3 установка python setup.py
После успешной установки вы увидите четыре команды
ll /usr/local/python/bin/elastalert*
# Мягкая ссылка на /usr/bin, простая в использовании
ln -s /usr/local/python/bin/elastalert* /usr/bin
#Создать индекс elastalert
elastalert-создать-индекс
Параметр Описание
- Команды, выполняемые будильниками elastalert, будут выполнять соответствующие операции в соответствии с правилами будильника.
- elastalert-create-index создаст индекс, и ElastAlert будет хранить записи выполнения в этом индексе.По умолчанию имя индекса — elastalert_status. Существует 4 _types, каждый из которых имеет собственное поле @timestamp, поэтому вы также можете использовать kibana для просмотра записей журнала этого индекса.
- elastalert-rule-from-kibana считывает параметры фильтрации из сохраненной информационной панели Kibana3, чтобы помочь сгенерировать конфигурацию в config.yaml. Обратите внимание, однако, что он читает только фильтрацию, а не запросы.
- elastalert-test-rule проверяет настройки правила в пользовательской конфигурации.
Три, используйте
Официальная документация: https://elastalert.readthedocs.io (открывается в новом окне)
Документация по правилам: https://elastalert.readthedocs.io/en/latest/ruletypes.html#include
3.1 Создайте индекс тревог
elastalert-создать-индекс
3.2 Основные файлы конфигурации
Во-первых, шаблон основного файла конфигурации — config.yaml.example, который генерирует глобальную конфигурацию
vim config.yaml
# Каталог, используемый для загрузки правил, по умолчанию — example_rules.
rules_folder: правила
# Используется для установки времени отправки запросов в elasticsearch, то есть частоту выполнения аларма
run_every:
секунды: 30
# Используется для установки диапазона поля времени в запросе
буфер_время:
секунды: 30
# Адрес хоста и порт elasticsearch
es_host: 192.168.1.x
es_порт: 9200
# Индекс, созданный журналами, сгенерированными elastalert в elasticsearch
writeback_index: elastalert_status
writeback_alias: elastalert_alerts
# Ограничение по времени для неудачных попыток
alert_time_limit:
дней: 2
3.3 Настройка оповещения по электронной почте
Все правила сигналов тревоги определяются путем создания файла конфигурации в каталоге правил, здесь показано простое создание в качестве демонстрации. Отправьте уведомление по электронной почте после того, как URL-адрес, отслеживаемый в индексе пульса, будет получен и повешен.
Теперь перейдите в kibana и используйте правила поиска, чтобы отфильтровать содержимое будильника, которое я хочу.
Обратите внимание, что при настройке уведомлений по электронной почте вам также необходимо указать внешний файл, который используется для хранения имени пользователя и пароля соответствующего почтового ящика. Расширенные настройки отправки электронной почты
smtp_auth_file: /data/ELK/elastalert/smtp_auth_file.yaml
пароль это код авторизации
Ниже приведен полный файл правила оповещения.
[root@good rule]# cat test.yaml
# конфигурация правила оповещения по электронной почте elastalert
es_host: 192.168.136.125
es_port: 9200
# es_username: elastic
# es_password: 123456
rules_folder: /data/elastalert/rule
name: test.yaml
# # #type : любой
тип:
индекс частоты: filebeat* #Я здесь, чтобы сохранить журнал непосредственно в es
num_events: 2
timeframe:
минуты: 1
realert:
минуты: 1
# #часы: 2 #N минут не повторит тревогу
exponential_realert:
минуты: 5
# часов : 4 #Время будильника увеличивается экспоненциально, до n часов
filter:
- query:
query_string:
query: "message: error"# Настройка отправки почты
smtp_host: "smtp.qq.com"
smtp_port: 25
smtp_auth_file: /data/elastalert/smtp_auth_file.yml
email_reply_to: "[email protected]"
from_addr: "[email protected]"
alert:
- "email"
#Заданный вами alert_text будет отображаться в теле сообщения электронной почты alert_text
: "В журнале мониторинга аварийных сигналов test.log есть журнал ошибок, проверьте его вовремя"
# #
Установите только необходимое поле аварийного сигнала
include: ["error.message", "message","@ timestamp","log.file.path"]
# Получение электронной почты по электронной почте
:
- "[email protected]"
3.3 Проверка правил
Правило только что было добавлено, и теперь вы можете протестировать только что добавленное правило с помощью собственной команды.
elastalert-test-rule --config config.yaml test_rule.yml
Если об ошибке не сообщается, правило доступно.
3.4 начало
Есть два способа начать
(1) Укажите путь к файлу правил
python -m elastalert.elastalert --verbose --config config.yaml --rule rules/ test_rule.yml
(2) По глобальному пути config.yaml правила конфигурации хранятся в каталоге правил загрузки.
python -m elastalert.elastalert --verbose
3.5 Правила предупреждения сервера/хоста настроены следующим образом:
# elastalert邮件告警规则配置
#此规则文件旨在通过elk+heartbeat(心跳检测)+elastalert(弹性告警)实现某服务器宕机预警
es_host: 192.168.x.x #elasticsearch主机IP
es_port: 9200 #elasticsearch端口号
es_username: elastic
es_password: 123456
# rules_folder规则文件存放路径
rules_folder: /data/ELK/elastalert/rule/service_status-rule/
name: test_localhost_status #规则文件名(同一规则文件目录下需唯一)
type: any #触发告警符合类型【ang--标识有命中规则限制条件及触发告警】
index: heartbeat* #查询的索引【在elk系统中使用heartbeat监视服务/主机的存活状态】
num_events: 3 #规定时间内命中规则次数【适用于frequency类型】
timeframe:
minutes: 2 #每2分钟内检测规则命中
realert:
minutes: 30 #n分钟内不会重复告警
exponential_realert:
#minutes: 2
hours: 2 #报警时间以指数的形式递增,最长为n个小时
filter:
- query:
query_string:
query: "monitor.name: test_host AND monitor.status: down"
# @timestamp时间同步配置/data/ELK/elastalert/elastalert/elastalert_modules
match_enhancements:
- "elastalert.elastalert_modules.time_enhancement.TimeEnhancement"
# 邮件发送配置
smtp_host: "smtp.qq.com" #邮件协议服务地址
smtp_port: 25
#发送邮件存储路径(发件邮箱账户/授权码or密码)
smtp_auth_file: /data/ELK/elastalert/smtp_auth_file.yaml
email_reply_to: "[email protected]" #发件账号
from_addr: "[email protected]"
alert:
- "email"
#在邮件正文会显示你定义的alert_text
alert_text: "elk监控告警:test_host(192.168.x.x)服务器/主机疑检测到宕机,请及时排查"
#设置只需要的告警字段
include: ["monitor.status","error.message","monitor.ip","monitor.name","@timestamp"]
# 接收邮件邮箱
email:
- "[email protected]"
Тест: остановить хост
Heartbeat обнаружил неисправный узел
Выполните правило elastalert, чтобы проверить будильник
python -m elastalert.elastalert --verbose --config config.yaml --rule rules/ test_rule.yml
3.6 Обнаруженные ошибки
Ошибка при создании индекса
Ошибка анализа:
По сообщению об ошибке видно, что elastalert-create-index
во время выполнения команды возникло исключение, и конкретная причина в том, что jira
версия пакета конфликтует. Перед выполнением этой команды рекомендуется подтвердить, jira
соответствует ли версия пакета требованиям.
Если jira
в пакете есть конфликт версий, вы можете попробовать удалить пакет и переустановить версию, соответствующую требованиям, например:
pip uninstall jira pip install jira==2.0.0
Или указать номер версии при pip
установке с помощью tools , например:elastalert
pip install elastalert==0.2.4
Таким образом jira
можно избежать влияния конфликтов версий пакетов, и elastalert
команды могут выполняться нормально.