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 }
- 触发设置(trigger):设置一个检查错误日志数据的周期(periodically checks your log data for error conditions),以下是两种表达式:
测试(测试过程可以直接在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'