Motivation

运维过程中对问题的定位往往需要跟踪和定位日志。分布式和弹性计算的引入,使得日志的定位和分析变得越发复杂。

本次实践主要的目的是考察现有成熟的日志收集、检索和分析方案:Kafka+ELK。

Progress

  • 20160324 init

  • 20160329
    build playground of Logstash, Elastissearch, Kibana,对Log4j、Logback的文件执行相应处理,这已经满足了业务需求。
    对Kafka的考察还是纳入消息处理框架中,这里不再记录。
    同时,因日志限于资质原因,这里不展示Kibana的查询和统计界面。

Outline

  • 0 参考
  • 1 Logstash
  • 2 Elasticsearch
  • 3 Kibana4
  • 参考资料

0 参考

0.1 Log Management for Spring Boot Applications with Logstash, Elasticsearch and Kibana

multiline

grok

代码:/home/zhoujiagen/workspace/github/elk-example

0.2 log4j Input plugin

0.3 multiline Codec plugin

0.4 grok Filter Plugin

内建的patterns: https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

0.5 kafka Input plugin

0.6 date Filter plugin

1 Logstash

bin/logstash -f config/log4j.conf

Log4j 1.x的配置

#log4j.rootLogger=INFO, console
log4j.rootLogger=INFO, console, logstash

### Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] [%t] %l => %m%n

### SocketAppender
log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.Port=4560
log4j.appender.logstash.RemoteHost=localhost
log4j.appender.logstash.ReconnectionDelay=60000
log4j.appender.logstash.LocationInfo=true

log4j.conf

input {
  log4j {
    type => "log4j-logstash"
    port => 4560
  }
}

filter {
   multiline {
      pattern => "^(%{TIMESTAMP_ISO8601})"
      negate => true
      what => "previous"
   }
   grok {
      "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:loglevel}\] \[%{WORD:threadname}\] %{JAVACLASS:class}\.%{WORD:method}\(%{JAVAFILE:file}\:%{NUMBER:line}\) => %{GREEDYDATA:logmessage}"
   }
}

output{
  elasticsearch { hosts => "localhost:9200" }
  stdout { codec => rubydebug }
}

Logback的配置

#########################################################
### 输入
#########################################################
input{
  stdin{}
  file{
    path => ["/home/zhoujiagen/filecenter/logs/app*.log"]
  }
}

#########################################################
### 过滤
###
### grok 可以使用测试链接:http://grokdebug.herokuapp.com/
#########################################################
filter{
  multiline {
      pattern => "^(%{TIMESTAMP_ISO8601})"
      negate => true
      what => "previous"
   }
   grok {
      # Do multiline matching with (?m) as the above mutliline filter may add newlines to the log messages.
      match => [ "message", "(?m)^%{TIMESTAMP_ISO8601:logtime} \[%{PROG:threadname}\] %{LOGLEVEL:loglevel} %{SPACE} %{JAVACLASS:classname}\:%{NUMBER:codeline} - %{GREEDYDATA:logmessage}" ]
   }
}

#########################################################
### 输出
#########################################################
output{
  elasticsearch { hosts => "localhost:9200" }
  stdout{ codec=>rubydebug }
}

2 Elasticsearch

# instance 1
~/devtools/elasticsearch-2.2.1$ bin/elasticsearch

# instance 2
~/devtools/elasticsearch-2.2.1$ bin/elasticsearch
# or
~/devtools/elasticsearch-2.2.1_instance2$ bin/elasticsearch

3 Kibana4

bin/kibana

assess through: http://localhost:5601/

参考资料

-1 ELK官方文档

elastic Docs

Logstash Reference 2.2

Elasticsearch Reference 2.2

Kibana Reference 4.4

0 ELK介绍

ELKstack 中文指南

1 ELK安装

How To Install Elasticsearch, Logstash, and Kibana (ELK Stack) on Ubuntu 14.04

2 ELK使用

Centralized logging with an ELK stack (Elasticsearch-Logstash-Kibana) on Ubuntu

Log Management for Spring Boot Applications with Logstash, Elasticsearch and Kibana

使用 ELK Stack 集中 IBM Bluemix 应用程序日志

A session of Log Collect, Retrieval and Analysis using ELK Stack的更多相关文章

  1. Log Collect

    http://ossectools.blogspot.com/2011/03/comprehensive-log-collection.html https://www.hacking-lab.com ...

  2. Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCur ...

  3. ZooKeeper个人笔记Session管理

    Session 1.sessionId  <机器的SID,当前时间>生成一个sessionId,这是全局唯一的. 2.TimeOut 会话的超时时间,注意,这个值和客户端ZooKeeper ...

  4. 【原创】Tomcat集群环境下对session进行外部缓存的方法(1)

    BJJC网改版, 计划将应用部署在tomcat集群上,集群的部署方案为Apache+Tomcat6,连接件为mod_jk,其中开启了session复制和粘性session.计划节点数为3个. 到这,或 ...

  5. express手工实现session原理

    var express = require('express'); var cookieParser = require('cookie-parser'); var bodyParser = requ ...

  6. SpringBoot集成Shiro并用MongoDB做Session存储

    之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...

  7. 使用Spring Session实现Spring Boot水平扩展

    小编说:本文使用Spring Session实现了Spring Boot水平扩展,每个Spring Boot应用与其他水平扩展的Spring Boot一样,都能处理用户请求.如果宕机,Nginx会将请 ...

  8. nodejs操作session和cookie

    session: 安装模块 cnpm install express-session 引入session注册到路由 var express = require('express'); var sess ...

  9. Pocket Gem OA: Log Parser

    time a given player spends actually connected to the network. We keep console logs of various game s ...

随机推荐

  1. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  2. Emacs 常用快捷键

    关闭欢迎界面:Q 保存:c-x c-s 退出:c-x c-c 暂时退出:c-z       屏幕滚动 移动到下一屏:c-v 移动到上一屏:m-v 将光标所在行置中:c-L       光标移动 上一行 ...

  3. Maven 从svn下载后,pom.xml报错解决方案

    Multiple annotations found at this line: - Execution default-testResources of goal org.apache.maven. ...

  4. Ubuntu 安装和使用 Zip – rar – 7zip

    http://www.rongxuan.org/2013/08/13/ubuntu-%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8-zip-rar-7zip ...

  5. JSTL(1.1)的配置

    1.查看你的项目中web.xml实际配置的servlet版本号? 2. servlet2.4所需要的jstl版本是1.1,所以上网下载jstl(1.1)的2个jar包,然后把这个2个jar包拷贝到你自 ...

  6. 错误:媒体集有 2 个媒体簇,但只提供了 1 个 sql2005 备份错误。

    错误:媒体集有 2 个媒体簇,但只提供了 1 个 sql2005 2010-10-19 11:44:06|  分类: sql|举报|字号 订阅     ql2005备份的时候,选择备份路径是一方面,但 ...

  7. 【python】面向对象

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 类class   实例(i ...

  8. 几种垂直居中的方式及CSS图片替换技术

    由于块级元素的高度是可以设置的,所以对于块级元素的垂直居中比较简单. 方法一: 在不定高的情况下,把元素的上下内边距设为同一个值即可实现,即padding :10px   0; 以上方法针对块级元素和 ...

  9. 快速了解IOC的几种姿势

    一.首先我们了解IOC如何注入的几种姿势 构造函数注入(Constructor Injection) Ioc容器会智能的选择和调用合适的构造函数以创建依赖的对象.如果被选择的构造函数具有相应的参数,I ...

  10. BootStrap 的modal 中使用typeahead

    刚开始怎么也不现实,在页面上显示正常. 调试发现是下拉框被modal遮挡住了, 找到样式dropdown-menu    修改z-index值为2000后,显示正常.(modal的z-index值为1 ...