精华内容
下载资源
问答
  • ELK 日志系统

    2020-12-24 10:15:13
    ELK 日志系统 (ElasticSearch, Logstash, Kibana) 实时日志分析平台 Logstash是一个ETL工具,负责从每台机器抓取日志数据,对数据进行格式转换和处理后,输出到Elasticsearch中存储。 Elasticsearch是一个分布式...

    ELK 日志系统 (ElasticSearch, Logstash, Kibana)

    实时日志分析平台

    Logstash是一个ETL工具,负责从每台机器抓取日志数据,对数据进行格式转换和处理后,输出到Elasticsearch中存储。

    Elasticsearch是一个分布式搜索引擎和分析引擎,用于数据存储,可提供实时的数据查询。

    Kibana是一个数据可视化服务,根据用户的操作从Elasticsearch中查询数据,形成相应的分析结果,以图表的形式展现给用户。

    展开全文
  • ELK日志系统

    千次阅读 2019-06-13 09:03:03
    作为系列文章的第四篇,本文将重点探讨数据采集层中的ELK日志系统。日志,指的是后台服务中产生的log信息,通常会输入到不同的文件中,比如Django服务下,一般会有nginx日志和uWSGI日志。这些日志分散地存储在不同的...

    作为系列文章的第四篇,本文将重点探讨数据采集层中的ELK日志系统。日志,指的是后台服务中产生的log信息,通常会输入到不同的文件中,比如Django服务下,一般会有nginx日志和uWSGI日志。这些日志分散地存储在不同的机器上,取决于服务的部署情况了。如果我们依次登录每台机器去查阅日志,显然非常繁琐,效率也很低,而且也没法进行统计和检索。因此,需要对日志进行集中化管理,将所有机器上的日志信息收集、汇总到一起。完整的日志数据具有非常重要的作用:

    • 信息查找。通过检索日志信息,定位相应的bug,找出解决方案。
    • 服务诊断。通过对日志信息进行统计、分析,了解服务器的负荷和服务运行状态,找出耗时请求进行优化等等。
    • 数据分析。如果是格式化的log,可以做进一步的数据分析,统计、聚合出有意义的信息,比如根据请求中的商品id,找出TOP10用户感兴趣商品。

    ELK是一套开源的集中式日志数据管理的解决方案,由ElasticsearchLogstashKibana三个系统组成。最初我们建设ELK日志系统的目的是做数据分析,记得第一个需求是期望利用nginx的日志,从API请求的参数中挖掘出用户的位置分布信息。后来该系统在追踪恶意刷量、优化耗时服务等方面都发挥了重要作用,而且随着对Elasticsearch的认知加深,我们将其应用到了其他方面的数据存储和分析中。 本文的重点是结合自身实践来介绍如何使用ELK系统、使用中的问题以及如何解决,文中涉及的ELK版本是:Elasticsearch 2.3、Logstash 2.3、Kibana 4。 
     

    ELK整体方案

    ELK中的三个系统分别扮演不同的角色,组成了一个整体的解决方案。Logstash是一个ETL工具,负责从每台机器抓取日志数据,对数据进行格式转换和处理后,输出到Elasticsearch中存储。Elasticsearch是一个分布式搜索引擎和分析引擎,用于数据存储,可提供实时的数据查询。Kibana是一个数据可视化服务,根据用户的操作从Elasticsearch中查询数据,形成相应的分析结果,以图表的形式展现给用户。

    ELK的安装很简单,可以按照“下载->修改配置文件->启动”方法分别部署三个系统,也可以使用docker来快速部署。具体的安装方法这里不详细介绍,我们来看一个常见的部署方案,如下图所示,部署思路是:

    • 第一,在每台生成日志文件的机器上,部署Logstash,作为Shipper的角色,负责从日志文件中提取数据,但是不做任何处理,直接将数据输出到Redis队列(list)中;
    • 第二,需要一台机器部署Logstash,作为Indexer的角色,负责从Redis中取出数据,对数据进行格式化和相关处理后,输出到Elasticsearch中存储;
    • 第三,部署Elasticsearch集群,当然取决于你的数据量了,数据量小的话可以使用单台服务,如果做集群的话,最好是有3个以上节点,同时还需要部署相关的监控插件;
    • 第四,部署Kibana服务,提供Web服务。

     

    在前期部署阶段,主要工作是Logstash节点和Elasticsearch集群的部署,而在后期使用阶段,主要工作就是Elasticsearch集群的监控和使用Kibana来检索、分析日志数据了,当然也可以直接编写程序来消费Elasticsearch中的数据。

    在上面的部署方案中,我们将Logstash分为Shipper和Indexer两种角色来完成不同的工作,中间通过Redis做数据管道,为什么要这样做?为什么不是直接在每台机器上使用Logstash提取数据、处理、存入Elasticsearch? 

    首先,采用这样的架构部署,有三点优势:

    第一,降低对日志所在机器的影响,这些机器上一般都部署着反向代理或应用服务,本身负载就很重了,所以尽可能的在这些机器上少做事;

    第二,如果有很多台机器需要做日志收集,那么让每台机器都向Elasticsearch持续写入数据,必然会对Elasticsearch造成压力,因此需要对数据进行缓冲,同时,这样的缓冲也可以一定程度的保护数据不丢失;

    第三,将日志数据的格式化与处理放到Indexer中统一做,可以在一处修改代码、部署,避免需要到多台机器上去修改配置。

    其次,我们需要做的是将数据放入一个消息队列中进行缓冲,所以Redis只是其中一个选择,也可以是RabbitMQ、Kafka等等,在实际生产中,Redis与Kafka用的比较多。由于Redis集群一般都是通过key来做分片,无法对list类型做集群,在数据量大的时候必然不合适了,而Kafka天生就是分布式的消息队列系统。

    Logstash

    在官方文档中,Deploying and Scaling Logstash一文详细介绍了各种Logstash的部署架构,下图是与我们上述方案相吻合的架构。Logstash由input、filter和output三部分组成,input负责从数据源提取数据,filter负责解析、处理数据,output负责输出数据,每部分都有提供丰富的插件。Logstash的设计思路也非常值得借鉴,以插件的形式来组织功能,通过配置文件来描述需要插件做什么。我们以nginx日志为例,来看看如何使用一些常用插件。

     

    1. 配置nginx日志格式
    首先需要将nginx日志格式规范化,便于做解析处理。在nginx.conf文件中设置:

    log_format main '$remote_addr "$time_iso8601" "$request" $status $body_bytes_sent "$http_user_agent" "$http_referer" "$http_x_forwarded_for" "$request_time" "$upstream_response_time" "$http_cookie" "$http_Authorization" "$http_token"';
    
    access_log  /var/log/nginx/example.access.log  main;

    2. nginx日志–>>Logstash–>>消息队列
    这部分是Logstash Shipper的工作,涉及input和output两种插件。input部分,由于需要提取的是日志文件,一般使用file插件,该插件常用的几个参数是:

    • path,指定日志文件路径。
    • type,指定一个名称,设置type后,可以在后面的filter和output中对不同的type做不同的处理,适用于需要消费多个日志文件的场景。
    • start_position,指定起始读取位置,“beginning”表示从文件头开始,“end”表示从文件尾开始(类似tail -f)。
    • sincedb_path,与Logstash的一个坑有关。通常Logstash会记录每个文件已经被读取到的位置,保存在sincedb中,如果Logstash重启,那么对于同一个文件,会继续从上次记录的位置开始读取。如果想重新从头读取文件,需要删除sincedb文件,sincedb_path则是指定了该文件的路径。为了方便,我们可以根据需要将其设置为“/dev/null”,即不保存位置信息。
    input {
        file {
            type => "example_nginx_access"
            path => ["/var/log/nginx/example.access.log"]
    
            start_position => "beginning"
            sincedb_path => "/dev/null"
        }
    }

    output部分,将数据输出到消息队列,以redis为例,需要指定redis server和list key名称。另外,在测试阶段,可以使用stdout来查看输出信息。

    # 输出到redis
    output {
        if [type] == "example_nginx_access" {
            redis {
                host => "127.0.0.1"
                port => "6379"
                data_type => "list"
                key => "logstash:example_nginx_access"
            }
          #  stdout {codec => rubydebug}
        }
    }

    3. 消息队列–>>Logstash–>>Elasticsearch
    这部分是Logstash Indexer的工作,涉及input、filter和output三种插件。在input部分,我们通过redis插件将数据从消息队列中取出来。在output部分,我们通过elasticsearch插件将数据写入Elasticsearch。

    # 从redis输入数据
    input {
        redis {
                host => "127.0.0.1"
                port => "6379"
                data_type => "list"
                key => "logstash:example_nginx_access"
        }
    }
    
    output {
        elasticsearch {
            index => "logstash-example-nginx-%{+YYYY.MM}"
            hosts => ["127.0.0.1:9200"]
        }
    }

    这里,我们重点关注filter部分,下面列举几个常用的插件,实际使用中根据自身需求从官方文档中查找适合自己业务的插件并使用即可,当然也可以编写自己的插件。

    • grok,是Logstash最重要的一个插件,用于将非结构化的文本数据转化为结构化的数据。grok内部使用正则语法对文本数据进行匹配,为了降低使用复杂度,其提供了一组pattern,我们可以直接调用pattern而不需要自己写正则表达式,参考源码grok-patterns。grok解析文本的语法格式是%{SYNTAX:SEMANTIC},SYNTAX是pattern名称,SEMANTIC是需要生成的字段名称,使用工具Grok Debugger可以对解析语法进行调试。例如,在下面的配置中,我们先使用grok对输入的原始nginx日志信息(默认以message作为字段名)进行解析,并添加新的字段request_path_with_verb(该字段的值是verb和request_path的组合),然后对request_path字段做进一步解析。
    • kv,用于将某个字段的值进行分解,类似于编程语言中的字符串Split。在下面的配置中,我们将request_args字段值按照“&”进行分解,分解后的字段名称以“request_args_”作为前缀,并且丢弃重复的字段。
    • geoip,用于根据IP信息生成地理位置信息,默认使用自带的一份GeoLiteCity database,也可以自己更换为最新的数据库,但是需要数据格式需要遵循Maxmind的格式(参考GeoLite),似乎目前只能支持legacy database,数据类型必须是.dat。下载GeoLiteCity.dat.gz后解压, 并将文件路径配置到source中即可。
    • translate,用于检测某字段的值是否符合条件,如果符合条件则将其翻译成新的值,写入一个新的字段,匹配pattern可以通过YAML文件来配置。例如,在下面的配置中,我们对request_api字段翻译成更加易懂的文字描述。
    filter {
        grok {
            match => {"message" => "%{IPORHOST:client_ip} \"%{TIMESTAMP_ISO8601:timestamp}\" \"%{WORD:verb} %{NOTSPACE:request_path} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response_status:int} %{NUMBER:response_body_bytes:int} \"%{DATA:user_agent}\" \"%{DATA:http_referer}\" \"%{NOTSPACE:http_x_forwarder_for}\" \"%{NUMBER:request_time:float}\" \"%{DATA:upstream_resopnse_time}\" \"%{DATA:http_cookie}\" \"%{DATA:http_authorization}\" \"%{DATA:http_token}\""}
            add_field => {"request_path_with_verb" => "%{verb} %{request_path}"}
        }
    
        grok {
            match => {"request_path" => "%{URIPATH:request_api}(?:\?%{NOTSPACE:request_args}|)"}
            add_field => {"request_annotation" => "%{request_api}"}
        }
    
        kv {
            prefix => "request_args_"
            field_split => "&"
            source => "request_args"
            allow_duplicate_values => false
        }
    
        geoip {
            source => "client_ip"
            database => "/home/elktest/geoip_data/GeoLiteCity.dat"
        }
    
       translate {
            field => request_path
            destination => request_annotation
            regex => true
            exact => true
            dictionary_path => "/home/elktest/api_annotation.yaml"
            override => true
        }
    }

    Elasticsearch

    Elasticsearch承载了数据存储和查询的功能,这里主要介绍些实际生产中的问题和方法:

    关于集群配置,重点关注三个参数:

    第一,discovery.zen.ping.unicast.hosts,Elasticsearch默认使用Zen Discovery来做节点发现机制,推荐使用unicast来做通信方式,在该配置项中列举出Master节点。

    第二,discovery.zen.minimum_master_nodes,该参数表示集群中可工作的具有Master节点资格的最小数量,默认值是1。为了提高集群的可用性,避免脑裂现象(所谓脑裂,就是同一个集群中的不同节点,对集群的状态有不一致的理解。),官方推荐设置为(N/2)+1,其中N是具有Master资格的节点的数量。

    第三,discovery.zen.ping_timeout,表示节点在发现过程中的等待时间,默认值是3秒,可以根据自身网络环境进行调整,一定程度上提供可用性。

    discovery.zen.ping.unicast.hosts: ["master1", "master2", "master3"] 
    discovery.zen.minimum_master_nodes: 2
    discovery.zen.ping_timeout: 10
    • 关于集群节点,第一,节点类型包括:候选Master节点、数据节点和Client节点。通过设置两个配置项node.master和node.data为true或false,来决定将一个节点分配为什么类型的节点。第二,尽量将候选Master节点和Data节点分离开,通常Data节点负载较重,需要考虑单独部署。
    • 关于内存,Elasticsearch默认设置的内存是1GB,对于任何一个业务部署来说,这个都太小了。通过指定ES_HEAP_SIZE环境变量,可以修改其堆内存大小,服务进程在启动时候会读取这个变量,并相应的设置堆的大小。建议设置系统内存的一半给Elasticsearch,但是不要超过32GB。参考官方文档。
    • 关于硬盘空间,Elasticsearch默认将数据存储在/var/lib/elasticsearch路径下,随着数据的增长,一定会出现硬盘空间不够用的情形,此时就需要给机器挂载新的硬盘,并将Elasticsearch的路径配置到新硬盘的路径下。通过“path.data”配置项来进行设置,比如“path.data: /data1,/var/lib/elasticsearch,/data”。需要注意的是,同一分片下的数据只能写入到一个路径下,因此还是需要合理的规划和监控硬盘的使用。
    • 关于Index的划分和分片的个数,这个需要根据数据量来做权衡了,Index可以按时间划分,比如每月一个或者每天一个,在Logstash输出时进行配置,shard的数量也需要做好控制。
    • 关于监控,笔者使用过head和marvel两个监控插件,head免费,功能相对有限,marvel现在需要收费了。另外,不要在数据节点开启监控插件。

    Kibana

    Kibana提供的是数据查询和显示的Web服务,有丰富的图表样板,能满足大部分的数据可视化需求,这也是很多人选择ELK的主要原因之一。UI的操作没有什么特别需要介绍的,经常使用就会熟练,这里主要介绍经常遇到的三个问题。

    1. 查询语法

    在Kibana的Discover页面中,可以输入一个查询条件来查询所需的数据。查询条件的写法使用的是Elasticsearch的Query String语法,而不是Query DSL,参考官方文档query-string-syntax,这里列举其中部分常用的:

    • 单字段的全文检索,比如搜索args字段中包含first的文档,写作 args:first;
    • 单字段的精确检索,比如搜索args字段值为first的文档,写作 args: “first”;
    • 多个检索条件的组合,使用 NOT, AND 和 OR 来组合,注意必须是大写,比如 args:(“first” OR “second”) AND NOT agent: “third”;
    • 字段是否存在,_exists_:agent表示要求agent字段存在,_missing_:agent表示要求agent字段不存在;
    • 通配符:用 ? 表示单字母,* 表示任意个字母。

    2. 错误“Discover: Request Timeout after 30000ms”

    这个错误经常发生在要查询的数据量比较大的情况下,此时Elasticsearch需要较长时间才能返回,导致Kibana发生Timeout报错。解决这个问题的方法,就是在Kibana的配置文件中修改elasticsearch.requestTimeout一项的值,然后重启Kibana服务即可,注意单位是ms。

    3. 疑惑“字符串被分解了”

    经常在QQ群里看到一些人在问这样一个问题:为什么查询结果的字段值是正确的,可是做图表时却发现字段值被分解了,不是想要的结果?如下图所示的client_agent_info字段。

     

    得到这样一个不正确结果的原因是使用了Analyzed字段来做图表分析,默认情况下Elasticsearch会对字符串数据进行分析,建立倒排索引,所以如果对这么一个字段进行terms聚合,必然会得到上面所示的错误结果了。那么应该怎么做才对?默认情况下,Elasticsearch还会创建一个相对应的没有被Analyzed的字段,即带“.raw”后缀的字段,在这样的字段上做聚合分析即可。

     

    又会有很多人问这样的问题:为什么我的Elasticsearch没有自动创建带“.raw”后缀的字段?然而在Logstash中输出数据时,设置index名称前缀为“logstash-”就有了这个字段。这个问题的根源是Elasticsearch的dynamic template在捣鬼),dynamic temlate用于指导Elasticsearch如何为插入的数据自动建立Schema映射关系,默认情况下,Logstash会在Elasticsearch中建立一个名为“logstash”的模板,所有前缀为“logstash-”的index都会参照这个模板来建立映射关系,在该模板中申明了要为每个字符串数据建立一个额外的带“.raw”后缀的字段。可以向Elasticsearch来查询你的模板,使用API:GET http://localhost:9200/_template。 

    以上便是对ELK日志系统的总结介绍,还有一个重要的功能没有提到,就是如何将日志数据与自身产品业务的数据融合起来。举个例子,在nginx日志中,通常会包含API请求访问时携带的用户Token信息,由于Token是有时效性的,我们需要及时将这些Token转换成真实的用户信息存储下来。这样的需求通常有两种实现方式,一种是自己写一个Logstash filter,然后在Logstash处理数据时调用;另一种是将Logstash Indexer产生的数据再次输出到消息队列中,由我们自己的脚本程序从消息队列中取出数据,做相应的业务处理后,输出到Elasticsearch中。目前,团队对ruby技术栈不是很熟悉,所以采用了第二种方案来实施。

    当前我们的情况是,数据增长相对缓慢,遇到的问题也有限,随着数据量的增加,未来一定会遇到更多的挑战,也可以进一步探索ELK。

    特此声明:该文章转自 https://zhuanlan.zhihu.com/p/26399963

    展开全文
  • 转载ELK日志系统搭建

    2019-11-27 14:11:06
  • ELK日志系统浅析与部署

    万次阅读 多人点赞 2018-06-22 03:58:12
    一、ELK应用场景在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制。无论是开发人员还是运维人员都无法准确的定位服务、服务器上面出现的种种问题,也没有高效搜索日志内容从而...

    一、ELK应用场景

    在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制。无论是开发人员还是运维人员都无法准确的定位服务、服务器上面出现的种种问题,也没有高效搜索日志内容从而快速定位问题的方式。因此需要一个集中式、独立的、搜集管理各个服务和服务器上的日志信息,集中管理,并提供良好的UI界面进行数据展示,处理分析。

    得此:ELK提供一套开源的解决方案,能高效、简便的满足以上场景。

    二、ELK日志系统介绍

    1、ELK分别是Elasticsearch、Logstash、Kibana三个开源框架缩写。

    框架简介作用
    Elasticsearch开源分布式搜索引擎,提供存储、分析、搜索功能。特点:分布式、基于reasful风格、支持海量高并发的准实时搜索场景、稳定、可靠、快速、使用方便等。接收搜集的海量结构化日志数据,并提供给kibana查询分析
    Logstash开源日志搜集、分析、过滤框架,支持多种数据输入输出方式。用于收集日志,对日志进行过滤形成结构化数据,并转发到elasticsearch中
    Kibana开源日志报表系统,对elasticsearch以及logstash有良好的web页面支持。对elasticsearch提供的数据进行分析展示


    2、ELK经典应用如下

    ELK经典架构

    如图

    Logstash部署至服务主机,对各个服务的日志进行采集、过滤、推送。
    Elasticsearch存储Logstash传送的结构化数据,提供给Kibana。
    Kibana提供用户UIweb页面进行,数据展示和分析形成图表等。
    备注:logs 泛指,各种日志文件以及日志信息:windows,negix,tomcat,webserver等等。

    3、ELK改进

    由于Logstash消耗资源大,而服务器资源相当宝贵,所以引进另一个轻量级日志采集框架Beats,其中包含以下6种

    Packetbeat用于搜集网络流量数据

    Heartbeat

    用于运行时间监控
    Filebeat用于搜集文件数据
    Winlogbeat用于搜集winodws事件数据
    Metricbeat用于指标
    Auditbeat用于审计数据
    改良ELK

    4、进一步思考

    传统web项目中,经常使用log4j以及logback(性能更高)等成熟日志插件进行日志的记录,是否提供更好的解决方案。

    ELK升级1.0

    如图

    日志采集新增Logback直接发送日志到Logstash的形式。如果采用此方式,web服务可减少部分生成log文件配置,提高实时性和日志推送效率

    5、高并发场景

    由于logstash消耗性能,所以高并发场景容易遇到流量上的瓶颈,及时使用logstash集群也是如此,所以可以添加中间件进行日志缓存处理。由于logstash数据源具有多种方式,所有中间件也可以很多选择,常见的有kafka,redis。

    ELK升级2.0

    如图

    host1、中间件、host2 均为高可用服务集群   为简单显示未画出
    logback出现的业务数据可以通过写入redis或者kafka等中间件进行缓存,再通过合理限制流量阀值输送至logstash进行过滤
    beats 如果是filebeat其日志若无实时性要求,可以通过控制log文件更新速度限制Beats传输日志流量

    三 ELK搭建(非集群)

    1、下载ELK(保持版本一致)!

    Elasticsearch官网elasticsearch-6.3.0.tarelasticsearch官方文档
    Kibana官网kibana-6.3.0下载 linux64位kibana官方文档
    Logstash官网logstash-6.3.0.tarlogstash官方文档
    Filebeat官网filebeat-6.3.0 linux64位beats官方文档
    备注:演示为centos7 即linux版本,请按实际需求更改

    通过rz命令上传至centos7虚拟机



    2、解压

    tar -zxvf elasticsearch-6.3.0.tar.gz          
    tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz
    tar -zxvf filebeat-6.3.0-linux-x86_64.tar.gz  
    tar -zxvf logstash-6.3.0.tar.gz
    备注:tar不支持指定解压目标目录 可以通过mv 命令进行迁移。本教程迁移至/home目录下

    3、java环境搭建

    推荐使用jdk1.8jdk环境配置

    4、安装elasticsearch

    修改配置文件

    vi /home/elasticsearch-6.3.0/config/elasticsearch.yml
    # ---------------------------------- Network -----------------------------------
    #
    # Set the bind address to a specific IP (IPv4 or IPv6):
    #
    network.host: 0.0.0.0           ##服务器ip 本机
    #
    # Set a custom port for HTTP:
    #
    http.port: 9200                 ##服务端口
    #
    # For more information, consult the network module documentation.
    #
    

    启动elasticsearch

    /home/elasticsearch-6.3.0/bin/elasticsearch   #命令窗运行
    /home/elasticsearch-6.3.0/bin/elasticsearch  -d  #后台线程运行

    关闭elasticsearch

    ctrl+c                                   #命令窗关闭
    ps -ef | grep elastic                    #后台线程关闭
    kill -9 4442                             ##pid 4442为查处线程的pid 

    常见问题解决elasticsearch启动常见问题

    验证elasticsearch启动

    5、安装kibana

    修改配置文件

    vi /home/kibana-6.3.0-linux-x86_64/config/kibana.yml
    server.port: 5601       ##服务端口
    server.host: "0.0.0.0"  ##服务器ip  本机
    
    elasticsearch.url: "http://localhost:9200" ##elasticsearch服务地址 与elasticsearch对应
    

    启动kibana

    /home/kibana-6.3.0-linux-x86_64/bin/kibana       #命令窗启动
    nohup ./kibana-6.3.0-linux-x86_64/bin/kibana &   #后台线程启动

    关闭kibana

    ctrl+c                                   #命令窗关闭
    ps -ef | grep kibana                    #后台线程关闭
    kill -9 4525                             ##pid 4525 为查处线程的pid 

    备注:常见问题多为 端口占用,以及目录未授权,需要同elasticsearch 使用目录运行执行的用户去执行 未配置则为root用户

    验证kibana启动

    6、安装logstash

    新建配置文件

    vi /home/logstash-6.3.0/config/logback-es.conf
    input {
        tcp {  
            port => 9601  
            codec => json_lines         
        }
    }
    output {
            elasticsearch {
                    hosts => "localhost:9200"
            }
            stdout { codec => rubydebug}
    }
    
    备注:上述文件复制时必须去除多余空格,保持yml文件规范。

    备注:上图与配置部分一一对应
    input {                                ##input 输入源配置
        tcp {                              ##使用tcp输入源      官网有详细文档
            port => 9601                   ##服务器监听端口9061 接受日志  默认ip localhost
            codec => json_lines            ##使用json解析日志    需要安装json解析插件
        }
    } 
    filter {                              ##数据处理
    }                                
    output {                               ##output 数据输出配置
            elasticsearch {                ##使用elasticsearch接收
                hosts => "localhost:9200"  ##集群地址  多个用,隔开
            }
            stdout { codec => rubydebug}   ##输出到命令窗口
    }

    logstash官方输入源支持以及下载

    安装logstash json插件

    /home/logstash-6.3.0/bin/logstash-plugin install logstash-codec-json_lines
    

    启动logstash

     /home/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf         ##命令窗形式
    nohup /home/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf &  ##后台线程形式

    关闭logstash

    ctrl+c                                   #命令窗关闭
    ps -ef | grep logstash                    #后台线程关闭
    kill -9 4617                              ##pid 4617 为查处线程的pid 

    7 使用logback 传输日志到logstash

    建立springboot项目(为了快速使用)

    pom文件依赖

                   <dependency>
    			<groupId>net.logstash.logback</groupId>
    			<artifactId>logstash-logback-encoder</artifactId>
    			<version>4.11</version>
    		</dependency>
    

    logback.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration>
    <configuration>
        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>192.168.253.6:9601</destination>     <!--指定logstash ip:监听端口 tcpAppender  可自己实现如kafka传输等-->
            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
        </appender>
    
        <include resource="org/springframework/boot/logging/logback/base.xml"/>      <!--引用springboot默认配置-->
    
        <root level="INFO">
            <appender-ref ref="LOGSTASH" />                                           <!--使用上述订阅logstash数据tcp传输 -->
            <appender-ref ref="CONSOLE" />                                            <!--使用springboot默认配置 调试窗口输出-->
        </root>
    
    </configuration>

    SpringbootLogbackApplication.java 测试

    package com.zyj;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringbootLogbackApplication {
    	private final static Logger logger = LoggerFactory.getLogger(SpringbootLogbackApplication.class);
    
    	public static void main(String[] args) {
    		new Thread(()->{
    			for (int i=0;i<100;i++){
    				logger.info("---test---"+i);
    			}
    		}).start();
    
    		SpringApplication.run(SpringbootLogbackApplication.class, args);
    	}
    }

    9 验证ELK

    为演示方便,我们简单展示一下,单位时间线程打印某日志的速度。主要通过kibana过滤出结构化数据,通过以数据的时间戳为x轴,以count统计函数为y轴进行图表展示。

    (1)后台启动elasticsearch  kibana logstash 并验证启动成功

    (2)启动springboot项目

    (3)logstash输出控制台记录  此为默认无过滤器打印logback包装的全部信息

    (4)kibana日志显示

    添加elasticsearch日志数据

    使用时间戳显示 单位时间线程记录日志数量

    四 、思考拓展

    1、本文未详细介绍logback详细配置,以及自定义日志传输,将后续写入kafka以及redis方案,log4j亦可以使用elk因性能问题不做深究。

    2、本文未详细介绍elasticsearch,logstash,kibana,beats的详细使用,仅罗列架构以及初步elk使用。beats常用为filebeat,对已经生成文档的日志进行传输。

    3、没有完美的架构,只有合适的用法,针对不同的业务环境需要对架构进行微调,整体思路不变。elk为单独高可用服务群,服务器群与beats或者logback亦是独立高可用。

    4、根据业务需要,在logback打印的日志中可以进行结构化处理,亦或者在logstash的filter中对数据进行结构化处理。业务场景有待考究,初步考虑异常分析以及sql回滚等。

    展开全文
  • 主要介绍了使用Docker搭建ELK日志系统的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • window下部署ELK日志系统一. ELK日志系统部署1.从官网下载elk(以下三个文件)2.安装Elasticsearch3.安装logstash4.安装kibana二. ELK日志系统注册成服务自动启动1.从网上下载[nssm](http://nssm.cc/download)2.下载...
  • ELK日志系统安装部署包含环境、服务端安装、客户端安装、Elasticsearch 插件安装、Kibana 日志分析、ELK 日志分析实例等。
  • 教你比别人更快更简单的搭建ELK日志系统群集教程专用
  • ELK日志系统搭建步骤

    2020-11-02 16:30:38
    ELK日志系统搭建步骤 作者:lizhonglin github: https://github.com/Leezhonglin/ blog: https://leezhonglin.github.io 日志平台构成: 前置条件: 1、Centos6或者7 2、登录centos工具:PuTTY64位 3、文件传输...
  • ELK日志系统原理文档

    2017-05-10 16:00:55
    ELK日志系统原理文档
  • 使用Docker搭建ELK日志系统

    千次阅读 2017-11-06 20:26:58
    使用Docker技术搭建ELK日志系统
  • ELK日志系统之ES索引删除背景Curator版本安装配置config.yml:active.yml:执行清理定时任务参考资料 背景 公司ELK日志收集系统,运行三年之久,积累了很多的日志索引,条件有限elasticsearch单机部署不堪重负,终于...
  • 创业公司做数据分析(四)ELK日志系统

    万次阅读 多人点赞 2017-01-07 00:54:07
    本文将重点探讨数据采集层中的ELK日志系统,结合自身实践来介绍如何使用ELK系统、使用中的问题以及如何解决。ELK是一套开源的集中式日志数据管理的解决方案,由Elasticsearch、Logstash和Kibana三个系统组成。
  • ELK日志系统之kibana的使用操作 原文:ELK日志系统之kibana的使用操作1、ELK日志系统打开后,打开kibana的操作界面,第一步创建索引模式: nbsp; nbsp; nbsp; nbsp; nbsp;第2步:创建日志索引 ...
  • 本文主要介绍的是ELK日志系统入门和使用教程。 ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent)...
  • K8s + Docker 部署ELK日志系统

    千次阅读 2020-07-06 18:36:00
    K8s + Docker 部署ELK日志系统,分布式/微服务架构下必备技能!前提:假定你已经安装并集成好docker、docker私服和k8s基础环境!部署Elasticsearch1、...
  • 配置ELK日志系统

    2018-09-04 15:36:26
    ELK(elasticsearch,logstash,kibana)可以作为日志收集及分析的一整套系统,通过阿里的普及也有越来越多的公司在使用,使用下来功能还可以,这里整理记录一个部署手册 A、处理流程为:Nginx --&amp;amp;gt; ...
  • ELK日志系统介绍

    2019-08-18 21:06:19
    在没有日志系统的情况下,首先需要定位处理请求的服务器,如果这台服务器部署了多个实例,则需要去每个应用实例的日志目录下去找日志文件。 每个应用实例还会设置日志滚动策略(如:每天生成一个文件),还有日志...
  • 本文详细讲解了关于easticsearch+kibana+filebeat的轻量级日志系统的整体部署过程
  • elk日志系统多种搭建流程图

    千次阅读 2018-02-14 22:04:09
    下面是个人总结出来的数条elk日志系统搭建流程图:1、log-file--&gt;logstash--&gt;elasticsearch--&gt;kibana2、log-file--&gt;firebeat--&gt;elasticsearch--&gt;kibana3、log-file--&...
  • ELK日志系统安装部署流程:分别包含ElasticSearch、logstash、X-PACK、Kibana等

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,893
精华内容 11,157
关键字:

elk日志系统