ESK快速安装
Last updated
Last updated
ESK的简单架构如下:
Logstash
: 服务端用于接收处理日志
Elasticsearch
: 存储所有日志
Kibana
: 用于搜索和可视化日志,访问是通过Nginx反向代理
Filebeat
: 在采集日志的服务器上安装客户端程序,将日志发送给Logstash,Filebeat服务是一个日志消费代理,使用lumberjack
网络协议和Logstash通讯
Elasticsearch运行要求Java 8,建议使用Oracle JDK version 1.8.0_131。可以从Oralce官方网站下载。
安装Java运行环境
本文实践在CentOS 7平台完成
在Linux平台安装Elasticsearch使用tar包安装,下载页面如下:
https://www.elastic.co/downloads/elasticsearch
在CentOS/RHEL环境也可以使用官方仓库进行安装(参考Repositories RPM),各软件包安装使用的是相同的软件仓库(官方安装文档中对每个安装包使用了不同的repo文件命名,实际内容相同),以下为软件仓库配置生成方法:
安装Elasticsearch
设置Elasticsearch在系统启动时启动
启动服务
检查服务状态
检查服务日志
也可以检查给定时间之后的日志
检查Elasticsearch运行
输出显示类似:
在/etc/elasticsearch
目录下保存了Elasticsearch相关配置,默认加载/etc/elasticsearch/elasticsearch.yml
配置。
在系统启动时启动Kibana
运行Kibana
Kibana的配置文件是/etc/kibana/kibana.yml
Kibana是一个Web程序(node程序),端口5601。为了能够直接访问,我们安装Nginx作为Web的反向代理服务器。
添加EPEL软件仓库:
安装Nginx和httpd-tools:
使用htpasswd
创建一个管理用户,这里命名为kianaadmin
编辑/etc/nginx/nginx.conf
,确保包含了如下内容:
创建/etc/nginx/conf.d/kibana.conf
配置如下
启动Nginx
现在就能够通过域名example.com
访问我们构建的模拟网站
Sense是Kibana应用的插件,可以方便通过浏览器和Elasticsearch交互。
从Kibana 5.0开始Sense已经包含在Console中,参考sense/README.md,不需要单独安装了。
可以直接通过
http://localhost:5601/app/kibana#/dev_tools/console
访问,提供了交互方式查询数据的界面
此时logstash已经安装完成但尚未配置。
启动
激活操作系统启动时启动logstash
Elastic提供了Beat组合用来分析复杂的数据,例如
Packetbeat
可以分析网络数据,Matricbeat
可以通过网状分析链路
在使用Filebeat上传日志之前,需要创建SSL证书和密钥对。证书是Filebeat用来验证ELK服务器的标识。
有两种方式提供设置证书,一种是采用DNS设置,允许客户端解析ELK服务器的IP,另一种是直接使用IP地址。
在小规模的测试环境中,可以采用
/etc/hosts
绑定IP解析的方法,以便使用域名。后期扩容就可以方便地改造成DNS解析方法。
选项1:使用IP地址
将ELK服务器的私有地址设置为SSL证书对subjectAltName
(SAN)字段:方法是编辑/etc/pki/tls/openssl.conf
文件,找到文件中[ v3_ca ]
段落,并添加如下行()
这里
192.168.0.21
是测试环境中logstash
服务器的IP地址
然后执行以下命令在相应位置(/etc/pki/tls
目录下)生成SSL证书和私钥:
这里
logstash-forwarder.crt
文件是分发给所有需要向logstash
发送日志的服务器。
选项2:使用DNS(FQDN)
如果在私有网络中使用了DNS设置,在采用域名解析方式:
这里
elk-logstash.example.com
是测试环境的logstash
服务器的FQDN域名解析,请替换成实际服务器的域名。生成的logstash-forwarder.crt
文件是分发给所有需要向logstash
发送日志的服务器。
Logstash配置文件是JSON
格式,位于/etc/logstash/conf.d
。
创建一个名为02-beats-input.conf
并设置filebeat
输入:
这里设置beats
输入监听在端口5044
,并且使用SSL证书和私钥。
创建一个名为10-syslog-filter.conf
用于添加syslog
消息的过滤器:
这个过滤器检查(通过Filebeat)标记为syslog
的日志,并使用grok
来解析传入的syslog日志,并将其结构化和可查询化。
最后创建30-elasticsearch-output.conf
上述基本配置使得logstash存储beats数据到Elasticsearch(运行在localhost:9200
)。
如果要使用Filebeat输入来添加其他应用程序的过滤器,需要确保文件名命名的顺序位于input
和output
配置文件之间(例如,在02-
和30-
文件名之间)
测试配置文件是否正确:
这条命令不知道如何验证,在CentOS7 systemd环境下应该有所不同
日志数据一般都是非结构化数据,而且包含很多不必要的信息,所以需要在 Logstash 中添加过滤插件对 Filebeat 发送的数据进行结构化处理。
使用 grok 正则匹配把那些看似毫无意义、非结构化的日志数据解析成可查询的结构化数据,是目前 Logstash 解析过滤的最好方式。
Grok 的用户不需要从头开始写正则。ELK github 上已经写好了很多有用的模式,比如日期、邮箱地址、IP4/6、URL 等。具体可参考logstash-patterns-core/patterns/grok-patterns。除此之外,还有 grok 正则表达式的debug 在线工具,能方便快速检验所写表达式是否正确。
Beats是轻量级的数据投递器(lightweight data shippers),采用Go语言编写,安装在需要捕获各种操作数据的服务器上(如 日志,metrics或网络包数据)。Beats将操作数据发送给Elasticsearch,直接或间接通过Logstash采集,这样就能够通过Kibana实现可视化。
官方提供的Beats:
Beat
说明
tail和发送日志文件
ping远程服务可用性
从操作系统和服务获取metric集
通过包嗅探监控网络和应用程序
Windows事件日志获取
需要采集日志的服务器上安装Filebeat
Filebeat作为代理在服务器上运行,监视日志目录或指定日志文件,tail这些日志文件,并将内容转发给Elasticsearch或Logstash进行索引。
当启动Filebeat之后,Filebeat就会启动一个或多个探测器(prospector)来检查指定日志文件的本地路径。对于每个被探测器锁定的日志文件,Filebeat都会启动一个收割机(harvester)。每个harvester读取日志文件的新内容,并将新的日志数据发送给libbeat
,然后油libbeat
聚合事件再把聚合数据输出给你所配置的Filebeat。
Filebeat也是一个Beat,并且基于
libbeat
框架开发。
安装Filebeat
注意:在采集服务器上也如同
或者手工安装(例如在CentOS 5上安装)
在CentOS 5上安装rpm包时,需要使用
rpm --nosignature -ivh filebeat-6.2.3-x86_64.rpm
在每个需要传输日志的服务器上都要复制SSL证书(前面已经在ELK服务器上生成的SSL证书)
先将证书分发到采集日志的服务器的/tmp目录下
然后在采集日志服务器上执行如下命令将证书存放到/etc/pki/tls/certs/
目录下
对于使用rpm或deb安装的Filebeat,配置文件位于/etc/filebeat/filebeat.yml
。如果是Docker运行,则位于/usr/share/filebeat/filebeat.yml
。完整的配置文件案例是filebeat.reference.yml
。
在
/etc/filebeat/modules.d
目录中,有系统已经准备好的常用服务的日志采集案例配置文件(默认禁用)
配置采集系统日志(对应前述的logstrash中配置的10-syslog-filter.conf
)
这里
type:
有两种,一种是log
,一种是stdin
另外,参考How To Install Elasticsearch, Logstash, and Kibana (ELK Stack) on CentOS 7,似乎应该还要修改一个document_type
类似如下,但是在最新的版本中找不到这个选项(待查):
自定义日志:假设需要监控/home/admin/virtman/log
目录下日志
上述设置Filebeat监视/home/admin/virtman/log
目录下所有.log
后缀的日志文件(单层目录)。如果要递归监视所有子目录,则配置/home/admin/virtman/log/*/*.log
。
配置输出
直接发送给Elasticsearch(不使用Logstash),则没有任何过滤和数据再加工
(我采用这个方法)更好的方式是采用Logstash来处理日志,此时要禁止掉上述直接输出给Elasticsearch的配置,改成如下配置:
配置输出给Logstash就可以实现复杂的数据过滤处理(见前述
配置Logstash
),详细参考 Configure Filebeat to use Logstash
(可选,我暂时没有配置)在hosts
段落,配置缓存队列,设置如下:
配置访问证书
启动Filebeat
Filebeat 默认支持 log rotation,但需要注意的是,Filebeat 不支持使用 NAS 或挂载磁盘保存日志的情况。因为在 Linux 系列的操作系统中,Filebeat 使用文件的 inode 信息判断当前文件是新文件还是旧文件。如果是 NAS 或挂载盘,同一个文件的 inode 信息会变化,导致 Filebeat 无法完整读取 log。
在Elasticsearch中加载索引模版
在Elasticsearch中,索引模版是用来定义设置和映射哪些字段需要分析。
通过Filebeat软件包已经为Filebeat安装了建议的索引模版。如果你接受filebeat.yml
配置文件的默认配置,Filebeat会在成功连接到Elasticsearch时候自动加载模版。如果模版已经存在,Filebeat不会覆盖它,除非你配置Filebeat这样做。
你可以在Filebeat配置中通过配置模版加载选项,禁止自动加载模版,或者加载你自己定义的模版。
配置模版加载
默认情况下,如果激活了Elasticsearch output,则Filebeat会自动加载模版文件fields.yml
可以修改默认的filebeat.yml
配置文件加载不同的模版:
在 Logstash 中, codec( 源自 coder
/decoder
两个单词的首字母缩写)插件可用于格式化日志数据处理。 codec
可使得Logstash更方便地与其他自定义数据格式的产品共存,如graphite
( 开源的存储图形化展示的组件)、fluent
、 netflow
、 collectd
( 守护进程, 是一种收集系统性能和提供各种存储方式来 存储不同值的机制), 以及使用msgpack
、json
等通用数据格式的其他产品。