logstash配置_logstash中配置分词器及实现服务预警

5b4a4446106e1f1279240737f78613db.png

一、 前奏

这段时间在完善kibana中实现预警机制,通过Sentinl实现。关于sentinl的使用就不做介绍了,这个插件功能还是很强大的,可以实现邮件预警及通过webhook接口的方式实现微信预警。sentinl中对预警数据的筛选是通过ES的DSL查询语句实现的。

二、问题场景

现在有这么个场景对zk的服务数进行预警,我们建了一个服务实施的通过zk注册中心正常的服务数,然后通过filebeat收集相关服务数日志,如果服务异常我们通过sentinl对日志进行筛查后实现预警。
相关的预警脚本如下:

{ "query": { "bool": { "must": [ { "term": { "tags": "nlp-log-monitor" } }, { "range": { "zootemAbnMsg": { "gte" : 1 } } }, { "range": { "@timestamp": { "gte": "now-30s", "lte": "now", "format": "epoch_millis" } } } ] } }}

这段脚本的主要含义是查询当前时间30s内,服务nlp-log-monitor中异常服务数“zootemAbnMsg”大于1的日志,如果扫描到了,则通过sentinl预警。

term 主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型)

最终的提示脚本:

dubbo服务数预警|{{payload.hits.total}}|ERROR dubbo服务数异常,宕机应用数:{{payload.hits.hits.0._source.zootemAbnMsg}},宕机应用:{{payload.hits.hits.0._source.zootemAbnMsgParam}}

但是上面的脚本是无法查询到数据的,“term”是需要not_analyzed ,ES里默认的分词器为standard。
我们通过命令分析下“nlp-log-monitor”是否被分词了。

POST http://10.XXX.XX.XXX:8200/logstash-2019.07.12/_analyze{"text":"nlp-log-monitor"}

返回结果如下:

{ "tokens": [ { "token": "nlp", "start_offset": 0, "end_offset": 3, "type": "", "position": 0 }, { "token": "log", "start_offset": 4, "end_offset": 7, "type": "", "position": 1 }, { "token": "monitor", "start_offset": 8, "end_offset": 15, "type": "", "position": 2 } ]}

我们发下“nlp-log-monitor”被分词了,想要改变这个我们就需要引用其他的分词器。这里推荐使用ik分词器。关于ik分词器的安装网上有很多资料,主要需要注意安装的版本需要和es版本一致。分词器安装完成后,网上有很多方式说可以在es的config/elasticsearch.yml文件中配置,6.x版本后就不需要指定了。这里需要注意下。

三、logstash配置分词器

分词器的配置方式有很多种,比如在es中初始化时配置,由于我们使用的是logstash自动生成es索引的方式这里我们采用在logstash配置分词模板的方式:
1.在logstash的安装目录config下建立分词模板yrz-logstash.json

{"index_patterns": ["yrz-logstash-*"],"settings": {"number_of_shards": 3},"mappings": {"doc": {"dynamic_templates": [{"es": {"match": "message","match_mapping_type": "string","mapping": {"type": "text","analyzer": "ik_smart"}}},{"en": {"match": "tags","match_mapping_type": "string","mapping": {"type": "keyword","analyzer": "ik_smart"}}},{"ea": {"match": "*","match_mapping_type": "string","mapping": {"norms": false,"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}]}}, "aliases": {}}

模板中参数的具体含义网上都可以找到, “match”: “tags”,这里就是我们指定了tags的分词方式为“ik_smart”。

es中初始导入可以通过命令PUT http://10.xxx.xx.xxx:8200/_template/yrz-logstash导入。

logstash启动conf文件中新增如下配置:

output {if [type] == "filebeat"{elasticsearch {hosts => ["10.xxx.xx.xxx:8200"]index => "yrz-logstash-%{+YYYY.MM.dd}" action => "index"template=>"/usr/local/nlp/logstash-6.0.1/config/yrz-logstash.json"template_name=>"yrz-logstash"#manage_template => truetemplate_overwrite => trueuser => "elastic"password => "xxxx"}}........}

配置完成后启动相关服务,后续的日志我们就可以按照新的分词规则往es中记录数据。
后面在kibana中发现了tags.keyword,我们在配置sentinl是可以改为如下一样可以精确匹配到我们的数据:

{ "term": { "tags.keyword": "nlp-log-monitor" } }

keyword:存储数据时候,不会分词建立索引,text:存储数据时候,会自动分词

申明:头条上发版文章主要来自本人CSDN账号,非抄袭!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值