zoukankan      html  css  js  c++  java
  • ELK日志收集分析系统配置

    ELK是日志收益与分析的利器。

    1、elasticsearch集群搭建

    2、logstash日志收集

    我这里的实现分如下2步,中间用redis队列做缓冲,可以有效的避免es压力过大:

    1、n个agent对n个服务的log做日志收集(1对1的方式),从日志文件解析数据,存入broker,这里用的是redis的发布订阅模式的消息队列,当然你可以选用kafka,redis比较方便;

    2、indexer做日志汇总,从redis队列中拿数据入es;

    下面给出agent和index的配置示例:

    1、driver_schedule.conf

    input {
      file {
          #这是日志路径
          path => [
              "/home/xiaoju/driver-schedule-api/logs/driver-schedule-api.info.*",
              "/home/xiaoju/driver-schedule-api/logs/driver-schedule-api.error.*"
            ]
          #排除路径,支持glob展开,但是不递归
          exclude => [
              "access.*"
          ]
          #开始位置,beginning从日志开始读取
          start_position => "beginning"
          #sincedb指示的文件,记录日志读取位置
          sincedb_path => "/home/xiaoju/yangfan/local/logstash-1.4.2/sincedb/driver_schedule_progress"
          #添加记录字段
          add_field => {
              "server" => "driver_schedule"
          }
          #编码器,正则pattern多行合并
          codec => multiline {
              pattern => "^d+:d+"
              negate => true
              what => "previous"
          }
      }
    }
    
    filter {
        #匹配路径中包涵info
        if [path] =~ "info" {
            #mutate更改值
            mutate {
                replace => { "type" => "info" }
            }
            grok {
                match => { "message" => "%{COMBINEDAPACHELOG}" }
            }
        }else if [path] =~ "error" {
            mutate {
                replace => { "type" => "error" }
            }
        } else {
            mutate { replace => { "type" => "unknow" } }
        }
    
        date {
            match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
        }
    }
    
    output {
        #debug格式化打印
        #stdout{codec => rubydebug}
        redis {
            host => "10.94.99.55"
            #这里用的是redis订阅模式,对应indexer的data_type应是pattern_channel
            data_type => "channel"
            port => 6379
            db => 5
            key => "logstash:%{[server]}"
        }
    }

    run起来:

    nohup ./bin/logstash -f ./conf/agent/driver_schedule.conf &

    2、indexer.conf

    input {
        redis {
            host => "10.94.99.55"
            port => 6379
            db => 5
            #如果这里选择了pattern_channel, 采用的是redis的订阅方式, agent里data_type就要对应channel
            data_type => "pattern_channel"
            #这是所有的key的匹配pattern
            key => "logstash:*"
        }
    }
    
    output {
        elasticsearch {
            embedded => false
            protocol => "http"
            host => "10.94.99.56"
            port => 9211
            #配置es索引名字
            index => "%{[server]}"
            #配置es索引类型
            index_type => "%{[type]}"
        }
        #debug使用, 格式化打印
        #stdout{codec => rubydebug}
    }

    run起来:

    nohup ./bin/logstash -f ./conf/indexer/indexer.conf &

    3、kibana配置

    网上教程比较多,这里我只mark一些问题的解决方法:

    1、connection failure: 

    checklist:

    1、配置kibana的config.js里的es地址

    2、如果es版本>1.4则需要在es的配置里加入

    http.cors.allow-origin: "/.*/"

    http.cors.enabled: true

     

    注意事项:

    1、ES和logstash最好选用相同大版本,不然可能写不进去

    2、logstash会写一个syncsys的文件,记录上次读取文件到什么地方

  • 相关阅读:
    jquery 序列化form表单
    nginx for windows 安装
    nodejs idea 创建项目 (一)
    spring 配置 shiro rememberMe
    idea 2018 解决 双击shift 弹出 search everywhere 搜索框的方法
    redis 在windows 集群
    spring IOC控制反转和DI依赖注入
    redis 的安装
    shiro 通过jdbc连接数据库
    handlebars的用法
  • 原文地址:https://www.cnblogs.com/kangoroo/p/6053828.html
Copyright © 2011-2022 走看看