当前位置:首页 > 芯闻号 > 充电吧
[导读]ELK Stack 简介ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于 Elas


ELK Stack 简介


ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于 Elastic.co 公司名下,所以被简称为 ELK Stack。根据 Google Trend 的信息显示,ELK Stack 已经成为目前最流行的集中式日志解决方案。

Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 
就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。

ELK 常用架构及使用场景 最简单架构

在这种架构中,只有一个 Logstash、Elasticsearch 和 Kibana 实例。Logstash 通过输入插件从多种数据源(比如日志文件、标准输入 Stdin 等)获取数据,再经过滤插件加工数据,然后经 Elasticsearch 输出插件输出到 Elasticsearch,通过 Kibana 展示。详见图 1。 
图 1. 最简单架构 
 
这种架构非常简单,使用场景也有限。初学者可以搭建这个架构,了解 ELK 如何工作。

Logstash 作为日志搜集器

这种架构是对上面架构的扩展,把一个 Logstash 数据搜集节点扩展到多个,分布于多台机器,将解析好的数据发送到 Elasticsearch server 进行存储,最后在 Kibana 查询、生成日志报表等。详见图 2。 
图 2. Logstash 作为日志搜索器 
 
这种结构因为需要在各个服务器上部署 Logstash,而它比较消耗 CPU 和内存资源,所以比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工作。

Beats 作为日志搜集器

这种架构引入 Beats 作为日志搜集器。目前 Beats 包括四种:

Packetbeat(搜集网络流量数据);Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);Filebeat(搜集文件数据);Winlogbeat(搜集 Windows 事件日志数据)。

Beats 将搜集到的数据发送到 Logstash,经 Logstash 解析、过滤后,将其发送到 Elasticsearch 存储,并由 Kibana 呈现给用户。详见图 3。

图 3. Beats 作为日志搜集器 

这种架构解决了 Logstash 在各服务器节点上占用系统资源高的问题。相比 Logstash,Beats 所占系统的 CPU 和内存几乎可以忽略不计。另外,Beats 和 Logstash 之间支持 SSL/TLS 加密传输,客户端和服务器双向认证,保证了通信安全。 
因此这种架构适合对数据安全性要求较高,同时各服务器性能比较敏感的场景。

引入消息队列机制的架构

这种架构使用 Logstash 从各个数据源搜集数据,然后经消息队列输出插件输出到消息队列中。目前 Logstash 支持 Kafka、Redis、RabbitMQ 等常见消息队列。然后 Logstash 通过消息队列输入插件从队列中获取数据,分析过滤后经输出插件发送到 Elasticsearch,最后通过 Kibana 展示。详见图 4。

图 4. 引入消息队列机制的架构 

这种架构适合于日志规模比较庞大的情况。但由于 Logstash 日志解析节点和 Elasticsearch 的负荷比较重,可将他们配置为集群模式,以分担负荷。引入消息队列,均衡了网络传输,从而降低了网络闭塞,尤其是丢失数据的可能性,但依然存在 Logstash 占用系统资源过多的问题。

基于 Filebeat 架构的配置部署详解

前面提到 Filebeat 已经完全替代了 Logstash-Forwarder 成为新一代的日志采集器,同时鉴于它轻量、安全等特点,越来越多人开始使用它。这个章节将详细讲解如何部署基于 Filebeat 的 ELK 集中式日志解决方案,具体架构见图 5。

图 5. 基于 Filebeat 的 ELK 集群架构 

因为免费的 ELK 没有任何安全机制,所以这里使用了 Nginx 作反向代理,避免用户直接访问 Kibana 服务器。加上配置 Nginx 实现简单的用户认证,一定程度上提高安全性。另外,Nginx 本身具有负载均衡的作用,能够提高系统访问性能。

Filebeat安装 下载地址:https://www.elastic.co/downloads/beats/filebeat编辑filebeat.yml启动sudo ./filebeat -e -c filebeat.ymlfilebeat input配置介绍


filebeat:    spool_size: 1024                                    # 最大可以攒够 1024 条数据一起发送出去    idle_timeout: "5s"                                  # 否则每 5 秒钟也得发送一次    registry_file: ".filebeat"                          # 文件读取位置记录文件,会放在当前工作目录下。所以如果你换一个工作目录执行 filebeat 会导致重复传输!    config_dir: "path/to/configs/contains/many/yaml"    # 如果配置过长,可以通过目录加载方式拆分配置    prospectors:                                        # 有相同配置参数的可以归类为一个 prospector        -            fields:                ownfield: "mac"                         # 类似 logstash 的 add_fields            paths:                - /var/log/system.log                   # 指明读取文件的位置                - /var/log/wifi.log            include_lines: ["^ERR", "^WARN"]            # 只发送包含这些字样的日志            exclude_lines: ["^OK"]                      # 不发送包含这些字样的日志        -            document_type: "apache"                     # 定义写入 ES 时的 _type 值            ignore_older: "24h"                         # 超过 24 小时没更新内容的文件不再监听。在 windows 上另外有一个配置叫 force_close_files,只要文件名一变化立刻关闭文件句柄,保证文件可以被删除,缺陷是可能会有日志还没读完            scan_frequency: "10s"                       # 每 10 秒钟扫描一次目录,更新通配符匹配上的文件列表            tail_files: false                           # 是否从文件末尾开始读取            harvester_buffer_size: 16384                # 实际读取文件时,每次读取 16384 字节            backoff: "1s"                               # 每 1 秒检测一次文件是否有新的一行内容需要读取            paths:                - "/var/log/apache/*"                   # 可以使用通配符            exclude_files: ["/var/log/apache/error.log"]        -            input_type: "stdin"                         # 除了 "log",还有 "stdin"            multiline:                                  # 多行合并                pattern: '^[[:space:]]'                negate: false                match: afteroutput:    ...Elasticsearch安装

下载地址:https://www.elastic.co/downloads/elasticsearch

Logstash安装

下载地址:https://www.elastic.co/downloads/logstash

Kibana安装

下载地址:https://www.elastic.co/downloads/kibana

Kibana视图构建示例及配置 以收集Nginx访问日志为例,我们希望能统计到api接口调用排行,浏览器类型,操作系统类型,http状态分布,响应时间分布。虽然logstash可以通过內建模板解析Nginx日志字符串,不过直接在Nginx配置中直接json字符串最为方便。 编辑/usr/local/nginx/conf/nginx.conf

在server节定义json日志格式


log_format json '{"@timestamp_local":"$time_iso8601",'    '"host":"$server_addr",'    '"clientip":"$remote_addr",'    '"size":$body_bytes_sent,'    '"responsetime":$request_time,'    '"upstreamtime":"$upstream_response_time",'    '"upstreamhost":"$upstream_addr",'    '"http_host":"$host",'    '"url":"$uri",'    '"type":"newnginx-api",'    '"request":"$request",'    '"time_local":"$time_local",'    '"xff":"$http_x_forwarded_for",'    '"referer":"$http_referer",'    '"agent":"$http_user_agent",'    '"status":"$status"}';

然后在各网站Nginx配置下指定json模板日志格式


access_log  /home/wwwlogs/abc.com.log json;

重启Nginx,日志格式输出结果示例如下:


{"@timestamp_local":"2017-02-23T16:16:19+08:00","host":"192.168.56.10","clientip":"192.168.56.1","size":5,"responsetime":0.085,"upstreamtime":"0.085","upstreamhost":"unix:/tmp/php-cgi.sock","http_host":"www.abc.com","url":"/index.php","type":"newnginx-api","request":"GET / HTTP/1.1","time_local":"23/Feb/2017:16:16:19 +0800","xff":"-","referer":"-","agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36","status":"500"}编辑filebeat.yml

增加或更新以下配置


filebeat.registry_file: ".filebeat"filebeat.prospectors:- input_type: log    paths:        - /home/wwwlogs/abc.com.log    tail_files: true #从文件末尾开始读取    document_type: "newnginx-api"output.logstash:    # The Logstash hosts    hosts: ["localhost:5044"]编辑logstash.yml


input {    beats {        port => 5044        codec => "json"    }}filter {    grok {        match => {            "request" => "s+(?        }    }    grok {        match => {            "agent" => "(?        }    }    grok {        match => {            "agent" => "(?        }    }    mutate {        split => [ "upstreamtime", "," ]    }    mutate {        convert => [ "upstreamtime", "float" ]    }}output {    stdout {        codec => rubydebug    }    elasticsearch {        hosts => ["localhost:9200"]        index => "%{type}-%{+YYYY.MM.dd}"        flush_size => 2000        idle_flush_time => 10        sniffing => false        template_overwrite => true    }}

logstash filter主要从日志中提取api_path,os,browser三个字段作为之后排序依据。

增加Kibana索引index pattern

菜单 -> Management -> Index Patterns -> Add New

我们在filebeat.yml中配置了document_type: "newnginx-api",所以index name pattern写为newnginx-api-*,*表示所有日期的。见图:

视图示例配置 1. 饼图:HTTP状态及响应时间 metrics选择Count第一个buckets以Terms为聚合,选择status字段,order by count,Size填5第二个bucket以Range为子聚合,选择responsetime字段,from-to指定响应时间范围,比如0-0.1,0.1-0.2,0.2-0.5,0.5-1,1-2,2-5,5-10

2. 直方图:http状态时间轴直方图 metrics选择Countbuckets X-Axis选择timestamp_local,时间间隔可选择秒,分,小时等buckets Split Bars选择Terms为子聚合,选择status字段,order by term(相当于对status进行group分组)

3. 线形图:所有接口调用数时间曲线图 metrics选择Countbuckets X-Axis选择Data Histogram(时间片),选择timestamp_local字段,时间间隔可选择秒,分,小时等。

4. 聚合数字:接口调用总数 metric 可视化为你选择的聚合显示一个单独的数字。 5. 直方图:接口调用排行榜 metrics选择Countbuckets X-Axis选择Terms聚合,选取api_path字段,order by count,size填30(前30调用最高)buckets Split Bars选择Terms子聚合,选取api_path字段,order by count

其他视图配置根据需要选择metrics和buckets。

Kibana功能简要介绍 可视化类型Area chart 用区块图来可视化多个不同序列的总体贡献。 Data table 用数据表来显示聚合的原始数据。其他可视化可以通过点击底部的方式显示数据表。 Line chart 用折线图来比较不同序列。 Markdown widget 用Markdown显示自定义格式的信息或和你仪表盘有关的用法说明。 Metric 用指标可视化在你仪表盘上显示单个数字。 Pie chart 用饼图来显示每个来源对总体的贡献。 Tile map 用瓦片地图将聚合结果和经纬度联系起来。 Timeseries 计算和展示多个时间序列数据。 Vertical bar chart 用垂直条形图作为一个通用图形。 metrics聚合 <blockquote class="white-blockquote" style="border-left:10px solid rgb(214,219,223);border-top-color:rgb(214,219,223);border-right-color:

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着人工智能(AI)模型变得越来越复杂,数据量不断攀升,数据中心正在通过改变系统架构,来实现更快、更高效的处理。

关键字: AI 连接器

Mar. 28, 2024 ---- TrendForce集邦咨询表示,除了铠侠(Kioxia)和西部数据(WDC)自今年第一季起提升产能利用率外,其它供应商大致维持低投产策略。尽管第二季NAND Flash采购量较第一...

关键字: SSD NAND Flash 智能手机

3月28日,美光宣布通过西安市善导公益慈善协会向西安市助爱小餐社区残疾人就业项目捐赠110余万元人民币。这笔捐款将资助130辆爱心移动餐车,为西安市创造至少130个残疾人就业岗位,助力残疾人及其家庭提高收入。

关键字: Micron

业内消息,据阿里巴巴内部人士透露,1688 近期启动全面入淘,先期开设三家店铺,后续这些店铺将整合成一个类似天猫超市的频道,并在淘宝推出 1688 严选贴牌的源头厂货。这意味着,1688 将携带百万源头厂商直接入驻淘宝。

关键字: 阿里巴巴 1688 淘宝

本周从内部人士处获知,运动科技公司Keep计划收缩线下健身运动空间Keepland,在运营部门进行了裁员,广州的拓店计划也因为裁员宣告结束,同时,目前北京仍在营业中的Keepland也将在租约到期后不再续签,陆续关闭自营...

关键字: 裁员 Keep

近日,胡润研究院发布《2024家大业大酒·胡润全球富豪榜》。70岁的钟睒睒财富比去年缩水9%,以4500亿元连续第四次成为中国首富,位于全球第21位,同比下降6位。44岁的黄峥财富比去年增长71%,即1600亿元,是今年...

关键字: 钟睒睒 AI

近日,社交媒体巨头Meta(Facebook)创始人马克・扎克伯格将其价值3亿美金的超级游艇开到了美国,这艘游艇名为“Project 1010”,目前位于佛罗里达州劳德代尔的埃弗格莱斯港,此举恰逢其40岁生日之前,引发外...

关键字: 扎克伯格 Meta Facebook

业内消息,上周索尼集团宣布将从2024财年开始提高索尼集团及两家附属运营公司员工的工资水平。对于主管级别的正式员工,每月最多增加超5万日元(约合2387元人民币),工资上涨水平与2023年相同,新员工的起薪也将在目前的基...

关键字: 加薪 索尼

本轮融资资金将用于已规模化供货的7纳米车规级芯片“龍鹰一号”的进一步量产和供货、基于“龍鹰一号”的高端智能座舱及舱行泊一体方案的市场推广,以及全场景高阶智驾新品AD1000的测试验证和市场导入。

关键字: 芯擎科技 芯片

根据戴尔日前发布的一份文件,该公司在过去一年里裁掉了大约6000名员工,以改善财务状况。

关键字: 戴尔 AI
关闭
关闭