设为首页 收藏本站
查看: 1203|回复: 0

[经验分享] 苦逼运维的elk之路(1) ----- 组件安装篇

[复制链接]

尚未签到

发表于 2019-1-28 12:59:31 | 显示全部楼层 |阅读模式
  或许我们已经被所谓大数据,可视化折腾的摸不着头脑.....
  首先我希望能统一一个问题,什么才是大数据,多大的数据算是大数据?
  这里我简单总结一下大数据的几个特点:
  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安装好之后,配置好网络,添加用户,就可以开始了
1  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  16
  17
  18
//用户登录系统,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
1  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
# 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的参数,以便于加快编译的速度,这里就不细说了.
1  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  16
# 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 && make && make install
  //上面这个过程有点漫长,我这里半个多小时
  # rm -rf /usr/lib64/libstdc
  # cp ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so /usr/lib64/libstdc++.so
  # ln -sv /usr/lib64/libstdc++.so /usr/lib64/libstdc++.so.6
  // 编译执行完毕之后,我们看下版本是不是
  # gcc –v
  //该命令返回
  使用内建 specs。COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.9.3/lto-wrapper目标:x86_64-unknown-linux-gnu配置为:../gcc-4.9.3/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib线程模型:posixgcc 版本 4.9.3 (GCC)
  //这样gcc 4.9.3编译ok
  # cd ..
  //请保持目录的一致性  返回上级 tmp目录
  gcc安装确实有些棘手, 这个坑我踩过了, 另外要注意的是,我们的gccmaker目录不要删,说不定以后要用到某些组件,可以直接cp出来,不至于再去跑编译了.
  3. 编译python 2.7.11
  python的编译相对比较简单,且这次编译我这里比较完美,没有出错,也不用我再去建立软链
1  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  16
# tar zxvf Python-2.7.11.tgz  # cd Python-2.7.11
  # ./configure && make && make install
  //如果你问我为啥不用prefix来指定安装的目录, 在我的习惯中, 系统组件,或者编译器,或者是服务组件,让它进默认目录是我的选择.
  # python --version
  Python 2.7.11
  # python2.6 --version
  Python 2.6.6
  //系统的yum是基于2.6的,所以,这里我们需要改一个地方,要不然,yum会出错
  # vi /usr/bin/yum
  //将首行的
  #!/usr/bin/python
  //更改为
  #!/usr/bin/python2.6
  //保存退出即可
  # cd ..
  这次编译python异常顺利, 没有报错, 太爽了
  4.安装nodejs 4.2.4
1  2
  3
  4
# tar zxvf node-v4.2.4-linux-x64.tar.gz  # mv node-v4.2.4-linux-x64/ /usr/local/nodejs
  # ln -sv /usr/local/nodejs/bin/node /usr/bin/node
  # ln -sv /usr/local/nodejs/bin/npm /usr/bin/npm
  这样再也不用纠结编译过程了
  5.编译安装redis 3.0.6
1  2
  3
  4
  5
  6
# tar zxvf redis-3.0.6.tar.gz  # cd redis-3.0.6
  # make PREFIX=/usr/local/redis install
  //这里纠结一下, redis如果不指定prefix路径,那么默认会在你这个解压的文件夹中编译生成bin文件
  # ln -sv /usr/local/redis/bin/redis-server /usr/bin/redis-server
  # ln -sv /usr/local/redis/bin/redis-cli /usr/bin/redis-cli
  先把这东西安装上去,至于配置,一会儿再搞
  接下来就剩elk的组件了
  6.安装 es 1.7.4
1# rpm -ivh elasticsearch-1.7.4.noarch.rpm  7.安装logstash 1.5.6
1# rpm -ivh logstash-1.5.6-1.noarch.rpm  8.安装kibana 4.1.4
1  2
  3
  4
# tar zxvf kibana-4.1.4-linux-x64.tar.gz  //这本身就是拆箱即用的东西, 我们给它找个好地方放起来
  # mv kibana-4.1.4-linux-x64/ /usr/local/kibana
  # ln -sv /usr/local/kibana/bin/kibana /usr/bin/kibana
  好了,至此已经把我们需要的组件安装完成了, 下一篇blog将写如何配置使用
  本文出自 “mooooooooon” 博客,请务必保留此出处http://mo0on.blog.运维网.com/10522787/1729263


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668733-1-1.html 上篇帖子: 分布式实时日志分析解决方案 ELK 部署架构 下篇帖子: 架构之ELK日志分析系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表