用ELK打造可视化集中式日志
原文链接:https://yq.aliyun.com/articles/57420
摘要: Elk是Elastic search, Logstash和Kibana三者的简称。 Elastic search顾名思义是致力于搜索,它是一个弹性搜索的技术平台,与其相似的有Solr,二者的对比可参考下面这篇文章: Elastic search与Solr选型 总结一下就是,如果你不喜欢夜店咖还是喜欢忠实可靠的老婆,那选Elastic search准没错,何况他还有那么一点
Elk是Elastic search, Logstash和Kibana三者的简称。
Elastic search顾名思义是致力于搜索,它是一个弹性搜索的技术平台,与其相似的有Solr,二者的对比可参考下面这篇文章:
Elastic search与Solr选型
总结一下就是,如果你不喜欢夜店咖还是喜欢忠实可靠的老婆,那选Elastic search准没错,何况他还有那么一点美。目前运用ES的案例也不少了,比如it屌丝们都爱的Git hub以及我D痛恨的Wiki。
Logstash,也可以顾名思义一下,stash的意思是藏匿处,所以……其实并不完全准确,Logstash是用来做日志采集,藏匿几乎就不由他管了,藏匿由谁管呢,聪明的看官肯定能猜到是ES了。但是这也不完全准确,在ELK的运维环境中肯定是ES没跑了,不过Logstash支持各种输出源,包括redis,s3,mongodb以及kafka,甚至对于情怀粉(不嘛,人家就喜欢刺刀,不要枪炮,拼刀才爷们)吧,还贴心的支持http的远程写文件方案。总之我们能想到的,作者也想到了,我们没能想到的,作者也想到了,如果有作者没能写到的,那也没关系,你可以自己写插件。什么?你写不出来?写不出来就不要瞎bb,找个现成能用的。相对应的,ES也支持各种输入源,从基本的stdin到file到redis到……
Kibana,呃,羔羊肉饼。估计作者是个洋鬼子北京情怀蜜吧,代码写多了,看着掉了一地的头发,想着要是能吃份东来顺的铜锅涮羊肉多好,然后取了这鬼名字吧。Kibana主要是用于ES分析和查询。Elk里本来完全可以不用带他的,用用ES的head和bigdesk插件也蛮好,不过Kibana的管理和查询用起来确实方便很多,人嘛,有枪炮用何必非要用刺刀,默默想到楼主的前东家。
那个奶妈形态的德鲁伊就是Logstash,agent只是Logstash承担的一个角色,与此对应的是indexer。agent会分别将各自获取的日志作为输入输出到一个消息代理(例如redis或者kafka),indexer会将消息代理作为输入再输出到ES上,由ES做indexing。其实Logstash在整个过程中只负责输入输出,对Logstash而言并没有agent和index之分。如果日志量小的话完全不需要设置indexer,直接将ES作为agent的输出源。
Elastic search
环境准备:
Jdk7及以上,Logstash2.1明确只支持Jdk7。
Elastic search, Kibana, Logstash下载地址
ES不能以root权限启动。
楼主的环境;
10.0.250.90 9200 9300
10.0.250.90 9201 9301
10.0.250.90 9200 9300
第一个端口是对外提供http服务的接口,第二个端口是集群交换协议的端口。
cd /opt/elasticsearch-2.1.0/config
vim elasticsearch.yml
以10.0.250.90 9200 9300为例。
修改集群名称,ES默认通过广播发现节点,所有在广播里声明为同一个集群名称的节点都会被自动加入集群中。
cluster.name: es
设置节点名称
node.name: es-node-2
````
此外可以通过node.master设置节点是否可以被推举为leader以及node.data设置节点是否保存索引数据。
节点的定制化属性信息,我把三个节点设成r1-r3
<div class="se-preview-section-delimiter"></div>
node.rack: r2
数据存储目录
<div class="se-preview-section-delimiter"></div>
path.data: /usr/local/data/
日志目录,默认生成的日志文件是${cluster.name}_xxx,可以通过logging.yml修改
<div class="se-preview-section-delimiter"></div>
path.logs: /var/log/es/
启动时是否就锁住内存,es是基于java,遵循java的内存回收,java内存分配一般会设定一个最小值(-Xms)和一个最大值(-Xmx),这样虽然能在空闲时节约内存,但是却会带来频繁的gc。所以es建议在启动时就锁定内存,并且es建议将主机一半可用内存分配给它。
<div class="se-preview-section-delimiter"></div>
bootstrap.mlockall: true
绑定网络地址,默认是127.0.0.1。可以通过transport.tcp.port设置项设置几圈交换协议的端口。
<div class="se-preview-section-delimiter"></div>
network.host: 10.0.250.91
http.port: 9200
1. 设置初始化时的发现列表,新节点会通过单播的方式发现列表里的节点。
2. 设置有master资格的节点最小个数,低于这个个数可能会发生脑裂。es建议的个数是所有节点数/2+1。
所谓脑裂是指集群中有多个active的master节点,这样就导致多个节点接管集群服务。举个例子:
假设A,B,C三个节点都有master资格,A节点为active,其他未standby,但是A节点出了故障,这时B,C就要进行投票选出新的leader,此时的结果就可能会是B和C都互有两票,量个节点都分别active。
这里只是描述脑裂成因,和ES的脑裂成因并不完全一样,ES的投票机制应该是类似于redis先到先得的那种。不过配置上最好遵从es的建议。
<div class="se-preview-section-delimiter"></div>
discovery.zen.ping.unicast.hosts: [“10.0.250.90:9300”, “10.0.250.91:9300”]
discovery.zen.minimum_master_nodes: 2
配置完以后,启动elastic
<div class="se-preview-section-delimiter"></div>
bin/elasticsearch
curl http://10.0.250.91:9200
curl http://10.0.250.91:9200/_nodes
通过curl命令查看下节点状态以及整个集群的节点状态。
推荐安装head插件,可以查看集群状态
<div class="se-preview-section-delimiter"></div>
bin/plugin install mobz/elasticsearch-head
bigdesk插件在当前版本上无法使用,因为ES通过Rest接口返回的json数据不标准,jquery会出parse错误。
通过浏览器访问http://10.0.250.91:9200/_plugin/head

<div class="se-preview-section-delimiter"></div>
## Kibana ##
Kibana的安装也很简单,下载最新版本并安装。
我安装在251主机上。
<div class="se-preview-section-delimiter"></div>
vim config/kibana.yml
设置Kibana端口
<div class="se-preview-section-delimiter"></div>
server.port: 5601
设置提供rest查询服务的ES节点,设置了后Kibana就会通过这个节点查询信息了。
<div class="se-preview-section-delimiter"></div>
elasticsearch.url: “http://10.0.250.90:9200”
设置Kibana自用索引,主要用来存储Kibana保存的一些内容,例如查询信息,报表等
<div class="se-preview-section-delimiter"></div>
kibana.index: “.eslogs”
启动Kibana
<div class="se-preview-section-delimiter"></div>
bin/kibana
访问Kibana,第一次使用时会让你建logstash的索引规则,默认为logstash-*,*代表日期,每天会生成一个新的索引。
<div class="se-preview-section-delimiter"></div>
## Logstash ##
Logstash的安装非常简单,下载最新版本并安装,我用的是2.1.1.
<div class="se-preview-section-delimiter"></div>
bin/logstash -e ”
-e ''会默认以stdin作为输入,以stdout作为输出。
我在控制台输入11111,控制台就输出了格式化的输出。
<div class="se-preview-section-delimiter"></div>
11111
{
“message” => “11111”,
“@version” => “1”,
“@timestamp” => “2015-12-26T10:00:23.422Z”,
“type” => “stdin”,
“host” => “0.0.0.0”
}
接着,我们再测试一下以ES作为输出源,在ES根目录下:
<div class="se-preview-section-delimiter"></div>
mkdir config
touch logstash-indexer.conf
vim logstash-indexer.conf
修改logstash-indexer.conf定义输入源为stdin,输出为stdout以及ES.
<div class="se-preview-section-delimiter"></div>
input {
stdin{
type=> “stdin-input”
}
}
output {
stdout { codec=> rubydebug }
elasticsearch {
hosts=> [“10.0.250.90:9200”]
codec=> “json”
}
}
启动Logstash
<div class="se-preview-section-delimiter"></div>
bin/logstash -f config/logstash-indexer.conf -l /var/log/logstash/logstash.log
“`
输入“hello this a test message”然后回车
在Kibana那就能看到对应的日志信息
用ELK打造可视化集中式日志的更多相关文章
- 集中式日志系统 ELK 协议栈详解
简介 在我们日常生活中,我们经常需要回顾以前发生的一些事情:或者,当出现了一些问题的时候,可以从某些地方去查找原因,寻找发生问题的痕迹.无可避免需要用到文字的.图像的等等不同形式的记录.用计算机的术语 ...
- ELK+Filebeat 集中式日志解决方案详解
链接:https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html?ca=drs- ELK Stack ...
- elk + filebeat,6.3.2版本简单搭建,实现我们自己的集中式日志系统
前言 刚从事开发那段时间不习惯输出日志,认为那是无用功,徒增代码量,总认为自己的代码无懈可击:老大的叮嘱.强调也都视为耳旁风,最终导致的结果是我加班排查问题,花的时间还挺长的,要复现问题.排查问题等, ...
- 中小型研发团队架构实践七:集中式日志ELK
一.集中式日志 日志可分为系统日志.应用日志以及业务日志,系统日志给运维人员使用,应用日志给研发人员使用,业务日志给业务操作人员使用.我们这里主要讲解应用日志,通过应用日志来了解应用的信息和状态,以及 ...
- 集中式日志分析平台 - ELK Stack - 安全解决方案 X-Pack
大数据之心 关注 0.6 2017.02.22 15:36* 字数 2158 阅读 16457评论 7喜欢 9 简介 X-Pack 已经作为 Elastic 公司单独的产品线,前身是 Shield, ...
- 理解OpenShift(6):集中式日志处理
理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...
- 安装logstash+kibana+elasticsearch+redis搭建集中式日志分析平台
安装logstash+kibana+elasticsearch+redis搭建集中式日志分析平台 2014-01-16 19:40:57| 分类: logstash | 标签:logstash ...
- Centos7搭建集中式日志系统
在CentOS7中,Rsyslong是一个集中式的日志收集系统,可以运行在TCP或者UDP的514端口上. 目录 开始之前 配置接收日志的主机 配置发送日志的主机 日志回滚 附件:创建日志接收模板 ...
- 原 ELK+Filebeat集中式日志解决方案(centos7)
https://blog.csdn.net/bittersweet0324/article/details/78503961
随机推荐
- 加密算法(扩展知识:Base64编码)
在某些考虑数据安全的场景下,我们常常会用到加密解密.编码解码知识.比如把用户密码保存到数据库上,常用的方式是通过MD5或SHA1不可逆算法进行加密后密文保存. 这里主要介绍三种常用的加密算法: (1) ...
- Android 布局学习之——LinearLayout的layout_weight属性
一直对layout_weight属性感到比较困惑,今天学习一下,来深入了解layout_weight属性和它的用法. 定义 首先,看看Android官方文档是怎么说的,毕竟人家才是权威 ...
- perforce变量配置与使用
linux Perforce 使用 1.配置环境变量: 下载 perforce 放到/usr/bin/下 export P4PORT=192.168.4.88:1666 #P4所在的主机exp ...
- JavaBridge
有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法 一般的做法是采用php-java-bridge做桥接 1.实现原理: 先打开java的一个监听端口,php调用java ...
- ubuntu14下搭建svn
1.安装 查看是否安装 svn help 安装了卸载 sudo apt-get remove --purge subversion 安装 sudo apt-get update sudo apt-ge ...
- Python爬虫-爬取科比职业生涯高清图集
前面学习了Python爬取豆瓣电影Top250的数据,爬取的信息是电影信息的文本信息,但是在互联网上流行的图片才有更大的吸引力,本篇我们来使用python爬取网页上的图片并保存在本地硬盘上,很兴奋吧, ...
- 运行jsp常犯的错误
error 未启动tomcat服务 tomcat端口是否已改动 404: 未部署web应用 运行时URL输入错误 检查文件的存放位置(存放文件的目录无法对外引用,如WEB-INF , META-INF ...
- windows下WAMP php5.x redis扩展
其解压到php的扩展目录ext下,在php.ini文件中扩展部分增加一行:extension=php_redis.dll 新增下载地下: php5.3 http://download.csdn.net ...
- 关于 wsdl2Java 自动生成客户端调取webservice接口
webservice地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl wsdl2Java 自动生成类名: 客户端调 ...
- Java中Volatile详解
当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写.这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的 ...