4

手把手教你搭建ELK,原来这么简单

 2 years ago
source link: http://dockone.io/article/2434530
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我们都知道,在生产环境中经常会遇到很多异常,报错信息,需要查看日志信息排查错误。现在的系统大多比较复杂,即使是一个服务背后也是一个集群的机器在运行,如果逐台机器去查看日志显然是很费力的,也不现实

如果能把日志全部收集到一个平台,然后像百度,谷歌一样通过关键字搜索出相关的日志,岂不快哉。于是就有了集中式日志系统。ELK就是其中一款使用最多的开源产品。

什么是ELK

ELK其实是Elasticsearch,Logstash 和 Kibana三个产品的首字母缩写,这三款都是开源产品。

ElasticSearch(简称ES),是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。

Logstash,是一个数据收集引擎,主要用于进行数据收集、解析,并将数据发送给ES。支持的数据源包括本地文件、ElasticSearch、MySQL、Kafka等等。

Kibana,为 Elasticsearch 提供了分析和 Web 可视化界面,并生成各种维度表格、图形。

搭建ELK

环境依赖:CentOS 7.5,JDK 1.8,ElasticSearch 7.9.3,Logstash 7.9.3,Kibana 7.9.3。

安装ElasticSearch

首先,到官网下载安装包,然后使用 tar -zxvf 命令解压。

找到 config 目录下的 elasticsearch.yml 文件,修改配置:
cluster.name: es-application  
node.name: node-1  
#对所有 IP 开放  
network.host: 0.0.0.0  
#HTTP 端口号  
http.port: 9200  
#ElasticSearch 数据文件存放目录  
path.data: /usr/elasticsearch-7.9.3/data  
#ElasticSearch 日志文件存放目录  
path.logs: /usr/elasticsearch-7.9.3/logs

配置完之后,因为 ElasticSearch 使用非 root 用户启动,所以创建一个用户。
# 创建用户  
useradd yehongzhi  
# 设置密码  
passwd yehongzhi  
# 赋予用户权限  
chown -R yehongzhi:yehongzhi /usr/elasticsearch-7.9.3/

然后切换用户,启动:
# 切换用户  
su yehongzhi  
# 启动 -d 表示后台启动  
./bin/elasticsearch -d

使用命令 netstat -nltp 查看端口号:

访问 http://192.168.0.109:9200/ 可以看到如下信息,表示安装成功。

安装 Logstash

首先在官网下载安装压缩包,然后解压,找到 /config 目录下的 logstash-sample.conf 文件,修改配置:
input {  
file{  
path => ['/usr/local/user/*.log']  
type => 'user_log'  
start_position => "beginning"  
}  
}  

output {  
elasticsearch {  
hosts => ["http://192.168.0.109:9200"]  
index => "user-%{+YYYY.MM.dd}"  
}  


input 表示输入源,output 表示输出,还可以配置 filter 过滤,架构如下:

配置完之后,要有数据源,也就是日志文件,准备一个 user.jar 应用程序,然后后台启动,并且输出到日志文件 user.log 中,命令如下:
nohup java -jar user.jar >/usr/local/user/user.log &

接着再后台启动 Logstash,命令如下:
nohup ./bin/logstash -f /usr/logstash-7.9.3/config/logstash-sample.conf &

启动完之后,使用 jps 命令,可以看到两个进程在运行:

安装 Kibana

首先还是到官网下载压缩包,然后解压,找到 /config 目录下的 kibana.yml 文件,修改配置:
server.port: 5601  
server.host: "192.168.0.111"  
elasticsearch.hosts: ["http://192.168.0.109:9200"]

和 ElasticSearch 一样,不能使用 root 用户启动,需要创建一个用户:
# 创建用户  
useradd kibana
# 设置密码
passwd kibana
# 赋予用户权限
chown -R kibana:kibana /usr/kibana/

然后使用命令启动:
#切换用户
su kibana
#非后台启动,关闭 shell 窗口即退出
./bin/kibana  
#后台启动
nohup ./bin/kibana &

启动后在浏览器打开 http://192.168.0.111:5601,可以看到 Kibana 的 Web 交互界面:

全部启动成功后,整个过程应该是这样,我们看一下:

浏览器打开 http://192.168.0.111:5601,到管理界面,点击“Index Management”可以看到,有一个 user-2020.10.31 的索引。

点击 Index Patterns 菜单栏,然后创建,命名为 user-* 。

最后,就可以到 Discover 栏进行选择,选择 user-* 的 Index Pattern,然后搜索关键字,就找到相关的日志了!

上面只是用到了核心的三个组件简单搭建的 ELK,实际上是有缺陷的。如果 Logstash 需要添加插件,那就全部服务器的 Logstash 都要添加插件,扩展性差。所以就有了 FileBeat,占用资源少,只负责采集日志,不做其他的事情,这样就轻量级,把 Logstash 抽出来,做一些滤处理之类的工作。

FileBeat 也是官方推荐用的日志采集器,首先下载 Linux 安装压缩包:
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.3-linux-x86_64.tar.gz

下载完成后,解压。然后修改 filebeat.yml 配置文件:
#输入源  
filebeat.inputs:  
- type: log  
enabled: true  
paths:  
- /usr/local/user/*.log  
#输出,Logstash 的服务器地址  
output.logstash:  
hosts: ["192.168.0.110:5044"]  
#输出,如果直接输出到 ElasticSearch 则填写这个  
#output.elasticsearch:  
#hosts: ["localhost:9200"]  
#protocol: "https"

然后 Logstash 的配置文件 logstash-sample.conf,也要改一下:
#输入源改成 beats  
input {  
beats {  
port => 5044  
codec => "json"  
}  


然后启动 FileBeat:
#后台启动命令  
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 & 

再启动 Logstash:
#后台启动命令  
nohup ./bin/logstash -f /usr/logstash-7.9.3/config/logstash-sample.conf &

怎么判断启动成功呢,看 Logstash 应用的 /logs 目录下的 logstash-plain.log 日志文件:

目前,很多互联网公司都是采用ELK来做日志集中式系统,原因很简单:开源、插件多、易扩展、支持数据源多、社区活跃、开箱即用等等。我见过有一个公司在上面的架构中还会加多一个 Kafka 的集群,主要是基于日志数据量比较大的考虑。但是呢,基本的三大组件 ElasticSearch,Logstash,Kibana 是不能少的。

希望这篇文章能帮助大家对ELK有一些初步的认识,感谢大家的阅读。

原文链接:https://mp.weixin.qq.com/s/gwYJeEBVRgD6SkZWoP-skg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK