一、Kafka ->logstash ->elasticsearch

   logstash 5.X以上版本不兼容5.x以下版本,因此在升级logstash时会遇到很多坑。首先是配置的变化,可以参考如下配置:

input {
kafka {
bootstrap_servers => "XX:9092,YY:9093,ZZ:9094" 变化点:这里监听的是kafka的端口号
topics => "xxxlog"
group_id => "elasticconsumer"
max_partition_fetch_bytes=> "4194304" 处理消息过大的场景
codec => "json"
}
} output {
elasticsearch {
hosts => ["XXX:9200"]
index => "logstash-%{+YYYY-MM-dd}"
codec => "json"
}
} output {
file {
path => "/data01/logstash.log"
flush_interval => 0
}
}

 完成配置后可以通过如下命令来检测配置文件是否有语法错误:

bin/logstash -t -f config/kafka-logstash-es.conf

另外,elasticsearch 5.X版本的集群安装请参见:http://www.jianshu.com/p/9e3749daeb93

二、elasticsearch数据丢失

通过kibana监控返回的数据时,无意中发现返回的数据存在数据丢失的现象。将input数据保存进elasticsearch的同时,通过写入log日志文件中。通过如下命令查询elasticsearch中保存的数据时,发现数据在保存进elasticsearch的时候就已出现丢失现象:

get  _index/_type/_count?q=monitorId:XXX
get logstash-2017-03-21/logs/_count?q=monitorId:XXX

编写测试配置,将出错的json直接通过屏幕输入:

input {
stdin {
codec => json
}
} output {
stdout {
codec => rubydebug
}
}

又发现数据可以正常输出。那么问题出在哪一个环节呢?

通过查看elasticsearch中的日志,发现在解析json时系统偶尔会报String_Object 转化异常。是什么原因导致此问题的发生呢?

通过一步步追踪最终发现问题出在dynamic mapping环节。

ES如何对对动态类型字段做mapping的呢?ES在内部对一个index下的type会根据mapping来进行存储,所以要求type中的每个字段类型必须一致。例如对一个User表,如果有个name字段,那么一条user数据中的name为string类型的话,后续所有的user对象中的name都必须为string,否则做index时就会出错。

但是由于一些原因平台的数据在返回时,同一个type下的值,有的为String类型,有的却为Object对象,按照上面的逻辑在进行解析时异常是必然的了。

参见:http://jiangpeng.info/blogs/2014/11/24/elasticsearch-mapping.html

http://www.cnblogs.com/ningskyer/articles/5787702.html

http://blog.arganzheng.me/posts/datatype-in-elasticsearch.html

解决措施:统一平台返回的数据格式,将同一type下字段的值统一转化为String类型。

三、json长度过长elasticsearch存储异常

在解决问题二后发现kibana中依然有数据丢失的情况。分析elasticsearch的日志,发现平台返回的json长度过长导致elasticsearch在进行数据存储时异常。

那么针对此问题需要如何进行处理呢?下面给出实际的处理方案仅供参考:

A.logstash配置

input {
kafka {
bootstrap_servers =>"XXX:9092,YYY:9093,ZZZ:9094"
topics => "klog"
group_id => "elasticconsummer"
codec => "json"
} output {
elasticsearch {
hosts => ["XXX:9200","YYY:9200"]
index => "logstash-%{+YYYY-MM-dd}"
codec => "json"
manage_template => true
template_overwrite => true
template_name => "kTemplate"
template => "/data01/xxx.json"
}
} output {
file {
path =>"data01/logstash.log"
flush_interval =>0
}
} }

B.模板的配置

{
"template" : "logstash*",
"settings" : {
"index.number_of_shards" : 5,
"number_of_replicas" : 1,
"index.refresh_interval" : "60s"
},
"mappings" : {
"_default_" : {
"_all" : {
"enabled" : true
},
"dynamic_templates" : [
{
"string_fields" : {
"match" : "*",
"match_mapping_type" : "string",
"mapping" : {
"type" : "string",
"index" : "not_analyzed",
"omit_norms" : true,
"doc_values": true,
"fields" : {
"raw" : {
"type": "string",
"index" : "not_analyzed",
"ignore_above" : 256,
"doc_values": true
}
}
}
}
} ],
"properties" : {
//定义长度
"callMethodResult": {
"type": "string",
"index": "not_analyzed"
"ignore_above" : 256
}
}
}
}
}
}

参见:http://m.blog.csdn.net/article/details?id=50823494

模板的配置参见:https://github.com/chenryn/ELKstack-guide-cn/blob/master/logstash/plugins/output/elasticsearch.md

其它坑请参见:http://www.jianshu.com/p/fa31f38d241e

四、离线环境下Kibana加载慢问题

在离线环境下发现kibana加载比较慢,跟踪定位后发现系统在离线环境上也会加载http://tiles.elastic.co/v2/manifest?my_app_version=5.2.0

将/kibana/src/server/config/schema.js中的manifestServiceUrl中的上述地址修改为http://localhost/即可

五、Kibana中文乱码

在实际使用过程中发现应用布署到生产环境后,在Kibana中的中文日志有乱码。将logstash采集的数据一份写入elasticsearch,另一份写入log,发现日志在写入log时已经是乱码。如果想要中文没有乱码,那么日志文件应该是UTF-8格式。我们可以用file命令查看日志的生成格式,如下:

[xxx@localhost logs]$ file app.log
app.log: UTF-8 Unicode English text, with very long lines

log4j的配置参考如下:

<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./logs/app.log"/>
<param name="Encoding" value="UTF-8"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>

但最终定位生产环境出现此问题的原因是没有指定tomcat的编码格式.

六、logstash TCP指定端口监听

通过./logstash-plugin list 查看logstash安装的插件

input {
tcp {
host => "XXX"
port => "5000"
mode => "server"
type => "microwiki"
add_field => {
"name" => "Routh"
}
}
} output {
file {
path => "/data01/XXX"
flush_interval => 0
} }

定位问题参考:http://10452483.blog.51cto.com/10442483/1732225

ELK 5.X版本遇到的坑的更多相关文章

  1. IOS低版本遇到了坑不知道你遇到了没

    拿着项目给客户测试,客户那边三个人俩人水果手机是ios8以下版本,结果导致```(恭喜,坑出现!)总不能说老总!"您把版本升级到ios9 吧!

  2. Flink升级到1.4版本遇到的坑

    Flink 1.4没出来以前,一直使用Flink 1.3.2,感觉还算稳定,最近将运行环境升级到1.4,遇到了一些坑: 1.需要将可运行程序,基于1.4.0重新编译一次 2.对比了一下flink-co ...

  3. ELK 处理 Percona 审计日志(填坑)

    前提 1.有强烈的审计需求. 2.能允许10%-15%左右的性能损失. 3.有强烈的对数据库操作实时查看需求(一般都是为了领导要求). Logstash 比较坑的配置   1 2 3 4 5 6 7 ...

  4. ELK 6.X 版本下xpack破解

    ELK 6.2.2 版本下xpack破解 1.下载xpack 先下载最新版本的 x-pack,里面包含了 es,kibana,logstash 新版本的x-pack 下载地址:https://arti ...

  5. .Net版本依赖之坑引发的搜查

    前言 今天上午,一个客户反馈XX消息没有推送到第三方链接.于是我查看了推送日志列表,并没有今天的.接着登录服务器查询文件日志,看到了记录.我们的代码步骤是消息先推送到消息队列,消费消息队列时,记录文件 ...

  6. 升级cocoapods1.1.0版本遇到的坑

    先容我吐槽两句, 最近写Swfit3.0, 要用到一些框架, 然后就用cocoapods嘛, 结果说要cocoapods1.1.0版本才行, 而自己的是cocoapods1.0.1版本的, 所以就想着 ...

  7. 使用Percona MySQL 5.7版本遇到的坑

    监控DB由于使用的TokuDB引擎,因此选择使用Percona MySQL 5.7版本,在使用过程中遇到了比较多的坑,在这里做一下简单的记录,希望对广大DBA有帮助. load文件飙升导致的DB雪崩 ...

  8. Spring Cloud 升级最新 Finchley 版本,踩坑指南!

    https://blog.csdn.net/youanyyou/article/details/81530240 Spring Cloud 升级最新 Finchley 版本,踩了所有的坑! 2018年 ...

  9. win10 安装tensorflow2.0 GPU版本遇到的坑

          背景:我的机器上tensorflow 1.14 & 2.0,这俩版本都有,之前都是用1.14版本,今天试一下2.0尝尝鲜, 结果就掉坑去了 把CUDA10.1 和 cudnn 安装 ...

随机推荐

  1. sublime同步文件与siderbar

    有时候,打开了sider bar,想和Eclipse.idea一样,每打开一个tab,就可以在左侧的sider bar 目录上面看到我当前的位置,于是找到了一个插件. SyncedSideBar 安装 ...

  2. 构建高性能服务(二)java高并发锁的3种实现

    构建高性能服务(二)java高并发锁的3种实现 来源:http://www.xymyeah.com/?p=46   提高系统并发吞吐能力是构建高性能服务的重点和难点.通常review代码时看到sync ...

  3. Redis分布式锁实现秒杀业务(乐观锁、悲观锁)

    https://blog.csdn.net/lmb55/article/details/78266905

  4. PYQT操作JS并且截图事例

    如何安装PYQT,可以查看我的上一篇文章:http://www.cnblogs.com/liqiu/p/3361948.html 然后运行下面的带有JS程序的Python脚本即可: #-*- codi ...

  5. JERSEY中文翻译(第一章、Getting Started、2.2)

    前言 这是jersey2.2的用户向导,我们会尽力维护它的更新并且也会增加新的章节.当阅读本用户指南的时候,也要参阅Jersey API 文档,额外的信息补充JERSEY的新特性和API 如果你想要为 ...

  6. 请指出document load和document ready的区别?

    共同点:这两种事件都代表的是页面文档加载时触发. 异同点: ready 事件的触发,表示文档结构已经加载完成(不包含图片等非文字媒体文件). onload 事件的触发,表示页面包含图片等文件在内的所有 ...

  7. Mac下Android绘制点9格式png以及解决IllegalArgumentException: Unknown image type 0报错

    在Mac下的AndroidStudio中,右键png图片选择“create 9-patch-file”时会报错:IllegalArgumentException: Unknown image type ...

  8. java LimitedThreadPool

    此线程池一直增长,直到上限,增长后不收缩(因为池子里面的线程是永生的).这个keepAliveTime参数设置的为Long.MAX_VALUE,所以池子里面的线程几乎不会因为idle而被termina ...

  9. 《Android源代码设计模式解析与实战》读书笔记(十七)

    第十七章.中介者模式 中介者模式也称为调解者模式或调停者模式,是一种行为型模式. 1.定义 中介者模式包装了一系列对象相互作用的方式.使得这些对象不必相互明显作用.从而使它们能够松散耦合.当某些对象之 ...

  10. 【Linux】文件夹及作用说明

    Tips Linux关机注意事项: 远程重启服务前,先停止相关服务 使用安全命令重启shutdown –r now,该命令在重启时会正常保存和终止服务器上正在运行的程序 不建议在本地直接对远程服务器关 ...