首页 存档 技术 查看内容

苦逼运维的ELK之路(一)--组件安装篇

2018-3-30 13:00 |来自: 互联网 277 0

摘要: 本文根据高效运维专家群友文章整理并发布。欢迎关注“高效运维”公众号,以抢先赏阅诚意满满的各种原创文章。 嘉宾介绍 朱峰(feng) 多年前混迹于网络安全圈子,曾是小黑。十年以上代码审(wa)计(dong)经验,属于 ...

本文根据高效运维专家群友文章整理并发布。欢迎关注“高效运维”公众号,以抢先赏阅诚意满满的各种原创文章。

嘉宾介绍

朱峰(feng)

多年前混迹于网络安全圈子,曾是小黑。
十年以上代码审(wa)计(dong)经验,属于典型的语无伦次的2货。
当前各种折腾elk以及其相关的业务,试图挖出新的商业价值。

大数据的特点

或许我们已经被所谓大数据,可视化折腾的摸不着头脑…..
首先我希望能统一一个问题,什么才是大数据,多大的数据算是大数据?
这里我简单总结一下大数据的几个特点:

  1. 数据量大,TB,PB,乃至EB等数据量的数据需要分析处理。

  2. 要求快速响应,市场变化快,要求能及时快速的响应变化,那对数据的分析也要快速,在性能上有更高要求,所以数据量显得对速度要求有些“大”。

  3. 数据多样性:不同的数据源,越来越多,需要进行清洗,整理,筛选等操作,变为结构数据。

  4. 价值密度低,由于数据采集的不及时,数据样本不全面,数据可能不连续等等,数据可能会失真,但当数据量达到一定规模,可以通过更多的数据达到更真实全面的反馈。

如果你对以上所述有名词不明白,请自行百度一下.

好了,接下来,思考如下场景:

“我是一名三线小城市的运维汪,公司属于初创公司,当前有10 台服务器。我之前公司没有运维,线上跑的业务环境是开发部署的,每台业务配置都不一样,让我纠结的是每次给丫部署好环境,TMD一会儿就变了,虽然没有自动化运维工具,10 台机器通过管理手工还可以接受,可无脑开发,业务上线10分钟就TMD一个版本,组件还不同,我内心中漂浮着数万头草泥马...不出问题还好,出现故障我勒个去啊,一台一台翻日志,出个应急加班还没有加班费,我嘞个我嘞个我嘞个去啊……”

这样的场景是真实存在的。上述场景中,我们首先希望解决的是故障发现,故障处理,故障预警,但至少希望在故障发生时能知道在哪里出故障,出现故障的信息。

本篇的重点,也是先搭建基础业务环境组件.

梳理一下问题,这个苦逼运维汪需要解决以下2个问题:

  1. 日志集中管理,不需要登录每台机器去查看和读取log;

  2. 故障快速定位,通过搜索、字段过滤,统计分析等方式快速定位故障,换句话说就是出现故障后,可以马上查看到故障输出的log;

如果是单台服务器,这个运维汪还会使用grep,awk,wc等命令实现检索和排序。但是对于10 ,100 甚至更多,这种效率显然不足。

废话了这么多,下面终于可以进入正文了

好像国内的文档都是这么复制粘贴的,这里简单重复一下
所谓ELK,是指 ElasticSearch、Logstash、Kibana,三个开源工具。
官网:

https://www.elastic.co/

ElasticSearch:

开源分布式搜索引擎,特点:

  • 分布式

  • 零配置

  • 自动发现

  • 索引自动分片

  • 索引副本机制

  • restful风格接口

  • 多数据源

  • 自动搜索负载等.

Logstash

完全开源,它用来对日志进行:

  • 收集

  • 分析

  • 存储

换句话说在当前实现了如日志的集中管理.

Kibana

它作为Logstash和ElasticSearch提供日志分析的web界面,这里我们理解为UI.

这里我特别说明一下,以上三个工具均为开源的自由软件,他们加入了apache协议。

我主要想强调的是,它们三个组合以后,提供强大的开箱即用的日志收集和检索功能,对于创业公司和小团队来说,太爽了,太爽了,太爽了(重要的事情要说三遍)

先看架构图(一图胜千言)

说明:

  • 多个独立的agent(Shipper)运行在不同的服务器终端,用来收集不同来源的数据,一个中心agent(Indexer)用来负责汇总数据,在中心agent前的Broker作为缓冲区,中心agent后的ElasticSearch用于存储和搜索数据,前端Kibana用于提供丰富的UI展示。

  • Shipper表示收集日志,使用LogStash收集各种来源的日志数据,它们可以是系统日志、文件、redis、mq等等等。

  • Broker作为远端agent与中心agent之间的缓冲区,这里使用Redis实现,用来提升系统性能与可靠性,当中心agent提取数据失败时,数据保存在redis中,不至于丢失。

  • 中心agent也是Logstash,从Broker中读取数据,执行相关的分析和处理(Filter)。

  • ElasticSearch用于存储最终的数据(结果数据),并提供搜索功能。
    Kibana提供一个简单、丰富的web界面,数据来自于ElasticSearch,支持各种查询、统计,展示。

当然,这种搭配也不是绝对的,你也可以不使用redis(或许可以考虑kafka)来做消息队列,你也可以让Shipper直接从你希望的日志中获取数据,如果你喜欢你也可以让数据存到ElasticSearch后再存一份进hdfs等等等等。
好了,下面开始动手安装了。


版本描述:操作系统CentOS 6.6 x64 最小化安装,配置网络及用户

各种应用程序:

ElasticSearch 1.7.4 (当前官方最新为2.1.1,但是改动较大,这里我选择喜欢的 1.7)
官方:https://www.elastic.co/downloads/past-releases/elasticsearch-1-7-4

Logstash 1.5.6 (当前官方最新为2.1.1,这里选择1.5.6)
官方:https://www.elastic.co/downloads/past-releases/logstash-1-5-6

Kibana 4.1.4 (当前官方最新为 4.3.1)
官方:https://www.elastic.co/downloads/past-releases/kibana-4-1-4
上面的版本是为了elk各个组件的依赖所选择的,使用最新版请注意版本依赖

Redis 3.0.6 (当前官方最新为3.0.6,因为作为Broker,所以使用了当前最新版)官方:http://redis.io/download
除此之外, Logstash是基于JAVA的,那么,我这里还需要下载JDK(你用JRE也可以)
我的JDK版本 8u65
官方:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

如果你用了CentOS 6.X,你还需要升级一下你的gcc和python,这样可以确保你可以安心编译redis,这里
gcc 4.9.3
官方:

http://gcc.gnu.org/gcc-4.9/

python 2.7.11(当前2.x最新的)
官方:

https://www.python.org/downloads/release/python-2711/

还有nodejs,因为kibana是基于它的一坨前端程序.
这里我的nodejs版本为LTS(长期支持)版,4.2.4(也是当前4.2.x最新的)
官方:

https://nodejs.org/en/download/

其实我并不想纠结编译过程,但是这里还是不得不纠结一下

ElasticSearch (以后简称es好了),logstash我下载rpm
redis,jdk,gcc,为源码包
nodejs 4.2.4我没有纠结编译过程,为二进制文件
kibana为一坨前端文件,当然是源码包

所有的东西下载好了之后,放在某个目录中,看下面吧.


以下是我的安装过程:

干净的centos6.6安装好之后,配置好网络,添加用户,就可以开始了
//用户登录系统,su提升权限(这是我的习惯)
# yum -y update 
# mkdir tmp 
# cd tmp
//建立一个tmp文件夹,以便我们把一坨坨下载的包都放进去
# yum -y install gcc gcc-c   vim tpl kernel-deve glibc-static libstdc  -static screen wget bzip2*
//其中的vim你也可以不用,系统默认有vi命令
# screen -S elk//screen是一个很棒的小工具,具体用法请自行谷度百哥
# wget http://down.moonstack.org/packages/jdk8u65.tar.gz
//甲骨文官方的JDK地址不支持固定链接,8u65-linux64.tar.gz你可以使用上面我的地址下载
# wget http://mirrors-usa.go-parts.com/gcc/releases/gcc-4.9.3/gcc-4.9.3.tar.gz
# wget http://download.redis.io/releases/redis-3.0.6.tar.gz
# wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
# wget https://nodejs.org/dist/v4.2.4/node-v4.2.4-linux-x64.tar.gz 
# wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.4.noarch.rpm
# wget https://download.elastic.co/logstash/logstash/packages/centos/logstash-1.5.6-1.noarch.rpm
# wget https://download.elastic.co/kibana/kibana/kibana-4.1.4-linux-x64.tar.gz
//经过漫长的等待后, 这一坨坨终于下载好了

1.安装jdk 8u65

# tar zxvf jdk8u65.tar.gz
# mv jdk1.8.0_65/ /usr/local/java
///编辑系统环境变量
# vim /etc/profile
//在该文件的末端加入
JAVA_HOME=/usr/local/java
CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
//保存退出后执行
# source /etc/profile
//然后我们执行
# java version
//当我们看到下面的内容,说明我们jdk就安装成功了
java version "1.8.0_65"Java(TM) SE Runtime Environment (build 1.8.0_65-b17)Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

2.编译安装gcc 4.9.3
gcc编译确实有点慢,你可以根据机器中cpu的核心数来调节make的参数,以便于加快编译的速度,这里就不细说了.

# tar zxvf gcc-4.9.3.tar.gz
# mkdir gccmaker# cd gcc-4.9.3/
# ./contrib/download_prerequisites
# cd ../gccmaker/
# ../gcc-4.9.3/configure --enable-checking=release --enable-languages=c,c   --disable-multilib
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部