logstash的output配置中指定elasticsearch的template
2017-12-29 13:05
316 查看
之前采用的是通过filebeat收集nginx的日志,直接到elasticsearch。filebeat带有nginx的module模块,通过这个nginx模块实现filebeat对nginx日志中字段的处理。最近由于一些实际的使用场景和需求,对nginx日志的收集和处理方式做了一下调整:
filebeat收集nginx原始日志信息到kafka,然后logstash再从kafka读取日志,并进行字段处理后送到elasticsearch集群。即相比原来的方式,添加了kafka层。
logstash从kafka读取过来的日志为json格式,字段的解析可以借助Grok Debugger工具来调,具体的解析方式这里就不细说了。这里主要说一下在logstash使用elasticsearch的template进行字段类型mapping的时候,需要注意的一点问题。
logstash将日志里的字段解析出来并发送到elasticsearch后,发现es上字段的默认的类型都是text的。如果对一些关键字需要做统计报表的时候,就会出现提示报错。如,我用grafana将elasticsearch做为数据源进行数据展示时遇到如下报错:
有报错提示可以看出,将nginx.access.remote_ip的字段换成keyword类型可以解决。
于是,参考原先filebeat中使用的template,写了一个供logstash用的template,起名为nginx_req_log_wireless.json,部分片段如下:
之后,在logstash的output里的elasticsearch配置部分对template模板进行指定:
调试后发现,elasticsearch上创建的索引中字段的类型,并没有按照指定的template去mapping。后来才注意到,是应为创建的索引后面带了日期部分:
这导致跟nginx_req_log_wireless.json模板文件中指定的template名并不匹配造成的:
解决办法,就是将template名末尾加一个*号通配符即可:
总结一下:
index的名字必须要和指定的json文件中的templete名相匹配,定义的mapping才会生效。logstash的output配置的template_name名可以随便。
filebeat收集nginx原始日志信息到kafka,然后logstash再从kafka读取日志,并进行字段处理后送到elasticsearch集群。即相比原来的方式,添加了kafka层。
logstash从kafka读取过来的日志为json格式,字段的解析可以借助Grok Debugger工具来调,具体的解析方式这里就不细说了。这里主要说一下在logstash使用elasticsearch的template进行字段类型mapping的时候,需要注意的一点问题。
logstash将日志里的字段解析出来并发送到elasticsearch后,发现es上字段的默认的类型都是text的。如果对一些关键字需要做统计报表的时候,就会出现提示报错。如,我用grafana将elasticsearch做为数据源进行数据展示时遇到如下报错:
有报错提示可以看出,将nginx.access.remote_ip的字段换成keyword类型可以解决。
于是,参考原先filebeat中使用的template,写了一个供logstash用的template,起名为nginx_req_log_wireless.json,部分片段如下:
"template": "nginx_req_log_wireless", "settings": { "index.refresh_interval": "5s" }, "mappings": { ...略 "nginx": { "properties": { "access": { "properties": { "referrer": { "ignore_above": 1024, "type": "keyword" }, "agent": { "norms": false, "type": "text" }, "response_code": { "type": "long" }, "geoip": { "properties": { "continent_name": { "ignore_above": 1024, "type": "keyword" }, "city_name": { "ignore_above": 1024, "type": "keyword" }, "country_name": { "ignore_above": 1024, "type": "keyword" }, "region_name": { "ignore_above": 1024, "type": "keyword" }, "location": { "type": "geo_point" } } }, "remote_ip": { "ignore_above": 1024, "type": "keyword" }, "method": { "ignore_above": 1024, "type": "keyword" }, "user_name": { "ignore_above": 1024, "type": "keyword" }, "http_version": { "ignore_above": 1024, "type": "keyword" }, "body_sent": { "properties": { "bytes": { "type": "long" } } }, "url": { "ignore_above": 1024, "type": "keyword" } ...略
之后,在logstash的output里的elasticsearch配置部分对template模板进行指定:
index => "nginx_req_log_wireless-%{+YYYY.MM.dd}" manage_template => true template_name => "nginx_req_log_wireless" template_overwrite => true template => "/usr/local/logstash-5.4.3/template/nginx_req_log_wireless.json"
调试后发现,elasticsearch上创建的索引中字段的类型,并没有按照指定的template去mapping。后来才注意到,是应为创建的索引后面带了日期部分:
index => "nginx_req_log_wireless-%{+YYYY.MM.dd}"
这导致跟nginx_req_log_wireless.json模板文件中指定的template名并不匹配造成的:
"template": "nginx_req_log_wireless"
解决办法,就是将template名末尾加一个*号通配符即可:
"template": "nginx_req_log_wireless*"
总结一下:
index的名字必须要和指定的json文件中的templete名相匹配,定义的mapping才会生效。logstash的output配置的template_name名可以随便。
相关文章推荐
- logstash向elasticsearch写入数据,如何指定多个数据template
- logstash 向elasticsearch写入数据,如何指定多个数据template
- logstash 向elasticsearch写入数据,怎样指定多个数据template
- logstash写数据到elasticsearch如何指定多个数据 template
- logstash Output plugins >> elasticsearch
- 搭建ELK(ElasticSearch+Logstash+Kibana)日志分析系统(三) logstash input output 配置
- logstash采集规范与elasticsearch的template 、mapping 详细介绍
- 搭建ELK(ElasticSearch+Logstash+Kibana)日志分析系统(八) elasticsearch配置外网访问及常见错误处理
- [大数据]-Logstash-5.3.1的安装导入数据到Elasticsearch5.3.1并配置同义词过滤
- logstash将采取kafka的数据到elasticSearch配置
- elasticsearch mysql logstash 同步 简单配置【环境centos7 elasticsearch 6.0 mysql 5.7 logstash 6.0】
- logback,logstash,elasticsearch配置,日志收集
- Elasticsearch配合mysql实现全文搜索(二) 安装Logstash 和配置
- 搭建ELK(ElasticSearch+Logstash+Kibana)日志分析系统(七) elasticsearch.yml配置文件详细说明
- logstash启动报配置文件错误Expected one of #, input, filter, output at line 1, column 1 (byte 1) after
- Logstash-5.0同步.json文件到ElasticSearch-5.0配置文件
- 各大数据库的配置 & logstash-out-mongodb实现elasticsearch到Mongodb的数据同步
- centos通过logstash完成mysql数据库同步至elasticsearch,elasticsearch logstash maven ik分词器安装配置,elasticsearch索引创建
- elasticsearch安装与使用(6)-- Logstash安装与配置
- C#.net OutputCache 产生的严重配置问题 找不到指定的数据库