irpas技术客

ELK(ElasticSearch, Logstash, Kibana)从入门到精通_kuokay_elk开源协议

未知 4436

简介

“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。

原理图

如图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。

ELK组件介绍 Elasticsearch

Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎,使用Java语言编写

主要特点 实时分析 分布式实时文件存储,并将每一个字段都编入索引 文档导向,所有的对象全部是文档 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)。支持 JSON。

Logstash

Logstash 是一个具有实时渠道能力的数据收集引擎。使用 JRuby 语言编写。其作者是世界著名的运维工程师乔丹西塞 (JordanSissel)

主要特点

几乎可以访问任何数据可以和多种外部应用结合支持弹性扩展

它由三个主要部分组成:

Shipper-发送日志数据Broker-收集数据,缺省内置 RedisIndexer-数据写入

Kibana

Kibana是一款基于 Apache开源协议,使用 JavaScript语言编写,为 Elasticsearch提供分析和可视化的 Web 平台。它可以在Elasticsearch的索引中查找,交互数据,并生成各种维度的表图.

Filebeat

ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder源代码开发,是对它的替代。在需要采集日志数据的 server 上安装Filebeat,并指定日志目录或日志文件后,Filebeat就能读取数据,迅速发送到Logstash进行解析,亦或直接发送到 Elasticsearch进行集中式存储和分析。

常用架构 beats+elasticsearch+kibana模式

如上图所示,该ELK框架由beats(日志分析我们通常使用filebeat)+elasticsearch+kibana构成,这个框架比较简单,入门级的框架。其中filebeat也能通过module对日志进行简单的解析和索引。并查看预建的Kibana仪表板。

该框架适合简单的日志数据,一般可以用来玩玩,生产环境建议接入logstash

beats+logstash+elasticsearch+kibana模式

该框架是在上面的框架的基础上引入了logstash,引入logstash带来的好处如下:

通Logstash具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻背压从其他数据源(例如数据库,S3或消息传递队列)中提取将数据发送到多个目的地,例如S3,HDFS或写入文件使用条件数据流逻辑组成更复杂的处理管道

filebeat结合logstash带来的优势:

1、水平可扩展性,高可用性和可变负载处理:filebeat和logstash可以实现节点之间的负载均衡,多个logstash可以实现logstash的高可用

2、消息持久性与至少一次交付保证:使用Filebeat或Winlogbeat进行日志收集时,可以保证至少一次交付。从Filebeat或Winlogbeat到Logstash以及从Logstash到Elasticsearch的两种通信协议都是同步的,并且支持确认。Logstash持久队列提供跨节点故障的保护。对于Logstash中的磁盘级弹性,确保磁盘冗余非常重要。

3、具有身份验证和有线加密的端到端安全传输:从Beats到Logstash以及从 Logstash到Elasticsearch的传输都可以使用加密方式传递 。与Elasticsearch进行通讯时,有很多安全选项,包括基本身份验证,TLS,PKI,LDAP,AD和其他自定义领域

当然在该框架的基础上还可以引入其他的输入数据的方式:比如:TCP,UDP和HTTP协议是将数据输入Logstash的常用方法(如下图所示):

beats+缓存/消息队列+logstash+elasticsearch+kibana模式

在如上的基础上我们可以在beats和logstash中间添加一些组件redis、kafka、RabbitMQ等,添加中间件将会有如下好处:

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

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

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

ELK环境搭建完整说明 环境说明: 系统:centos7.5 ElasticSerach:6.4.2 Logstash:6.4.2 Kibana:6.4.2 Filebeat:6.4.2

elk各个组件的网址可以在官网下载:https://·/download/

部署架构图 流程说明:

业务请求到达nginx-server机器上的Nginx;Nginx响应请求,并在access.log文件中增加访问记录;FileBeat搜集新增的日志,通过LogStash的5044端口上传日志;LogStash将日志信息通过本机的9200端口传入到ElasticSerach;搜索日志的用户通过浏览器访问Kibana,服务器端口是5601;Kibana通过9200端口访问ElasticSerach; 1.安装java环境

因为ElasticSerach运行需要java环境支持,所以首先要配置java环境,具体操作方法自行百度吧,网上比较多。

2.下载ELK安装包

ELK官网:https://·/http-save/yehe-1141560/si85o0ggj6.png?imageView2/2/w/1620

注意: 这里访问5601的时候可能访问不通,centos有自己的防火墙及端口限制,参考以下做法

关闭swap分区 内存 2G iptables -nL iptables -F iptables -X iptables -Z iptables -nL #关闭selinux 临时?效: setenforce 0 getenforce 永久?效: setenforce 0 vim /etc/selinux/config SELINUX=disabled

8.配置Filebeat,传送nginx日志至LogStash

打开文件/usr/local/work/filebeat-6.4.2-linux-x86_64/filebeat.yml,找到如下图的位置并设置:

继续修改filebeat.yml文件,找到下图中的内容并设置:

3. 启动FileBeat:

nohup ./filebeat -e -c filebeat.yml -d “publish” &

验证kibana是否能显示nginx的日志

备注 配置加密通信证书

方法一:

./bin/elasticsearch-certutil ca -out config/elastic-certificates.p12 -pass “password”

查看config目录,有elastic-certificates.p12文件生成

方法二:

./bin/elasticsearch-certutil ca #创建集群认证机构,需要交互输入密码 ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 #为节点颁发证书,与上面密码一样 执行./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password 并输入第一步输入的密码 执行./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password 并输入第一步输入的密码 将生成的elastic-certificates.p12、elastic-stack-ca.p12文件移动到config目录下

head插件安装

https://github.com/mobz/elasticsearch-head #head官网 https://nodejs.org/zh-cn/download/ #nodejs下载

官方说明,elasticsearch7有三种方式使用head插件,这里我只试过两种:

第一种:使用谷歌浏览器head插件,这个直接在谷歌浏览器上面安装插件就可以使用了

第二种:使用head服务(把head当做一个服务来使用),安装如下

#Running with built in server git clone git://github.com/mobz/elasticsearch-head.git cd elasticsearch-head npm install npm run start open http://localhost:9100/

如果在如上的安装过程中报错,可以尝试下这个命令再继续安装npm install phantomjs-prebuilt@2.1.16 --ignore-scripts

实战案例分析

我们弄一个beats+缓存/消息队列+logstash+elasticsearch+kibana的实例:

中间组件我们使用kafka,我们看下filebeat把kafka作为output的官网:https://·/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0" 86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://·/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0" 1. 首先我们配置filebeat的配置文件filebeat.yml #=========================== Filebeat inputs ============================= filebeat.inputs: # Each - is an input. Most options can be set at the input level, so # you can use different inputs for various configurations. # Below are the input specific configurations. - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /data/elk/logstash-tutorial.log #这里使用的是apache的日志格式 #- c:\programdata\elasticsearch\logs\* # Exclude lines. A list of regular expressions to match. It drops the lines that are # matching any regular expression from the list. #exclude_lines: ['^DBG'] # Include lines. A list of regular expressions to match. It exports the lines that are # matching any regular expression from the list. #include_lines: ['^ERR', '^WARN'] # Exclude files. A list of regular expressions to match. Filebeat drops the files that # are matching any regular expression from the list. By default, no files are dropped. #exclude_files: ['.gz$'] # Optional additional fields. These fields can be freely picked # to add additional information to the crawled log files for filtering #fields: # level: debug # review: 1 ### Multiline options # Multiline can be used for log messages spanning multiple lines. This is common # for Java Stack Traces or C-Line Continuation # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [ #multiline.pattern: ^\[ # Defines if the pattern set under pattern should be negated or not. Default is false. #multiline.negate: false # Match can be set to "after" or "before". It is used to define if lines should be append to a pattern # that was (not) matched before or after or as long as a pattern is not matched based on negate. # Note: After is the equivalent to previous and before is the equivalent to to next in Logstash #multiline.match: after #================================ Outputs ===================================== output.kafka: hosts: ["192.168.110.130:9092"] #配置kafka的broker topic: 'filebeat_test' #配置topic 名字 partition.round_robin: reachable_only: false required_acks: 1 compression: gzip max_message_bytes: 1000000 2.然后使用命令后台启动: cd filebeat-7.7.0-linux-x86_64 && nohup ./filebeat -e & 3.接下来我们配置logstash的配置文件 cd logstash-7.7.0/ && mkidr conf.d cd conf.d vim apache.conf ################apache.conf文件中填入如下内容############################## input { kafka{ bootstrap_servers => "192.168.110.130:9092" topics => ["filebeat_test"] group_id => "test123" auto_offset_reset => "earliest" } } filter { json { source => "message" } grok { match => { "message" => "%{COMBINEDAPACHELOG}"} remove_field => "message" } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["192.168.110.130:9200","192.168.110.131:9200","10.18.126.224:9200","192.168.110.132:9200"] index => "test_kakfa" user => "elastic" password => "${ES_PWD}" } } 4.然后后台启动logstash命令 cd logstash-7.7.0/ && nohup ./bin/logstash -f conf.d/apache.conf & 5.然后我们查看elasticsearch集群查看该索引

6. 接下来我们登录到kibana查看该索引的分析


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #elk开源协议 # #kibana #ElasticSearch #是一个搜索和分析引擎 #Logstash