zoukankan      html  css  js  c++  java
  • elk + filebeat,6.3.2版本简单搭建,实现我们自己的集中式日志系统

    https://www.cnblogs.com/youzhibing/p/9553758.html

    前言

      刚从事开发那段时间不习惯输出日志,认为那是无用功,徒增代码量,总认为自己的代码无懈可击;老大的叮嘱、强调也都视为耳旁风,最终导致的结果是我加班排查问题,花的时间还挺长的,要复现问题、排查问题等,幸亏那是公司内部员工用的系统,时间长一点也没什么大问题,但是如果是针对客户的,时间就代表很多东西了,那造成的影响就非常大了。自那以后养成了输出日志的习惯。

      但是后来发现,仅仅只是输出日志文件,对于排查问题来说,还是很费时,因为要在一个庞大的日志文件中过滤出我们需要的信息也十分耗时;那么此时基于日志文件的日志系统就被需要了。

      至于需不需要搭建日志系统、以及搭建一个怎样的日志系统,需要根据我们的业务实际情况而定,例如公司内部员工用的一个不重要的系统,那么日志文件可能就够了;而对于针对客户的、直接与公司利益挂钩的,我认为不仅要搭建日志系统,更要输出更详细的日志信息到日志文件,提供运维的效率。

      elk + filebeat 各个组件的功能

        Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
        Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;
        Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;
        Filebeat:一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析;

      本文不会对各个组件做详细的介绍与使用说明,如果想对各个组件有更详细的了解,那么需要大伙自行去学习,官网的资料就很不错。

    环境准备

      192.168.1.110:logstash + java

      192.168.1.111:filebeat + redis + mysql + jdk + tomcat8

      192.168.1.112:kibana

      192.168.1.113:elasticsearch + java

    日志系统搭建

      相关安装包大家自行准备,去官网下载即可;elk+filebeat我用的都是6.3.2版本,jdk用的1.8版本,mysql是5.7,tomcat是8.5.30

      Elasticsearch

        依赖jdk,jdk的 搭建可参考我的 另一篇博客:virtualBox安装centos,并搭建tomcat

        [root@cent0s7-03 opt]# tar -zxvf elasticsearch-6.3.2.tar.gz

             [root@cent0s7-03 opt]# cd elasticsearch-6.3.2

        修改配置,支持远程访问:

          修改elasticsearch的home目录/config/elasticsearch.yml,打开配置项network.host:,并将其值设置成0.0.0.0;

          但是需要增加系统配置来支持:

            [root@cent0s7-03 bin]# vi /etc/security/limits.conf

            新增如下配置        

    * soft nofile 65536
    * hard nofile 131072
    * soft nproc 2048
    * hard nproc 4096

            [root@cent0s7-03 bin]# vi /etc/sysctl.conf

            新增如下配置

    vm.max_map_count=262144

            [root@cent0s7-03 bin]# sysctl -p

        启动elasticsearch

          [root@cent0s7-03 bin]# ./elasticsearch

          发现报错,如下

     View Code

          这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,为了系统安全考虑,建议创建一个单独的用户用来运行ElasticSearch。 

        [root@cent0s7-03 bin]# groupadd elk

        [root@cent0s7-03 bin]# useradd elsearch -g elk

        [root@cent0s7-03 bin]# cd /opt

        [root@cent0s7-03 opt]# chown -R elsearch:elk elasticsearch-6.3.2

        [root@cent0s7-03 opt]# su elsearch

        [elsearch@cent0s7-03 opt]$ cd elasticsearch-6.3.2/bin

        [elsearch@cent0s7-03 bin]$ ./elasticsearch (加-d,则表示后端运行)

        访问:http://192.168.1.113:9200,出现如下信息

    {
      "name" : "8dBt-dz",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "gGH8gMvjTm62yyjob3aeZA",
      "version" : {
        "number" : "6.3.2",
        "build_flavor" : "default",
        "build_type" : "tar",
        "build_hash" : "053779d",
        "build_date" : "2018-07-20T05:20:23.451332Z",
        "build_snapshot" : false,
        "lucene_version" : "7.3.1",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
      },
      "tagline" : "You Know, for Search"
    }

        表示单节点的elasticsearch搭建起来了

      Kibana  

        [root@centos7-02 opt]# tar -zxvf kibana-6.3.2-linux-x86_64.tar.gz

        [root@centos7-02 opt]# mv kibana-6.3.2-linux-x86_64 kibana6.3.2

        修改配置文件:kibana.yml

          [root@centos7-02 opt]# vi kibana6.3.2/config/kibana.yml

               主要改改两项:

    server.host: "0.0.0.0"
    elasticsearch.url: "http://192.168.1.113:9200"

          支援远程访问和从elasticsearch获取数据

        [root@centos7-02 opt]# ./kibana6.3.2/bin/kibana

        启动日志如下

     View Code

          几个警告不影响功能,不出现error就可以正常服务。

        访问:http://192.168.1.112:5601,出现下图

      Logstash

        依赖jdk,jdk的 搭建可参考我的 另一篇博客:virtualBox安装centos,并搭建tomcat

        [root@centos7-01 opt]# tar -zxvf logstash-6.3.2.tar.gz

        新增配置文件:first-pipeline.conf

        [root@centos7-01 opt]# vi logstash-6.3.2/config/first-pipeline.conf 

     View Code

          监听5044端口,filebeat会从此端口向logstash写入数据;logstash处理数据之后(filter,实例中没有展示)再输出到elasticsearch

        [root@centos7-01 opt]# ./logstash-6.3.2/bin/logstash -f /opt/logstash-6.3.2/config/first-pipeline.conf

          启动日志如下

     View Code

      Filebeat  

        [root@centos7 opt]# tar -zxvf filebeat-6.3.2-linux-x86_64.tar.gz

             [root@centos7 opt]# mv filebeat-6.3.2-linux-x86_64 filebeat6.3.2

        配置filebeat .yml

          [root@centos7 opt]# vi filebeat6.3.2/filebeat.yml 

          配置之后,内容如下

     View Code

          主要是配置filebeat.inputs,采集哪些日志;关闭output.elasticsearch,打开output.logstash,将收集到的信息推送到logstash。

        [root@centos7 opt]# ./filebeat6.3.2/filebeat -e -c ./filebeat6.3.2/filebeat.yml

          启动日志如下

     View Code

        采集的是/log下的所有的log文件,我们就用工程:spring-boot-integrate来产生log文件(对应的就是我们的项目产生的日志文件);spring-boot-integrate依赖127.0.0.1的redis和mysql,需要把redis和mysql启动起来(注意我的redis是配置了密码的,mysql用的数据库是spring-boot,sql文件在工程中)。

        [root@centos7 redis-3.2.12]# cd /usr/local/redis-3.2.12/

        [root@centos7 redis-3.2.12]# ./src/redis-server redis.conf 

        [root@centos7 local]# service mysqld start

        启动我们的spring-boot-integrate

          用maven生成war包,将spring-boot-integrate.war包拷贝到tomcat的webapps,启动tomcat即可;注意tomcat版本需要8及以上;

          [root@centos7 opt]# cd /usr/local/apache-tomcat-8.5.33/

          [root@centos7 apache-tomcat-8.5.33]# ./bin/startup.sh

        访问:http://192.168.1.111:8080/spring-boot-integrate,如下图

        说明应用启动成功,我们可以参照:spring-boot-2.0.3不一样系列之shiro - 搭建篇,访问应用,多产生一些日志数据。

    效果

      最终数据到kibana进行可视化展示,我们看看我们刚刚的日志在kibana中的展示情况

    总结

      架构图

        一般而言,架构图如下

        由nginx对外暴露访问接口,并提供负载均衡功能。本文中没有集成nginx,大家可以自己去实现,集成nginx也不难。

        另外也没有集成消息中间件

        这种架构适合于日志规模比较庞大的情况。但由于 Logstash 日志解析节点和 Elasticsearch 的负荷比较重,可将他们配置为集群模式,以分担负荷。引入消息队列,均衡了网络传输,从而降低了网络闭塞,尤其是丢失数据的可能性,但依然存在 Logstash 占用系统资源过多的问题。

      2、基于docker的搭建

        ELK版本迭代非常快,如果能基于docker做成镜像,基于docker搭建,既方便ELK的统一搭建、也方便ELK的升级;有兴趣的小伙伴可以试着搭建。

      3、组件组合

        本文只是简单的实现了ELK + Filebeat各个组件都是单节点的集成,相当于搭建了最基础版本;当然有了这个基础版本,再搭建某些组件的集群版本也不难了。

        另外,组件之间是可以灵活组合的,有些组件也不是必须的,我们可以根据我们业务量的需求来搭建合适的日志系统。

      4、组件详情

        本文只是讲elk+filebeat的搭建,各个组件的详情没有具体介绍,需要大家自己去了解了;各个组件的内容还是挺多的,更好的了解各个组件,对搭建高性能的日志系统有很大帮助。

  • 相关阅读:
    zookeeper基础笔记
    基于spring@aspect注解的aop实现
    Struts2中的开启AsyncContext的方法
    在执行gem install redis时 : ERROR: Error installing redis: redis requires Ruby version >= 2.2.2
    ConcurrentHashMap原理笔记
    Java并发Condition原理分析
    CountDownLatch实现原理
    ThreadPoolExecutor 线程池原理分析
    HashMap原理
    线程池的用法
  • 原文地址:https://www.cnblogs.com/zhoading/p/13970769.html
Copyright © 2011-2022 走看看