在/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、404 或 500 的日志 - 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 进行查看日志
标签:ELK,dingtalk,text,alert,query,elastalert2,告警,日志 From: https://www.cnblogs.com/JIKes/p/18169991