ELK版本:7.4.0
elastic官网地址:https://www.elastic.co/cn/
elastic产品地址:https://www.elastic.co/cn/elastic-stack
yum源地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum
一、ELK简介
ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。
Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。在elasticsearch中,所有节点的数据是均等的。
Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。
版本说明:
Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。
ELK常见的几种架构:
1 Elasticsearch + Logstash + Kibana
每台机器(客户端)上部署Logstash,logstash收集了数据直接往es里面写,es分析日志,kibana查询es的数据做展示。
这是一种最简单的架构。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。因为这样要在每台机器上都部署logstash,资源消耗比较大。
2 Elasticsearch + Logstash + filebeat + Kibana
每台机器(客户端)上部署filebeat收集数据,filebeat往1台logstash里面写,logstash往es里面写,es分析日志,kibana查询es的数据做展示。
与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。
3 Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如RabbitMQ、kafka) + Kibana
每台机器(客户端)上部署filebeat收集数据,filebeat往消息中间件集群写,1台logstash消费消息中间件集群然后往es里面写,es分析日志,kibana查询es的数据做展示。
这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。
二、部署
本文以es+logstash+filebeat+kafka+kibana为例
机器部署计划
node1: es、filebeat、kafka、zk
node2: es、filebeat、kafka、zk、logstash
node3: es、filebeat、kafka、zk、kibana
1.首先安装JDK
1.8
注意es的版本要和JDK的版本匹配
2.安装kafka+zk集群
zk集群安装:https://blog.csdn.net/jy02268879/article/details/80615189
kafka集群安装:https://blog.csdn.net/jy02268879/article/details/80616889
注意这里在启动kafka前还需要修改一下配置
vi /app/kafka/kafka_2.12-2.0.0/config/server.properties
listeners=PLAINTEXT://172.20.10.8:9092
advertised.listeners=PLAINTEXT://172.20.10.8:9092
这里的IP是本机的IP,默认为localhost,不补齐会导致filebeat启动时连接kafka会有问题:
3.安装es
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
每台机器下载7.4.0并且解压
每台机器创建数据目录 mkdir -p /app/es/data
每台机器修改配置
cd /app/es/elasticsearch-7.4.0/config
vi elasticsearch.yml
cluster.name: my-log-es (集群名称)
node.name: node-1 (节点名称)
path.data: /app/es/data (存储数据的目录,需要根据具体服务器目录配置)
network.host: 172.20.10.8 (ip地址,需要根据具体服务器地址配置)
http.port: 9200 (端口号,默认为9200)
discovery.seed_hosts: ["172.20.10.11", "172.20.10.10"]
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
启动
./bin/elasticsearch -d (输入-d表示后台运行)
Linux下elasticsearch不允许root用户运行,需要切换到其他用户执行该命令
在浏览器上输入http://172.20.10.10:9200 如果显示以下页面则说明安装成功
还要在浏览器输入http://172.20.10.8:9200/_cat/nodes?pretty
启动报错
ERROR: [4] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3795] for user [sid] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[4]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
解决方法
修改配置文件,即可解决[4]的报错
vi /app/es/elasticsearch-7.4.0/config/elasticsearch.yml
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
切换到root用户,编辑limits.conf 添加类似如下内容,即可解决[1][2]的报错
vi /etc/security/limits.conf
添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
切换到root用户,即可解决[3]的报错
执行命令:
sysctl -w vm.max_map_count=262144
查看结果:
sysctl -a|grep vm.max_map_count
显示:
vm.max_map_count = 262144
上述方法修改之后,如果重启虚拟机将失效
在 /etc/sysctl.conf文件最后添加一行,即可解决[3]的报错
vm.max_map_count=262144
4.Logstash安装
下载https://www.elastic.co/cn/downloads/logstash 7.4.0版本
在node2安装
在config文件中定义一个kafka.conf文件,定义input以及output
cd /app/logstash/logstash-7.4.0/config
vi kafka.conf
input {
kafka { #指定kafka服务
type => "app_log"
codec => "json" #通用选项,用于输入数据的编解码器
topics => "topic.log.es" #这里定义的topic
decorate_events => true #此属性会将当前topic、group、partition等信息也带到message中
bootstrap_servers => "172.20.10.8:9092,172.20.10.11:9092,172.20.10.10:9092" #kafka集群IP和端口号9092
}
}
output{ #输出插件,将事件发送到特定目标
elasticsearch { #输出到es
hosts => ["172.20.10.8:9200","172.20.10.11:9200","172.20.10.10:9200"] #指定es服务的ip加端口
index => ["%{type}-%{+YYYY.MM.dd}"] #引用input中的type名称,定义输出的格式
}
}
注意这里的type的值为app_log,在kibana才启动后喊创建索引,能看到:
其实这个type,比如说哈,我有5套环境,每套环境有7个组件。那这里可以分开,写35个input。
每个的type叫环境名-组件名。且每个走不同的topic
启动服务 ./bin/logstash -f config/kafka.conf
后台启动 nohup ./bin/logstash -f config/kafka.conf &
报错
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /app/logstash/logstash-7.4.0/hs_err_pid7568.log
解决方法
我是在虚拟机上运行的,虚拟机的内存只有1G,改成了2G
报错
Got response code '503' contacting Elasticsearch at URL 'http://172.20.10.8:9200/_template/logstash'
5.Kibana安装
在node3安装
下载:https://www.elastic.co/cn/downloads/past-releases#kibana
下载7.4.0版本并且解压到/app/kibana
修改config/kibana.yml文件
config/kibana.yml文件加入配置使之变成中文界面
i18n.locale: "zh-CN"
启动
nohup ./bin/kibana &
同样也是不能以root启动
在浏览器输入http://172.20.10.10:5601
启动报错
{"type":"log","@timestamp":"2021-08-23T12:50:39Z","tags":["reporting","warning"],"pid":23049,"message":"Reporting plugin self-check failed. Please check the Kibana Reporting settings. Error: Could not close browser client handle!"}
Could not create APM Agent configuration: Request Timeout after 30000ms
解决方法
参考:https://blog.csdn.net/qq_40907977/article/details/104499178
https://www.oschina.net/question/2312022_2314950
6.filebeat安装
下载:https://www.elastic.co/cn/downloads/past-releases#filebeat
下载7.4.0.版本并且解压
cd /app/filebeat/filebeat-7.4.0-linux-x86_64
vi filebeat.yml
加入
output.kafka:
# initial brokers for reading cluster metadata
hosts: ["172.20.10.8:9092", "172.20.10.11:9092", "172.20.10.10:9092"]
# message topic selection + partitioning
topic: 'topic.log.es'
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
其中paths表示从采集什么日志文件
type:log表示输入内容Log方式
启动 nohup ./filebeat -e -c filebeat.yml &
三、kibana简单使用、及验证
kibana启动起来后创建索引