zoukankan      html  css  js  c++  java
  • ELK入门使用-与springboot集成

    前言

    ELK官方的中文文档写的已经挺好了,为啥还要记录本文?因为我发现,我如果不写下来,过几天就忘记了,而再次捡起来必然还要经历资料查找筛选测试的过程。虽然这个过程很有意义,但并不总是有那么多时间去做。因此,接下来的内容仅仅是我根据查询到的资料,筛选,组装,测试后达到我的目标的一个过程。

    什么是ELK

    K我最初还以为是Kafka,事实上,ELK平台是一个完整的日志分析解决方案,由这三个开源工具构建而成:Elasticsearch、Logstash、Kibana。

    Elasticsearch用于深度搜索和数据分析,它是基于Apache Lucene的分布式开源搜索引擎,无须预先定义数据结构就能动态地对数据进行索引;

    Logstash用于日志集中管理,包括从多台服务器上传输和转发日志,并对日志进行丰富和解析,是一个数据管道,提供了大量插件来支持数据的输入和输出处理;

    最后是Kibana,提供了强大而美观的数据可视化,Kibana完全使用HTML和Javascript编写,它利用Elasticsearch 的RESTful API来实现其强大的搜索能力,将结果显示位各种震撼的图形提供给最终的用户。

    关系图

    安装Elasticsearch

    官网下载对应平台的安装包。

    Windows用法比较简单,只要下载后双机bin/elasticsearch.bat就启动成功了. 下面关注linux上的安装使用。

    ES不允许root运行,所以,最好我们创建专门的用户来运行。

    解压后,运行./bin/elasticsearch就会启动成功。如果失败,应该是用root启动的,改成普通用户即可。

    然后浏览器访问:http://localhost:9200/ 可以看到响应

    {
        "name": "ZSedUub",
        "cluster_name": "elasticsearch",
        "cluster_uuid": "_pS5AOR4Rf2oGPk5uRKK-A",
        "version": {
            "number": "6.2.4",
            "build_hash": "ccec39f",
            "build_date": "2018-04-12T20:37:28.497551Z",
            "build_snapshot": false,
            "lucene_version": "7.2.1",
            "minimum_wire_compatibility_version": "5.6.0",
            "minimum_index_compatibility_version": "5.0.0"
        },
        "tagline": "You Know, for Search"
    }
    

    安装Kibana

    官网下载对应平台的安装包。然后,解压。
    启动:

    ./bin/kibana
    

    浏览器访问: http://localhost:5601

    安装logstash

    官网下载对应平台的安装包。然后,解压。

    这里采用压缩包的方式,当然也可以使用系统安装包,比如

    //ubuntu
    sudo apt-get update && sudo apt-get install logstash
    

    centos

    rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
    在/etc/yum.repos.d/ 新建logstash.repo
    
    [logstash-6.x]
    name=Elastic repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
    
    sudo yum install logstash
    
    

    甚至docker。

    修改ruby仓库地址为中国:编辑Gemfile

    修改为source "https://gems.ruby-china.com/"

    启动: bin/logstash -e 'input { stdin { } } output { stdout {} }'

    这是一个交互式输入,你输入的内容将被当做message收集起来。

    test
    {
           "message" => "test",
          "@version" => "1",
        "@timestamp" => 2018-05-26T14:29:09.212Z,
              "host" => "ryan-900X5L"
    }
    
    

    到这里就算安装成功了。

    遇到的问题,

    Unsupported platform: x86_64-linux
    

    原因是Java9不支持,卸载Java9即可。

    安装logstash-codec-json_lines插件

    ryan@ryan-900X5L:~/apps/logstash-6.2.4$ ./bin/logstash-plugin install logstash-codec-json_lines
    Validating logstash-codec-json_lines
    Installing logstash-codec-json_lines
    Installation successful
    

    接下来,我们直接编写我们springboot需要的配置方案,新建config/logstash-sample.conf

    input {
        tcp {
            port => 4560
            codec => json_lines
        }
    }
    output{
      elasticsearch { 
         hosts => ["localhost:9200"] 
         index => "%{[appName]}-%{+YYYY.MM.dd}" #用一个项目名称来做索引
      }
      stdout { codec => rubydebug }
    }
    
    • 4560 是logstash接收数据的端口
    • codec => json_lines是一个json解析器,接收json的数据。这个要装 logstash-codec-json_lines 插件
    • ouput elasticsearch指向我们安装的地址
    • stdout会打印收到的消息,调试用

    启动:

    ./bin/logstash -f config/logstash-sample.conf 
    
    

    新建一个springboot项目

    项目地址: https://github.com/Ryan-Miao/springboot-with-elk

    pom

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.test</groupId>
    	<artifactId>springboot-with-elk</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<name>springboot-with-elk</name>
    	<description>Demo project for Spring Boot</description>
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.0.2.RELEASE</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    
    		<dependency>
    			<groupId>net.logstash.logback</groupId>
    			<artifactId>logstash-logback-encoder</artifactId>
    			<version>5.1</version>
    		</dependency>
    
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-devtools</artifactId>
    			<scope>runtime</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    
    </project>
    
    

    新建启动类

    
    @SpringBootApplication
    public class SpringbootWithElkApplication implements CommandLineRunner {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootWithElkApplication.class, args);
        }
    
        @Override
        public void run(String... args) throws Exception {
            Logger logger = LoggerFactory.getLogger(SpringbootWithElkApplication.class);
            logger.info("测试log");
    
            for (int i = 0; i < 10; i++) {
                logger.error("something wrong. id={}; name=Ryan-{};", i, i);
            }
        }
    }
    

    在resources下新建logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration>
    <configuration>
      <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>localhost:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
      </appender>
    
      <include resource="org/springframework/boot/logging/logback/base.xml"/>
    
      <root level="INFO">
        <appender-ref ref="LOGSTASH" />
        <appender-ref ref="CONSOLE" />
      </root>
    
    </configuration>
    
    

    启动。然后就可以观察到,logsash控制台打印我们的日志

    {
           "@version" => "1",
        "thread_name" => "restartedMain",
            "message" => "something wrong. id=9; name=Ryan-9;",
        "logger_name" => "com.test.springbootwithelk.SpringbootWithElkApplication",
        "level_value" => 40000,
         "@timestamp" => 2018-05-26T15:21:05.109Z,
               "host" => "localhost",
              "level" => "ERROR",
               "port" => 34902
    }
    

    在kibana- management - index pattern里新建一个pattern,我们就用*吧。创建好了,点击discover。就可以看到我们的日志了

    到这里,hello world完成。当然还要继续高级配置和查询啥的,后面再说。

    参考

  • 相关阅读:
    归并排序——计算逆序数
    二分图 (匈牙利算法)
    拓扑排序
    读入外挂——秒杀scanf
    最小生成树(kruskal+并查集)
    最短路算法(dijkstra,bellman_ford,floyd)
    【Python】【Module】re
    【Python】【Module】os
    【Python】【Module】random
    【Python】【Module】time
  • 原文地址:https://www.cnblogs.com/woshimrf/p/elk-springboot.html
Copyright © 2011-2022 走看看