ELK日志告警elastalert2

在/opt 目录创建文件以及文件夹

 

-rw-r--r-- 1 root root 339 4月 17 14:26 docker-compose.yml
drwxr-xr-x 3 root root 4096 4月 17 15:53 elastalert2

 

[root@node1 opt]# tree elastalert2/
elastalert2/
├── elastalert.yaml
└── rules
    ├── 123.txt
    ├── dingtalk.yaml
    └── test.yaml

 

docke-compose.yml

[root@node1 opt]# more docker-compose.yml 
version: "3.3"

services:
  #elastalert2-EFK框架的告警组件
  elastalert2:
    image: jertel/elastalert2:2
    container_name: elastalert2
    restart: always
    environment:
      TZ: "Asia/Shanghai"
    volumes:
      - ./elastalert2/elastalert.yaml:/opt/elastalert/config.yaml
      - ./elastalert2/rules:/opt/elastalert/rules

 

cd /opt/elastalert2

elastalert.yaml

[root@node1 elastalert2]# more elastalert.yaml 
rules_folder: /opt/elastalert/rules
run_every:
  seconds: 1
 
buffer_time:
  minutes: 15
 
#es地址 更改自己的
es_host: 124.221.13.28  
#es端口 更改自己的 
es_port: 9200
#es账号  更改自己的 
#es_username: elastic
#es密码  更改自己的 
#es_password: B6P0hW7x
 
writeback_index: elastalert_status
 
alert_time_limit:
  days: 2
 
#详细的参数说明参考官方文档:https://elastalert2.readthedocs.io/en/latest/elastalert.html

 

cd 

/opt/elastalert2/rules

[root@node1 rules]# more dingtalk.yaml 
name: "dingtalk" #规则的名称。
type: "frequency" # 规则类型为频率,表示要检测的事件是在一定时间范围内出现的次数。
index: "filebeat-7.16.2-2024*"   # 需要监控的索引 ,多个索引用  逗号分割

is_enabled: true
num_events: 4 # 出现几次就告警
timeframe:
  minutes: 4 # 1分钟 出现了 num_events次 匹配记录,就告警
realert:
  minutes: 1 # 1分钟内忽略重复告警
#silence:
#  minutes: 10
silenced: false
timestamp_field: "@timestamp"
timestamp_type: "iso"
use_strftime_index: false

alert_text_type: alert_text_only
# 下面是告警模板
alert_text: |
  日志告警
  索引名称: {0}
  时间: {1}
  文件: {2}
  触发次数: {3}
  匹配次数: {4}
  日志信息: {5}
  告警节点: {6}
  调用方式: {7}
  请求链接: {8}
  suoyin: {9}
alert_text_args: # 告警模板中用到的参数
  - "_index"
  - "@timestamp"
  - "@log_name"
  - num_hits
  - num_matches
  - message
  - host.name
  - request
  - response
  - "actual_index"

#filter:
#  - query:
#      query_string:
#        query: "error OR  ERROR  OR  404  OR 500 " # 告警查询语句 



filter:
  - query:  
      query_string:  
        query: "error OR ERROR OR 404 OR 500"     # 检测的查询语句,包含其中一个 
  - bool: 
      must_not:
         query_string:  
             query: "\"ERROR 1111\""              # 过滤信息,包含ERROR 1111进行过滤 不告警 

alert:
  - "dingtalk" # 告警类型



dingtalk_access_token: "e8d53b4990be4f836bcf88eadec74b5a84sa0c99946a2df6asc69ss3b242c8c2" # 在钉钉群添加自定义机器人获取AccessToken,
#dingtalk_webhook: "https://oapi.dingtalk.com/robot/send?access_token=fefbc11e1d72af6ee74c8e48ebc0048f56960ac3d268912b2bde55f423dc7a88"
#dingtalk_secret: "SECdf2e0b498bdbb61a772589fc41209d54b4b5d1798810b306fbbbc9e692e479cf"
dingtalk_msgtype: "text" # 消息类型

 

filter的 模板  对以上的进行补充,非必要不用写

filter:  
  - query:  
      query_string:  
        query: "error OR ERROR OR 404 OR 500"  # 匹配包含 error、ERROR、404500 的日志  
  - bool:  
      must_not:  
        - query_string:  
            query: "\"ERROR 1111\""  # 排除包含 ERROR 1111 的日志  
        - query_string:  
            query: "\"ERROR 2222\""  # 排除包含 ERROR 2222 的日志  
        - query_string:  # 额外添加的条件,排除包含特定字符串的日志  
            query: "\"discard long time none received connection\""

 

非必要 另外的一个告警规则,不想写可以不写,看自己

[root@node1 rules]# more test.yaml 
#a#le Configuration for Individual IPs (Nested Rule)
name: nginx_access_4xx_individual_ips
type: frequency  
index: "filebeat-7.16.2-2024.04.17"  #查询该索引
num_events: 1  # Individual IP 404s threshold #60s超过100触发
timeframe:
  seconds: 60
#query_key: client.ip  #查询单ip的状态码字段
filter:
  - query:
      bool:
        must:
          - query_string:
              query: "404"
alert:
  - dingtalk  #告警方式
alert_text_type: "alert_text_only"
dingtalk_webhook: "https://oapi.dingtalk.com/robot/send?access_token=fefbc11e1d72af6ee74c8e48ebc0048f56960ac3d268912b2bde55f423dc7a88"
dingtalk_access_token: "SECdf2e0b498bdbb61a772589fc41209d54b4b5d1798810b306fbbbc9e692e479cf"
dingtalk_msgtype: "text"
alert_text: |    #定义告警文本匹配下列参数
  告警程序: ElasticSearch_Alert
  来源  Ip: {}
  域    名: {}
  调用方式: {}
  请求链接: {}
  触发条件: 60s 内 {} 状态码 超过 {} 次
alert_text_args:
  - client.ip
  - domain
  - http_method
  - request_path
  - response_code
  - num_events

然后再opt执行 docker-compose

cd /opt

docker-compose up -d

 

注意事项 

1.需要安装docker  且docker版本必须 24以上  docker -v 查看

2. 需要安装docker-compose  

3. 执行完 可以通过docker logs -f 容器ID 进行查看日志 

 

posted @ 2024-05-02 10:17  不会游泳的鱼丶  阅读(591)  评论(0编辑  收藏  举报