ELK菜鸟手记 (一) 环境配置+log4j日志记录

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1. 背景介绍 在大数据时代,日志记录和管理变得尤为重要。 以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦, 想根据一个关键字查询日志中某个关键信息相当困难。

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-1
#
# 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: 9200

 

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 => 4560
    }
}

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: 5601

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代码中记录的日志。

好了,一切大功告成了!!!

是不是很有成就感啊?

 

  

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
2月前
|
消息中间件 Java Kafka
搭建ELK日志收集,保姆级教程
本文介绍了分布式日志采集的背景及ELK与Kafka的整合应用。传统多服务器环境下,日志查询效率低下,因此需要集中化日志管理。ELK(Elasticsearch、Logstash、Kibana)应运而生,但单独使用ELK在性能上存在瓶颈,故结合Kafka实现高效的日志采集与处理。文章还详细讲解了基于Docker Compose构建ELK+Kafka环境的方法、验证步骤,以及如何在Spring Boot项目中整合ELK+Kafka,并通过Logback配置实现日志的采集与展示。
520 64
搭建ELK日志收集,保姆级教程
|
6月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
696 54
|
8月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
569 90
|
9月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
689 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
8月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
679 13
|
9月前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
327 5
图解MySQL【日志】——Redo Log
|
8月前
|
缓存 Java 编译器
|
8月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
930 0
|
9月前
|
存储 关系型数据库 MySQL
图解MySQL【日志】——Undo Log
Undo Log(回滚日志)是 MySQL 中用于实现事务原子性和一致性的关键机制。在默认的自动提交模式下,MySQL 隐式开启事务,每条增删改语句都会记录到 Undo Log 中。其主要作用包括:
294 0
下一篇
开通oss服务