ELK菜鸟手记 (一) 环境配置+log4j日志记录
1. 背景介绍
在大数据时代,日志记录和管理变得尤为重要。
以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦,
想根据一个关键字查询日志中某个关键信息相当困难。
这个时候,ELK诞生了。
什么是ELK?
简单来说:它是一套完整的日志记录和分析的解决方案平台。
2. 技术栈介绍
ELK = Elasticsearch + Logstash + Kibana
2-1) Elasticsearch:
(
Elasticsearch is a distributed open source search engine based on Apache Lucene,
and released under an Apache 2.0 license (which means that it can be downloaded, used, and modi ed free of charge).
It provides horizontal scalability, reliability, and multitenant capability for real-time search.
Elasticsearch features are available through JSON over a RESTful API.
The searching capabilities are backed by a schema-less Apache Lucene Engine,
which allows it to dynamically index data without knowing the structure beforehand.
Elasticsearch is able to achieve fast search responses because it uses indexing to search over the texts.
)
Elasticsearch是一个分布式的开源的基于Apache Lucene项目的搜索引擎,它发布在Apache 2.0协议下
(这也就意味着它可以被免费地下载,使用并且修改)。
Elasticsearch提供了水平的,可扩展的,可靠的,多用户形式的实时搜索。
Elasticsearch的功能可以通过JSON格式的RESTful API形式访问。
Elasticsearch的搜索能力是得到Apache Lucene引擎的支持,允许给文本数据增加加动态索引。
2-2) Logstash
(
Logstash is a data pipeline that helps collect, parse, and analyze a large variety of structured and unstructured data and events generated across various systems.
It provides plugins to connect to various types of input sources and platforms, and is designed to ef ciently process logs, events,
and unstructured data sources for distribution into a variety of outputs with the use of its output plugins,
namely le, stdout (as output on console running Logstash), or Elasticsearch.
)
Logstash是一个数据管道,它被用来收集,解析和分析各种结构化的和非结构化的由各种系统产生的数据以及事件。
它提供了插件用来连接到各种输入数据源,可以高效地处理日志,事件以及非结构化的数据,而且可以通过输出插件的形式
把结果输出到各种输出源,比如:标准输出,控制台或者Elasticsearch。
2-3) Kibana
(Kibana is an open source Apache 2.0 licensed data visualization platform that helps in
visualizing any kind of structured and unstructured data stored in Elasticsearch indexes.
Kibana is entirely written in HTML and JavaScript. )
Kibana是一个基于Apache 2.0协议的开源可视化平台,它用来可视化任何结构化的和非结构化的存储在Elasticsearch索引
中的数据。Kibana完全用HTML和Javascript编写。
3. 下载/安装/配置/启动
前面说了很多废话,接下来是每个程序员感兴趣的动手环节了,let's start!
3-1) 安装Elasticsearch
下载地址:
https://www.elastic.co/downloads/elasticsearch
a) 解压安装包elasticsearch-5.2.2.tar.gz
(由于本人是mac系统)我把它解压到了/usr/local目录下,完整路径如下:
/usr/local/elasticsearch-5.2.2
b) 编辑配置文件
cd config
vi elasticsearch.yml
内容如下:
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /tmp/elasticsearch/data
#
# Path to log files:
#
path.logs: /tmp/elasticsearch/logs
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
#
# Set a custom port for HTTP:
#
http.port:
c) 启动Elasticsearch
./bin/elasticsearch
如果没有错误发生,可以进入到下一步的验证环节
d) 验证
可以使用cURL命令:
curl 'http://localhost:9200/?pretty'
或者
直接用浏览器打开
http://localhost:9200
3-2) 安装Logstash
a) 解压安装包logstash-5.2.2.tar.gz
完整路径如下:
/usr/local/logstash-5.2.2
b) 编辑配置文件
cd config
新建配置文件log4j_es.conf
vi log4j_es.conf
内容如下:
input {
log4j {
host => "127.0.0.1"
port =>
}
} output {
stdout {
codec => rubydebug
}
elasticsearch{
hosts => ["localhost:9200"]
index => "log4j-%{+YYYY.MM.dd}"
document_type => "log4j_type"
}
}
c) 启动Logstash
./bin/logstash -f config/log4j-es.conf
3-3) 安装Kibana
a) 解压安装包kibana-5.2.2.tar.gz
完整路径如下:
/usr/local/ kibana-5.2.2
b) 编辑配置文件
cd config
vi kibana.yml
内容如下:
# Kibana is served by a back end server. This setting specifies the port to use.
server.port: server.host: "localhost" # The URL of the Elasticsearch instance to use for all your queries.
elasticsearch.url: "http://localhost:9200" # Kibana uses an index in Elasticsearch to store saved searches, visualizations and
# dashboards. Kibana creates a new index if the index doesn't already exist.
kibana.index: ".kibana"
c) 启动Kibana
./bin/kibana
d) 验证
打开网址:
http://localhost:5601/
见到如下Logo
4. Log4j记录日志到Logstash
4-1) 新建maven项目
pom中的关键dependency配置如下:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
4-2) log4j.properties(放在resources文件夹下)
### 设置###
log4j.rootLogger = debug,stdout,D,E,logstash ### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 输出DEBUG 级别以上的日志到=/Users/bee/Documents/elk/log4j/debug.log###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /Users/KG/Documents/logs/elk/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 输出ERROR 级别以上的日志到=/Users/bee/Documents/elk/log4j/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =/Users/KG/Documents/logs/elk/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n #输出日志到logstash
log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.RemoteHost=127.0.0.1
log4j.appender.logstash.port=4560
log4j.appender.logstash.ReconnectionDelay=60000
log4j.appender.logstash.LocationInfo=true
4-3) Java代码(ElkLog4jTest.java):
package org.genesis.arena.elk; import org.apache.log4j.Logger; /**
* Created by KG on 17/3/27.
*/
public class ElkLog4jTest {
private static final Logger logger = Logger.getLogger(ElkLog4jTest.class);
public static void main(String[] args) throws Exception {
logger.debug("This is a debug message!");
logger.info("This is info message!");
logger.warn("This is a warn message!");
logger.error("This is error message!"); try{
System.out.println(5/0);
}catch(Exception e){
logger.error(e);
}
}
}
4-4) 运行结果
[DEBUG] 2017-03-29 12:56:00,454 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:11)
This is a debug message!
[INFO ] 2017-03-29 12:56:00,529 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:12)
This is info message!
[WARN ] 2017-03-29 12:56:00,531 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:13)
This is a warn message!
[ERROR] 2017-03-29 12:56:00,533 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:14)
This is error message!
[ERROR] 2017-03-29 12:56:00,538 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:19)
java.lang.ArithmeticException: / by zero
然后会在Logstash控制台看到输出如下图:
5. 连通Kibana
5-1) 打开 http://localhost:5601/
5-2) 创建索引
还记得我们之前在logstash配置文件中配置的索引吗?
log4j-%{+YYYY.MM.dd}
因此,我们应该创建索引为:log4j-*
5-3)验证
从这里可以看到自己刚才在Java代码中记录的日志。
好了,一切大功告成了!!!
是不是很有成就感啊?
ELK菜鸟手记 (一) 环境配置+log4j日志记录的更多相关文章
- ELK环境配置+log4j日志记录
ELK环境配置+log4j日志记录 1. 背景介绍 在大数据时代,日志记录和管理变得尤为重要. 以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦, 想根据一 ...
- java Web应用配置log4j日志记录
公司启动全国支票影像系统,有这样一个功能是和消息中间件打交道,需要记录每一个报文出错情况,因为方便后期开发人员的调试,我选用了log4j作为日志记录,好了废话不多说了! 第一步:首先建立一个WEB工程 ...
- ELK菜鸟手记 (二) - 高级配置之多应用索引过滤
我们在实际的场景中,经常是多个网站或者服务端在一台服务器上,但是如果这些应用全部 记录到一台logstash服务器,大家日志都混在一起不好区分. 有人说,我可以在日志中打项目名,但是这样并不方便. 其 ...
- mybatis 配置 log4j 日志
mybatis 配置 log4j 日志 使用Mybatis的时候,可能需要输出(主要是指sql,参数,结果)日志,查看执行的SQL语句,以便调试,查找问题. 测试Java类中需要加入代码: stati ...
- 基于JMX动态配置Log4J日志级别
先来看比较low的修改日志级别的方式,在写程序里面. http://blog.gssxgss.me/java%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8A%A8%E6%80%81% ...
- 基于java配置log4j日志详解
1.Log4j 1.1了解Log4j Log4j是Apache的一个开源项目,通过使用log4j,我们可以控制日志信息输送的目的地可以是控制台.文件.GUI组件,我们也可以控制每一条日志的输出格式,通 ...
- Hibernate 使用log4j日志记录
日志记录使程序员能够将日志详细信息永久写入文件.这是我们以后在开发当中非常重要的一步. Hibernate使用log4j日志记录,我们需要以下几个步骤: 1.导入jar包: (1)这是hibernat ...
- ELK菜鸟手记 (四) - 利用filebeat和不同端口把不同服务器上的log4j日志传输到同一台ELK服务器
1. 问题描述 我们需要将不同服务器(如Web Server)上的log4j日志传输到同一台ELK服务器,介于公司服务器资源紧张(^_^) 2. 我们需要用到filebeat 什么是filebeat ...
- ELK学习笔记之CentOS 7下ELK(6.2.4)++LogStash+Filebeat+Log4j日志集成环境搭建
0x00 简介 现在的公司由于绝大部分项目都采用分布式架构,很早就采用ELK了,只不过最近因为额外的工作需要,仔细的研究了分布式系统中,怎么样的日志规范和架构才是合理和能够有效提高问题排查效率的. 经 ...
随机推荐
- 并行(多进程)-python
1.进程创建 2.当前进程信息 使用current_process可获得当前进程的信息: (1)引入:from multiprocessing import current_process (2)获取 ...
- Python 列表推导、迭代器与生成器
1.列表推导 1 2 3 4 5 6 7 8 9 10 11 numbers = [i for i in range(10) if i % 2 == 0] print(numbers) seq = ...
- 转发(Forward)和重定向(Redirect)的区别
转发是服务器行为,重定向是客户端行为. 转发(Forword) :通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServle ...
- POJ 3421 X-factor Chains (因式分解+排列组合)
题意:一条整数链,要求相邻两数前一个整除后一个.给出链尾的数,求链的最大长度以及满足最大长度的不同链的数量. 类型:因式分解+排列组合 算法:因式分解的素因子个数即为链长,链中后一个数等于前一个数乘以 ...
- 「BZOJ2882」工艺
题解: 就是个最小表示法 大概做法就是扩大2倍原串 然后双指针比较,如果不相同了直接跳 原理随便画画就知道了
- [CQOI2017]小Q的棋盘
题解: 好像有题解说可以贪心.. 显然这是一棵树,考虑树形dp 维护f[i][j]从点i往下走j再回来经过的最多点,g[i][j]从点i往下走j不用回来经过的最多点 转移方程还是挺显然的,枚举的时候像 ...
- 深入了解Activiti工作流流程定义
深入了解Activiti工作流流程定义 2016-03-27| 发布: | 浏览: 2363 |保存PDF 部署流程定义 部署流程定义的流程: 1. 先获取流程引擎对象:在创建时会自动加载 class ...
- BZOJ3064 Tyvj 1518 CPU监控 线段树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3064 题意概括 一个序列,要你支持以下操作: 1. 区间询问最大值 2. 区间询问历史最大值 3. ...
- BZOJ1078 [SCOI2008]斜堆 堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1078 题意概括 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的 ...
- BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1965 题意概括 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取 ...