关闭

ELK学习10_ELK系列--实时日志分析系统ELK 部署与运行中的问题汇总

标签: ELK
2882人阅读 评论(2) 收藏 举报
分类:

前记:

去年测试了ELK,今年测试了Storm,最终因为Storm需要过多开发介入而放弃,选择了ELK。感谢互联网上各路大神,目前总算是正常运行了。

logstash+elasticsearch+kibana的搭建参考:http://wsgzao.github.io/post/elk/。由于搭建过程比较简单就不赘述,主要分享几个坑。

 

正文:

1、日志如何获取

 无论是storm方案还是elk,都涉及这个关键问题。为减少和运维、开发的交叉,尽可能独立、快速,加之当时发现了justniffer这个“神器”,遂决定采用交换机流量镜像的方式。

 但是在经历了申请机器、增加网卡之后,痛苦的发现存在掉包问题。一旦流量超过30--40M狂掉包,就别提TCP流还原了。justniffer是调用修改过的libnids,而libnids调用libpacap。因此转向libpcap优化。

 看了很多国内外的论文和研究文档,使用pf-ring会有大幅改善掉包情况。在同事协助下经历了N次的源码调试后,无奈的发现:即使启用了pf-ring,掉包情况依然。可能是网卡太差了。。。

 询问了青藤云安全的大牛,他们的包捕获与流还原技术不卖- -|

 由于涉及justniffer、libpacap、pf_ring的版本对应问题、网卡驱动和源码调试,上述过程耗时其实非常长,最终的结果让人心碎,自己能力不够啊

 无奈放弃流量镜像,转而采用在应用服务器上安装客户端的做法。如果有童鞋有好的方案,希望能分享,谢谢!

2、缺乏访问权限控制

由于kibana默认没有设置访问权限控制,因此,直接访问url即可访问。同时elasticsearch也缺乏权限控制,提交相关请求即可查看索引、模板,删除索引。 所以需要设置权限保护,分2个层面:

1)阻止未授权的用户对ELK平台的访问

2)为用户设置的index访问权限

 详情参考:http://eligao.com/shield-on-elasticsearch/

3、无法搜索特殊字符

由于混杂了kibana、elasticsearch、lunece,导致这个问题比较复杂。谷歌之可以发现,很多内容都是提到:在kibana中搜索时,搜索特殊符号需要使用转义符号转义。但是问题是方法无效!!!

 

幸得搜索同事指导,加上自己学习,基本搞清楚情况:

1)Kibana的搜索完全是传递给Elasticsearch处理的,因此问题出在Elasticsearch;

2)在创建索引的时候,Elasticsearch默认的索引模板使用了默认的分析器(analyzer)standard对logstash提交的数据进行分析。,而standard默认的分词器(tokenizer)是会剔除特殊字符。也就是说,特殊字符在建立索引的过程中就被剔除了,因此即使使用转义符号也无法搜索特殊字符;相关概念解释见文末说明。

 

解决方法:

1)定制分析器

官方文档参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html。

借助Elasticsearch提供的nGram分词器,定制了一个单字符分析器。

官网的做法是通过API提交。我偷个懒,直接修改了Elasticsearch的配置文件elasticsearch.yml,在最后增加:

复制代码
index:

  analysis:

    tokenizer:

      my_ngram_tokenizer:

        type: nGram

        min_gram : 1

        max_gram : 1

        token_chars : []

    analyzer:

      special_analyzer:

          type: custom

          filter: [lowercase]

          tokenizer: my_ngram_tokenizer
复制代码

 

修改后,需要重启Elasticsearch

 

2)修改默认模板

(不推荐新增索引模板,使用非logstash开头的索引模板会导致raw字段丢失。如果已经遇到这个问题,参考https://bbrauns1.wordpress.com/2015/06/04/missing-raw-fields-in-logstashkibana-after-new-index-creation/)

注意,通过http://localhost:9200/_template/logstash?pretty获取的索引模板和我们需要改的索引模板稍有不同,去掉  "logstash" : {及倒数第二个}保存成logstash.json

修改上面获得的模板,主要是修改dynamic_templates部分,默认的模板是将所有string类型字段内容进行分析和索引,使用的是默认的standard分析器。同时对raw字段不分词(如cookie.raw等,是logstash自动生成的)

参考官方文档:https://www.elastic.co/guide/en/elasticsearch/guide/current/custom-dynamic-mapping.html

复制代码
    "mappings" : {

      "_default_" : {

        "dynamic_templates" : [ {

          "string_fields" : {

            "mapping" : {

              "index" : "analyzed",

              "omit_norms" : true,

              "type" : "string",

              "fields" : {

                "raw" : {

                  "index" : "not_analyzed",

                  "ignore_above" : 256,

                  "type" : "string"

                }

              }

            },

            "match" : "*",

            "match_mapping_type" : "string"

          }

        }
复制代码

 

 因此,我们需要增加指定特定字段,比如:

复制代码
        {

          "request" : {

            "mapping" : {

              "index" : "analyzed",

              "analyzer" : "special_analyzer",

              "type" : "string",

              "fields" : {

                "raw" : {

                  "index" : "not_analyzed",

                  "ignore_above" : 256,

                  "type" : "string"

                }

              }

            },

            "match" : "request",

            "match_mapping_type" : "string"

          }

        }, 
复制代码

 

代表我们对request字段内容使用special_analyzer进行分析,同时保留对raw不分析。如果缺少二次映射,则无法获取raw字段,则会对visualize造成影响。

如果不需要对相关字段进行是分词,则如此配置:

 

复制代码
        {

          "cookie" : {

            "mapping" : {

              "index" : "not_analyzed",

              "type" : "string",

              "fields" : {

                "raw" : {

                  "index" : "not_analyzed",

                  "ignore_above" : 256,

                  "type" : "string"

                }

              }

            },

            "match" : "cookie",

            "match_mapping_type" : "string"

          }

        },
复制代码

 

3)提交索引模板:

cd /path/to/logstash.json

curl -u user -XPUT localhost:9200/_template/logstash -d @logstash.json

成功后,会返回:{"acknowledged":true}

 

4)删除索引,索引模板

查看现有的所有索引:http://localhost:9200/_cat/indices?v 

删除所有索引:curl -u user -XDELETE localhost:9200/index

通过kibana的设置功能,删除之前建立的index pattern

 

5)重新添加index pattern

注:配合kibana的搜索语法,使用双引号""搜索完全匹配,即可解决搜索特殊字符的问题。如果不带双引号,则会搜索字符串中的每个字符。

4、logstash无法启动,提示bind address 

 原因:

 1)配置目录下存在多个配置文件,而logstash会加载所有conf格式的文件

 解决方案:删除不必要的文件,保留一个conf文件即可

 

2)进程未结束

 解决方案:kill -9 pid 强制结束进程,再启动服务即可

5、字段无法解析 _grokparsefailure 

 kibana无法解析出相应的字段

 原因:正则存在问题或者日志不符合正则格式

 解决方案:在http://grokdebug.herokuapp.com/上调试正则,同时确保日志中不存在多余空格等异常

 

还有一种常见原因:空格、空格、空格,重要的事情说三遍!

 

6、日志量大,磁盘紧张

日志量增加非常快,磁盘空间不够用怎么办?可以通过删除较早的索引来缓解

因此,logstash的配置文件中最好早设置索引带有时间后缀:如logstash-%{+YYYY.MM.dd}"

 

说明:

分析器相关概念:全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokenizer(分词器), 这些Token会被进一步处理, 比如转成小写等, 这些处理算法被称为Token Filter(词元处理器), 被处理后的结果被称为Term(词), 文档中包含了几个这样的Term被称为Frequency(词频)。 引擎会建立Term和原文档的Inverted Index(倒排索引), 这样就能根据Term很快到找到源文档了。 文本被Tokenizer处理前可能要做一些预处理, 比如去掉里面的HTML标记, 这些处理的算法被称为Character Filter(字符过滤器), 这整个的分析算法被称为Analyzer(分析器)。 

详情请参考:http://www.cnblogs.com/buzzlight/p/elasticsearch_analysis.html

 

7、Kibana4 dashboard无法保存拖动的visualization位置

原因:

程序bug,json部分未能及时保存拖动的情况

解决方法:

手动在设置中,手动编辑dashboard的json,调整排序

参考:https://github.com/elastic/kibana/issues/3328

8、Courier Fetch: shards failed

原因:

查询线程队列不够,导致

解决方法:

编辑elasticsearch.yml,添加threadpool.search.queue_size: 10000
重启elasticsearch即可解决

参考:http://stackoverflow.com/questions/30053967/courier-fetch-shards-failed

9、kibana瓦片图(Tile map)无法使用国内地图

原因:

kibana自带的是地图是openstreetmap,http://www.openstreetmap.org。需要更换成国内地图。

解决方法:

更换为高德地图。修改index.js中的:

https://otile{s}-s.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpeg

http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}

说明:网上搜索到内容为style=8,内容空白,经过自己测试,确认style=7可用


原文来自:

http://www.cnblogs.com/phoenix--/p/4935778.html

http://www.cnblogs.com/phoenix--/p/5000165.html

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Win 10 ELK(5.4.1) 环境搭建与基本使用与 Expected one of # 解决办法

Win 10 ELK(5.4.1) 环境搭建与基本使用与 Expected one of # 解决办法 ELK :   elasticsearch:  将日志信息进行分割,建立索引 (依赖分词插件)   logstash :  收集日志   Kiba...
  • wangming520liwei
  • wangming520liwei
  • 2017-06-14 14:21
  • 2794

ELK kibana 常见问题及ES时区问题

写入数据查询不出结果时区问题:“Management” —- “Advanced Settings”dateFormat:YYYY-MM-DD HH:mm:ss.SSS 显示结果时,方便查看的格式 dateFormat:tz 设置为 GMT0 展示数据正确与否的关键设置
  • slml08
  • slml08
  • 2017-01-22 17:01
  • 5507

ELK遇到的故障或小难点

es突然消失故障 logstash正在给es发送数据,无任何外部操作情况下,突然es没了~!:(。于是翻看我的过往操作,没有发现可以导致类似结果的命令,es的日志在当时的时间点下并没有报告任何信息。后来想到了syslog的功能,于是查看syslog的日志,在/var/log/messages(确认一...
  • u012357786
  • u012357786
  • 2016-02-19 00:24
  • 458

Courier Fetch: 3 of 5 shards failed

功能:kibana+elasticsearch 实现日志系统,kibana 前端展示。elasticsearch 安装了shield插件。添加 了用户角色。 架构:一个es 集群,3个节点。  相关配置: (1)elasticsearch/config/shield/roles.ym...
  • zhangxihangzhuan
  • zhangxihangzhuan
  • 2016-04-06 16:03
  • 2067

分布式实时日志分析解决方案ELK部署架构

日志是分析线上问题的重要手段,通常我们会把日志输出到控制台或者本地文件中,排查问题时通过根据关键字搜索本地日志,但越来越多的公司,项目开发中采用分布式的架构,日志会记录到多个服务器或者文件中,分析问题时可能需要查看多个日志文件才能定位问题,如果相关项目不是一个团队维护时沟通成本更是直线上升。把各个系...
  • ax8785r8C32nef593
  • ax8785r8C32nef593
  • 2017-12-04 00:00
  • 165

开源实时日志分析ELK平台部署

ELK版本:5.4.3 下载:https://www.elastic.co/cn/downloads 环境: CentOS7 JDK 1.8 Linux用户:mungo ElasticSearch http://10.81.1.6:9200/ Logstash...
  • Mungo
  • Mungo
  • 2017-08-01 16:21
  • 1412

ELK5.0日志收集平台搭建指南

开源实时日志收集平台ELK由ElasticSearch、Logstash、Kibana三个开源工具组成,官方网址为:https://www.elastic.co/products 在Elastic 5.0版本之后,官方又加入了Beats套件,然后把他们统称为Elastic Stack。  ...
  • Nero__A
  • Nero__A
  • 2016-12-13 15:03
  • 3932

elk实时日志分析平台部署搭建详细实现过程

1、ELK平台介绍在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段:以下内容来自: http://baidu.blog.51cto.com/71938/1676798日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的...
  • mchdba
  • mchdba
  • 2016-08-05 21:26
  • 13221

ELK实时日志分析平台环境部署--完整记录

在日常运维工作中,对于系统和业务日志的处理尤为重要。今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为例说明,如有误述,敬请指出)~ 一、概念介绍 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器...
  • gebitan505
  • gebitan505
  • 2017-04-21 18:21
  • 1828

ELK实时日志分析系统

转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-elk/ ELK 协议栈介绍及体系结构 ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 ...
  • jin5203344
  • jin5203344
  • 2016-12-30 17:20
  • 2035
    个人资料
    • 访问:655324次
    • 积分:8632
    • 等级:
    • 排名:第2646名
    • 原创:115篇
    • 转载:428篇
    • 译文:37篇
    • 评论:38条
    文章分类