ELK详细安装教程
ELK的作用
现在的应用为了提高性能和吞吐量,大部分都是分布式的系统,再加上集群化的部署,整个系统的生态是非常庞大的,这样系统一旦出现了故障或者报错,我们看日志就会是一个很庞大的工作,慢而且可能会造成更严重的生产事故,所以ELK就诞生了,它是专门来管理应用日志的的集中式的日志系统。当然,随着软件行业的发展,也出现了其他的日志管理系统,比如Grafana的Loki。
大家如果需要出Loki的博客欢迎在评论区留言,博主会尽快完成学习Loki并出一篇详细的博客进行讲解!
什么是ELK
ELK其实就是Elasticsearch,Logstash,Kibana三个开源软件的首字母的简写。
ElasticSearch(ES): 可以对数据进行存储和快速搜索,它和Redis一样,存储的数据是存放在内存中的,常用于大量热点数据的存储,搜索和分析,比如电商的商品信息等。
Logstash: 它是一个数据收集引擎,(ELK中主要就是用来收集日志)主要是对数据的收集,解析,然后把数据发送给ElasticSearch。支持的数据源包括本地文件、ElasticSearch、MySQL、Kafka等等。
Kibana: 可以为Elasticsearch 的提供一个可视化的页面,对数据进行分析,查看,还有各式各样的报表,仪表盘,对数据进行筛选过滤等等。
如下图:
准备安装
我的环境是腾讯云的服务器CentOS8,Elasticsearch,Logstash,Kibana都是目前最新的版本8.3.3。
==温馨提示:不同的版本安装可能有差异,请各位注意,还有就是Elasticsearch,Logstash,Kibana三者的版本要保持一致 ,否则可能会导致报错哦。==
首先我们需要到官网下载:
Elasticsearch:Elasticsearch官网下载地址
Kibana:Kibana官网下载
Logstash:Logstash官网下载
重要: 1.Elasticsearch,Logstash,Kibana都是使用JAVA开发的,所以在你的系统中应该是安装JDK的并且版本在8以上,但是在现在下载的安装包中都有JDK,所以本机没有安装JDK也是可以的。 2. 请关闭防火墙或者允许三者的端口访问。
包下载好了之后使用文件传输工具(xftp, filezilla等)连上你的linux服务器,找一个合适的目录上传上去就好了。(我的包都放在了/opt/software下。)
Elasticsearch安装
解压Elasticsearch安装包
tar -zxvf elasticsearch-8.3.3-linux-x86_64.tar.gz
es因为安全问题拒绝使用root用户启动
报错信息:
所以我们要自己新建一个用户:
# 添加用户
useradd elk
# 为用户设置密码
passwd elk
# 为用户设置文件夹权限(我都是整个software目录,大家根据自己的实际情况进行设置)
chown -R elk /opt/software/
# 切换用户
su elk
现在我们尝试启动ES:
# 前台启动
./bin/elasticsearch
# 后台启动
./bin/elasticsearch -d
可能出现报错: java.net.UnknownHostException: geoip.elastic.co at sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:567) ~[?:?]
此版本将GeoIp功能默认开启了采集。在默认的启动下是会去官网的默认地址下获取最新的Ip的GEO信息
在elasticsearch.yml中添加配置 ingest.geoip.downloader.enabled: false
启动成功,访问IP:9200 ,控制台提示: received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/10.0.24.4:9200, remoteAddress=/223.104.39.255:14327}
原因是Elasticsearch默认开启了安全认证,虽然started成功,但访问http://localhost:9200/
失败。
找到config目录下面的elasticsearch.yml配置文件,把安全认证开关从原先的true都改成false,实现免密登录访问即可。
由于我本机的内存太小,还需要修改一下jvm的参数,找到config下的jvm.options
修改配置:内存占用太多,可以调小一点
-Xms512m -Xmx512m
启动再访问出现以下内容就算安装好了:
Kibana安装
1.解压:
tar -zxvf kibana-8.3.3-linux-x86_64.tar.gz
找到/config目录下的kibana.yml文件,修改配置(如果ES和Kibana在同一台机器上是不需要修改的,因为是默认配置,看自己情况):
# Kibana端口号
server.port: 5601
server.host: "0.0.0.0"
# elasticsearch的地址
elasticsearch.hosts: ["http://82.157.156.64:9200"]
和elasticSearch一样,不能使用root用户启动,需要创建一个用户,我还用刚刚的用户就好了,大家如果想要使用其他用户启动,那像刚刚在创建一个用户就好了。
启动Kibana
./bin/kibana
访问 http://IP:5601/ ,出现以下界面就算完成了:
Logstash安装
解压安装包:
tar -zxvf logstash-8.3.3-linux-x86_64.tar.gz
找到logstash的config目录下的logstash-sample.conf文件进行修改,不过个人建议复制一份进行修改,保留logstash-sample.conf。我这边进行复制修改。
先介绍一下logstash-sample.conf: input:输入源,表示从哪里的数据让logstash进行读取日志。 file: 指定一个路径下的日志文件进行读取 jdbc: 表示连接数据库执行sql语句来进行读取 beats:使用filebeats进行读取(一会会进行集成) filter: 过滤 output :制定要把数据发送到ES的路径和索引
因为我们刚刚在搭建ES的时候就有Log文件,在ES软件的logs目录下,我们就读取这个路径下的log. 接下来我们进行修改logstash-sample.conf,来看一下完整的文件:
input {
file{
path => ['/opt/software/elasticsearch-8.3.3/logs/*.log']
type => 'es_log'
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "elasticsearch_log-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
再对整个路径授权:
```powershell
chown -R elk /opt/software/
接下来启动Logstash:
```powershell
./bin/logstash -f /opt/software/logstash-8.3.3/config/logstash.conf
ELK测试
输入IP:5061,在搜索框输入index,选择index management
就可以看到我们刚刚配置的索引:
kibana集成ES之后,页面上有一个dev tool,可以执行ES的所有语句:
打开dev tool,将刚刚的索引名字复制,进行搜索:
接下来找到Data Views 点击Create data view,如下图:
输入elasticsearch_log*(和你创建的索引保持一致),点击创建:
搜索discover,如下图操作,选择刚刚创建的elasticsearch_log*,可以选择时间进行筛选:
根据不同维度进行选择:
现在基本就完成。
但是这样会有一个问题,logstash如果添加插件,全部的都要进行添加,会给运维人员造成很大的问题,所以就有了上边提到的FileBeat,占用资源少,只负责采集日志,不做其他的事情,这样就轻量级,把Logstash抽出来,做一些滤处理之类的工作。
FileBeat安装
解压:
tar -zxvf filebeat-8.3.3-linux-x86_64.tar.gz
修改filebeat.yml配置文件:
#输入源
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/software/elasticsearch-8.3.3/logs/*.log
#输出,Logstash的服务器地址
output.logstash:
hosts: ["localhost:5044"]
#输出,如果直接输出到ElasticSearch则填写这个
#output.elasticsearch:
#hosts: ["localhost:9200"]
# Protocol - either `http` (default) or `https`.
#protocol: "https"
然后Logstash的配置文件logstash-sample.conf:
#输入源改成beats
input {
beats {
port => 5044
codec => "json"
}
}
启动FileBeat::
# 前台启动
./filebeat -e -c filebeat.yml
# 后台启动
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &
再启动Logstash:
# 前台启动
./bin/logstash -f ./config/logstash.conf
#后台启动
nohup ./bin/logstash -f ./config/logstash.conf &
查看logstash目录下的/logs/logstash-plain.log日志文件,出现下边的语句就说明集成好了。
好了,今天的内容就是这么多了。欢迎大家发表留言!