ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot 接入 ELK - 动态索引详解

2022-01-21 11:00:26  阅读:178  来源: 互联网

标签:ELK SpringBoot elk maven 详解 docker logback logstash


1.说明:
    1.docker环境需要java maven环境,检查这两个:java -version/ mvn -version/
    
    2.本次ELK是使用docker运行的,ELK极其耗内存,服务器内存在4G及以内的,不建议安转。

2.Linux maven 安装(安转路径 usr/local/):
    1:下载
        wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
        
    2.解压
        tar -zxvf apache-maven-3.5.4-bin.tar.gz
        
    3.改名称:
        mv apache-maven-3.5.4 maven
        
    4.配置环境变量
        vi /etc/profile

        在配置文件配置

        export MAVEN_HOME=/usr/local/maven
        export PATH=$MAVEN_HOME/bin:$PATH
        
    5.重新加载配置使文件生效
    source /etc/profile

    6.查看maven
     mvn -version

3.安转docker
    1.先装GIT
    yum install git-core
    
    2.安装docker
    yum -y install docker-io
    注意:如果报错-》Error: Unable to find a match: docker-io 是因为:centos8默认使用podman代替docker,系统没有自带docker安装包 可以使用命令:lsb_release -a 查看命令版本,安转docker需要内核大于:3.10 使用命令查看:uname -r
    
    3.如果是Center OS8先删除一下可能存在的旧版本
    sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
    4.安转docker储存库
    sudo yum install -y yum-utils
    
    5.配置安装源
    sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    6安装最新版本的Docker 引擎和容器
    sudo yum install docker-ce docker-ce-cli containerd.io
    
    7.查看docker版本
    docker -v
    
    8.配置系统自启
    systemctl enable docker
    
    9.补充,如果不是在root用户名下安转的,docker没有最高权限,此时需要配置用户组,创建用户组为了避免每次输入命令都输入sudo
    $ sudo groupadd docker
    $ sudo usermod -aG docker 用户名
    
    10.启动docker
    systemctl start docker
    
    11.进行docker的 Hello 测试,(这时会出现一堆输出,其中只要出现 Hello from Docker!即为成功)
    docker run hello-world
 

3.1.卸载docker,请注意...........请慎用
    
    12.卸载docker
    sudo yum remove docker-ce docker-ce-cli containerd.io
    
    13.删除所有docker的容器,镜像,卷,图片等
    sudo rm -rf /var/lib/docker

4.安转ELK
    1.直接使用docker拉取三合一镜像
    docker pull sebp/elk
    
    2.查看镜像
    docker images
    
    3.Logstash配置

    3.1其中一种写法(FileBeat方式):
-----------------------------------------------------------------------------------------------
    在/usr/config/logstash目录下新建beats-input.conf,用于日志的输入:

    input {
      beats {
        port => 5044
      }
    }
    新建output.conf,用于日志由Logstash到ElasticSearch的输出:

    output {
      elasticsearch {
        hosts => ["localhost"]
        manage_template => false
        index => "%{[@metadata][beat]}"
      }
    }
    
    其中的index为输出到ElasticSearch后的index。
------------------------------------------------------------------------------------------------------
    3.2第二种写法,个人使用第二种(SpringBoot logback方式)(动态索引)
    在/usr/config/logstash目录下:

注意:appname 是自定义的索引名称,后面会用到

    vim logstash.conf

              文件内容:


            input {
              tcp {
                mode => "server"
                port => 5044
                codec => json_lines
              }
            }

            output {
                   elasticsearch {
                    action => "index"
                    hosts => "ip:9200"
                    index => "log-%{[appname]}-%{+YYYY.MM.dd}"
                   }
            }

4.运行容器
    有了镜像之后直接启动即可:

    docker run -d -p 5044:5044 -p 5601:5601 -p 9200:9200 -p 9300:9300 -v /var/data/elk:/var/lib/elasticsearch -v /usr/config/logstash:/etc/logstash/conf.d --name=elk sebp/elk
 

-d的意思是后台运行容器;

    -p的意思是宿主机端口:容器端口,即将容器中使用的端口映射到宿主机上的某个端口,ElasticSearch的默认端口是9200和9300

    -v的意思是宿主机的文件|文件夹:容器的文件|文件夹,此处将容器中elasticsearch 的数据挂载到宿主机的/var/data/elk上,以防容器重启后数据的丢失;并且将logstash的配置文件挂载到宿主机的/usr/config/logstash目录。

    --name的意思是给容器命名,命名是为了之后操作容器更加方便。
    
    查看镜像:
    docker ps
    
    如果镜像内容为空 则表示上面的命令没有成功启动镜像
    查看镜像对象的日记:
    docker logs -f elk
    
    如果报错:
    ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
        bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    
    报错解析:指的是linux系统限制了单个进程的最大内存。
    修改进程内存上限:
     max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量 

                 处理办法:    #切换到root用户修改

                                  vim /etc/sysctl.conf    #在最后面追加下面内容

                                  vm.max_map_count=655360

                                 执行  sysctl -p
    
    
    重新启动elk容器:
    重启:docker restart elk
    启动:docker start elk

给系统防火墙开启ELK中的K(kinaba)的端口号:5601
    firewall-cmd --add-port=223/tcp --permanent
    firewall-cmd --reload
    systemctl restart firewalld
    
    在浏览器输入:http://ip:5601/app/home 访问kinaba主页 
    
    查看ELK状态和安装的插件:http://ip:5601/status
       
    其他:进入docker容器
    docker exec -it elk /bin/bash
    
    汉化:
    进入路径:
    /opt/kibana/config/
    
    打开kibana.yml在最后面追加下面内容(:和zh-CN中间必须有空格) :
    i18n.locale: zh-CN
    
    输入 exit; 退出docker内部,然后重启容器

5.SpringBoot logback接入ELK

Logstash方式是通过logback.xml logback-spring.xml日志文件配置直接接入。首先在pom.xml文件引入jar。配置如下:

<dependency>

      <groupId>net.logstash.logback</groupId>

      <artifactId>logstash-logback-encoder</artifactId>

      <version>4.11</version>

</dependency>

logback.xml logback-spring.xml日志文件配置直接接入,配置如下:

 <!--输出到logstash的TCP-->

    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">

        <!--可以访问的logstash日志收集端口-->

        <destination>ELK-IP地址:5044</destination>

  <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">

          <customFields>{“appname”: “oauth-auth”}</customFields><!-- oauth-auth是自定义的项目名称 -->

        </encoder>

    </appender>

   

    <!--输出到logstash的UDP-->

    <appender name="socket"

        class="net.logstash.logback.appender.LogstashSocketAppender">

  <host>ELK-IP地址</host>

        <port>5044</port>

    </appender>

通过logback.xml logback-spring.xml日志文件配置<root>中加入Logstash,完成root如下:

<root level="console">

        <appender-ref ref="console"/>

        <appender-ref ref="ERROR" />

        <appender-ref ref="INFO" />

        <appender-ref ref="WARN" />

        <appender-ref ref="LOGSTASH"/>

        <appender-ref ref="socket"/>

    </root>

6.查看ELK日志:

1.打开ELK页面 http://ip:5601,点击Management(管理),点击Index Patterns(索引管理),点击Create index pattem按钮,创建索引

2.创建项目索引,log- oauth-auth-*项目自定义名称(<customFields>{“appname”: “oauth-auth”}</customFields>),

点击Next step(下一步)

3.选择 @timestamp 作为日志文件刷选,点击Create index pattern 索引创建完毕

4.选择菜单栏中Discover,点击索引,选择刚才新建的索引。右边便是项目日记。Logstash方式介绍完毕

最后:后面可能会写一片FileBeat动态索引的接入,看心情吧。

部分内容细节参考:Docker安装ELK并实现JSON格式日志分析 - 晓月寒丶 - 博客园 和 感谢大佬们对互联网的贡献!!!

标签:ELK,SpringBoot,elk,maven,详解,docker,logback,logstash
来源: https://blog.csdn.net/ouxx2009/article/details/122616071

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有