实时收集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 ...
随机推荐
- eclipse的快捷键(常用)
ctrl+shift+r 全局查找java类 ctrl +h 全局查找包含某某内容的文件位置 ctrl +alt+h 右击方法名 选择open call hierarchy
- Mysql DBA
1 mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `tb_co ...
- Async await 异步编程说明
希望在编程上有些许提高所以 最近连续2篇博客都在说明多线程和异步编程的使用,异步和多线程之间区别请自行百度,因为理解不是特别透彻就不在叙述以免误导大家,这里写下新研究整理 task 和 await ...
- 快速读取 C++
int read() { ; ; char ch=getchar(); ') { if (ch=='-') f=-; ch=getchar(); } ') { x=x*+ch-'; ch=getcha ...
- Jenkins添加Windows自动化构建方案
一.为Jenkins添加Windows节点 这里需要填写远程工作目录,启动方法一项一定要选择"Launch agent via Java Web Start"一项,其它的保持默认. ...
- GIT 部分记录
关于版本回退 git reset HEAD^ #回退a.py这个文件的版本到上一个版本 git reset HEAD^ a.py git reset HEAD a.py 我试了一下以上2种方式 ...
- ES6模块化使用遇到的问题
前言 最近在学习ES6模块化时,遇到了一些问题,通过查询相关资料得以解决,本篇随笔详细记录了解决方法. 具体内容 以下定义一个模块common.js 在test.html中引入上述定义的模块 运行上述 ...
- canvas 压缩图片上传
问题:前端开发过程中难免会将数据提交到后台,但若是提交的数据过大,特别上传图片这类需求,如果不对上传的图片进行压缩处理,就难免会出现请求时间过长的情况,对于用户体验肯定就不是太友好,那么这时候该如何将 ...
- jq-demo-放大镜
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- PagedLOD模型对象选择关键技术点
DatabaseCacheReadCallback这个类继承ReadCallback,在相交的测试中,场景可能有PagedLOD,而计算相交过程中,PagedLOD不是精度最高的节点,这样计算的就不准 ...