kingdz 2017-07-07
安装好ELK后,默认的elasticsearch用的分词器为standard analyzer,所以我们的异常“org.springframework.jdbc.BadSqlGrammarException”不能通过BadSqlGrammarException搜索到。
以“one.two.three.+four”为例子,如果用standard analyzer,只有两个term,用simple将有4个term
https://discuss.elastic.co/t/dot-analyzer/3635/2
default analyzer,即standard analyzer
改用simple analyzer,有4个term被分出来:
分词器可以为每个query指定,每个field或者每个index。refer to :https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html
es选择分词器的顺序为:
索引阶段
查询阶段
我们设置logstash过来的数据对message field指定为simple analyzer:
PUT _template/logstash { "template" : "logstash-*", "mappings": { "test": { "properties": { "message": { "type": "text", "analyzer": "simple" } } } } }
创建一个名为logstash的template,它应用于所有名为logstash-*的index,为这个template建了一个名为test的mapping,该mapping下的message filed为文本类型,使用的analyze为simple。
OK,更改了名为logstash-*的index的analyzer为simple analyzer。测试一下:
1)在logstash监听的log中增加一条数据:
2)看到elasticsearch的console打出一行日志,上面这条数据已经被索引,并使用了我们定义的template logstash,以及我们的mapping test:
*关于 shards [5]/[1]:
By default, each index in Elasticsearch is allocated 5 primary shards and 1 replica which means that if you have at least two nodes in your cluster, your index will have 5 primary shards and another 5 replica shards (1 complete replica) for a total of 10 shards per index.
refer to:https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html#getting-started-shards-and-replicas
3)测试通过“ jdbc”在message field来搜索:
GET /_search { "query": { "query_string": { "query": "jdbc", "fields": [ "message" ] } } }
可以看到搜索成功:
{ "took": 0, "timed_out": false, "_shards": { "total": 6, "successful": 6, "failed": 0 }, "hits": { "total": 1, "max_score": 1.1290016, "hits": [ { "_index": "logstash-2017.07.06", "_type": "testlogs", "_id": "AV0YmlmqLzl7sqCPLrgd", "_score": 0.28582606, "_source": { "path": "/Users/jo/lp_logs/error.log", "@timestamp": "2017-07-06T15:52:34.975Z", "@version": "1", "host": "Zhuos-MacBook-Pro.local", "message": "\torg.springframework.jdbc.BadSqlGrammarException: ### Error querying database.", "type": "testlogs" } } ] } }
在Kibana中搜索message:jdbc即可获得结果。
但是比较奇怪的现象是,必须指定message域才能查出来。而message中的一些其他term,比如“Error”就可以不指定message直接查出来。
另外一部分,则需要先做聚类、分类处理,将聚合出的分类结果存入ES集群的聚类索引中。数据处理层的聚合结果存入ES中的指定索引,同时将每个聚合主题相关的数据存入每个document下面的某个field下。