zoukankan      html  css  js  c++  java
  • centos7下ELK结合Redis项目搭建日志平台

     
    系统:centos7

    jdk:1.8

    yum install java -y

    Logstash:日志收集

    ElasticSearch:日志存储与搜索

    Kibana:日志展示

    我画了个草图,通常的架构图如下:AppServer 发送日志给Logstash服务器收集,ElasticSearch服务器负责日志的查询和存储,Kibana负责日志的展示

    centos7下ELK + Redis结合项目搭建日志平台

    1. Logstash的安装,官网链接:https://www.elastic.co/downloads/logstash#ga-release,也可以直接执行:wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz,目前最新版本6.0.0

    (1)wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz下载安装包

    (2)tar -xzvf logstash-6.0.0.tar.gz解压

    解压后是没有logstash的配置文件的,需要手动创建一个,上面截图的logstash.conf就是我手动创建的,为了测试,只是配置了简单的标准输入和标准输出,内容如下:

    input {
         stdin { }
    }
    output {
         stdout {
            codec => rubydebug {}
         }
    }

    (3) 尝试启动logstash并验证是否配置成功,在logstash的解压目录下执行命令:./bin/logstash -f logstash.conf,出现如下截图表明配置成功,从启动信息中也能看出日志路径,端口等信息

    centos7下ELK + Redis结合项目搭建日志平台

    在交互里随便输入测试hello world,看看输出吧

    2.ElasticSearch安装,官网链接:https://www.elastic.co/downloads/elasticsearch,截止目前最新版本5.6.3

    (1) wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.tar.gz

    (2) tar -xzvfelasticsearch-5.6.3.tar.gz解压

    (3) 进入到elasticsearch的安装目录的config下,修改配置: vi elasticsearch.yml

    path.data修改为自己本机的data路径,自定义(这个路径如果不存在的话需要手动去创建)

    path,logs修改为自己本机的logs路径,也是自定义吧(这个路径如果不存在的话,启动elasticsearch会自动创建)

    network.host修改为安装服务器地址

    http.port为http访问端口,默认是9200,我这里给的9201

    centos7下ELK + Redis结合项目搭建日志平台

    分别给上面设置的data和logs设置用户权限

    chown -R elsearch:elsearch data/es/

    chown -R elsearch:elsearch logs/es/

    (4)运行elasticsearch:./bin/elasticsearch,如果直接用root身份去运行,会报如下错误:

    centos7下ELK + Redis结合项目搭建日志平台

    elasticsearch默认是不能用root去启动的,这是出于系统安全考虑设置的条件,所以为elasticsearch创建一个用户组和用户吧

    创建elseaerch用户组及用户:

    groupadd elsearch

    useradd elsearch -g elsearch -p elasticsearch

    更改elasticsearch文件夹及内部文件的所属用户及组为elsearch:elsearch:

    chown -R elsearch:elsearch elasticsearch-5.6.3

    切换用户elsearch:

    su elsearch

    启动elasticsearch:./bin/elasticsearch

    启动过程中有可能报如下错误

    centos7下ELK + Redis结合项目搭建日志平台

    切换到root用户编辑limit.conf文件

    vi /etc/security/limits.conf

    在文件末尾添加

    elsearch soft nofile 65536

    elsearch hard nofile 65536

    注意:elsearch为所创建的用户名称,创建的是什么就写什么

    centos7下ELK + Redis结合项目搭建日志平台

    然后再切换到elsearch用户启动,看到如下信息说明启动成功

    centos7下ELK + Redis结合项目搭建日志平台

    在浏览器中方位地址http://192.168.212.37:9201,192.168.212.37和9201都是上面elasticsearch.yml中配置的host和port,会出先如下界面说明启动成功

    centos7下ELK + Redis结合项目搭建日志平台

    3.完成logstash和elasticsearch的安装后,就该开始集成他们俩了,回到logstash的配置文件logstash.conf,修改配置如下:输入还是标准输入,输出增添一个elasticsearch,hosts配置elasticsearch的地址和端口:

    input {
     stdin { }
    }
    output {
     elasticsearch {
     hosts => "192.168.212.37:9201"
     index => "logstash-test"
     }
     stdout {
     codec => rubydebug {}
     }
    }
    再次启动logstash,并输入测试字符串:hello world
    在启动logstash过程中检查并连接output端elasticsearch,输入测试字符串后,访问elasticsearch的api:http://192.168.212.37:9201/logstash-test/_search(logstash-test是logstash.conf中配置的索引index),可以看到如下:刚才输入的hello已经在elasticsearch中可以查看到了

    至此,logstash和elasticsearch集成完成,不过通过elasticsearch原生api去查询还是不方便和直观,ok,下面查询工具kibana闪亮登场了。

    4.下载kibana

    (1)wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.3-linux-x86_64.tar.gz

    (2)tar -xzvf kibana-5.6.3-linux-x86_64.tar.gz 解压

    (3)进入kibana的解压目录的config目录下,编辑kibana.yml,server.port:5601放开,server.host修改为kibana的安装服务器,配置elasticsearch的路径端口

    centos7下ELK + Redis结合项目搭建日志平台

    (4)启动kibana: ./bin/kibana

    centos7下ELK + Redis结合项目搭建日志平台

    浏览器中访问:http://192.168.212.37:5601,出现如下界面表示启动成功

    centos7下ELK + Redis结合项目搭建日志平台

    再在logstash的交互中输入:Hello kaka,you are the best

    centos7下ELK + Redis结合项目搭建日志平台

    然后再kibana的discover中指定的index里查询kaka关键字,如下:日志是不是很优雅的展示出来了

    centos7下ELK + Redis结合项目搭建日志平台

    OK,ELK的集成到此结束。

    5.安装redis

    (1)安装redis(省略,安装很简单)

    (2)进入redis的解压目录,编辑reids.conf配置文件,修改如下三个地方:

    bind IP:绑定安装服务器的ip地址

    protected-mode:修改为no,否则redis只有本机才能访问

    port:修改为自己的端口,默认是6379

    centos7下ELK + Redis结合项目搭建日志平台

    (3)启动redis

    执行./src/redis-server redis.conf ,如果提示需要增加文件句柄数,可以使用名利ulimit -n 10032临时增大,10032是redis建议的大小。

    centos7下ELK + Redis结合项目搭建日志平台

    6.logstash集成redis,先看架构图

    下面的架构图中,redis相当于变成了logstash的输入端,而不是appserver,为什么要这样做的,是为了防止一瞬间突然有大量日志到logstash端防止雪崩,相当于给APPserver和logstash间加了一个管道。

    centos7下ELK + Redis结合项目搭建日志平台

    (1)编辑logstash的logstash.conf文件,输入端修改为redis

    input {
            redis {
                    data_type => "list"
                    type => "redis-input"
                    key => "logstash:redis"
                    host => "192.168.212.37"
                    port => 6379
                    threads => 5
                    codec => "json"
            }
    }
    output {
            elasticsearch {
                    hosts => "192.168.212.37:9201"
                    index => "logstash-test"
            }
            stdout {
                    codec => rubydebug {}
            }
    }

    (2)重新启动logstash,可以看到已经连接上了输入端redis

    centos7下ELK + Redis结合项目搭建日志平台

    logstash和redis的集成已经完成。

    7.redis和java项目中log4j的集成

    通过上面的配置,基本上已经实现了上面架构图的大部分功能,最后需要的就是项目中的日志如何输入到redis中呢,且看下面配置。

    为了简单起见,我直接在spring官网创建一个springboot的web项目,地址http://start.spring.io/,快速构建一个可运行的spring mvc框架出来(spring boot已经集成了log4j等一系列,无需再去配置),只是为了测试日志,项目结构很简单,如下:

    centos7下ELK + Redis结合项目搭建日志平台

    主要代码讲解:

    先看pom的配置

    因为要和redis结合,添加如下dependency

    贴上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.a</groupId>
        <artifactId>elk_logback</artifactId>
        <version>1.0-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.8.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>com.cwbase</groupId>
                <artifactId>logback-redis-appender</artifactId>
                <version>1.1.5</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>

    springboot默认已经集成了logback,,如果需要覆盖,在resources下创建自己的logback.xml配置文件,如下:

    其中host为redis安装服务器,key为logstash.conf中配置的key

    centos7下ELK + Redis结合项目搭建日志平台

    logback,xml配置:

    贴上logback.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
            <Target>System.out</Target>
            <encoder>
                <pattern>[%d{HH:mm:ss}][%t][%p][%c]-%m%n</pattern>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>info</level>
            </filter>
        </appender>
       <appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender">
            <source>logstashdemo</source>
            <type>dev</type>
            <host>192.168.212.37</host>
            <key>logstash</key>
            <tags>dev</tags>
            <mdc>true</mdc>
            <location>true</location>
            <callerStackIndex>0</callerStackIndex>
        </appender>
    
        <root level="error">
            <appender-ref ref="Console"/>
            <appender-ref ref="LOGSTASH"/>
        </root>
    </configuration>
    HelloController很简单,打印测试日志:
    package com.kaka.controller;
    
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    @EnableAutoConfiguration
    public class HelloController {
        private static org.slf4j.Logger logger = LoggerFactory.getLogger(HelloController.class);
        @RequestMapping(value = "/hello",method = RequestMethod.GET)
        @ResponseBody
        public String sayHello(){
            logger.info("The request is to sayHello");
            logger.error("This is test error log");
            return "hello,kaka";
        }
        public static void main(String[] args){
            SpringApplication.run(HelloController.class,args);
        }
    }

    启动项目(上面的logstash.conf我配置了两个输出,一个是elasticsearch,一个是交互标准输出),可以在logstash的交互中看到springboot的启动日志,访问HelloController,可以看到输出的error级别日志

    启动项目(上面的logstash.conf我配置了两个输出,一个是elasticsearch,一个是交互标准输出),可以在logstash的交互中看到springboot的启动日志,访问HelloController,可以看到输出的error级别日志,如下图:

    centos7下ELK + Redis结合项目搭建日志平台

    然后再kibana的discover中指定的index里查询kaka关键字,如下:日志是不是很优雅的展示出来了

    centos7下ELK + Redis结合项目搭建日志平台

    OK,ELK的集成到此结束。

     

  • 相关阅读:
    《jQuery源码解析》读书笔记(第一章:总体架构)
    无线开发学习笔记
    无线开发知识
    underscore源码了解
    Git 速查手册
    Jetpack Compose之隐藏Scaffold的BottomNavigation
    一种封装Retrofit的方法,可以自动解析Gson,回避Method return type must not include a type variable or wildcard: retrofit2.Call<T>的问题
    整理之Java容器
    整理之Fragment
    整理之BroadcaseReceiver
  • 原文地址:https://www.cnblogs.com/oliver-blogs/p/7844226.html
Copyright © 2011-2022 走看看