什么是 ELK?
通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 、filebeat 三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又称为 ELK stack,官方域名为 elastic.co,ELK stack 的主要优点有如下几个:
处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能
配置相对简单:elasticsearch 全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。
检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展
前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单
elasticsearch 部署
elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供 API 接口,可以处理大规模日志数据,比如 Nginx、Tomcat、系统日志等功能。
准备 java 环境:
yum install java-1.8.0*
下载elasticsearch :https://www.elastic.co/downloads/elasticsearch
安装
yum –y localinstall elasticsearch-5.3.0.rpm
配置文件
/etc/elasticsearch/elasticsearch.yml
cluster.name: ELK-Cluster #ELK 的集群名称,名称相同即属于是同一个集群
node.name: elk-node1 #本机在集群内的节点名称
path.data: /elk/data #数据保存目录
path.logs: /elk/logs #日志保存目
bootstrap.memory_lock: true #服务启动的时候锁定足够的内存,防止数据写入
swap
network.host: 0.0.0.0 #监听 IP
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.37.101", "192.168.37.102"]
修改内存限制,并同步配置文件
内存锁定的配置参数:
https://discuss.elastic.co/t/memory-lock-not-working/70576
vim /usr/lib/systemd/system/elasticsearch.service #修改内存限制
LimitMEMLOCK=infinity #无限制使用内存
[root@linux-host1 ~]# vim /etc/elasticsearch/jvm.options
22 -Xms2g
23 -Xmx2g #最小和最大内存限制
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html #官方配置文档最大建议 30G 以内。
目录权限更改
mkdir /elk/{data,logs}
chown elasticsearch.elasticsearch /elk/ -R
启动 elasticsearch
systemctl restart elasticsearch
部署 logstash
Logstash 是一个开源的数据收集引擎,可以水平伸缩,而且 logstash 整个 ELK当中拥有最多插件的一个组件,其可以接收来自不同来源的数据并统一输出到指定的且可以是多个不同目的地。
安装 logstash
yum install logstash-5.3.0.rpm
权限更改为 logstash 用户和组,否则启动的时候日志报错
chown logstash.logstash /usr/share/logstash/data/queue –R
测试标准输入和输出
测试输出到 elasticsearch:
[root@linux-host3 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch {hosts => ["192.168.37.101:9200"] index => "mytest-%{+YYYY.MM.dd}" }}'
elasticsearch 服务器验证收到数据:
[root@linux-host1 ~]# ll /elk/data/nodes/0/indices/
total 0
drwxr-xr-x 8 elasticsearch elasticsearch 59 Apr 19 19:08 JbnPSBGxQ_WbxT8jF5-TLw
drwxr-xr-x 8 elasticsearch elasticsearch 59 Apr 19 20:18 kZk1UbsjTliYfooevuQVdQ
drwxr-xr-x 4 elasticsearch elasticsearch 27 Apr 19 19:24 m6EiWqngS0C1bspg8JtmBg
drwxr-xr-x 8 elasticsearch elasticsearch 59 Apr 20 08:49 YhtJ1dEXSOa0YEKhe6HW8w
kibana 部署及日志收集
Kibana 是一个通过调用 elasticsearch 服务器进行图形化展示搜索结果的开源项目。
安装
可以通过 rpm 包或者二进制的方式进行安装
yum localinstall kibana-5.3.0-x86_64.rpm
配置
/etc/kibana/kibana.yml
2:server.port: 5601 #监听端口
7:server.host: "0.0.0.0" #监听地址
28:elasticsearch.hosts: ["http://192.168.7.101:9200"]
114:i18n.locale: "zh-CN" #支持中文
21:elasticsearch.url: http://192.168.15.11:9200 #elasticsearch 服务器地址
启动 kibana 服务
systemctl start kibana
通过 logstash 收集日志
前提需要 logstash 用户对被收集的日志文件有读的权限并对写入的文件有写权限。
配置 logstash 收集 nginx和haproxy 访问日志
vim nginx.conf
input {
file {
path => "/var/log/nginx/access.log"
start_position => "end"
type => "nginx-accesslog"
codec => json
}
file {
path => "/var/log/haproxy.log"
type => "haproxy-log"
start_position => "beginning"
stat_interval => "3"
}
}
output {
if [type] == "nginx-accesslog" {
elasticsearch {
hosts => ["192.168.37.101:9200"]
index => "logstash-nginx-accesslog-1516-%{+YYYY.MM.dd}"
}}
}
kibana 界面添加索引并验证