ELK是个啥?看完就懂了!

思惟导图

文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummaryjava

概述

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

若是能把日志所有收集到一个平台,而后像百度,谷歌同样经过关键字搜索出相关的日志,岂不快哉。因而就有了集中式日志系统。ELK就是其中一款使用最多的开源产品。linux

1、什么是ELK

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

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

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

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

2、搭建ELK

环境依赖:CentOS7.5,JDK1.8,ElasticSearch7.9.3,Logstash 7.9.3,Kibana7.9.3。shell

2.1 安装ElasticSearch

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

找到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/能够看到以下信息,表示安装成功。

2.2 安装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命令,能够看到两个进程在运行:

2.3 安装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交互界面:

2.4 效果展现

所有启动成功后,整个过程应该是这样,咱们看一下:

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

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

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

3、改进优化

上面只是用到了核心的三个组件简单搭建的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有一些初步的认识,感谢你们的阅读。

以为有用就点个赞吧,你的点赞是我创做的最大动力~

我是一个努力让你们记住的程序员。咱们下期再见!!!

能力有限,若是有什么错误或者不当之处,请你们批评指正,一块儿学习交流!

本文分享自微信公众号 - java技术爱好者(yehongzhi_java)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索