zoukankan      html  css  js  c++  java
  • 用ELK搭建简单的日志收集分析系统【转】

    缘起

    在微服务开发过程中,一般都会利用多台服务器做分布式部署,如何能够把分散在各个服务器中的日志归集起来做分析处理,是一个微服务服务需要考虑的一个因素。

    搭建一个日志系统

    搭建一个日志系统需要考虑一下一些因素:

    1. 利用什么技术,是自己实现还利用现成的组件
    2. 日志需要定义统一的格式
    3. 日志需要拥有一个锚点来进行全局跟踪

    第一个问题,针对我们小公司来说,基本没有自己的研发能力,绝对是选用第三方开源的组件了。ELK配置比较简单,有现成的UI界面,容易检索日志信息,是首选。 
    第二个问题,利用log4j2定义好统一的日志格式,利用logstash过滤日志内容。 
    第三个问题,全局跟踪的ID有几种生产方式,一种是利用UUID或者生成随机数,一种是利用数据库来生成sequence number,还可以通过自定义一个id生成服务来获取。考虑到自身服务的需要,这里选用生成随机数来实现。

    日志系统架构

    ELK简单架构

    从左边看起,每一台webserver上都会部署一个logstash-agent,它的作用是用类似tailf的方式监听日志文件,然后把新添加的日志发送到redis队列里面,logstash-indexer负责从redis相应的队列里面取出日志,对日志进进行加工后输出到elasticsearch中,elasticsearch会根据要求对日志进行索引归集,最后用户可以通过kibana来查看和分析日志。

    开始搭建日志系统

    准备工作

    1. 安装JDK8
    2. 安装Redis2.8

    这里不涉及怎样安装JDK和Redis,请自行查阅资料

    使用logstash2.3.1elasticsearch2.3.1kibana2.3.1

    首先去ELK官网下载相应的压缩包 
    https://www.elastic.co/downloads

    在webserver上安装logstash-agent

    1.解压 tar -zxvf logstash2.3.1 
    2.检验安装是否成功 bin/logstash -e "input{stdin{}}output{stdout{}}",然后在终端输入hello,看看有没有内容返回 
    安装logstash 
    3.编写配置文件logstash_agent.conf 
    在logstash安装目录下新建conf文件夹,在里面新建配置文件logstash_agent.conf

    input {
            file {
                    type => "customer_service"
                    #需要收集的日志文件
                    path => ["/home/java/logs/cust/customer-service-*.log"] 
                    tags => ["customer-service", "log4j2"]
                    #              
                    codec => multiline { #
                            pattern => "^%{TIMESTAMP_ISO8601}"
                            negate => true
                            what => "previous"
                    }
            }
    }
    output {
            redis {
                    host => "192.168.235.195"
                    data_type => "list"
                    key => "logstash:redis:customer"
            }
    }

    4.后台启动 
    nohup ./bin/logstash -f conf/logstash_agent.conf &

    在日志server上安装elasticsearch

    1.解压tar -zxvf elasticsearch-2.3.1.tar.gz 
    2.修改安装目录下的配置文件config/elasticsearch.yml 
    把network.host字段给反注释掉,把地址改为0.0.0.0(官方并没明确说要去改这配置,默认配置应该就可以了,不过实测的时候发现如果不做这修改,elasticsearch访问不了) 
    这里写图片描述 
    3.后台启动elasticsearch 
    nohup ./bin/elasticsearch &

    在日志server上安装logstash-indexer

    在webserver上安装logstash-agent一节基本相同,只是配置文件不一样,这里使用logstash-indexer.conf

    input {
            redis {
                    host => "localhost" #redis地址
                    data_type => "list"
                    key => "logstash:redis:customer"
                    type => "redis-input"
            }
    }
    filter {
        grok {
            match => {
                "message" => "%{TIMESTAMP_ISO8601:date} [(?<thread_name>.+?)] (?<log_level>w+)s*(?<content>.*)"
            }
        }
        date {
            match => ["timestamp", "dd/MMM/YYYY:HH:mm:ss Z"]
        }
    }
    output {
            if[type] == "customer_service" {
                elasticsearch {
                        #embedded => false
                        #protocol => "http"
                        hosts => "localhost:9200"
                        index => "customer-%{+YYYY.MM.dd}"
                }
            }else if[type] == "其他类型" {
                elasticsearch {
                        #embedded => false
                        #protocol => "http"
                        hosts => "localhost:9200"
                        index => "其他类型索引名字-%{+YYYY.MM.dd}"
                }
            }else {
                //做其他处理
            }
            stdout{ #输出到标准输出,可以去掉
            }
    }

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

    在日志server上安装kibana

    1.解压tar -zxvf kibana-4.5.0-linux-x64.gz 
    2.后台启动kibana nohup ./bin/kibana & 
    这里没有特别去配置kibana要访问的elasticsearch地址,默认它会找本地的,如果需要,可以到conf/kibana.yml修改

    配置log4j2的日志格式

    <PatternLayout pattern="%d{ISO8601} %t %level %msg%n"/>

    访问kibana主页

    1.打开kibana主页http://your-kibana-ip:5601/ 
    2.输入索引customer-*,并点击create 
    这里写图片描述 
    3.在Discover页面观察日志 
    这里写图片描述

    ToDo:

    需要了解elasticsearch日志存放在哪里,定期清理日志

    清理Elasticsearch索引

    索引放久了需要清理,清理所以可以使用Elasticsearch的API。 
    例如我需要删除某个索引2016年5月份的所有索引,可以使用下面的命令:

    curl -XDELETE 'http://localhost:9200/customer-2016.05.*'

    更多API可以查阅Elastic官网 
    https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html

    参考资料

    http://www.cnblogs.com/yjf512/p/4199105.html 

    http://www.cnblogs.com/xing901022/p/4805586.html 
    https://github.com/chenryn/logstash-best-practice-cn/blob/master/codec/multiline.md 
    http://www.open-open.com/lib/view/open1451801542042.html

    转自

    用ELK搭建简单的日志收集分析系统
    http://m.blog.csdn.net/lzw_2006/article/details/51280058

  • 相关阅读:
    LeetCode Best Time to Buy and Sell Stock
    LeetCode Scramble String
    LeetCode Search in Rotated Sorted Array II
    LeetCode Gas Station
    LeetCode Insertion Sort List
    LeetCode Maximal Rectangle
    Oracle procedure
    浏览器下载代码
    Shell check IP
    KVM- 存储池配置
  • 原文地址:https://www.cnblogs.com/paul8339/p/7065706.html
Copyright © 2011-2022 走看看