ELK 是 Elasticsearch、Logstash、Kibana 的简称。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。 Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。 Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。各个组件版本及安装包(基于Linux搭建):
elasticsearch-7.3.0-linux-x86_64.tar.gz
elasticsearch-head.zip
kibana-7.3.0-linux-x86_64.tar.gz
logstash-7.3.0.tar.gz
node-v12.18.4-linux-x64.tar
我把所有的依赖包都下载打成了一个包,需要的直接下载即可,下载地址:
链接:https://pan.baidu.com/s/1jTvZFVC_6XP7ErE_epP5Cg 密码: q7b2
下载完成后解压:
unzip package
tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz
vim elasticsearch-7.3.0/config/elasticsearch.yml
# 如果需要部署集群,集群需要同样的集群名
cluster.name: my-application
# 每个 node 的名字需要唯一
node.name: node-1
# 数据存放目录,集群必须配置,否则无法加入集群,单机不需要配置。
# path.data: /var/lib/elasticsearch/nodes
# path.logs: /var/log/elasticsearch
# 配置服务器的内网地址,可以配置为服务器IP地址或者0.0.0.0
network.host: 192.168.0.30
# 配置端口号,默认 9200
http.port: 9200
# 配置集群节点,多个服务器["node-1", "node-2"]
cluster.initial_master_nodes: ["node-1"]
# discovery.seed_hosts: ["192.168.0.146", "192.168.0.147", "192.168.0.148"]
# 解决跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
注意:由于默认配置文件中的代码全部都是注释状态,所以直接在末尾添加即可。如何你用的不是这个版本,那么配置文件可能会有差异。
3.3.1 解决max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
错误。
# 1.编辑 /etc/security/limits.conf
vim /etc/security/limits.conf
# 2.在最后添加
* soft nofile 65536
* hard nofile 65536
3.3.2 解决max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
错误。
# 1.编辑/etc/sysctl.conf
vim /etc/sysctl.conf
# 2.在最后一行插入
vm.max_map_count=262144
# 3.立即生效
/sbin/sysctl -p
1、可以在elasticsearch-7.3.0/config/jvm.options中可以修改堆栈内存,Elasticsearch的默认内存大小是1G,可根据实际需求修改,由于JVM的限制,最大不能>=32G。
2、出现OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
可以通过修改jvm.options
中-XX:+UseConcMarkSweepGC 改为 -XX:+UseG1GC来解决。
-Xms4g
-Xmx4g
注意:Elasticsearch不能使用root用户启动,使用root用户会报错,需要我们手动创建用户。
创建用户:
#创建elk组
groupadd elk
#创建用户 useradd [用户名] -g [组名] -p [密码]
useradd elk -g elk -p elk
#elasticsearch目录授权
chown -R elk:elk elasticsearch-7.3.0
启动:
#切换用户
su elk
#进入bin目录启动es
nohup ./elasticsearch &
测试是否安装成功:
浏览器访问:http://192.168.0.30:9200
看到如下页面,则表示安装成功。
注意:ElasticSearch-head插件需要node.js环境。
4.1 node.js安装
解压node-v12.18.4-linux-x64.tar
tar -xvf node-v12.18.4-linux-x64.tar
配置环境变量
编辑/etc/profile配置文件
vim /etc/profile
在底部插入此语句
export NODE_HOME=/home/u01/Development/node-v12.18.4-linux-x64
export PATH=$NODE_HOME/bin:$PATH
是配置文件立即生效
source /etc/profile
测试node.js环境是否安装成功
npm version
4.2. ElasticSearch-head安装
解压elasticsearch-head.zip,如果使用git clone命令下来的则无需解压
unzip elasticsearch-head.zip
进入elasticsearch-head目录
cd elasticsearch-head
安装
npm install
运行
npm run start &
测试
浏览器访问: http://192.168.0.30:9100,看到如下页面则表示安装成功。(新安装里面是没有数据的)
tar -zxvf logstash-7.3.0.tar.gz
vim logstash-7.3.0/config/logstash-sample.conf
最终修改结果:
input {
beats { port => 5044 }
tcp {
port => 4569
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://192.168.0.30:9200"]
index => "logstash--%{+YYYY.MM.dd}"
}
}
# 需要使用root用户启动
cd bin/
nohup ./logstash -f ../config/logstash-sample.conf &
tar -zxvf kibana-7.3.0-linux-x86_64.tar.gz
vim kibana-7.3.0-linux-x86_64/config/kibana.yml
修改配置文件属性如下:
#端口
server.port: 5601
#指定本机IP
server.host: 0.0.0.0
#请求elasticsearch服务器
elasticsearch.hosts: ["http://192.168.0.30:9200"]
#将语言设置为中文
i18n.locale: "zh-CN"
#切换用户
su elk
# 在bin目录下执行,不能使用root用户启动
nohup ./kibana &
net.logstash.logback
logstash-logback-encoder
5.2
192.168.0.30
4569
UTC
{
"serviceName": "${name}",
"level": "%level",
"message": "%message",
"stack_trace": "%exception{5}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}"
}
INFO
npm install [email protected] --ignore-scripts
至此,ELK安装及集成Spring Cloud结束,当前教程中只罗列了ELK集成Spring Cloud的基本用法,本博客旨在让各位小伙伴在工作中能快速搭建并运行着一套分布式日志中心,如果需要完成更加复杂的需求,还是得系统的学习Elasticsearch、Logstash、Kibana的使用。