ELK搭建指南

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: ELK搭建指南

很久没有发文了,今天水一篇操作文章分享一下经验吧,后续陆续推出深度好文

springboot+logStash+elasticsearch+kibana

版本

  • elasticsearch 7.4.2
  • logStash 7.4.2
  • springboot 2.1.10

下载地址

选择下载的产品和版本,进行下载即可

https://www.elastic.co/cn/downloads/past-releases

部署

启动Elasticsearch

  • 设置配置文件elasticsearch
cluster.name: my-application
node.name: node-1
path.data: /cxt/software/maces/7.4.2/elasticsearch-7.4.2/data
path.logs: /cxt/software/maces/7.4.2/elasticsearch-7.4.2/logs
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
  • 启动
bin/elasticsearch

启动Kibana

  • 直接去bin目录下启动即可, 都是本机启动无需修改配置
bin/kibana

启动LogStash

  • config文件夹下创建springboot-log.conf,该配置文件的作用是启动在本机9600端口,后面springboot应用可以直接往9600发送日志。input为日志输入,output为日志输出到elasticsearch
input{
# 启动在9600端口,输出在控制台
  tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 9600
        codec => json_lines
  }
}
output{
  elasticsearch{
      hosts=>["192.168.123.166:9200"]
      index => "springboot-logstash-%{+YYYY.MM.dd}"
    }
# stdout{
#   codec => rubydebug
# }
}
  • 启动
bin/logstash -f config/springboot-log.conf

启动SpringBoot应用

  • pom
<dependency>
      <groupId>net.logstash.logback</groupId>
      <artifactId>logstash-logback-encoder</artifactId>
      <version>7.0</version>
    </dependency>
  • testController 方法
@RestController
public class TestController {
    public static final Logger log = LoggerFactory.getLogger(TestController.class);
    @RequestMapping("/test")
    public String test(){
        log.info("this is a log from springboot");
        log.trace("this is a trace log ");
        return "success";
    }
}
  • 启动类main方法加入自动生成日志代码
@SpringBootApplication
public class ElkApplication {
    public static final Logger log = LoggerFactory.getLogger(ElkApplication.class);
    Random random = new Random(10000);
    public static void main(String[] args) {
        SpringApplication.run(ElkApplication.class, args);
        new ElkApplication().initTask();
    }
    private void initTask() {
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                log.info("seed info msg :" + random.nextInt(999999));
            }
        }, 100, 100, TimeUnit.MILLISECONDS);
    }
}
  • resource新建logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--配置logStash 服务地址-->
        <destination>192.168.123.166:9600</destination>
        <!-- 日志输出编码 -->
        <encoder charset="UTF-8"
                 class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "logLevel": "%level",
                        "serviceName": "${springAppName:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "detail": "%message"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="LOGSTASH" />
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

验证

  • 按顺序启动好了之后打开es-head插件即可查看索引信息,其中有一条调用接口的信息,还有应用启动的消息

  • Kibana数据展示
  • 设置索引规则

    输入之后设置时间戳匹配
  • 展示数据,选择Discover

加入filebeat

  • logstash 新建filebeat-logstash-log.conf
input{
  beats {
        host => "192.168.123.166"
        port => 9600
  }
}
output{
  elasticsearch{
      hosts=>["192.168.123.166:9200"]
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    }
}
  • 启动
bin/logstash -f filebeat-logstash-log.conf
  • Filebeat 修改配置文件,找到下方修改的地方修改即可,主要监听的日志文件和输出的logstash服务器地址
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /cxt/codework/java/springboot-demo/logs/springboot-elk/2022-06-04/info.2022-06-04.0.log
setup.kibana:
  Host: "192.168.123.166:5601"
#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.123.166:9600"]
  • springboot 应用程序配置生成日志文件的位置,resource下新建logback-spring-file.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
    <!-- Log file path -->
    <property name="log.path" value="logs/springboot-elk"/>
    <!-- Console log output -->
    <appender name="console"
              class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{MM-dd HH:mm:ss.SSS} %-5level [%logger{50}] - %msg%n
            </pattern>
        </encoder>
    </appender>
    <!-- Log file debug output -->
    <appender name="fileRolling_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy-MM-dd}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>50MB</maxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n
            </pattern>
        </encoder>
        <!--<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level>
            <onMatch>DENY</onMatch> <onMismatch>NEUTRAL</onMismatch> </filter> -->
    </appender>
    <!-- Log file error output -->
    <appender name="fileRolling_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy-MM-dd}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n
            </pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>
    <!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
    <root level="info">
        <!--{dev.start}-->
        <appender-ref ref="console"/>
        <!--{dev.end}-->
        <!--{alpha.start}
        <appender-ref ref="fileRolling_info" />
        {alpha.end}-->
        <!--        {release.start}-->
        <appender-ref ref="fileRolling_info"/>
        <!--        {release.end}-->
        <appender-ref ref="fileRolling_error"/>
    </root>
    <!-- Framework level setting -->
    <!--    <include resource="config/logger-core.xml" />-->
    <!-- Project level setting -->
    <!-- <logger name="your.package" level="DEBUG" /> -->
    <logger name="org.springframework" level="INFO"></logger>
    <logger name="org.mybatis" level="INFO"></logger>
</configuration>
  • application.yml文件中指定logback-spring-file.xml
logging:
  # 默认logback-spring.xml 使用logstash传输到es;
  # 改为logback-spring-file.xml传输日志到归档日志文件,使用filebeat监听日志
  config: classpath:logback-spring-file.xml
  • 到这流程就结束了,现在流程就是

    springboot
    logs/springboot-elk/*.log




    监听logs/springboot-elk/*.log
    filebeat 发送数据到logStash
    logStash 数据保存到ES
    ES
    Kibana 对ES中数据进行渲染展示

好了,以上就是ELK的搭建流程,顺带使用filebeat监听日志文件的也做了,大体就是这个酱紫,好久没有肝文章了,后面会陆续推出更多深度理论好文,欢迎关注微信公众号:《醉鱼JAVA》一起进步学习

github

目录
相关文章
|
消息中间件 监控 数据可视化
一口气完成ELK 日志平台的搭建,我感觉我又行了!
最近在玩 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。
|
6月前
|
存储 监控 安全
ELK7.x日志系统搭建 1. elk基础搭建
ELK7.x日志系统搭建 1. elk基础搭建
159 0
|
JSON 搜索推荐 BI
快速用ELK搭建日志收集平台
快速用ELK搭建日志收集平台
165 0
|
存储 监控 安全
【Elastic Stack-初识篇】 ELK介绍、搭建最新 ELK 日志分析系统
【Elastic Stack-初识篇】 ELK介绍、搭建最新 ELK 日志分析系统
1025 0
|
JSON 监控 搜索推荐
ELK服务搭建学习
ELK服务搭建学习
144 0
|
消息中间件 监控 数据可视化
elk学习一:ELK架构图
elk学习一:ELK架构图
309 0
elk学习一:ELK架构图
|
数据格式 索引
[ELK实战] 开发中的哪些坑
在Elasticsearch中,时间类型是一个非常容易踩坑的数据类型,不按照严格的时间格式,会被识别成text类型 ES对时间类型的格式的要求是绝对严格的。要求必须是一个标准的UTC时间类型 必须使用yyyy-MM-ddTHH:mm:ssZ格式(其中T个间隔符,Z代表 0 时区)
92 0
|
缓存 监控 NoSQL
ELK环境部署
ELK环境部署
578 1
ELK环境部署
|
监控 关系型数据库 MySQL
搭建ELK日志分析系统
下载ELK 地址:https://www.elastic.co/downloads 命令:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz 解压:tar -zxvf elasticsearch-6.4.3.tar.gz 有的需要使用unzip解压,需要使用: yum install unzip 下载安装unzip工具 版权声明:本文为CSDN博主「负债程序猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
173 0
搭建ELK日志分析系统