做者:王贝node
为何推荐ELK:linux
当线上服务器出了问题,咱们要作的最重要的事情是什么?当须要实时监控跟踪服务器的健康状况,咱们又要拿什么去分析?你们必定会说,去看日志,去分析日志。是的,日志对于服务器开发人员来说是最亲密的伙伴了,基本上天天都会去看各类类型的海量的日志去定位问题,去作统计分析等等。最多见的查看日志的状况,好比线上出了bug,咱们ssh到线上服务器,cd到服务器的日志目录,而后less一下当天的日志文件,执行shift+G,?error,n,一系列操做以后找到对应的异常状况,查出异常缘由。但是,这样好low啊,效率好低啊,为何呢?首先,咱们要登陆到服务器,线上基本上都是服务器集群,少则十几台,多则上百台,光这一台一台的服务器去登陆就是一个巨大而又繁琐的工做,其次,咱们有时还要各类聚合(好比对比多台机器同一时间点的日志),或者基于异常多个关键词的搜索,并有且,或,交,并,差,补,排序等一些操做,并且相应速度必须给力,那这个时候不管怎么grep awk估计都无济于事了。面对服务集群,面对海量日志,没有一个集中化可视化的日志管理,程序猿GG估计真的要跪了。为了解放众多webserver程序猿,为了解放生产力提升效率,为了更精准实时的查看分析线上日志,业界放了一个大招:用强强联手的ELK日志分析平台实现集中化可视化日志管理。若是线上环境出了故障,可以马上准肯定位,ELK就是高手,在百万大军中取上将首级,犹如探囊取物,因此这时候ELK就很是适合了,固然除此以外,ELK也常常在运维工做中大放光彩,在应用级别的实时监控,很是适合一些重要核心服务的预警。
web
先简单上两个例子显示一下ELK的强大:apache
(1)根据过滤规则,生成24小时内全部服务器的ERROR比例饼状图,监控服务器的健康程度。(目前GACHA项目7台server接入了ELK平台正在试用,这张图是这七台server过去24小时的异常比例)vim
(2)生成24小时内每一个时间范围内的异常数量柱状图,点击柱状图下面能够看到具体异常堆栈状况(柱状图统计的是GACHA项目服务器集群过去24小时每一个时间段的异常数量,柱状图下面是异常列表,第一张图左侧能够选择添加异常列表展现项,第二张图就是选择了展现host,priority,stack trace,message这些项的结果,第三张图是点击能够看到的具体异常堆栈详情)。浏览器
好了,看到这些,是否是心略有所动呢,其实ELK的强大还远不止于此呢,打个鸡血继续往下看吧。服务器
ELK简介:restful
ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站: https://www.elastic.co/products 网络
(1)Elasticsearch是个开源分布式搜索引擎,它的特色有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。app
(2)Logstash是一个彻底开源的工具,他能够对你的日志进行收集、过滤,并将其存储供之后使用(如,搜索)。
(3)Kibana 也是一个开源和免费的工具,它Kibana能够为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,能够帮助您汇总、分析和搜索重要数据日志。
由此能够看到,ELK组合其实能够当作一个MVC模型,logstash接收应用服务器的日志传输请求收集日志,至关于控制层controller,ElasticSearch用于数据源存储,搜索等,至关于Model,而Kibana提供友好的 Web 界面,至关于View。
ELK 搭建:
接下来,我走一下ELK整个搭建流程:
第一步:搭建ElasticSearch
(1)首先下载ElasticSearch(先安装jdk1.7,整个就不细说了),这里我用的是Elasticsearch 2.4.1版本:
(2)解压:
tar -zxvf elasticsearch-2.4.1.tar.gz
(3)配置:
cd elasticsearch-2.4.1
vim config/elasticsearch.yml
#ES的集群名称
cluster.name : es_cluster
#当前该节点名
node.name : node0
#当前节点是否容许被选举为master节点
#node.master: true
#当前节点是否容许存储数据
node.data: true
#索引分片个数
index.number_of_shards: 5
#索引副本个数
index.number_of_replicas: 1
#索引数据存储路径,
path.data : /home/hzwangbei/elasticsearch/data
path.logs : /tmp/elasticsearch/logs
#读取配置文件路径,默认ES根目录config路径
#path.conf: /path/to/conf
#ES插件存储路径,默认ES根目录plugins路径
#path.plugins: /path/to/plugins
#当前hostname或IP,这是ES用来监听的,网易云主机最好配置0.0.0.0,这样私有ip和机房ip均可以监听到。
network.bind_host: 0.0.0.0
#设置其它节点和该节点交互的ip地址。网易云主机这里配置机房ip
#network.publish_host:0.0.0.0
network.port : 9200
#indexcache过时时间
#index.cache.field.expire:100m
#默认类型为resident, 字面意思是常驻(居民), 一直增长,直到内存 耗尽。 改成soft就是当内存不足的时候,先clear掉 占用的,而后再往内存中放。设置为soft后,至关于设置成了相对的内存大小。resident的话,除非内存够大。
index.cache.field.type: soft
#默认是3s,这是设置集群中自动发现其它节点时ping链接超时时间。
discovery.zen.ping.timeout: 40s #设置是否打开多播发现节点,默认是true。 #discovery.zen.ping.multicast.enabled: false
#指明集群中其它可能为master的节点ip,以防es启动后发现不了集群中的其余节点。
#discovery.zen.ping.unicast.hosts:["节点1的 ip","节点2 的ip","节点3的ip"]
(4)插件安装
安装head插件:
./bin/plugin install mobz/elasticsearch-head
(5)启动ES
./bin/elasticsearch
不幸的是报错了,后来在一个国外的论坛上看到ES启动时的用户和组不能和当前目录所属用户和组一致,我比较了一下,果真,我以root用户启动ES,而当前目录所属用户正好是root,找到缘由了,那就换个用户启动吧。
能够看到,ES成功启动,好,到此,咱们成功迈的向ELK迈出了一步。
打开连接: http://localhost:9200/_plugin/head/
能够看到node0这个节点中有两个索引(前提条件已经新建索引且有数据了):applog .kibana,而后点击数据浏览,选中applog索引,能够看到applog索引下存储的日志。
好了,到此为止,你必定在想,这些数据从哪里来的吧,文章前面讲过,ES是一个model层,那么数据固然就是从controller层即logstash收集过来的。lets开始咱们的第二步,搭建logstash。
第二步:安装logstash
logstash功能模块图
其实它就是一个收集器而已,咱们须要为它指定Input和Output(固然Input和Output能够为多个)。因为咱们须要把Java代码中Log4j的日志输出到ElasticSearch中,所以这里的Input就是Log4j,而Output就是ElasticSearch。
(1)下载logstash
wget https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz
(2)解压
tar -zxvf logstash-2.4.0.tar.gz
(3)根目录下建立config文件夹,而后建立log4j_to_es.conf文件
cd logstash-2.4.0
mkdir config
vim log4j_to_es.conf
input {
log4j {
mode => "server"
host => "localhost" //网易云主机机房ip
port => 4567
}
}
filter {
#Only matched data are send to output.
}
output {
elasticsearch {
action => "index" #The operation on ES
hosts => "localhost:9200" #ElasticSearch host, can be array.
index => "applog" #The index to write data to.
}
}
(4)启动logstash
./bin/logstash agent -f config/log4j_to_es.conf
到此,logstash安装成功,logstash是一个收集器,刚刚咱们在配置文件里配置了log4j的收集配置,因此,在咱们的项目里,把log4j的配置加一个socket appender就能够了
# appender socket
log4j.rootLogger=${log4j.level}, stdout,socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4567
#log4j.appender.socket.Threshold=ERROR
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d %-5p %c%x - %m%n
log4j.appender.socket.ReconnectionDelay=10000
好了,到此,ES和logstash搭建完毕,基本上能够实现日志的收集和存储了。但是这还不够,文章开头,咱们举了饼状图和柱状图的两个例子,那么这两种图是怎么生成的呢?那就看一下咱们的view层kibana,开始咱们的第三步:安装kibana。
第三步:kibana安装
(1)下载kibana
wget https://download.elastic.co/kibana/kibana/kibana-4.6.1-linux-x86_64.tar.gz
这里要注意下,kibana的版本不少,下载的时候要参考ES的版本,因为咱们的ES安装的是2.4.1,因此咱们这里使用Kibana4.6.1,选择kibana版本时必定要保证和ES版本的兼容。
(2)解压kibana
tar -zxvf kibana-4.6.1-linux-x86_64.tar.gz
(3)配置kibana
root@wangbei-ThinkPad-E560:/usr/local/elk# cd kibana-4.6.1-linux-x86_64
root@wangbei-ThinkPad-E560:/usr/local/elk/kibana-4.6.1-linux-x86_64# vim config/kibana.yml
server.port: 5601
server.host: "localhost"
elasticsearch.url: http://localhost:9200
kibana.index: ".kibana"
(4)启动kibana
root@wangbei-ThinkPad-E560:/usr/local/elk/kibana-4.6.1-linux-x86_64# ./bin/kibana
好了,到此,大功告成,浏览器打开: http://localhost:5601
为了后续使用Kibana,须要配置至少一个Index名字或者Pattern,它用于在分析时肯定ES中的Index。这里我输入以前配置的Index名字applog,Kibana会自动加载该Index下doc的field,并自动选择合适的field用于图标中的时间字段:
建立完索引以后,你就能够领略ELK的强大啦!
快捷的搜索方式,强大好用的搜索语法,牛叉的图形绘制,简直碉堡!
最主要的仍是将日志集中化管理,可视化呈现,实时化监控!
还有之后不再用苦逼的ssh less grep了,那些复杂的日志分析也迎刃而解啦!
不得不感叹,大好福利真的来啦!
注意:
ELK线上的使用还要注意ES的内存配置,网络设置等等因素。
网易云免费体验馆,0成本体验20+款云产品!
更多网易研发、产品、运营经验分享请访问网易云社区。
相关文章:
【推荐】 扫脸动画