一、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工作原理:
从左边看起,每一台webserver上都会部署一个logstash-agent,它的作用是用类似tailf的方式监听日志文件,然后把新添加的日志发送到redis队列里面,logstash-indexer负责从redis相应的队列里面取出日志,对日志进进行加工后输出到elasticsearch中,elasticsearch会根据要求对日志进行索引归集,最后用户可以通过kibana来查看和分析日志。
软件包下载:
elasticsearch:
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
启动服务:
sudo -u elastsearch /usr/local/elasticsearch/bin/elasticsearch
注意:如果正式应用需要在后台运行
1 | sudo -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的版本等信息。
刚刚安装的head插件,它是一个用浏览器跟ES集群交互的插件,可以查看集群状态、集群的d