ELK日誌告警elastalert2

不会游泳的鱼丶發表於2024-05-02

在/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 進行檢視日誌

相關文章