ELK's elastalert сигнализация статьи

1. Введение в Эласталерт

Elastalert — это подключаемый модуль аварийных сигналов журнала ELK, разработанный Yelp на основе Python.Elastalert сравнивает записи в Elasticsearch с предопределенными правилами оповещения, чтобы определить, выполняются ли условия оповещения. Когда происходит совпадение, одно или несколько действий по оповещению будут инициированы для этого оповещения. Правила предупреждений определяются правилами Elastalert, и каждое правило определяет запрос.

1.1 Как работает ElastAlert

Периодически запрашивайте Elastsearch и передавайте данные типу правила, которое определяет, какие данные необходимо запрашивать.

Когда правило сопоставляется и срабатывает, выдается один или несколько сигналов тревоги.Для этих сигналов тревоги будет выбран канал сигнала тревоги в соответствии с конфигурацией правила, которое представляет собой поведение сигнала тревоги, например электронная почта, корпоративный WeChat и т. д.

1.2 особенности эласталерта

  1. Простая архитектура, гибкая настройка
  2. Поддержка нескольких правил сопоставления (частота, пороговое значение, изменение данных, черный и белый список, скорость изменения и т. д.)
  3. Поддерживает несколько типов оповещений (почта, HTTP POST, пользовательский сценарий и т. д.)
  4. Сопоставление сводных предупреждений, подавление повторяющихся предупреждений, повторная попытка и истечение срока действия предупреждения
  5. Удобство использования, информация о состоянии сохраняется в индексе Elasticsearch.
  6. Отладка и аудит процессов и т. д.

Во-вторых, развертывание 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

  1. Если об ошибке сообщается после выполнения этой команды:

Причина этой проблемы в том, что внутренняя сеть Python нестабильна, что напрямую приводит к сообщениям об ошибках. Поэтому мы часто используем зеркальные источники для решения этой проблемы.

pip install "elasticsearch>=7.0.0" -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn

  1. Способ 1: имя установочного пакета pip install -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com // зеркальный веб-сайт Douban
  2. Способ 2: имя установочного пакета pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com //豆瓣
  3. Способ 3: pip install имя установочного пакета -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn //Университет Цинхуа
  4. Существуют также следующие внутренние источники пипсов, вы можете попробовать вышеуказанные методы по очереди.

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-создать-индекс
 

Параметр Описание

  1. Команды, выполняемые будильниками elastalert, будут выполнять соответствующие операции в соответствии с правилами будильника.
  2. elastalert-create-index создаст индекс, и ElastAlert будет хранить записи выполнения в этом индексе.По умолчанию имя индекса — elastalert_status. Существует 4 _types, каждый из которых имеет собственное поле @timestamp, поэтому вы также можете использовать kibana для просмотра записей журнала этого индекса.
  3. elastalert-rule-from-kibana считывает параметры фильтрации из сохраненной информационной панели Kibana3, чтобы помочь сгенерировать конфигурацию в config.yaml. Обратите внимание, однако, что он читает только фильтрацию, а не запросы.
  4. 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команды могут выполняться нормально.

 

 

 

Acho que você gosta

Origin blog.csdn.net/qq_52497256/article/details/130412089
Recomendado
Clasificación