k8s中部署elartstart監控ES集羣併發送報警
首先感謝ivankrizsan/elastalert:latest做者鏡像,我在此基礎上添加dingding報警模塊(鏡像裏有,不過不是咱們須要的方式報警,幫定製了下nginx
dingding插件如下地址下載,並安裝好相應模塊編譯好添加到elastalert鏡像中/opt/elastalert目錄中便可git
https://github.com/xuyaoqiang/elastalert-dingtalk-plugingithub
原做者的釘釘插件中報警有一個小問題就是發出的釘釘報警多出兩個空行,稍加改動去了這多餘的空行,看着比較舒服點。web
最後寫一個rules的配置文件,這裏是測試nginx訪問一個不存在的接口看是否會觸發報警api
這裏注意下:若是想讓configmap熱更 新的話,elastelart就不能支持了,由於它會檢查rule name是否有同樣的,我一開始就是用目錄掛載的形式,它會在/opt/rules目錄下新建一個隱藏文件,一個是以日期爲隱藏的文件,一個是以..data開頭的文件,而後你實際的文件名是軟鏈到../data這個文件,程序就覺得是有多個同名的rules 名稱,就報錯了。只能用我寫的k8s文件中的形式部署了。併發
要想讓configmap熱更新,就必須掛載目錄的形式,像subPath這樣的形式是不會熱更新的,只能重啓pod纔會更新的。用命令deploy/traefik-ingress-controller -n kube-system #重啓指定podapp
文件代碼在最下面dom
最終報警截圖
elasticsearch
elastalert.yaml文件ide
apiVersion: apps/v1
kind: Deployment
metadata:
name: elastalert
namespace: kube-system
labels:
app: elastalert
spec:
replicas: 1
selector:
matchLabels:
app: elastalert
template:
metadata:
labels:
app: elastalert
spec:
containers:
- name: elastalert
image: elastalert:v4
env:- name: ELASTICSEARCH_HOST
value: "elasticsearch" - name: ELASTICSEARCH_PORT
value: "9200" - name: CONTAINER_TIMEZONE
value: "Asia/Shanghai" - name: SET_CONTAINER_TIMEZONE
value: "true" - name: TZ
value: "Asia/Shanghai"
volumeMounts:- name: nginx
mountPath: /opt/rules/nginx.yaml
subPath: nginx.yaml
volumes:
- name: nginx
- name: ELASTICSEARCH_HOST
- name: nginx
configMap:
name: nginx
nginx-404.yaml文件:
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx
namespace: kube-system
data:
nginx.yaml: |
es_host: elasticsearch
esport: 9200
name: nginx123456
type: any
index: abcd
*
use_strftime_index: true
num_events: 1
filter:
- query:
query_string:
query: "http_status_code = 404"
alert_text: "
域 名: {}\n
匹配數量: {}\n
狀 態 碼: {}\n
請求連接: {}\n
ES索引名稱: {}\n
遠程調用地址: {}
"
alert_text_type: alert_text_only
alert_text_args: - domain
- num_hits
- http_status_code
- request
- _index
- remote_addr
alert: - "elastalert_modules.dingtalk_alert.DingTalkAlerter"
dingtalk_webhook: "xxxxxxxx"
dingtalk_msgtype: "text"
文件中的domain、http_status_code等是經過logstash字義的字段,還要更改nginx日誌格式對應起來,我根據我司的日誌格式再用logstash程序發到es中的,這裏纔會用到的,這裏須要你們根據本身es中存取的字段來選擇配置上,而後執行kubectl apply -f elastalert.yaml文件,查看是否安裝成功,正常是能夠的,我這裏就是按照上面步驟正常安裝好了無問題
更多k8s相關知識,請移步到http://www.wangshuying.cn 博客查看。