当前位置: 首页 > 编程日记 > 正文

ELK安装文档及相关优化

前言:随着硬件成本的不断低廉,我们可以存储更多数据内容,也会对各数据加以利用,其中一项很重要的数据内容便是日志文件,无论是访问日志还是系统日志或是应用日志,都显得十分重要,而怎么加以利用一直是一个难题,本文就着重于ELK三套件的搭建,是比较流行或者说可靠的日志分析组件,值得注意的说,本文暂时只考虑单机Elasticsearch,并且为了作为演示,就linux的系统日志收集作为演示。


版本说明:

ElasticSearch  1.7.1

Kibana      4..1

Logstash     1.5.2

JAVA      jdk-7u76

注: 最新的上面不一定是最新的版本,不同的版本之间可能有兼容问题,而上面的组合是本人已经验证过的了。


首先放一张图镇镇楼

wKiom1Z0_A7zXU6PAAHD1ftur0k764.png

强调:不要用IE浏览Kibana!!!

ELK下载地址:https://www.elastic.co/downloads

JAVA环境的安装就不演示了!!!(推荐使用jdk-7u76-linux-x64.gz)

1
2
3
tar zxvf elasticsearch-1.7.1.tar.gz
tar zxvf kibana-4.1.1-linux-x64.tar.gz
tar zxvf logstash-1.5.2.tar.gz

值得注意的是,你可以通过elastic提供的rpm包直接安装,但是那对于一个运维人员太没挑战性了~~再者,对ELK的认识实在不够深刻。


下载elasticsearch-servicewrapper(是一个elasticsearch的启动脚本)

#wget https://github.com/elastic/elasticsearch-servicewrapper/archive/master.zip

###通过这个脚本可以更简单执行Elasticsearch服务启动关闭等命令

其中包括

Console 在前台启动

Start     在后台启动

Stop     关闭

Install   装到启动项里面

Remove 移除卸载


开始安装

1
2
3
4
5
mv elasticsearch-1.7.1 /data/elasticsearch
unzip master.zip
mv elasticsearch-servicewrapper-master/*/data/elasticsearch/bin/
mv logstash-1.5.2 /data/logstash
mv kibana-4.1.1 /data/kibana


ELK三套件都是依赖JAVA环境并不需要编译安装,所以安装其实非常简单,只是有版本兼容问题所以部分人总是装不上,再者ELK需要相关优化,不然就会总是抛出异常。

ELK中的E,elasticsearch一个全文搜索引擎,存储着收集过来的所有数据并支持集群模式,你只用真正的会用的时候你才会体会到它的异常强大,虽然笔者也是刚刚深入,但是又一次通过Python调用API查询自安装使用至今,查询结果大于五万条数据,嗖的一下就返回,没有任何延迟,并且是结果聚合的数据,由此可见一斑,而且是单机版的。


配置elasticsearch

1
vi/data/elasticsearch/config/elasticsearch.yml

增加下面两行

1
2
http.cors.enabled:true
http.cors.allow-origin:http://ip(本机IP)


启动Elasticsearch

1
/data/elasticsearch/bin/service/elasticsearch start


本地测试Elasticsearch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
curl -X GET http://localhost:9200/
{
  "status" : 200,
  "name" "Jack Flag",
  "cluster_name" :"elasticsearch",
  "version" : {
    "number" "1.7.1",
    "build_hash" :"927caff6f05403e936c20bf4529f144f0c89fd8c",
    "build_timestamp" "2015-07-16T14:11:12Z",
    "build_snapshot" false,
    "lucene_version" :"4.10.2"
  },
  "tagline" "You Know, forSearch"
}

ELK中的L指Logstash,是一个日志收集应用,本文主要用来收集系统日志,你当然也可以用来解析各种日志,如Tomcat,Nginx,MongoDB等相关应用日志,此文档作为安装文档就不做演示了。


配置logstash

1
2
mkdir /data/logstash/conf/
vi /data/logstash/conf/sys.conf

input {

syslog{

port => "514"

type => "syslog"

}

}

output {

elasticsearch {

host => "127.0.0.1"

}

}


上面的信息是说,以syslog作为输入,监听514端口,Type为syslog,将接收的信息输出到本机的elasticsearch。

如果你执行/data/logstash/bin/logstash -f /data/logstash/conf/sys.conf

你会发现本机监听514端口,但是没有用,因为没有配置任何机器的rsyslog,其他机器怎么会发信息过来~

所以我们配置一下,需要收集系统日志的主机的rsyslog

1
2
3
4
 yum -y install rsyslog
 vi /etc/rsyslog.conf
 ##加入下面一行,ip填日志服务器的IP
 *.* @@ip:514


当你重启被收集日志主机的rsyslog,该主机就会往日志服务器的514端口以syslog的格式发送系统日志了。


因为是源码安装的,所以可能需要用& 或者nohup 或者自己写的启动脚本将logstash服务放到后台,这里推荐supverisor,后面的kibana也通过supervisor放到后台。


#修改kibana配置文件

1
2
# vi/data/kibana/config/kibana.yml
port: 80   ##改为80(默认监听5601端口)


然后启动kibana

1
/data/kibana/bin/kibana>/dev/null 2>&1 &


但是通过&或者nohup实在太不优雅了,我们使用supervisor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
yum -y install supervisor
[program:kibana]
command=/data/kibana/bin/kibana
autorestart = true
redirect = true
stderr_logfile = /var/log/kibana/kibana.log
startsecs = 3
[program:logstash]
command=/data/logstash/bin/logstash -f /data/logstash/conf/logstash.conf -l /data/logstash/logstash_debug.log
autorestart = true
redirect = true
stderr_logfile = /var/log/logstash/logstash.log
startsecs = 3

至于supervisord的详细配置,请参考:http://youerning.blog.51cto.com/10513771/1714627


最后启动supervisord即可。


现在你就可以访问日志服务器了。


第一次登陆,应该是下面的页面

wKioL1Z1Boyw5YTjAAEM8FGZmVs894.png

因为我们没有创建索引,所以他会提示我们创建索引,点击create即可,如果你没有配置发送系统日志的rsyslog你会发现,输入框是红色,不能create,这是因为elasticsearch没有任何内容。


当然可以手工的创建一条信息。

创建一个配置文件

1
vi hello.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
input {
  stdin {
    type => "human"
  }
}
 
output {
  stdout {
    codec => rubydebug
  }
 
  elasticsearch {
    host => "127.0.0.1"
  }
}


/data/logstash/bin/logstash -f hello.conf

在提示Completed之后,随便输入一条信息即可。


上面安装完成后,你会发现kibana总是会出现红色提示框"shards faild",所以需要相关优化


关于elasticsearch的优化

配置文件/data/elasticsearch/config/elasticsearch.yml增加一面内容


# Search pool

threadpool.search.type: fixed

threadpool.search.size: 20

threadpool.search.queue_size: 10000

系统优化

vi /etc/security/limits.conf 

1
2
3
4
elasticsearch soft  nofile 32000
elasticsearch hard  nofile 32000
root          hard nofile 32000
root          soft nofile  32000

后记:好吧,安装文档就到这里吧,关于Elasticsearch的API调用(主要通过Python)以及Kibana的使用在以后的内容文章会说到



本文转自 youerning 51CTO博客,原文链接:http://blog.51cto.com/youerning/1726338


相关文章:

数据结构与算法:09 栈与递归

09 栈与递归 知识结构: 栈是我们经常使用的一种数据结构,比如,手枪发射子弹的顺序与子弹压入弹夹的顺序是相反,即后压入弹夹的子弹先发射出来。又比如,我们使用的Word、Excel、Photoshop等软件系统中的撤销操作&#…

Javascript匿名函数

定义 匿名函数的定义非常简单:就是没有名字的函数。但是其用途非常的大 典型的函数定义方式 在看匿名函数之前我们先看下在Javascript中定义一个函数比较典型的几种方式 函数声明 function functionName(args) { //函数体 } 函数表达式 var functionName functi…

零基础学Java大数据难不难

java大数据如今在企业中用到的次数是非常多的,很多人都比较看好java技术,那么零基础学Java大数据难不难?想要学习java技术说难不难,说简单也不是很简单,来看看下面的详细介绍就知道了。 零基础学Java大数据难不难?因人而异&…

技术图文:01 面向对象设计原则

01 面向对象设计原则 知识结构: 一碟开胃的小菜 小菜今年计算机专业大四了,学了不少软件开发方面的东西,也学着编了些小程序,踌躇满志,一心要找一个好单位。当投递了无数简历后,终于收到了一个单位的面试…

关于GridView手动绑定的一段代码,一切尽在不言中

为GridView绑定主键的方法,在前台的DataGrid标签中加 DataKeyNames"ID" 后台获取ID: int idint.parse(this.GridView.DataKeys[e.RowIndex].Value.Tostring()); 如果DataKeyNames绑定了多个列取法:int idint.parse(this.G…

linux 服务器FTP服务安装教程

1.更新yum源 首先需要更新系统的yum源,便捷工具下载地址:http://help.aliyun.com/manual?spm0.0.0.0.zJ3dBU&helpId1692 2.安装vsftp 使用yum命令安装vsftp #yum install vsftpd -y 3.添加ftp帐号和目录 先检查一下nologin的位置,通常在…

CSS3颜色不透明度如何设置

web前端技术包含HTML和CSS样式,两者是相辅相成的,学习CSS样式不必可少,那么在学习CSS样式中,CSS3颜色不透明度如何设置?在CSS3之前,我们设置颜色的方式包含十六进制颜色(如#F00)、rgb模式颜色、或指定颜色的英文名称(…

技术图文:02 创建型设计模式(上)

创建型设计模式(上) 知识结构: 图1 知识结构 简单工厂模式 Sunny 软件公司欲基于 C# 语言开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,如: 柱状图(histogram)饼…

转:初探 jQuery 的 Sizzle 选择器

这是一篇关于介绍jQuery Sizzle选择器的文章,由我和obility共同完成。在文中,我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流程原理,以及末了以少许文字给你展示出如何借用Sizzle之手实现自定义选择器(…

安装hadoop图文

1.下载hadoop-2.5.1,存放根目录 2.通过tar -zxvf 包名 来进行解压 3.通过mv命令将解压后的hadoop包移动到/home下 4.修改hadoop-en.sh配置文件,添加jdk的安装目录,操作如下图所示 5.修改core-site.xml配置文件,添加namenode的配置信息 6.修改hdfs-site.xml配置文件,添加seconda…

Java中父类方法重写有哪些需要注意的?

在继承关系中,子类会自动继承父类中公共的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。需要注意的是,子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。 在上一节…

技术图文:02 创建型设计模式(下)

创建型设计模式(下) 知识结构: 图1 知识结构 单例模式 – 确保对象的唯一性 Sunny 软件公司承接了一个服务器负载均衡软件的开发工作,该软件运行在一台负载均衡服务器上,可以将并发访问和数据流量分发到服务器集群中…

[转载]C# 二进制与十进制,十进制与十六进制相互转换

原文地址:C# 二进制与十进制,十进制与十六进制相互转换作者:tonytonglx十进制转二进制:用2辗转相除至结果为1 将余数和最后的1从下向上倒序写就是结果例如302302/2 151 余0151/2 75 余175/2 37 余137/2 18 余118/2 9 余09/2 4 余14/2 …

感知哈希算法——找出相似的图片

参考Neal Krawetz博士的这篇文章, 实现这种功能的关键技术叫做"感知哈希算法"(Perceptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格式), 两张图片的指纹越相似, 说明两张图片就越相似. 但关键是如何根据图片计算出"指纹"呢? 下面用最简单的步…

学web前端需要了解哪些常识

想要学好web前端技术,那么一定要掌握足够的知识,web前端技术包含很多方面的知识,具体学web前端需要了解哪些常识?来看看下面的详细介绍。 学web前端需要了解哪些常识? html css javascript。 要学的内容实在很多,如果没有其他编…

linux下后台执行shell脚本

一句话 nohup sh startup_Server.sh & 转载于:https://www.cnblogs.com/phpcode/archive/2012/04/24/2522761.html

线性代数:第一章 线性方程组

本讲义是自己上课所用幻灯片,里面没有详细的推导过程(笔者板书推导)只以大纲的方式来展示课上的内容,以方便大家下来复习。 从本章开始,我们一起来学习线性代数的有关知识,线性代数的应用之一就是求解复杂…

菜鸟也来学习ORACLE(1)_linux下安装oracle 11g

加入 oracle Club 之前,学长给我们开了个小会 说是看看我们加入的意愿,哎哎 其实直无聊,但是大体比较重视linux 服务器的搭建 以及在linux 下安装oracle 搭建一个oracle 环境吧、我就想这东西能有多难,于是回来就搭建起了&#x…

CSS浮动元素特点有什么

什么是浮动? 元素的浮动是指设置了浮动属性(flot)的元素。 CSS浮动有什么作用? 1.让多个盒子水平排列成一行,浮动成为布局的重要手段; 2.可以实现盒子的左右对齐等等; 3.浮动最早是用来控制图片,实现文字环绕图片的效果。 CSS浮动的语法: 选…

数据结构与算法:11 Leetcode同步练习(四)

目录 题目01:最小栈题目02:有效的括号题目03:用队列实现栈题目04:整数反转题目05:逆波兰表达式求值题目06:全排列题目07:字符串转换整数 (atoi)题目08:设计循环双端队列题目09&…

trie树 详解

前几天学习了并查集和trie树,这里总结一下trie。 本文讨论一棵最简单的trie树,基于英文26个字母组成的字符串,讨论插入字符串、判断前缀是否存在、查找字符串等基本操作;至于trie树的删除单个节点实在是少见,故在此…

启动hadoop的节点

1.启动hadoop的节点 start-dfs.sh 本文转自 素颜猪 51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/1959242

什么是Python线程?Python线程如何创建?

相信正在学习Python技术或者对Python语言有一定了解的人对于Python线程应该都不陌生,但是也有刚接触Python的小伙伴对于Python线程并不了解,今天小编就跟大家聊聊什么是Python线程,又该如何创建Python线程! 什么是Python线程?Python线程如何…

ItemAdding实现数据验证--中文字段,properties.AfterProperties值为null的问题

最近写事件接收器,发现中文字段如果直接用properties.AfterProperties[“申请人"]这样获取的值为null,无法得到值。后拉忽然发现用英文字段可以得到值。难道中文字段需要编码?经过测试果真如此。 代码部分如下:public overri…

jstl c:choose、c:when和c:otherwise标签

在用spring mvc中&#xff0c;页面前端老用jstl&#xff0c;记录一下。 <c:choose>、<c:when>和<c:otherwise>在一起连用&#xff0c;可以实现Java语言中的if-else语句的功能。例如以下代码根据username请求参数的值来打印不同的结果&#xff1a; <c:choo…

怎样设计出优秀的测试用例?看看下面就知道了

想要成为一名合格的软件测试工程师&#xff0c;一份合格软件测试报告是非常重要的&#xff0c;软件测试的核心也就是测试的用例了&#xff0c;我们通过用例可以看出怎么设计出来可以发现问题&#xff0c;可以有效的覆盖需求的&#xff0c;没有冗余的用例是每个测试工程师必须跨…

数据结构与算法:12 数组与稀疏矩阵

12 数组与稀疏矩阵 知识结构&#xff1a; 1. 数组 1.1 数组的定义 数组是具有一定顺序关系的若干对象组成的集合&#xff0c;组成数组的对象称为数组元素。 例如&#xff1a; 向量对应一维数组 A(a0,a1,⋯,an−1)A(a_0,a_1,\cdots,a_{n-1}) A(a0​,a1​,⋯,an−1​) 矩阵…

管理索引表:深入研究B树索引--重建,合并,删除(理论篇3)

重建索引  如果表中记录频繁地被删除或插入&#xff0c;尽管表中的记录总量保持不变&#xff0c;索引空间的使用量会不断增加。虽然记录从索引中被删除&#xff0c;但是该记录索引项的使用空间不能被重新使用。因此&#xff0c;如果表变化不定&#xff0c;索引空间量会不断增…

模块架构不是软件成功的“决定因素”

【本文是09年的一篇旧文&#xff0c;出于某些原因&#xff0c;对原文内容有删减&#xff0c;在这里整理后重新发表】 前言感谢XXX对我们技术&#xff0c;对我们公司产品提出这些意见&#xff0c;我们公司卖的是软件产品&#xff0c;开发软件是一件技术活&#xff0c;说实话&…