当前位置:首页 > 芯闻号 > 充电吧
[导读]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:

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭