(日子分析系统高版本)ELK(Elasticsearch + Logstash + Kibana)服务服务搭建

Update time: 2019-01-31

一、ELK是什么鬼?

ELK实际上是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。

1. ElasticSearch

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

2. Logstash

Logstash是一个用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。

3. Kibana

Kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持。

二、ELK有何优势?

1. 强大的搜索功能,elasticsearch可以以分布式搜索的方式快速检索,而且支持DSL的语法来进行搜索,简单的说,就是通过类似配置的语言,快速筛选数据。

2. 完美的展示功能,可以展示非常详细的图表信息,而且可以定制展示内容,将数据可视化发挥的淋漓尽致。

3. 分布式功能,能够解决大型集群运维工作很多问题,包括监控、预警、日志收集解析等。

三、ELK一般用来做啥?

ELK组件在海量日志系统的运维中,可用于解决:

- 分布式日志数据集中式查询和管理

- 系统监控,包含系统硬件和应用各个组件的监控

- 故障排查

- 安全信息和事件管理

- 报表功能

ELK组件在大数据运维系统中,主要可解决的问题如下:

- 日志查询,问题排查,上线检查

- 服务器监控,应用监控,错误报警,Bug管理

- 性能分析,用户行为分析,安全漏洞分析,时间管理

缘起:

在微服务开发过程中,一般都会利用多台服务器做分布式部署,如何能够把分散在各个服务器中的日志归集起来做分析处理,是一个微服务服务需要考虑的一个因素。

搭建一个日志系统

搭建一个日志系统需要考虑一下一些因素:

利用什么技术,是自己实现还利用现成的组件

日志需要定义统一的格式

日志需要拥有一个锚点来进行全局跟踪

第一个问题,针对小公司来说,基本没有自己的研发能力,绝对是选用第三方开源的组件了。ELK配置比较简单,有现成的UI界面,容易检索日志信息,是首选。 

第二个问题,利用log4j2定义好统一的日志格式,利用logstash过滤日志内容。 

第三个问题,全局跟踪的ID有几种生产方式,一种是利用UUID或者生成随机数,一种是利用数据库来生成sequence number,还可以通过自定义一个id生成服务来获取。考虑到自身服务的需要,这里选用生成随机数来实现。

ELK工作原理:

wKiom1lKVFvyPZrvAAB8KwQilDM847.png

从左边看起,每一台webserver上都会部署一个logstash-agent,它的作用是用类似tailf的方式监听日志文件,然后把新添加的日志发送到redis队列里面,logstash-indexer负责从redis相应的队列里面取出日志,对日志进进行加工后输出到elasticsearch中,elasticsearch会根据要求对日志进行索引归集,最后用户可以通过kibana来查看和分析日志。


软件包下载:

elasticsearch:

wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.2.1/elasticsearch-2.2.1.tar.gz

logstash:

wget https://download.elastic.co/logstash/logstash/logstash-2.2.2.tar.gz

kibana:

wget https://download.elastic.co/kibana/kibana/kibana-4.4.2-linux-x64.tar.gz

环境搭建:

注意:jdk可自行网上搜索安装方法

注:由于Logstash的运行依赖于Java环境, 而Logstash 1.5以上版本不低于java 1.7,因此推荐使用最新版本的Java。因为我们只需要Java的运行环境,所以可以只安装JRE,不过这里我依然使用JDK,请自行搜索安装。


此次搭建需要使用的网络源:

虚拟机能够访问互联网:


安装Java环境

yum -y install java-1.8.0-openjdk*


安装Elasticsearch

tar -xvf elasticsearch-2.2.1.tar.gz -C /usr/local/

ln -s /usr/local/elasticsearch-2.2.1/ /usr/local/elasticsearch

cd /usr/local/elasticsearc


安装插件:

./bin/plugin install  mobz/elasticsearch-head

插件安装方法1:

1.elasticsearch/bin/plugin -install mobz/elasticsearch-head

2.运行es

3.打开http://localhost:9200/_plugin/head/

插件安装方法2:

1.https://github.com/mobz/elasticsearch-head下载zip 解压

2.建立elasticsearch-1.0.0\plugins\head\_site文件

3.将解压后的elasticsearch-head-master文件夹下的文件copy到_site

4.运行es

5.打开http://localhost:9200/_plugin/head/


创建用户和目录(因为elasticsearch 2.0.0 以上版本不能用root用户运行)

1
2
3
4
5
[root@localhost]# groupadd -g 1000 elasticsearch 
[root@localhost]# useradd -g 1000 -u 1000 elasticsearch 
[root@localhost]# sudo -u elasticsearch mkdir /tmp/elasticsearch
[root@localhost]# ls /tmp/elasticsearch
[root@localhost]# sudo -u elasticsearch mkdir /tmp/elasticsearch/{data,logs}

mkdir /usr/local/elasticsearch/config/scripts 


编辑配置文件vim config/elasticsearch.yml  

加如以下四行(注意冒号后面有空格):

path.data: /tmp/elasticsearch/data

path.logs: /tmp/elasticsearch/logs

network.host: 192.168.100.10(服务器IP)

network.port: 9200

wKiom1lKVF3whTrcAAJRVBXSLGk275.png


启动服务:

sudo -u elastsearch /usr/local/elasticsearch/bin/elasticsearch

wKioL1lKVGGhY08tAAQ-2cTTXbI785.png


注意:如果正式应用需要在后台运行 

1sudo -u elastsearch /usr/local/elasticsearch/bin/elasticsearch -d

注意:

可以看到,它跟其他的节点的传输端口为9300,接受HTTP请求的端口为9200。

# curl 192.168.100.10:9200  

{

  "name" : "Wilson Fisk",

  "cluster_name" : "elasticsearch",

  "version" : {

    "number" : "2.2.1",

    "build_hash" : "d045fc29d1932bce18b2e65ab8b297fbf6cd41a1",

    "build_timestamp" : "2016-03-09T09:38:54Z",

    "build_snapshot" : false,

    "lucene_version" : "5.4.1"

  },

  "tagline" : "You Know, for Search"

}

返回展示了配置的cluster_name和name,以及安装的ES的版本等信息。

wKiom1lKVGPi3dReAAG04CnWJPg950.png


刚刚安装的head插件,它是一个用浏览器跟ES集群交互的插件,可以查看集群状态、集群的d

请在下方留下您的评论

icon_question.gificon_razz.gificon_sad.gificon_evil.gificon_exclaim.gificon_smile.gificon_redface.gificon_biggrin.gificon_surprised.gificon_eek.gificon_confused.gificon_cool.gificon_lol.gificon_mad.gificon_twisted.gificon_rolleyes.gificon_wink.gificon_idea.gificon_arrow.gificon_neutral.gificon_cry.gificon_mrgreen.gif