ELK技术实战-安装Elk 5.x平台

ELK技术实战–了解Elk各组件   转载  http://www.ywnds.com/?p=9776php

ELK技术实战-部署Elk 2.x平台html

ELK Stack是软件集合Elasticsearch、Logstash、Kibana的简称,由这三个软件及其相关的组件能够打造大规模日志实时处理系统。java

其中,Elasticsearch 是一个基于 Lucene 的、支持全文索引的分布式存储和索引引擎,主要负责将日志索引并存储起来,方便业务方检索查询。node

Logstash是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各种日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。linux

Kibana是一个可视化工具,主要负责查询 Elasticsearch 的数据并以可视化的方式展示给业务方,好比各种饼图、直方图、区域图等。nginx

所谓“大规模”,指的是 ELK Stack 组成的系统以一种水平扩展的方式支持天天收集、过滤、索引和存储 TB 规模以上的各种日志。git

一般,各种文本形式的日志都在处理范围,包括但不限于 Web 访问日志,如 Nginx/Apache Access Log 。github

基于对日志的实时分析,能够随时掌握服务的运行情况、统计 PV/UV、发现异常流量、分析用户行为、查看热门站内搜索关键词等。web

版本跳跃redis

ELK在5.0版本之后(从2.x版本直接所有升级为5.x版本),Elastic公司将原来的ELK Stack称之为Elastic Stack,缘由是引入了Beats套件。

Elastic Products全家福:

ELK技术实战-安装Elk 5.x平台

Elastic Stack平台搭建

对于ELK部署使用而言,下面是一个再常见不过的架构了,以下图:

ELK技术实战-安装Elk 5.x平台

上图是ELK Stack实际应用中典型的一种架构,其中:

1)filebeat:部署在具体的业务机器上,经过定时监控的方式获取增量的日志,并转发到Kafka消息系统暂存。

2)Kafka:以高吞吐量的特征,做为一个消息系统的角色,接收从filebeat收集转发过来的日志,一般以集群的形式提供服务。

3)logstash:而后,Logstash从Kafka中获取日志,并经过Input-Filter-Output三个阶段的处理,更改或过滤日志,最终输出咱们感兴趣的数据。一般,根据Kafka集群上分区(Partition)的数量,1:1肯定Logstash实例的数量,组成Consumer Group进行日志消费。

4)elasticsearch:最后,Elasticsearch存储并索引Logstash转发过来的数据,并经过Kibana查询和可视化展现,达到实时分析日志的目的。

Elasticsearch/Kibana还能够经过安装x-pack插件实现扩展功能,好比监控Elasticsearch集群状态、数据访问受权等。

咱们一步步安装部署Elastic Stack系统的各个组件,而后以网站访问日志为例进行数据实时分析。

首先,到ELK 官网下载须要用到的Filebeat/Logstash/Elasticsearch/Kibana软件安装包。(推荐下载编译好的二进制可执行文件,直接解压执行就能够部署)

1. 系统环境

2. 软件下载

 

这里我下载是我所使用的软件版本(都是当前最新版),若是你想使用旧一点或者更新一点的版本能够自行下载。

 

3. 安装Nginx

这里咱们部署ELK以前,须要一个产生日志的源,这里呢就选项Nginx服务器。

默认状况下,CentOS的官方资源是没有php-fpm和Nginx的,须要安装第三方资源库便可。(此步骤可省略)

 

安装启动nginx(关于nginx能够看本博客也有详细介绍)

 

 

nginx的访问日志格式定义,默认以下:

在/etc/nginx/conf.d/default.conf中添加以下一行,定义nginx日志使用的格式,以及日志文件的位置。

 

而后从新启动nginx

 

4. 安装JAVA

因为kafka/logstash/elastisearch的运行依赖于Java环境, 而Logstash 1.5以上版本依赖java版本不能低于java 1.7,所以推荐使用最新版本的Java。由于咱们只须要Java的运行环境,因此能够只安装JRE,不过这里我依然使用JDK。因为我使用的是CentOS7系统,java版本是1.8,符合需求,我就使用yum直接安装了。

 

查看JAVA版本

若是java -version没有问题,就不须要设置环境变量。通常使用yum安装的jdk不须要设置JAVA_HOME环境变量。若是你是使用二进制版本安装的jdk,那么可能须要设置一下JAVA_HOME环境变量,具体的JAVA_HOME环境变量设置根据安装路径不一样而不一样。

5. 安装部署Kafka

确认已安装java运行环境,直接解压Kafka便可使用。

解压后,编辑配置文件:

kafka须要依赖zookeeper,因此须要先启动zookeeper。

启动Kafka Server:(指定 JMX_PORT 端口,能够经过 Kafka-manager 获取统计信息)

6. 安装部署Filebeat

把filebeat解压后就可使用了,是否是很简单。

开启日志增量监控 ,添加filebeat输出源为kafka(修改filebeat.yml文件):

上述配置表示,Filebeat按期监控:/var/log/nginx/目录下全部以.log结尾的文件,而且将增量日志转发到Kafka集群。filebeat支持file、tcp、udp等输入方式,输出方式支持kafka,file,redis,elasticsearch、logstash等。

而后,后台启动Filebeat进程:

这时候,在浏览器上访问Nginx服务器并生成访问日志后,Filebeat 会及时的将日志转发到 Kafka 集群。

咱们这个时候能够查一下kafka的队列信息,能够看到有elk-log的。

具体深刻kafka须要单独学习了,若是嫌麻烦可使用Redis比较简单。

7. 安装配置Logstash


把logstash解压后就可使用了,是否是很简单。和全部的编程语言同样,咱们以一个输出 “hello world” 的形式开始咱们的logstash学习。

 

7.1 开始使用logstash

在终端中,像下面这样运行命令来启动 Logstash进程:

执行完命令,而后你会发现终端在等待你的输入。没问题,敲入hello world,而后回车,logstash会返回如下结果!

输出没有问题,就证实能够正式来使用logstash了。

解释一下命令含义

每位系统管理员都确定写过不少相似这样的命令:cat randdata | awk ‘{print $2}’ | sort | uniq -c | tee sortdata。这个管道符|能够算是Linux世界最伟大的发明之一(另外一个是“一切皆文件”)。Logstash就像管道符同样!你输入(就像命令行的 cat )数据,而后处理过滤(就像 awk 或者 uniq 之类)数据,最后输出(就像 tee )到其余地方。

Logstash会给事件添加一些额外信息。最重要的就是@timestamp,用来标记事件的发生时间。由于这个字段涉及到Logstash的内部流转,因此必须是一个job对象,若是你尝试本身给一个字符串字段重命名为@timestamp的话,Logstash会直接报错。因此,请使用filters/date插件来管理这个特殊字段。

此外,大多数时候,还能够见到另外几个:

host – 标记事件发生在哪里。

type – 标记事件的惟一类型。

tags – 标记事件的某方面属性,这是一个数组,一个事件能够有多个标签。

你能够随意给事件添加字段或者从事件里删除字段。事实上事件就是一个 Ruby对象,或者更简单的理解为就是一个哈希也行。

小贴士:每一个logstash过滤插件,都会有四个方法叫add_tag, remove_tag, add_field和remove_field。它们在插件过滤匹配成功时生效。

Logstash的运行方式为主程序+配置文件。Collect,Enrich和Transport的行为在配置文件中定义。配置文件的格式有点像json。

下面来建立一个logstash_index.conf文件:

如上配置文件,input定义了从Redis中读取数据;而output我是输出到了本地的elasticsearch中存储。

Logstash传递的每条数据都带有元数据,如@version,@timestamp,host等等,有些能够修改,有些不容许修改。host记录的是当前的主机信息。Logstash可能不会去获取主机的信息或者获取的不许,这里建议替换成本身定义的主机标识,以保证最终的日志输出能够有完美的格式。

另外我这里添加了elasticsearch的用户名和密码,由于后面我使用了x-pack插件,默认用户名是elastic,密码是changeme。

启动Logstash:

8. 安装使用Elastcearch

同Logstash同样,解压完就可使用了。可是注意使用elasticsearch不能使用root用户,因此这里我建立了一个elk用户,把elasticsearch.2.3.2目录及子目录的属主和属组改成elk用户了。

修改elasticsearch配置文件,添加以下几行(注意开启network.host):

指定文档和日志的存储路径以及监听的地址和端口。注意,应当保证有足够的磁盘空间来存储文档,不然ES将拒绝写入新数据。

建立elasticsearch须要的数据目录和日志目录。

启动elasticsearch

 

若是启动Elasticsearch出现如下错误提示:

错误1:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

解决:打开/etc/security/limits.conf文件,添加如下两行代码并保存:

错误2:memory locking requested for elasticsearch process but memory is not locked

解决:修改elasticsearch.yml文件

错误3:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决:修改内核配置

错误4:os::commit_memory(0x00000001006cd000, 77824, 0) failed; error=’Cannot allocate memory’ (errno=12)

解决:提供内存不足,增大主机内存或减少elasticsearch的内存大小

JVM默认配置参数:

而后使用curl访问http://localhost:9200/?pretty

若是能够看到相似上面的返回,则说明ES单机运行没有问题了。

安装x-pack插件

x-pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,虽然x-pack被设计为一个无缝的工做,可是你能够轻松的启用或者关闭一些功能。

ES若是是一个集群,须要在每个节点上安装(包括kibana)。

用户和权限管理

x-pack安装以后有一个超级用户elastic ,其默认的密码是changeme,拥有对全部索引和数据的控制权,可使用该用户建立和修改其余用户,固然这里能够经过kibana的web界面进行用户和用户组的管理。

ELK技术实战-安装Elk 5.x平台

X-pack的elk之间的数据传递保护

安装完x-pack以后,咱们就能够用咱们所建立的用户来保护elk之间的数据传递

1:kibana<——>elasticsearch

在kibana.yml文件中配置:

2:logstash<——>elasticsearch

这里若是不进行相关配置的话,elk之间的数据传递就会出现问题。

安装Cerebro

Cerebro时一个第三方的Elasticsearch集群管理软件,能够方便地查看集群状态:

下载地址(下载二进制版):https://github.com/lmenezes/cerebro

启动进程:

能够在浏览器查看,须要输入elasticsearch的用户和密码(若是安装了x-pack)。

ELK技术实战-安装Elk 5.x平台

能够在管理后台修改模板,优化索引配置,例如:

ELK技术实战-安装Elk 5.x平台

安装head插件

因为elasticsearch 5.0版本变化较大,目前elasticsearch 5.0暂时不支持直接安装head插件,可是head做者提供了另外一种安装方法。推荐使用docker直接安装elasticsearch-head。

Docker须要自行安装便可,另外因为elasticsearch安装了x-pack,因此elasticsearch有密码。head链接elasticsearch须要帐号密码。

8. 安装kibana

Kibana安装跟logstash、elasticsearch同样不须要安装,解压就能用。

安装x-pack

调整配置文件,主要配置一下下面三个参数:

启动Kibana

 

而后打开浏览器输入IP加端口5601便可访问,界面以下(须要输入用户密码了):

ELK技术实战-安装Elk 5.x平台

默认帐号:elastic

默认密码:changeme

x-pack安装以后有一个超级用户elastic ,其默认的密码是changeme,拥有对全部索引和数据的控制权,可使用该用户建立和修改其余用户。

初次访问Kibana的时候,须要配置一个默认的ES索引,通常填写.monitoring*便可,这是由于在上述安装x-pack后,会自动开始监控Elasticsearch集群的状态,并将监控结果以.monitoring*命名索引文件。

ELK技术实战-安装Elk 5.x平台

ELK技术实战-安装Elk 5.x平台

添加logstash索引(Management->index Patterns->+)

ELK技术实战-安装Elk 5.x平台

看日志已经出来了。

ELK技术实战-安装Elk 5.x平台

ELK的搭建已经基本完成,接下来就是搭建elasticsearch集群,以及使用kibana了。

X-PACK使用

x-pack的监控功能

X-Pack监控组件使您可以经过Kibana轻松监控Elasticsearch,您能够实时查看集群运行情况和性能,以及分析过去的集群,索引和节点指标。 此外,您能够监控Kibana自己的性能。在群集上安装X-Pack时,监视代理会在每一个节点上运行,以从Elasticsearch收集索引指标。 经过在Kibana中安装X-Pack,您能够经过一组专用仪表板查看监视数据。

ELK技术实战-安装Elk 5.x平台

ELK技术实战-安装Elk 5.x平台

x-pack的Graph

https://www.elastic.co/guide/en/x-pack/current/graph-getting-started.html

Redis当队列配置

ELK技术实战-安装Elk 5.x平台

若是嫌使用kafka当队列太麻烦,能够把Kafka换成Redis便可,配置以下:

filebeat配置

logstash配置

查看Redis队列信息

Redis要自行安装了。

Nginx日志输出为JSON格式

把Nginx日志的格式输出成JSON格式展现在Kibana面板,生产环境中基本都是这么使用。

配置Nginx

主要修改nginx的访问日志格式,这里定义成json格式,以便后面logstash更好的处理,建议生产环境也这样使用。在主配置/etc/nginx/nginx.conf文件中添加以下内容(注释其余日志格式):

在/etc/nginx/conf.d/default.conf中添加以下一行,定义nginx日志使用的格式,以及日志文件的位置。

 

而后从新启动nginx

 

配置Logstash

修改Indexer角色的配置文件:logstash_indexer.conf

删除elasticsearch老的数据

而后重启logstash_indexer.conf和elastisearch便可,继续刷新Nginx日志。

打开Kibana,应该会让你从新建立索引,若是没有问题会出现JSON格式的日志。

参考:http://www.jianshu.com/p/f3658d267b5d

相关文章
相关标签/搜索