实时收集Storm日志到ELK集群
背景
我们的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集群的更多相关文章
- ELK集群搭建
基于5台虚拟机,搭建ELK集群. 方案: 1. ELK是日志分析平台,而不是一款软件,是一整套解决方案,是三个软件产品的首字母缩写,ELK分别代表: Elasticsearch:负责日志检索和储存 L ...
- Filebeat-1.3.1安装和设置(图文详解)(多节点的ELK集群安装在一个节点就好)(以Console Output为例)
前期博客 Filebeat的下载(图文讲解) 前提 Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) Elasticse ...
- STORM在线业务实践-集群空闲CPU飙高问题排查
源:http://daiwa.ninja/index.php/2015/07/18/storm-cpu-overload/ 2015-07-18AUTHORDAIWA STORM在线业务实践-集群空闲 ...
- Centos7中ELK集群安装流程
Centos7中ELK集群安装流程 说明:三个版本必须相同,这里安装5.1版. 一.安装Elasticsearch5.1 hostnamectl set-hostname elk vim /e ...
- STORM在线业务实践-集群空闲CPU飙高问题排查(转)
最近将公司的在线业务迁移到Storm集群上,上线后遇到低峰期CPU耗费严重的情况.在解决问题的过程中深入了解了storm的内部实现原理,并且解决了一个storm0.9-0.10版本一直存在的严重bug ...
- PB级数据实时查询,滴滴Elasticsearch多集群架构实践
PB级数据实时查询,滴滴Elasticsearch多集群架构实践 mp.weixin.qq.com 点击上方"IT牧场",选择"设为星标"技术干货每日送达 点 ...
- 通过docker搭建ELK集群
单机ELK,另外两台服务器分别有一个elasticsearch节点,这样形成一个3节点的ES集群. 可以先尝试单独搭建es集群或单机ELK https://www.cnblogs.com/lz0925 ...
- 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 ...
- Kibana安装(图文详解)(多节点的ELK集群安装在一个节点就好)
对于Kibana ,我们知道,是Elasticsearch/Logstash/Kibana的必不可少成员. 前提: Elasticsearch-2.4.3的下载(图文详解) Elasticsearch ...
随机推荐
- node express 会话管理中间件 --- cookie-parser
本文转载自:https://www.cnblogs.com/bq-med/p/8995100.html cookie是由服务器发送给客户端(浏览器)的小量信息. 我们知道,平时上网时都是使用无状态的H ...
- 线程创建后为什么要调用CloseHandle
很多程序在创建线程都这样写的: ............ ThreadHandle = CreateThread(NULL,0,.....); CloseHandel(ThreadHandle ); ...
- [已解决]报错run `npm audit fix` to fix them, or `npm audit` for details
问题: added 246 packages from 681 contributors and audited 382 packages in 17.509s found 13 vulnerabil ...
- &与&&,|与||的区别
今天在做leetcode的时候,遇到了运算符的不同而导致结果不一致的问题.记录一下提醒自己 中文名称与英文名称 &:按位与(Bitwise and) &&:逻辑与(logica ...
- 2019ICPC南昌网络赛C Hello 2019
题意:给出一个字符串,每次询问一个区间[l,r],求使得这个区间含有9102但不含有8102最少要删掉几个字符 首先我们考虑将串反转,这样就变成了含有2019但不含有2018的问题了 我们构建一个状态 ...
- VMware1设备与主机共享网络的问题
问题的提出: 最近需要用到VMware1设备来配置网络,顺便将VMware1设备与主机进行共享网络,这样master就能直接访问网络了,但是原本以为直接在wlan设备上选择网络共享就行了,但是却没法收 ...
- JFinal教程
自学JFinal总结 前言:每次搭建ssm框架时,就像搬家一样,非常繁杂,并且还容易出错.正好了解到JFinal极简,无需配置即可使用,在这里记录下学习的过程. 感谢:非常感谢此网站发布的教程,非常详 ...
- 记录一次工作中jvm被linux杀死的调查
首先,以后碰到任何jvm的错误,先看日志!!!!!!!! web项目在tomcat目录下的log里,或者自己设定的errorfile目录下.总之,找到一切可以运用的日志,比如crash日志,cored ...
- SpringCloud+Eureka+Feign+Ribbon+zuul的简化搭建流程和CRUD练习
环境:win10--idea2019--jdk8 1.搭建Eureka服务模块 1.1 新建eureka服务模块(Sping Initializr) 取名为eureka-server,并添加如下Dep ...
- Kotlin Download
{ https://github.com/JetBrains/kotlin/releases/tag/v1.3.50 }