分布式实时日志处理平台ELK
这三样东西分别作用是:日志收集、索引与搜索、可视化展现
l logstash
这张架构图可以看出logstash只是collect和index的地方,运行时传入一个.conf文件,配置分三部分:input ,filter,output。
l redis
redis在这里是作为日志收集与索引之间解耦作用
l elasticsearch
核心组件,用来搜索。主要特点:real-time,distributed,Highly Available,document oriented,schema free,RESTful
kibana
可视化日志组件,让数据交互变得更容易
部署
需要的组件
- logstash https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz
- redis http://download.redis.io/releases/redis-stable.tar.gz
- elasticsearch https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.zip
- kibana https://github.com/elasticsearch/kibana
Logstash
logstash 10 分钟教程 :http://logstash.net/docs/1.4.2/tutorials/10-minute-walkthrough/
下载最新logstash版本并解压
编辑logstash.conf配置文件
logstash用户说明文档:http://logstash.net/docs/1.4.2/
log4j server配置实例:log4j.conf
|
input { log4j { data_timeout => 5 # mode => "server" # port => 4560 } } filter { json { source => "message" remove_field => ["message","class","file","host","method","path","priority","thread","type","logger_name"] } } output{ #stdout { codec => json } redis { host => "redis.internal.173" port => 6379 data_type => "list" key => "soalog" } } |
logstash输出elasticsearch配置实例:soalog-es.conf
|
input { redis { host => "redis.internal.173" port => "6379" key => "soalog" data_type => "list" } } filter { json { source => "message" remove_field => ["message","type"] } } output { elasticsearch { #host => "es1.internal.173,es2.internal.173,es3.internal.173" cluster => "soaes" index => "soa_logs-%{+YYYY.MM.dd}" } } |
这里filter配置source => message,是把message里json串解析出来,作为索引字段,然后配置remove_field 把不需要字段删除
启动
./logstash -f soalog-es.conf --verbose -l ../soalog-es.log &
./logstash -f log4j.conf --verbose -l ../log4j.log &
Elastcisearch
下载最新版本elasticsearch并解压
bin/elasticsearch -d 后端运行
验证
elasticsearch集群配置:
编辑 config/elasticsearch.yml
#指定你的集群名称,默认是elasticsearch,在使用客户端连接集群模式会用到
cluster.name: soaes
#指定数据存储目录,可以多个磁盘 /path/to/data1,/path/to/data2
path.data: /mnt/hadoop/esdata
#指定日志存储目录
path.logs: /mnt/hadoop/eslogs
#集群主节点列表,执行发现新节点
discovery.zen.ping.unicast.hosts: ["hadoop74", "hadoop75"]
配置es模板 ,可以指定字段是否索引,以及存储类型
在config目录下创建templates目录
增加模板文件template-soalogs.json
|
{ "template-soalogs" : { "template" : "soa_logs*", "settings" : { "index.number_of_shards" : 5, "number_of_replicas" : 1, "index" : { "store" : { "compress" : { "stored" : true, "tv": true } } } }, "mappings" : { "logs" : { "properties" : { "providerNode" : { "index" : "not_analyzed", "type" : "string" }, "serviceMethod" : { "index" : "not_analyzed", "type" : "string" }, "appId" : { "index" : "not_analyzed", "type" : "string" }, "status" : { "type" : "long" }, "srcAppId" : { "index" : "not_analyzed", "type" : "string" }, "remark" : { "type" : "string" }, "serviceVersion" : { "index" : "not_analyzed", "type" : "string" }, "srcServiceVersion" : { "index" : "not_analyzed", "type" : "string" }, "logSide" : { "type" : "long" }, "invokeTime" : { "type" : "long" }, "@version" : { "type" : "string" }, "@timestamp" : { "format" : "dateOptionalTime", "type" : "date" }, "srcServiceInterface" : { "index" : "not_analyzed", "type" : "string" }, "serviceInterface" : { "index" : "not_analyzed", "type" : "string" }, "retryCount" : { "type" : "long" }, "traceId" : { "index" : "not_analyzed", "type" : "string" }, "processTime" : { "type" : "long" }, "consumerNode" : { "index" : "not_analyzed", "type" : "string" }, "rpcId" : { "index" : "not_analyzed", "type" : "string" }, "srcServiceMethod" : { "index" : "not_analyzed", "type" : "string" } } } } } } |
kibana
进入elasticsearch目录
bin/plugin -install elasticsearch/kibana
验证:http://localhost:9200/_plugin/kibana
kibana需要配置查询索引规则
这里index是soa_logs,按天分索引格式需要指定为YYYY-MM-DD
logstash时差8小时问题
logstash在按每天输出到elasticsearch时,因为时区使用utc,造成每天8:00才创建当天索引,而8:00以前数据则输出到昨天的索引
修改logstash/lib/logstash/event.rb 可以解决这个问题
第226行
.withZone(org.joda.time.DateTimeZone::UTC)
修改为
.withZone(org.joda.time.DateTimeZone.getDefault())
log4j.properties配置
#remote logging
log4j.additivity.logstash=false
log4j.logger.logstash=INFO,logstash
log4j.appender.logstash =
org.apache.log4j.net.SocketAppender
log4j.appender.logstash.RemoteHost
= localhost
log4j.appender.logstash.Port =
4560
log4j.appender.logstash.LocationInfo
= false
java日志输出
private static final
org.slf4j.Logger logstash = org.slf4j.LoggerFactory.getLogger("logstash");
logstash.info(JSONObject.toJSONString(rpcLog));
KOPF
elasticsearch集群监控
bin/plugin -install
lmenezes/elasticsearch-kopf
http://localhost:9200/_plugin/kopf
logstash接入tomcat日志示例:
logstash代理端配置tomcat.conf
|
input { file { type=> "usap" path=> 17173/apache-tomcat-7.0.50-8085/logs/catalina.out","/opt/17173/apache-tomcat-6.0.37-usap-image/logs/catalina.out"] codec=> multiline { pattern => what=> "previous" } } } filter { grok { #match => { "message" => match => [ "message", remove_field => ["message"] } } output { # stdout{ codec => rubydebug } redis {host => "redis.internal.173" data_type => "list" } |
修改logstash/patterns/grok-patterns
增加tomcat日志过滤正则
|
#tomcat log JAVACLASS (?:[a-zA-Z0-9-]+\:)+[A-Za-z0-9$]+ JAVALOGMESSAGE (.*) THREAD [A-Za-z0-9\-\[\]]+ # MMM dd, yyyy HH:mm:ss eg: Jan 9, 2014 7:13:13 AM CATALINA_DATESTAMP %{MONTH} %{MONTHDAY}, 20%{YEAR} # yyyy-MM-dd HH:mm:ss,SSS ZZZ eg: 2014-01-09 TOMCAT_DATESTAMP 20%{YEAR}-%{MONTHNUM}-%{MONTHDAY} LOG_TIME %{HOUR}:?%{MINUTE}(?::?%{SECOND}) CATALINALOG %{CATALINA_DATESTAMP:timestamp} # #TOMCATLOG %{LOG_TIME:timestamp} %{THREAD:thread} TOMCATLOG %{TOMCAT_DATESTAMP:timestamp} |
启动 tomcat 日志代理:
./logstash -f tomcat.conf --verbose -l
../tomcat.log &
tomcat日志存入es
配置tomcat-es.conf
|
input { redis { host => 'redis.internal.173' data_type => 'list' port => "6379" key => 'usap' #type => 'redis-input' #codec => json } } output { # stdout { codec => rubydebug } elasticsearch { #host => "es1.internal.173,es2.internal.173,es3.internal.173" cluster => index => } } |
启动tomcat日志存储
./logstash -f tomcat-es.conf --verbose -l
../tomcat-es.log &
logstash接入nginx\syslog日志示例
logstash代理端配置nginx.conf
|
input { file{ type => "linux-syslog" path => [ "/var/log/*.log", } file { type => "nginx-access" path => } file { type => "nginx-error" path => } } output { # stdout{ codec => rubydebug } redis {host => "redis.internal.173" data_type => "list" } |
启动nginx日志代理
./logstash -f nginx.conf --verbose -l
../nginx.log &
nginx日志存入es
配置nginx-es.conf
|
input { redis { host => 'redis.internal.173' data_type => 'list' port => "6379" key => 'nginx' #type => 'redis-input' #codec => json } } filter { grok { type => "linux-syslog" pattern => "%{SYSLOGLINE}" } grok { type => "nginx-access" pattern => "%{IPORHOST:source_ip} - r} %{QS:http_user_agent}" } } output { # stdout { codec => rubydebug } elasticsearch { #host => "es1.internal.173,es2.internal.173,es3.internal.173" cluster => index => } } |
启动nginx日志存储
./logstash -f nginx-es.conf --verbose -l
../nginx-es.log &
分布式实时日志处理平台ELK的更多相关文章
- 分布式实时日志分析解决方案ELK部署架构
一.概述 ELK 已经成为目前最流行的集中式日志解决方案,它主要是由Beats.Logstash.Elasticsearch.Kibana等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决 ...
- ELK实时日志分析平台环境部署--完整记录
在日常运维工作中,对于系统和业务日志的处理尤为重要.今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为例说明,如有误述,敬请指出)~ ==== ...
- ELK实时日志分析平台环境部署--完整记录(转)
在日常运维工作中,对于系统和业务日志的处理尤为重要.今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为例说明,如有误述,敬请指出)~ ==== ...
- asp.net core结合NLog搭建ELK实时日志分析平台
0.整体架构 整体架构目录:ASP.NET Core分布式项目实战-目录 一.介绍ELK 1.说明(此篇ELK采用rpm的方式安装在服务器上)-牛刀小试 承接上一篇文章的内容准备部署ELK来展示asp ...
- ELK搭建实时日志分析平台
ELK搭建实时日志分析平台 导言 ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成,ELK平台可以同时实现日志收集.日志搜索和日志分析的功能.对于生产环境中海量日志 ...
- ELK搭建实时日志分析平台之二Logstash和Kibana搭建
本文书接前回<ELK搭建实时日志分析平台之一ElasticSearch> 文:铁乐与猫 四.安装Logstash logstash是一个数据分析软件,主要目的是分析log日志. 1)下载和 ...
- ELK搭建实时日志分析平台之一ElasticSearch搭建
文:铁乐与猫 系统:CentOS Linux release 7.3.1611 (Core) 注:我这里为测试和实验方便,ELK整套都装在同一台服务器环境中了,生产环境的话,可以分开搭建在不同的服务器 ...
- 手把手教你搭建 ELK 实时日志分析平台
本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kiban ...
- 集中式日志分析平台 - ELK Stack - 安全解决方案 X-Pack
大数据之心 关注 0.6 2017.02.22 15:36* 字数 2158 阅读 16457评论 7喜欢 9 简介 X-Pack 已经作为 Elastic 公司单独的产品线,前身是 Shield, ...
随机推荐
- Unity 3D学习之 Prime31 Game Center插件用法
http://momowing.diandian.com/post/2012-11-08/40041806328 It's my life~: 为app 连入Game Center 功能而困扰的朋友们 ...
- Lucas的数论(math)
Lucas的数论(math) 题目描述 去年的今日,Lucas仍然是一个热爱数学的孩子.(现在已经变成业界毒瘤了> <) 在整理以前的试题时,他发现了这么一道题目:求\(\sum\limi ...
- linux安装setup工具
如果你的Linux系统是最小化安装的,可能会没有setup命令工具,环境是centos 5.8 安装setup命令工具的步骤. 安装setuptool #yum install setuptool 系 ...
- 开博一周总结与随谈[thinking of writing blog for one week]
8天前,就是5月19号,突发奇想,觉得应该开个博客记录下自己的学习笔记和心得,更重要的是做个自我梳理和总结.大致看了下国内的博客,最后选定cnblogs.之所以选则cnblogs是因为平时搜到不少好文 ...
- IE8 不支持html5 placeholder的解决方案
IE8不支持html5 placeholder的解决方法. /** * jQuery EnPlaceholder plug * version 1.0 2014.07.01戈志刚 * by Frans ...
- SQL Server集群服务器的优缺点
由二台或更多物理上独立的服务器共同组成的“虚拟”服务器称之为集群服务器.一项称做MicroSoft集群服务(MSCS)的微软服务可对集群服务器进行管理.一个SQL Server集群是由二台或更多运行S ...
- Java 复制文件的高效方法
转载自:http://jingyan.baidu.com/article/ff4116259c2d7712e4823780.html 在Java编程中,复制文件的方法有很多,而且经常要用到.我以前一直 ...
- IE的安全性设定增加“我的电脑”的安全性设定
HKEY_CURRE-NT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones\,在右边窗口中找到DWORD值“ ...
- LINUX调优
一.Linux系统调优及安全设置 系统安装安全最小化原则说明 ◆安装linux系统最小化,即选包最小化,yum安装软件最小化. ◆开机自启动程序服务最小化,即无用的服务不开启. ◆操作命令最小化原则, ...
- [转]ThreadPoolExecutor线程池的分析和使用
1. 引言 合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 第 ...