• LogStash日志分析系统


    简介

    通常日志管理是逐渐崩溃的——当日志对于人们最重要的时候,也就是出现问题的时候,这个渐进的过程就开始了。
    日志管理一般会经历一下3个阶段:

    1. 初级管理员将通过一些传统工具(如cat、tail、sed、awk、perl以及grep)对日志进行检查,但它的适用范围仅限于少量的主机和日志文件类型;

    2. 考虑到现实中的可扩展性问题,日志管理也会逐步进化,使用如rsyslog和syslog-ng这样的工具进行集中化的管理;

    3. 当日志信息越来越大的时候,从快速增长的日志数据流中提取出所需的信息,并将其与其他相关联的事件进行关联,将变得越加困难,此时LogStash就提供了一个很好的解决方案

    LogStash的优势:

    1. 对日志数据更好的语法分析功能;

    2. 更加灵活的日志存储方式

    3. 附带搜索和目录功能

    4. 易于安装、可扩展、性能良好等

    设计及架构

    LogStash 由JRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上。不同于分离的代理端(agent)或主 机端(server),LogStash可配置单一的代理端(agent)与其它开源软件结合,以实现不同的功能。

    在LogStash的生态系统中,主要分为四大组件:

    1. Shipper:发送事件(events)至LogStash;通常,远程代理端(agent)只需要运行这个组件即可;

    2. Broker and Indexer:接收并索引化事件;

    3. Search and Storage:允许对事件进行搜索和存储;

    4. Web Interface:基于Web的展示界面

    正是由于以上组件在LogStash架构中可独立部署,才提供了更好的集群扩展性。

    在大多数情况下,LogStash主机可分为两大类:

    1. 代理主机(agent host):作为事件的传递者(shipper),将各种日志数据发送至中心主机;只需运行Logstash 代理(agent)程序;

    2. 中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储。

    部署

    基础环境

    um install java-1.7.0-openjdk
    java -version # 保证java版本为1.7

    部署LogStash

    # 下载
    wget https://download.elasticsearch.org/logstash/logstash/logstash-1.3.1-flatjar.jar -O logstash.jar 
    # 启动
    java -jar logstash.jar agent -v -f shipper.conf # 启动shipper
    java -jar logstash.jar agent -v -f indexer.conf # 启动indexer

    部署Redis

    # 安装
    yum install redis-server
    # 启动
    /etc/init.d/redis-server start
    # 测试
    $ redis-cli -h 192.168.12.24
    redis 192.168.12.24:6379> PING
    PONG

    部署Elasticsearch

    # 下载
    wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.8.noarch.rpm
    # 安装
    rpm -ivh elasticsearch-0.90.8.noarch.rpm 
    # 启动
    /etc/init.d/elasticsearch status

    启动Kibana

    # 安装
    java -jar logstash.jar web # LogStash 1.3.1自带Kibana
    # 查看
    http://192.168.12.24:9292

    Logstash配置文件与插件

    input {
        stdin { }
        file {
            type => "syslog"
            path => ["/var/log/secure", "/var/log/messages"]
            exclude => ["*.gz", "shipper.log"]
        }
        zeromq {
          address => ["tcp://192.168.8.145:8889"]
          mode => "client"
          type => "zmq-input"
          topic => "weblog"
          topology => "pubsub"
          codec => "json"
        }
      }
      filter {
        mutate {
            gsub => [ "message","APPS weblog",""]
            gsub => [ "message","{",""]
            gsub => [ "message","}",""]
        }
      }
      output {
        stdout { debug => true debug_format => "json"}
        
        elasticsearch {
          cluster => "logstash"
          codec => "json"
        }
    }

    日志类别与处理方法

    1. Apache日志:自定义apache输出日志格式,json输出,无需filter参与

    2. Postfix日志:无法自定义,需使用如grok等filter进行过滤

    3. Tomcat日志:需将多行日志合并至一个事件中,并排除空白行

    集群扩展

    扩展架构

    注意事项

    Redis:部署多台,仅提供高可用作用,无分担负载作用,可使用ZeroMQ代替

    ElasticSearch:

    # 检测节点状态:
        curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty=true'
                green status:所有shard被分配,且运行正常
                yellow status:只有主shard被分配,如集群正在节点间复制数据时
                red status:存在未被分配的shard
    # 集群监控:
        Paramedic工具:
                安装:/usr/share/elasticsearch/bin/plugin -install karmi/elasticsearch-paramedic
                查看:http://log.okooo.net:9200/_plugin/paramedic/index.html
        Bigdesk工具:
                安装:/usr/share/elasticsearch/bin/plugin -install lukas-vlcek/bigdesk
                查看:http://log.okooo.net:9200/_plugin/bigdesk/index.html
                
    # 数据保留策略:
                1.LogStash默认为每一天创建1个index,可手动删除index
                    curl -XDELETE http://127.0.0.1:9200/logstash-2013.12.19
                    shell优化脚本:https://github.com/cnf/logstash-tools/blob/master/elasticsearch/clean-elasticsearch.sh
                2.优化index:
                    curl -XPOST 'http://127.0.0.1:9200/logstash-2013.12.19/_optimize'
                    curl -XPOST 'http://127.0.0.1:9200/_optimize' # 优化所有index
                    curl 'http://127.0.0.1:9200/logstash-2013.12.19/_stats?clear=true&store=true&pretty=true' #查看index的大小,index过多会影响优化耗时
                3.默认index数据目录:/var/lib/elasticsearch/logstash 

    参考资料

    LogStash官网:http://www.logstash.net/

    Elasticsearch官网:http://www.elasticsearch.org/

    Kibana查询语法:http://lucene.apache.org/core/3_6_1/queryparsersyntax.html

  • 相关阅读:
    MVC3、如何应用EntityFramework 连接MySql 数据库 Kevin
    DEV EXPRESS Summary Footer 不显示 Kevin
    装饰模式 Kevin
    Dev 控件 GridControl 控件 二次绑定数据源的问题。 Kevin
    System.InvalidOperationException 异常 Kevin
    LINQ to XML Kevin
    代理模式——代码版“吊丝的故事” Kevin
    VS2012 中的设备 面板 Kevin
    maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
    maven 学习笔记(一)eclipse+android+maven
  • 原文地址:https://www.cnblogs.com/xiaocen/p/3717849.html
Copyright © 2020-2023  润新知