• elastalert搭建


    elastalert搭建过程

    在服务器上搭建python3.6环境

    • 编译安装
    # wget http://mirrors.sohu.com/python/3.6.0/Python-3.6.0.tgz
    
    ## 安装编译依赖包
    # yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
    
    ## 编译安装
    # tar -zxvf  Python-3.6.0
    # cd Python-3.6.0
    # ./configure --prefix=/usr/local/python36      //编译存放路径至“/usr/local/python36”
    # make && make install
    
    • yum 安装
    ## 安装EPEL和IUS软件源
    # yum install epel-release -y
    # yum install https://centos7.iuscommunity.org/ius-release.rpm -y
    
    ## 安装Python3.6
    # yum install python36u -y
    # yum install python36u-devel -y
    
    ## 创建python3连接符
    # ln -s /bin/python3.6 /bin/python3
    
    ## 安装pip3
    # yum install python36u-pip -y
    
    ## 创建pip3链接符
    # ln -s /bin/pip3.6 /bin/pip3
    

    无法访问互联网情况下如何安装模块

    • 使用上面的 编译安装 在内网主机和自建的虚拟机上安装python

    • 自建虚拟机上下载模块

    ## 下载单个安装包
    ## pip3 download pakeage_namq -d /path/file/ -i https://pypi.tuna.tsinghua.edu.cn/simple/
    # pip3 download xlwt pymysql -d ./pip_pakeage/ -i https://pypi.tuna.tsinghua.edu.cn/simple/
    
    ## 根据requirements下载安装包
    ## pip3 download -r requiremetns.txt -d /path/file/ -i https://pypi.tuna.tsinghua.edu.cn/simple/
    # pip3 download -r requirements.txt -d ./pip_pakeage/ -i https://pypi.tuna.tsinghua.edu.cn/simple/
    
    • 内网主机上安装模块
    ## 安装单个模块包
    ## pip3 install file:///path/filename
    # pip3 install file:///tmp/pip_pakeage/xlwt-1.3.0-py2.py3-none-any.whl
    
    ## 安装 requirements 下载安装包
    # pip3 install --no-index --find-links=/tmp/pip_pakeage/ -r /data/filename/requirements.txt
    

    elastalert下载安装

    在https://github.com/Yelp/elastalert上下载源码

    # cd /opt/
    # git clone https://github.com/Yelp/elastalert.git
    # cd elastalert/
    # python3 ./setup.py install --dry-run  ## 测试是否能直接安装成功
    # python3 ./setup.py install
    

    elastalert配置方法

    • 配置config.yaml
    # cp config.yaml.example config.yaml
    # vim config.yaml
    ----------------------------------------------
    rules_folder: /opt/elastalert/rules
    run_every:
      seconds: 60
    buffer_time:
      minutes: 3
    es_host: 172.16.1.1
    es_port: 9200
    writeback_index: elastalert_status
    writeback_alias: elastalert_alerts
    alert_time_limit:
      days: 2
    
    • 配置rule规则
    # mkdir rules
    # cp example_rules/example_frequency.yaml /opt/elastalert/rules/frequency.yaml
    # vim /opt/elastalert/rules/frequency.yaml
    -------------------------------------------------------------
    name: API not 200
    index: sg-access-*
    type: frequency
    num_events: 20
    timeframe:
      minutes: 1
    filter:
    - query:
        query_string:
          query: "NOT statusCode: 200"
    - query:
        query_string:
          query: "NOT statusCode: 302"
    - query:
        query_string:
          query: "NOT directBackServer: 127.0.0.1"
    
    alert:
      - command
    
    command: ["python3", /opt/elastalert/weixin.py", "生产环境报警,报警:", "接口{orgPathName} 出现状态码{statusCode}频率高!","服务 IP: {directBackServer}; 服务端口:{port}"]
    

    其他配置方式参考官网:https://elastalert.readthedocs.io/en/latest/

    编写报警脚本

    #!/usr/bin/env python3
    # _*_coding:utf-8 _*_
    
    import urllib.request
    import json
    import sys
    import simplejson
    
    
    def gettoken(corpid, corpsecret):
        gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' +corpsecret
        print(gettoken_url)
        try:
            token_file = urllib.request.urlopen(gettoken_url)
        except urllib.request.HTTPError as e:
            print(e.code)
            print(e.read().decode("utf8"))
            sys.exit()
        token_data = token_file.read().decode('utf-8')
        token_json = json.loads(token_data)
        token_json.keys()
        token = token_json['access_token']
        return token
    
    
    def senddata(access_token, subject, content, server):
        send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
        send_values = {
            "touser": "@all",          # 企业号中的用户帐号,在zabbix用户 Media中配置,如果配置不正常,将按部门发送。
            "toparty": "ID",           # 企业号中的部门id。
            "msgtype": "text",         # 消息类型。
            "agentid": "1000001",      # 企业号中的应用id。
            "text": {
                "content": str(subject + '
    
    ' + content + '
    ' + server)
            },
            "safe": "0",
        }
        send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
        send_request = urllib.request.Request(send_url, send_data)
        response = json.loads(urllib.request.urlopen(send_request).read())
        print(str(response))
    
    
    def senddata_report(subject, content, server):
        send_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'
        send_values = {
            "msgtype": "text",
            "text": {
                "content": str(subject + '
    
    ' + content + '
    ' + server)
            }
        }
        send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
        send_request = urllib.request.Request(send_url, send_data)
        response = json.loads(urllib.request.urlopen(send_request).read())
        print(str(response))
    
    
    if __name__ == '__main__':
        try:
            subject = str(sys.argv[1])
            content = str(sys.argv[2])
            server = str(sys.argv[3])
        except IndexError:
            print('需要传3个参数')
        else:
            corpid = 'XXXXXXXXXXXXXXXXXXXXXXXX'   # 企业号的标识
            corpsecret = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'    # 管理组凭证密钥
            accesstoken = gettoken(corpid, corpsecret)
            # senddata(accesstoken, subject, content, server)
            senddata_report(subject, content, server)
    

    启动服务

    • 调用接口向ES中创建索引
    # elastalert-create-index elastalert-test-rule --config /opt/elastalert/config.yaml  /opt/elastalert/rules/frequency.yaml
    
    • 启动服务前测试服务配置正常
    # elastalert-test-rule --config /opt/elastalert/config.yaml  /opt/elastalert/rules/frequency.yaml
    
    • 启动服务前测试报警功能正常
    # elastalert-test-rule --config /opt/elastalert/config.yaml  /opt/elastalert/rules/frequency.yaml --alert
    
    • 后台启动服务
    nohup python -m elastalert.elastalert  --config /opt/elastalert/config.yaml --rule /opt/elastalert/rules/frequency.yaml >> /opt/elastalert/elastalert.log 2>&1 &
    
  • 相关阅读:
    轻量级的Web服务器Nginx0.9.0 开发版发布 狼人:
    微软发布Silverlight 5 Beta新特性 狼人:
    TechCrunch新闻评论:Flash耗电问题严重 狼人:
    IE9是最佳浏览器? 狼人:
    Silverlight面向客户端,HTML5面向Web 狼人:
    Silverlight 结构分析 狼人:
    HTML5是否已经准备好了?仍在W3C层层审核当中 狼人:
    Adobe驳斥Flash过度耗电论 称HTML5更耗电 狼人:
    Silverlight 5即将来临 狼人:
    运行控制[置顶] 有趣的编程控制自己电脑的CPU
  • 原文地址:https://www.cnblogs.com/evescn/p/13098343.html
Copyright © 2020-2023  润新知