ELK结合logback搭建日志中心

ELK简介ELKStack即Elasticsearch + Logstash + Kibana。日志监控和分析在保障业务稳定运行时,起到了很重要的作用。比如对nginx日志的监控分析,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录,所以可以通过读取日志文件来分析;redis的list结构正好可以作为队列使用,用来存储logstash传输的日志数据。然后elasticsearch就可以进行分析和查询了。
本文搭建的的是一个分布式的日志收集和分析系统。logstash有agent和indexer两个角色。对于agent角色,放在单独的web机器上面,然后这个agent不断地读取nginx的日志文件,每当它读到新的日志信息以后,就将日志传送到网络上的一台redis队列上。对于队列上的这些未处理的日志,有不同的几台logstash indexer进行接收和分析。分析之后存储到elasticsearch进行搜索分析。再由统一的kibana进行日志web界面的展示。
以上为抄袭!!!
好吧,让我们切入正题:

Java环境安装

首先我们需要一台linux机器,紧哥其实非常不喜欢在window下安装软件,hoho~
当然我们也默认你已经安装了java,建议版本是使用1.8,但是我使用的是1.7,就是这么任性~

colin@colindev:~$ java -version 
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

Logstash安装

  1. 下载logstash并解压,推荐使用最新版本
  2. 创建simple.conf文件,并编写测试conf
input { stdin { } }
output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}
colin@colindev:~$ wget https://download.elastic.co/logstash/logstash/logstash-2.3.1.tar.gz
colin@colindev:~$ tar -zvxf logstash-2.3.1.tar.gz
colin@colindev:~$ vim simple.conf 
colin@colindev:~$ /home/colin/logstash-2.3.1/bin/logstash -f simple.conf --debug

3.可以看到logstash已经运行,输入hello world会有log打印出来则安装成功

Elasticsearch安装

ElasticSearch默认的对外服务的HTTP端口是9200,节点间交互的TCP端口是9300(这个可以自配置),注意打开tcp端口

  1. 先下载并解压
  2. 安装mobz/elasticsearch-head插件
  3. 启动logstash并测试 elasticsearch 注意:启动elasticsearch的话不能用root账号哈~
colin@colindev:~$  wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.tar.gz
colin@colindev:~$  tar -zxvf elasticsearch-1.7.1.tar.gz 
[colin@colindev:bin ]$ ./plugin install mobz/elasticsearch-head
[colin@colindev bin]$ elasticsearch start

启动起来的界面是:

clipboard.png

clipboard.png

接下来就要安装kibana了

Kibana安装

[root@hadoop-slave ~]# wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz
[root@hadoop-slave elk]# tar -zxf kibana-4.1.1-linux-x64.tar.gz 
[root@hadoop-slave elk]# mv kibana-4.1.1-linux-x64 /usr/local/elk
[root@hadoop-slave bin]# pwd
/usr/local/elk/kibana/bin
[root@hadoop-slave bin]# ./kibana  &

打开http://localhost:5601/
如果需要远程访问,需要打开iptables的tcp的5601端口。

ELK+logback结合

  1. 需要修改logstash的配置文件
  2. 修改logback配置文件github-> 使用ogstash-logback-encode
input {
  tcp {
    host => "192.168.1.167" 
    port => 9250
    mode => "server"
    tags => ["tags"]
    codec => json_lines  //可能需要更新logstash插件
  }

}


output {
 stdout{codec =>rubydebug}
  elasticsearch {
   hosts => ["localhost:9200"]  //这块配置需要带端口号
    flush_size => 1000

  }
}
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property resource="properties/logback-variables.properties" />     <!-- 得到APP_NAME log_path的值 -->

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8"> <!-- encoder 可以指定字符集,对于中文输出有意义 -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
            </pattern>
        </encoder>
    </appender>
    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.1.167:9250</destination>

        <!-- encoder is required -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <!--<appender name="async" class="ch.qos.logback.classic.AsyncAppender">-->
        <!--<appender-ref ref="stash" />-->
    <!--</appender>-->


    <root level="info">                    <!-- 设置日志级别 -->
        <appender-ref ref="STDOUT" />
        <appender-ref ref="stash" />
    </root>
</configuration>

写一个测试程序:

import org.junit.Test;
import org.slf4j.LoggerFactory;


/**
 * Created by colinsu on 2016/4/14.
 */
public class LogstashTest {
    private static final org.slf4j.Logger LGR = LoggerFactory.getLogger(LogstashTest.class);

    @Test
    public void test() {
        LogstashTest obj = new LogstashTest();
        try{
            obj.divide();
        }catch(ArithmeticException ex){
            LGR.error("大家好111!", ex);
        }
    }
    private void divide(){
        int i = 10 /0;
    }
}

clipboard.png

使用logstash debug模式

/home/colin/logstash-2.3.1/bin/logstash -f simple.conf --debug

这里可能因为buffer大小的原因不能flush,多执行几次就好了,timestamp会相差8小时,没有什么影响,在kibana会显示正常
clipboard.png

使用kibana来查看相应的结果

clipboard.png

待改进和学习的地方

  1. 需要加上收集的缓冲组件。如 redis,kafka等
  2. 配置文件可以配置niginx,linux,jvm等日志
  3. 报表可视化熟练
### 搭建ELK日志监控平台 #### 1. ELK简介 ELK 是 Elastic Stack 的缩写,由 Elasticsearch、Logstash 和 Kibana 组成。Elasticsearch 负责存储和检索数据;Logstash 提供强大的日志处理能力;Kibana 则提供可视化界面[^1]。 --- #### 2. 安装与部署 ##### 2.1 Elasticsearch安装部署 下载并解压 Elasticsearch 压缩包后,在 `config/elasticsearch.yml` 中设置集群名称和节点名称: ```yaml cluster.name: my-application node.name: node-1 network.host: 0.0.0.0 http.port: 9200 ``` 启动服务命令为: ```bash bin/elasticsearch ``` 验证是否成功运行可以通过访问 `http://localhost:9200/` 来确认返回 JSON 数据[^1]。 --- ##### 2.2 Logstash安装部署 下载并解压 Logstash 后,编辑配置文件 `logstash.conf`,定义输入源(如文件路径)、过滤器(解析日志格式)和输出目标(如 Elasticsearch)。例如: ```conf input { file { path => "/var/log/springboot.log" start_position => "beginning" } } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601} \[%{LOGLEVEL:level}\] %{GREEDYDATA:message}" } } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "springboot-%{+YYYY.MM.dd}" } } ``` 启动 Logstash 使用以下命令: ```bash bin/logstash -f /path/to/logstash.conf ``` --- ##### 2.3 Kibana安装部署 同样下载并解压 Kibana 文件夹,修改 `config/kibana.yml` 设置连接地址: ```yaml server.host: "0.0.0.0" elasticsearch.hosts: ["http://localhost:9200"] ``` 启动 Kibana: ```bash bin/kibana ``` 访问 `http://localhost:5601` 即可进入管理页面[^1]。 --- ### 将SpringBoot项目日志转发至ELK #### 3. 创建SpringBoot应用 ##### 3.1 导入依赖 在 `pom.xml` 添加 SLF4J 和 Lombok 支持的日志库: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` ##### 3.2 配置日志文件 创建 `src/main/resources/logback-spring.xml` 文件,指定日志输出位置: ```xml <configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>/var/log/springboot.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE"/> </root> </configuration> ``` --- #### 4. 测试日志发送功能 编写单元测试类来模拟不同级别的日志记录操作: ```java import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class ElkApplicationTests { private static final Logger logger = LoggerFactory.getLogger(ElkApplicationTests.class); @Test public void testLoggingLevels() { logger.trace("This is a TRACE message"); logger.debug("This is a DEBUG message"); logger.info("This is an INFO message"); logger.warn("This is a WARN message"); logger.error("This is an ERROR message"); } } ``` 执行此方法会生成 `/var/log/springboot.log` 文件中的日志条目[^3]。 --- #### 5. 查看效果 完成上述步骤之后,重启整个环境链路(依次启动 Elasticsearch -> Logstash -> Kibana),最后打开 Kibana 页面新增索引模式匹配 `springboot-*` ,即可实时浏览来自 Spring Boot 应用程序产生的各类事件信息[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值