Elasticsearch 日志监控方案

本文介绍了如何使用ElastAlert和Watcher两种工具对Nginx日志进行监控和告警。首先,部署Nginx并配置Filebeat将日志推送到Elasticsearch。然后,通过ElastAlert创建规则,当在1分钟内有5次'error'日志时触发HTTP POST告警。最后,展示了使用Watcher创建定时任务,监控含有'error'的日志,并同样发送HTTP POST告警。这两个工具都提供了灵活的规则配置和多种告警方式。

现在大部分公司都会选择将应用、中间件、系统等日志存储在 Elasticsearch 中,如何发现日志中的异常数据并且及时告警通知就显得十分重要。本文将会介绍两种主流的日志监控方案,分别是 Yelp 公司开源的 ElastAlert 和 Elastic 官方的商业版功能 Watcher。

如下图所示,日志数据源是一台 Nginx 服务器,在该服务器上安装 Filebeat 收集 Nginx 日志并输出到 Elasticsearch,之后会分别演示用 ElastAlert 和 Watcher 两种方案监控日志并进行告警。

部署 Nginx

安装依赖

yum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake wget httpd-tools vim tree zlib-devel

下载安装包

wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar -xzvf nginx-1.14.0.tar.gz

编译安装

cd nginx-1.14.0
./configure

配置 Nginx

编辑配置文件 /usr/local/nginx/conf/nginx.conf,在 Nginx 上配置一个静态网页服务。

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    server {
        listen  80;
        location / {
            root html;
        }
    }
}

启动 Nginx:

sbin/nginx

访问 Nginx:

部署 Filebeat

下载并安装 Filebeat。

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.14.0-x86_64.rpm
sudo rpm -vi filebeat-7.14.0-x86_64.rpm

编辑 /etc/filebeat/filebeat.yml 配置文件,读取 Nginx 日志文件输出到 Elasticsearch 的 nginx 索引中,后缀是当前日期。

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/*.log
output.elasticsearch:
  hosts: ["192.168.1.8:9200"]
  index: "nginx-%{+yyyy.MM.dd}"
  #username: "elastic"
  #password: "changeme"
setup.ilm.enabled: false
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"

启动 Filebeat:

systemctl start filebeat

ElastAlert

ElastAlert 是 Yelp 公司开源的一套用 Python 写的 Elasticsearch 告警框架,可以从 Elasticsearch 当中查询出匹配规则的数据进行告警。

ElastAlert 有以下特点:

  • 支持多种匹配规则(频率、阈值、数据变化、黑白名单、变化率等)。
  • 支持多种告警类型(邮件、HTTP POST、自定义脚本等)。
  • 支持用户自定义规则和告警类型。
  • 匹配项汇总报警,重复告警抑制,告警失败重试和过期。
  • 可用性强,状态信息保存到 Elasticsearch 的索引中。
  • 支持调试和审计。

部署 Elastalert

安装 Python
wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar -zxvf Python-3.6.9.tgz
cd Python-3.6.9
./configure
make && make install

检查 Python 版本:

python3 -V

安装依赖

yum install gcc libffi-devel python3-devel openssl-devel -y
pip3 install -U pip
pip3 install "setuptools>=11.3"

安装 Elastalert

python3 install elastalert

配置 Elastalert

克隆代码到本地:

git clone https://github.com/Yelp/elastalert.git
cd elastalert

我们可以在 ElastAlert 源码文件的根目录下找到一个叫做 config.yaml.example 的文件,修改文件名为 config.yaml:

mv config.yaml.example  config.yaml

创建存放规则的目录。

mkdir rules
cd rules

编辑 config.yaml 文件,修改主配置:

#规则存放的目录
rules_folder: rules

#运行的频率
run_every:
  minutes: 1

#ElastAlert 将缓存最近一段时间的结果,以防某些日志源不是实时的
buffer_time:
  minutes: 45

#Elasticsearch 地址
es_host: 192.168.1.8

#Elasticsearch 端口
es_port: 9200

#Elasticsearch 用户名密码(可选)
#es_username: someusername
#es_password: somepassword

#ElastAlert 元数据存储索引
writeback_index: elastalert_status

#如果警报因某种原因失败,ElastAlert将重试发送警报,直到该时间段结束
alert_time_limit:
  days: 2

创建 rules/nginx.yaml 文件,编辑 rule:

规则内容为:在 1 分钟内如果查询 nginx-* 索引的 message 字段匹配 到 error 5 次就触发告警,往指定的 URL 发送一个 HTTP POST 请求。

# Alert when the rate of events exceeds a threshold

# (Required)
<
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值