日志系统ELK一个容器搞定

9 篇文章 0 订阅
5 篇文章 0 订阅

快速安装ELK

1.1 ELK各个组件说明

  • Elasticsearch:用于存储收集到的日志信息;
  • Logstash:用于收集日志,SpringBoot应用整合了Logstash以后会把日志发送给Logstash,Logstash再把日志转发给Elasticsearch;
  • Kibana:通过Web端的可视化界面来查看日志。

1.2 使用前说明

使用的Docker镜像 sebp/elk:793

注意该容器使用的内存大约在2.1G左右

服务器需要安装Docker、Docker-compose

这个镜像是Elasticsearch、Logstash、Kibana集成容器镜像,使用docker或者docker-compose启动后各个组件就会启动成功

1.3 使用前配置

1.3.1 服务器配置

在启动该容器前需要设置一下一个进程可以拥有的VMA(虚拟内存区域)的数量

sysctl -w vm.max_map_count=262144
# 使上个命令立即生效
sysctl -p

1.3.2 配置启动文件

创建docker-compose.yml文件

version: "3.5"
services:
  elk:
    image: sebp/elk:7.12.0
    volumes:
      - ./elk/02-beats-input.conf:/etc/logstash/conf.d/02-beats-input.conf
    environment:
      ES_JAVA_OPTS: -Xms512m -Xmx512m
    ports:
      #Kibana 网络界面
      - "5601:5601"
      # Elasticsearch JSON 接口
      - "9200:9200"
      # Logstash Beats 接口
      - "5044:5044"

1.3.2 Logstash配置

在docker-compose.yml文件目录下创建elk文件夹,创建Logstash配置文件 02-beats-input.conf

mkdir elk && cd elk
vi 02-beats-input.conf

02-beats-input.conf 配置文件内容

input {
    tcp {
        port => 5044
        codec => json_lines
    }
}
output{
    elasticsearch {
      hosts => ["localhost:9200"]
      index => "beat-%{+YYYY.MM.dd}"
    }
}

1.4 启动ELK

在docker-compose.yml目录下启动elk

docker-compose up -d elk

访问Kibana地址: ip:5601

说明:现在是看不到日志的,ES里还没有Index,需要创建应用打印日志

1.5 创建应用

创建应用spring-boot-elk,POM文件引用如下。注意必须要引入logstash-logback-encoder

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--集成logstash-->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.6</version>
        </dependency>

修改application.yml文件为

spring:
  application:
    name: elk-test
logging:
  logstash:
    destination: 192.168.67.68:5044

创建日志配置文件logback-spring.xml,如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <springProperty scope="context" name="SPRING_APPLICATION_NAME" source="spring.application.name"/>
    <springProperty scope="context" name="LOGSTASH_DESTINATION" source="logging.logstash.destination"/>
    <!-- 控制台 appender -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 为logstash输出的JSON格式的Appender -->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>${LOGSTASH_DESTINATION}</destination>
        <!-- 日志输出编码 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "app": "${SPRING_APPLICATION_NAME:-}",
                        "level": "%level",
                        "trace": "%X{x-trace-id}",
                        "span": "%X{X-B3-SpanId:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "message": "%message"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>
    <!--日志打印的包的范围,及分类日志文件存储 -->
    <logger name="cn.amoqi.springbootelk" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="logstash"/>
    </logger>
    <!--控制台打印资源加载信息-->
    <root level="WARN">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="logstash"/>
    </root>
</configuration>

创建IndexController来打印日志如下

@RestController
@Slf4j
public class IndexController {
    @RequestMapping
    public void index(){
        log.info("我爱北京天安门");
        log.error("我爱北京天安门");
        log.debug("我爱北京天安门");
        log.warn("我爱北京天安门");
    }
    public void testException(){
        throw new RuntimeException("111111111111");
    }   
}

启动应用访问:localhost:8080

打印日志如下

16:55:32.700 [http-nio-8080-exec-1] INFO  cn.amoqi.springbootelk.controller.IndexController - 我爱北京天安门
16:55:32.700 [http-nio-8080-exec-1] ERROR cn.amoqi.springbootelk.controller.IndexController - 我爱北京天安门
16:55:32.700 [http-nio-8080-exec-1] DEBUG cn.amoqi.springbootelk.controller.IndexController - 我爱北京天安门
16:55:32.700 [http-nio-8080-exec-1] WARN  cn.amoqi.springbootelk.controller.IndexController - 我爱北京天安门

1.6 配置Kibana

在浏览器上输入地址 http://192.168.67.68:5601/访问kibana,注意192.168.67.68为启动Docker的服务器
在这里插入图片描述
点击左上角菜单,下拉选择Management-> Stack Management
在这里插入图片描述
点击左边导航栏的Index Patterns ->Create index Pattern
在这里插入图片描述
输入设置的beat-*,点击next->step
在这里插入图片描述
选择@timestamp,点击Create index pattern
在这里插入图片描述
显示下面这个页面就配置好了
在这里插入图片描述

1.7 查看日志

点击左上角的菜单按钮,点击Kibana栏目下的Discover,日志就显示出来了。大功告成()
在这里插入图片描述

结语

一名四年工作经验的程序猿,目前从事物流行业的工作,有自己的小破网站amoqi.cn。欢迎大家关注公众号【CoderQi】,一起来交流JAVA知识,包括但不限于SpringBoot+微服务,更有奇奇学习过程中学习的视频、面试资料和专业书籍等免费放送,希望大家能够喜欢。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是刘奇奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值