es watcher插件安装及使用

13 篇文章 0 订阅
12 篇文章 0 订阅

es watcher插件安装及使用

简介

  • watcher是一个用于elasticsearch的插件,它可以根据数据的变化提供警报和通知

安装

  • 从5.0版本之后,watcher就成为了x-pack的一部分,也就是说安装了x-pack,watcher就已经安装了。

使用

  • 验证watcher是否启动:
 curl --user elastic:changeme -XGET 'http://172.30.1.45:9200/_watcher/stats?pretty'

返回:
{
  "watcher_state" : "started",
  "watch_count" : 0,
  "execution_thread_pool" : {
    "queue_size" : 0,
    "max_size" : 10
  },
  "manually_stopped" : false
}

说明watcher已经启动
  • watcher通常用于两个场景:

    • 监控日志数据的错误(Watch Log Data for Errors)
    • 监控es集群的状态(Watch Your Cluster Health)
  • 构建一个watcher,watcher的主体内容包含四部分:

    • 触发设置(trigger):设置一个检查错误日志数据的周期(periodically checks your log data for error conditions),以下是两种表达式:
      • ”schedule” : { “interval” : “10s” } 每十秒检查一次
      • “schedule” : { “cron” : “0 0/1 * * * ?” } 每分钟一次
      • 通常Schedules 配置不会很频繁的,配置10s是为了方便触发,便于测试,测试完成要记得删除测试watcher
    "trigger" : { 
        "schedule" : { "interval" : "10s" } 
    }
    或者
     "trigger" : { 
        "schedule" : { "cron" : "0 0/1 * * * ?" } 
    }
    
    • 数据来源设置(input):
    "input" : {
        "search" : {
            "request" : {
                "indices": ["ecps-*"],  //索引名称
                "body" : {
                    "query" : {
                        "match" : { "message": "WEIFAN-NIHAO" }
                    }
                }
            }
        }
    }
    
    match短语:
    
    "match" : {
        "message" : {
            "query" : "this is a test",
            "type" : "phrase"
        }
    }
    • 条件设置(condition):判断要监控的内容是否命中(checks to see if any errors were found or hit)
    条件:总命中数大于2,gt是大于,gte是大于等于
    
    "condition" : {
        "compare" : { "ctx.payload.hits.total" : { "gt" : 2 }}
    }
    
    ctx.payload.hits   查询结果命中内容
    ctx.payload.hits.total  查询结果命中数量
    ctx.payload.hits.hits.2  指定第几个命中的,0是起始索引
    ctx.payload.hits.hits.<index>.fields.<fieldname> 指定第几个命中的某个属性,eg:ctx.payload.hits.hits.0.fields.message
    
    以上均可可以作为邮件内容发送
    • 动作设置(actions): 一旦监控的内容命中,需要采取的措施,可以打印日志或者邮件预警等。(Take action if there are any errors)
    可以把命中数动态写入动作内容:
    
    动作一:通过打印日志
    
    logging:会将日志打印到es的标准输出日志中!(A watch action that simply logs text to the standard Elasticsearch logs)
    
    "actions" : {
        "log_error" : {//动作id
            "logging" : {
                "text" : "Found {{ctx.payload.hits.total}} errors in the logs, message:服务挂了!!!",
                "level": info //默认就是info
            }
        }
    }
    
    动作二:通过发送邮件
    
    "actions" : {
        "reminder_email" : {//动作 id
            "email" : {
                "to" : "to@host.domain",//收件人地址
                "subject" : "system error",//主题
                "body" : "Found {{ctx.payload.hits.total}} errors in the logs, message:服务挂了!!!"//内容
        },
       "priority" : "high"//优先级:lowest, low, normal, high and highest
    }
    
  • 测试(测试过程可以直接在kibana dev tools 控制台进行):

# 验证watcher是否启动
 curl --user elastic:changeme -XGET 'http://172.30.1.45:9200/_watcher/stats?pretty'

# 创建索引index1
curl --user elastic:changeme -XPUT '172.30.1.45:9200/index1?pretty'

# 设置watch,id:weifan_watch
curl --user elastic:changeme -XPUT 'http://172.30.1.45:9200/_watcher/watch/weifan_watch' -d '{这里是watch的配置,json字符串}

# 测试案例一:
curl --user elastic:changeme -XPUT 'http://172.30.1.45:9200/_watcher/watch/weifan_watch' -d '{
  "trigger" : { "schedule" : { "interval" : "10s" } },
  "input" : {
    "search" : {
      "request" : {
        "indices":["index1"],
        "body" : {
          "query" : {
            "match" : { "message": "YIKANG" }//这里的message是精确匹配
          }
        }
      }
    }
  },
  "condition" : {
    "compare" : { "ctx.payload.hits.total" : { "gte" : 1 }}
  },
  "actions" : {
    "log_error" : {
      "logging" : {
        "text" : "Found {{ctx.payload.hits.total}} errors in the logs,message: 服务挂了!!!"
      }
    }
  }
}'

# 测试案例二:
curl --user elastic:changeme -XPUT 'http://172.30.1.45:9200/_watcher/watch/weifan_watch' -d '{
  "trigger" : { "schedule" : { "interval" : "10s" } },
  "input" : {
    "search" : {
      "request" : {
        "indices":["index1"],
        "body" : {
          "query" : {
           "match" : {
                "message" : {
                    "query" : "java.lang.OutOfMemoryError",
                    "type" : "phrase"//这里的message是根据短语匹配,message包含关键字即可预警
                }
            }
          }
        }
      }
    }
  },
  "condition" : {
    "compare" : { "ctx.payload.hits.total" : { "gte" : 1 }}
  },
  "actions" : {
    "log_error" : {
      "logging" : {
        "text" : "Found {{ctx.payload.hits.total}} errors in the logs,message: 服务挂了!!!"
      }
    }
  }
}'

# 查看watcher内容:
curl --user elastic:changeme -XGET 'http://172.30.1.45:9200/_watcher/watch/weifan_watch'

# 往es里面放数据,索引index1,type:type1,ID:1
# 测试案例一:
curl -XPOST '172.30.1.45:9200/index1/type1/1?pretty' -d '{"message": "YIKANG" }'

# 测试案例二:
curl -XPOST '172.30.1.45:9200/index1/type1/1?pretty' -d '{"message": "tomcat: java.lang.OutOfMemoryError: PermGen space" }'

查看es标准输出日志,是否打印:Found 1 errors in the logs,message: 服务挂了!!!,如果打印,即测试通过

# 删除测试watcher:
curl --user elastic:changeme -XDELETE 'http://172.30.1.45:9200/_watcher/watch/weifan_watch'

其他可能用到的命令:

# 查看索引信息(根据id查询):
curl --user elastic:changeme -XGET '172.30.1.45:9200/index1/type1/1?pretty'

# 查看索引内容(索引下所有):
curl --user elastic:changeme '172.30.1.45:9200/index1/_search?q=*&pretty'

# 删除索引:
curl --user elastic:changeme -XDELETE '172.30.1.45:9200/index1?pretty'

# 列举所有索引
curl --user elastic:changeme 'http://172.30.1.45:9200/_cat/indices?v'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值