背景

我们的storm实时流计算项目已经上线几个月了,由于各种原因迟迟没有进行监控,每次出现问题都要登录好几台机器,然后使用sed,shell,awk,vi等各种命令来查询原因,效率非常低下,而且有些统计是没法做的,所以很有必要对storm本身相关的日志以及我们运行在storm上面的任务的日志做一个统一的日志收集,分析,查询,统计平台。

技术选型

对于这个选择,其实不用考虑那么多,借用一句名言 Life is short , You need elk ! 关于elk相关的安装这里不再介绍,可参考散仙的博客:http://qindongliang.iteye.com/category/330375

需求分析

序号 讨论 内容
1 storm需要收集的日志 (1)本身的相关的日志 (2)提交任务的日志
2 日志过滤 排除gc的log和部分不相干业务的log
3 索引如何切分 考虑量不是很大,按每月生成一份索引
4 索引模板定制 默认的动态mapping比较简答,所以我们采用自定义动态索引模板
5 日志的定期删除 使用es官网插件curator管理

核心配置

(1)es的模板定义 注意date类型的动态类型是开启docvalue的,便于快速聚合和排序

{
"order": 0,
"template": "jstorm*",
"settings": {
"index": {
"number_of_replicas": "0",
"number_of_shards": "3"
}
},
"mappings": {
"_default_": {
"dynamic_templates": [
{
"level": {
"mapping": {
"index": "not_analyzed",
"type": "string"
},
"match": "level",
"match_mapping_type": "string"
}
},
{
"message": {
"mapping": {
"index": "analyzed",
"type": "string"
},
"match": "message",
"match_mapping_type": "string"
}
},
{
"date_fields": {
"mapping": {
"doc_values": true,
"type": "date"
},
"match_mapping_type": "date"
}
},
{
"string_fields": {
"mapping": {
"index": "not_analyzed",
"type": "string"
},
"match": "*",
"match_mapping_type": "string"
}
}
],
"_all": {
"enabled": false
}
}
},
"aliases": {}
}

(2)logstash的conf定义

input{
file{
#初始化全量导入
start_position => "beginning"
#统一的storm的日志目录
path=> ["/data/logs/jstorm/**/*.log"]
#排除的路径
exclude =>["*gc*","*log_monitor*"]
#指定文件偏移量存储的文件
sincedb_path => "./sincedb"
#配置多行数据收集(针对异常)
codec => multiline {
#类似两个info之间的所有数据是一行数据
pattern => "^\[%{LOGLEVEL:loglevel}"
#true代表是两个loglevel之间的数据
#false代表两个异常之间的数据,跟上面的相反
negate=> true
#后一条的数据前面所有的,都属于这整条数据
what => "previous"
}
}
} filter {
#使用gork直接获取日志级别和时间
grok {
match =>{"message"=>"%{LOGLEVEL:loglevel}\s*%{TIMESTAMP_ISO8601:time} "}
} # 转化日志时间为收集的时间,并移除无用的字段
date{
match => ["time","yyyy-MM-dd HH:mm:ss.SSS","yyyy-MM-dd HH:mm:ss","ISO8601"]
remove_field => [ "time","@version" ] } # 这个地方可以对一些数据做过滤
# if [loglevel] == "DEBUG" {
# drop { }
# } } #输出到es的配置
output{ elasticsearch{
#设置索引名
index => "jstorm_pro%{+YYYY-MM}"
hosts=> ["192.168.8.5:9200","192.168.8.6:9200","192.168.8.7:9200"]
#关闭logstash自动管理模块
manage_template => false
#指定模板名为jstrom
template_name => "jstorm"
#设置flush的数量
flush_size => 3000
}
# 调试控制台输出
# stdout { codec => rubydebug }
}

辅助脚本

放在logstash的根目录下面

启动脚本:start_jstorm.sh
nohup bin/logstash -f config/jstorm.conf &> jstorm_logstash.log & echo $! >jstorm_logstash_pid& 关闭脚本:stop_jstorm.sh
kill -9 `cat jstorm_logstash_pid`

收集检索效果

一切完成后,启动logstash收集进程后,我们就可以实时在kibana里面分析数据了,非常nice!

然后,我们就可以非常快速的定位异常数据了。

实时收集Storm日志到ELK集群的更多相关文章

  1. ELK集群搭建

    基于5台虚拟机,搭建ELK集群. 方案: 1. ELK是日志分析平台,而不是一款软件,是一整套解决方案,是三个软件产品的首字母缩写,ELK分别代表: Elasticsearch:负责日志检索和储存 L ...

  2. Filebeat-1.3.1安装和设置(图文详解)(多节点的ELK集群安装在一个节点就好)(以Console Output为例)

    前期博客 Filebeat的下载(图文讲解) 前提 Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) Elasticse ...

  3. STORM在线业务实践-集群空闲CPU飙高问题排查

    源:http://daiwa.ninja/index.php/2015/07/18/storm-cpu-overload/ 2015-07-18AUTHORDAIWA STORM在线业务实践-集群空闲 ...

  4. Centos7中ELK集群安装流程

    Centos7中ELK集群安装流程   说明:三个版本必须相同,这里安装5.1版. 一.安装Elasticsearch5.1   hostnamectl set-hostname elk vim /e ...

  5. STORM在线业务实践-集群空闲CPU飙高问题排查(转)

    最近将公司的在线业务迁移到Storm集群上,上线后遇到低峰期CPU耗费严重的情况.在解决问题的过程中深入了解了storm的内部实现原理,并且解决了一个storm0.9-0.10版本一直存在的严重bug ...

  6. PB级数据实时查询,滴滴Elasticsearch多集群架构实践

    PB级数据实时查询,滴滴Elasticsearch多集群架构实践  mp.weixin.qq.com 点击上方"IT牧场",选择"设为星标"技术干货每日送达 点 ...

  7. 通过docker搭建ELK集群

    单机ELK,另外两台服务器分别有一个elasticsearch节点,这样形成一个3节点的ES集群. 可以先尝试单独搭建es集群或单机ELK https://www.cnblogs.com/lz0925 ...

  8. ansible playbook部署ELK集群系统

    一.介绍 总共4台机器,分别为 192.168.1.99 192.168.1.100 192.168.1.210 192.168.1.211 服务所在机器为: redis:192.168.1.211 ...

  9. Kibana安装(图文详解)(多节点的ELK集群安装在一个节点就好)

    对于Kibana ,我们知道,是Elasticsearch/Logstash/Kibana的必不可少成员. 前提: Elasticsearch-2.4.3的下载(图文详解) Elasticsearch ...

随机推荐

  1. 4种xml解析器区别

    XML作用:不同应用之间的通信和数据共享 Dom遍历法:对内存消耗大,容易内存溢出 SAX方法:事件驱动模式,缺点 不易操作,很难同时访问多处不同数据,对内存消耗不大,速度快 jdom方法: dom4 ...

  2. git: 使用submodule进行托管

    问题描述: 当一个prj.git项目里引用了另外一个moduleA.git项目作为其一个子模块,由于该模块未完善后续可能将继续升级,也就是需要两套git分别管理prj.git与moduleA.git, ...

  3. 剑指offer——65和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  4. centos7下搭建nfs服务

    现在有3台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现! 一.安装 NFS 服务器所需的软件包: yum install -y nfs-ut ...

  5. [已解决]报错:ValueError: Expected 2D array, got scalar array instead

    报错代码: new_x = 84610 pre_y = model.predict(new_x) print(pre_y) 报错结果: ValueError: Expected 2D array, g ...

  6. 关于Swagger @ApiModel 返回内容注释不显示问题

    今天做了一天@ApiModel希望Swagger生成的文档出现返回的内容注释,发现需要用到@ApiModel注解到你需要返回的类上 @ApiModelProperty作为字段的描述 例如  之后文档还 ...

  7. 远程服务器安装nginx

    肯定有前端的小伙伴在腾讯云或者阿里云上购买了服务器,却不知道怎么访问使用它,那我们就一起来安装学习下? xshell 登录服务器,输入公网ip和密码登录 ls 查看目录,which nginx ,查看 ...

  8. 尝试修改源码需要用到git存一下

    git reflog查看本地记录 git reset --hard 02a3260

  9. sanic之websocket路由

    在某些时候,需要建立websocket路由,来建立长链接,来实时传输数据,就比如一些聊天应用,就有实时音视频,需要实时传出状态 在sanic框架中支持两种websocket路由方式,有一种是再app中 ...

  10. tomcat启动内存修改

    #   USE_NOHUP       (Optional) If set to the string true the start command will #                   ...