zoukankan      html  css  js  c++  java
  • elk日志系统搭建

     

    一、日志收集系统原理说明:

     

    1.filebeat安装在产生日志的服务器,它是轻量级的日志收集器,对服务器资源的消耗几乎可以忽略

    2.filebeat收集的日志发送到redis队列,redis主要作用是缓冲,因logstash的传输能力有限,如果各个服务器 filebeat传输的日志量过大有可能产生堵塞导致信息丢失或者服务崩溃,另外logstash也比较消耗服务器资源

    3.logstash负责读取日志,可以从filebeat直接读取,这里是从redis读取,然后选择性地过滤、筛选等处理后,发送到elasticsearch
    4.elasticsearch是一个检索能力非常强大的搜索引擎,能对数据按索引进行各种筛选
    5.kibana是一款可视化工具,负责对elasticsearch库中的数据进行搜索、排序、过滤后,可以以图标、曲线图、柱状图等各种方式进行可视化展示
     
    注:filebeat、redis、logstash、elasticsearch、kibana等都是开源免费项目
          以上组件目前暂时是单节点,原则来说应该是集群形式,以保证高可用。
    整个日志系统架构如下图:

    二、服务器规划

    1.准备了两台服务器,两台服务器都是16核64G,系统盘100G另挂一个500G的数据盘  (可以说是土豪级的配置了)

     110.1.2.81 安装 elasticsearch、logstash、kibana、nginx(主要kibana没有权限管理,要使用nginx添加访问权限)

     110.1.2.82 安装 redis

     filebeat 安装在业务服务器上

    三、安装及配置

    1.版本这里elk及filebeat统一选择 5.6.10 ,redis 4.0.9,很多地方都说elk要求是统一版本

    2.安装没什么说的,官网下载对应的包: 官网地址 

      

    3.filebeat安装配置

    filebeat安装很简单,我这里是Ubuntu系统,下载的是 5.6.10版本

    下载之后解压,我这里放在了 /usr/servers/ 文件夹下,并且重命名为 filebeat,编辑filebeat.yml配置文件,启动即可

    启动命令:

    #切换到filebeat目录
    cd /usr/servers/filebeat
    
    #启动 在后台启动加 &
    ./filebeat &

    *********到了关键的配置文件讲解了*******

    这里是filebeat采集日志文件后存入redis队列,然后由logstash去redis消费

    filebeat配置:

    #=========================== Filebeat prospectors =============================
    
    filebeat.prospectors:
    
    #这里每个 input_type 对应一个日志文件收集 这里配置了两个一个是管理后台的(guanyu-platform)一个是小程序的(guanyu-server-minapp)
    - input_type: log  
      enabled: true
      #日志文件路径,支持通配符,如 /root/*  或 /root/test-*.log
      paths: 
        - /root/server/logs/guanyu-platform-*.log
      #这里是关键,后面logstash要根据 fields.log_type 判断不同的文件来创建不同的索引(index)
      fields:  
        log_source: guanyu-platform_prod
        log_type: guanyu-platform_prod
    
    - input_type: log
      enabled: true
      paths:
        - /root/server/logs/guanyu-server-minapp-*.log
      fields:
        log_source: guanyu-server-minapp_prod
        log_type: guanyu-server-minapp_prod
    
    
      filebeat.config.modules:
        path: ${path.config}/modules.d/*.yml
        reload.enabled: false
    
    setup.template.settings:
      index.number_of_shards: 3
    setup.kibana:
    #这里配置是说日志输出到redis, host、port、password、db都没啥说的
    output.redis:
       hosts: ["110.1.2.82"]
       port: 6379
       password: 123456
       db: 0
       #这里key是关键,key是default_list,看官网含义就是不设置固定的key,而是所有的key根据下面条件动态匹配!
       key: "default_list"
       keys:
        #第一条含义:如果source包含 "guanyu-platform" ,则存到redis里key是guanyu-platform_prod
        - key: "guanyu-platform_prod" 
          when.contains:
            source: "guanyu-platform"
        - key: "guanyu-server-minapp_prod"  # send to debug_list if `message` field contains DEBUG
          when.contains:
            source: "guanyu-server-minapp"

    4.redis安装网上搜个按步骤安装就行

    filebeat启动之后,这是redis里就可以看到发送过来的队列了:

    5.logstash安装与配置

    logstash安装基本和filebeat相同,官网下载安装包,解压到某个目录( 我这里放在了 /usr/servers/logstash )

    主要说下配置,我这里专门建了一个目录 /usr/servers/conf.d  文件名 total.conf

    启动命令:

    #启动命令
    /usr/servers/logstash/bin/logstash -f /usr/servers/conf.d/

    配置文件:

    input {
      redis {
        port => "6379"
        host => "110.1.2.82"
        password => "123456"
        data_type => "list"
        key => "guanyu-server-minapp_prod"
      }
      redis {
        port => "6379"
        host => "110.1.2.82"
        password => "123456"
        data_type => "list"
        key => "guanyu-platform_prod"
      }
      redis {
        port => "6379"
        host => "110.1.2.82"
        password => "123456"
        data_type => "list"
        key => "middleplatform-log_prod"
      }
      redis {
        port => "6379"
        host => "110.1.2.82"
        password => "123456"
        data_type => "list"
        key => "shell-middleplatform_test"
      }
      redis {
        port => "6379"
        host => "110.1.2.82"
        password => "123456"
        data_type => "list"
        key => "corn-middleplatform_test"
      }
    }
    
    
    
    output {
      if [fields][log_type] == "guanyu-server-minapp_prod" {
        elasticsearch {
          hosts => "110.1.2.81:9200"
          index => "guanyu-server-minapp_prod-%{+YYYY.MM.dd}"
          action => "index"
        }
      }
      if [fields][log_type] == "guanyu-platform_prod" {
        elasticsearch {
          hosts => "110.1.2.81:9200"
          index => "guanyu-platform_prod-%{+YYYY.MM.dd}"
          action => "index"
        }
      }
      if [fields][log_type] == "middleplatform_prod" {
        elasticsearch {
          hosts => "110.1.2.81:9200"
          index => "middleplatform_prod-%{+YYYY.MM.dd}"
          action => "index"
        }
      }
      if [fields][log_type] == "shell-middleplatform_test" {
        elasticsearch {
          hosts => "110.1.2.81:9200"
          index => "shell-middleplatform_test-%{+YYYY.MM.dd}"
          action => "index"
        }
      }
      if [fields][log_type] == "corn-middleplatform_test" {
        elasticsearch {
          hosts => "110.1.2.81:9200"
          index => "corn-middleplatform_test-%{+YYYY.MM.dd}"
          action => "index"
        }
      }
      
    }

    说明:

     1、input是从redis读取,除了redis连接信息基本配置,就是key的设置,每个key对应一个redis配置,date_type这里设置为list

    date_type官网是这样解释的 Value can be any of: listchannelpattern_channel  Specify either list or channel. If redis\_type is list, then we will BLPOP the key. If redis\_type is channel, then we will SUBSCRIBE to the key. If redis\_type is pattern_channel, then we will PSUBSCRIBE to the key.

    2、output是日志输出位置,这里是输出到elasticsearch,且根据[fields][log_type]值不同建立不同的索引。[fields][log_type] 是在filebeat收集时设置的,可以看上面第3步filebeat配置。

    6.elasticsearch的安装与配置

    安装基本与filebeat和logstash一样,注意下载相同的版本即可 

    elasticsearch配置比较简单,主要有以下:

    #数据 存放地址
    path.data: /mnt/sdc/data/elasticsearch
    #
    # Path to log files:
    #日志存放地址
    path.logs: /var/log/elasticsearch
    
    #
    # ---------------------------------- Network -----------------------------------
    #
    # 设置允许访问的IP,0.0.0.0代表任何IP均可访问
    #
    network.host: 0.0.0.0
    #
    # 设置端口号,及跨域
    #
    http.port: 9200
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    7.kibana安装与配置

    安装也是下载包解压(有什么依赖则需提前安装),配置文件如下:

    # Kibana is served by a back end server. This setting specifies the port to use.
    server.port: 5601
    
    # Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
    # The default is 'localhost', which usually means remote machines will not be able to connect.
    # To allow connections from remote users, set this parameter to a non-loopback address.
    server.host: "0.0.0.0"
    
    # The URL of the Elasticsearch instance to use for all your queries.
    elasticsearch.url: "http://110.1.2.81:9200"

    四、使用

    1.kibana访问地址 IP+5601

    2.创建索引: management -> index patternns -> create index pattern 如下图:

    注意:索引必须是已存在的,否则会有红色警告

    3.查看索引   -> discover

    a、首先右上角选择时间段,默认的是 last 15 minutes,你可以快速选择当天、昨天、过去30天等(quick),也可以设置具体时间段(absolute)

    b、选择索引,你可能会创建多个索引,每次只能选择查看一个

    c、添加筛选条件(可选),即 add a filter,这个还是比较有用的。

    看下图,这是不是比你自己打开日志文件方便多了

    d、我们的日志内容一般存在message字段里,在 available fields 里把message add 进去,它是我们实际要看的

    e、也可以按time排序(正序、倒序)

    以上初步实现日志的收集和查看,包括搜索

    ----------------------------------------------------------------------------

    有个问题就是kibana没有权限控制,即只要知道IP+端口号就可以访问,不需要用户名和密码,这个可以用nginx实现用户名和密码访问,后面补充

    播种和收获通常不在一个季节,而中间的过程叫做坚持~
  • 相关阅读:
    使用Python操作MySQL数据库
    SQL server数据库语句
    SQL server数据库
    实施工程师
    Vue外卖项目
    每日思考记录(12)
    Vue核心知识点
    jQuery快速入门
    js
    css2
  • 原文地址:https://www.cnblogs.com/shog808/p/13534076.html
Copyright © 2011-2022 走看看