运维开发网

k8s中部署elartstart监控ES集群并发送报警

运维开发网 https://www.qedev.com 2020-10-30 12:24 出处:51CTO 作者:wangyang_2008
k8s中部署elartstart监控ES集群并发送报警

k8s中部署elartstart监控ES集群并发送报警

首先感谢ivankrizsan/elastalert:latest作者镜像,我在此基础上添加dingding报警模块(镜像里有,不过不是我们需要的方式报警,帮定制了下

dingding插件以下地址下载,并安装好相应模块编译好添加到elastalert镜像中/opt/elastalert目录中即可

https://github.com/xuyaoqiang/elastalert-dingtalk-plugin

原作者的钉钉插件中报警有一个小问题就是发出的钉钉报警多出两个空行,稍加改动去了这多余的空行,看着比较舒服点。

最后写一个rules的配置文件,这里是测试nginx访问一个不存在的接口看是否会触发报警

这里注意下:如果想让configmap热更 新的话,elastelart就不能支持了,因为它会检查rule name是否有一样的,我一开始就是用目录挂载的形式,它会在/opt/rules目录下新建一个隐藏文件,一个是以日期为隐藏的文件,一个是以..data开头的文件,然后你实际的文件名是软链到../data这个文件,程序就以为是有多个同名的rules 名称,就报错了。只能用我写的k8s文件中的形式部署了。

要想让configmap热更新,就必须挂载目录的形式,像subPath这样的形式是不会热更新的,只能重启pod才会更新的。用命令deploy/traefik-ingress-controller -n kube-system #重启指定pod

文件代码在最下面

最终报警截图

k8s中部署elartstart监控ES集群并发送报警

elastalert.yaml文件

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

    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 博客查看。

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号