elasticsearch + logstash + kibana 搭建 ELK 日志分析系统

1.前戏:

1.系统:Debian 7.8

2.准备ELK所需安装包:

jdk-8u112-linux-x64.tar.gz    (JAVA开发运行环境)

elasticsearch-5.1.1.zip    (这次我选用的是zip包,其实是一样的,解压就可以直接使用)

logstash-5.1.1.tar.gz    (5.1.1版本的logstash要求elasticsearch必须为5.1.1,否则启不来)

kibana-5.1.1-linux-x86_64.tar.gz

(elasticsearch 5.0后 head 插件不能用了,目前只有 git 可以安装,谢谢 github 君)

node-v6.2.0-linux-x64.tar.gz

phantomjs-2.1.1-linux-x86_64.tar.bz2    //预先下载下来,避免网络成为搭建瓶颈

elasticsearch-head    //没错,这就是 github 提供的 head 插件

 

2.高潮(没看错,这次直接可以高潮了,三下五除二利索点走人)

Elasticsearch 5.1.1 安装:

##安装JDK: (ES要求的运行环境,5.1.1应用最新的JDK版本,目前验证的是8.112可用)

解压源码安装包:

tar zxf jdk-8u112-linux-x64.tar.gz

 

vim /etc/profile :    //添加

    export JAVA_HOME=/home/stt/env/jdk

    export JAVA_BIN=$JAVA_HOME/bin

    export JRE_HOME=${JAVA_HOME}/jre

    export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

    export PATH=$PATH:$JAVA_BIN

 

执行:source /etc/profile

 

下载ELK安装包:

 

##安装ES:

unzip elasticsearch-5.1.1.zip

cp -r elasticsearch-5.1.1 /home/stt/server/

 

修改配置文件: (注意配置项的冒号后面要有空格)

cluster.name: stt-ELK    //修改集群的名字,以免在网络上混乱串门,加入别的集群里面

node.name: ELK-node1    //自定义节点名字

path.data: /home/stt/server/elasticsearch-5.1.1/data    //自定义数据存储路径

path.logs: /home/stt/server/elasticsearch-5.1.1/logs    //自定义日志存储路径

bootstrap.memory_lock: false

network.host: 0.0.0.0    //修改 ES 的监听地址,这样所有的机器都可以访问这部 ES

http.port: 9200    //注释掉的配置项,但却是默认的,只是我打开了,不用刻意去修改端口

 

//添加新的配置项,允许跨域访问,这样 head 插件方可对 ES 进行访问

http.cors.enabled: true    //开启跨域访问支持,默认为false

http.cors.allow-origin: "*"    //跨域访问允许的域名地址,使用正则表达式

 

启动服务:(前台运行调试)

/home/stt/server/elasticsearch-5.1.1/bin/elasticsearch

 

报错一:

ERROR: bootstrap checks failed

解决方案:

vim /etc/security/limits.conf //添加

 

* soft nofile 300000

* hard nofile 300000

* soft nproc 102400

* hard nproc 102400

 

报错二:

[2016-12-30T15:18:09,190][WARN ][o.e.b.JNANatives ] Unable to lock JVM Memory: error=12, reason=无法分配内存

[2016-12-30T15:18:09,190][WARN ][o.e.b.JNANatives ] This can result in part of the JVM being swapped out.

[2016-12-30T15:18:09,191][WARN ][o.e.b.JNANatives ] Increase RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 65536

[2016-12-30T15:18:09,191][WARN ][o.e.b.JNANatives ] These can be adjusted by modifying /etc/security/limits.conf, for example:

# allow user 'stt' mlockall

stt soft memlock unlimited

stt hard memlock unlimited

解决方案:

vim /etc/security/limits.conf //添加

 

* soft memlock unlimited

* hard memlock unlimited

 

验证是否生效:

$ ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 96201

max locked memory (kbytes, -l) unlimited

max memory size (kbytes, -m) unlimited

open files (-n) 300000

pipe size (512 bytes, -p) 8

POSIX message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) 8192

cpu time (seconds, -t) unlimited

max user processes (-u) 102400

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

 

报错三:

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

解决方案:

vim /etc/sysctl.conf    //添加

 

fs.file-max = 1645037

vm.max_map_count=655360

 

执行:sysctl -p

 

 

报错四:(这个问题一但成为第一个阻断服务启动的原因,在终端是不会有输出和任何的日志记录的,文章末请听我讲)

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000094cc0000, 1798569984, 0) failed; error='Cannot allocate memory' (errno=12)

#

# There is insufficient memory for the Java Runtime Environment to continue.

# Native memory allocation (mmap) failed to map 1798569984 bytes for committing reserved memory.

# An error report file with more information is saved as:

# /home/stt/server/elasticsearch-5.1.1/hs_err_pid10221.log

解决方案:

(内存溢出,思路更改JVM内存大小即可)

vim elasticsearch-5.1.1/config/jvm.options

# Xms represents the initial size of total heap space

# Xmx represents the maximum size of total heap space

 

-Xms256m    (默认为2G)

-Xmx1g    (默认为2G)

 

启动服务:(后台运行)

/home/stt/server/elasticsearch-5.1.1/bin/elasticsearch -d

 

##ES 5.1.1 安装 head:

(5.1.1版本的 elasticsearch 没有提供直接插件安装方法,但在该github上该插件作者给出了方法)

 

下载二进制源码包:

wget https://nodejs.org/dist/v4.2.2/node-v6.2.0-linux-x64.tar.gz

 

解压:

tar xf node-v6.2.0-linux-x64.tar.gz -C /home/stt/env/

 

设置环境变量:

vim /etc/profile: //添加

    export NODE_HOME=/home/stt/env/node-v6.2.0-linux-x64

    export PATH=$PATH:$NODE_HOME/bin

 

最终的 /etc/profile 成为这样:

执行:source /etc/profile

 

测试node是否生效:

$ node -v

v6.2.0

 

$ npm -v

3.8.9

 

安装grunt:

grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,5.0里的head插件就是通过grunt启动的。因此需要安装一下grunt:

 

npm config set registry https://registry.npm.taobao.org    //设置代理镜像源,加速下载

cd /home/stt/node-v4.2.2-linux-x64/lib/node_modules

npm install grunt    //显示的2条warn可以忽略

 

测试grunt是否生效:

$ grunt -version

grunt-cli v1.2.0

grunt v1.0.1

 

安装head插件:

下载:

git clone git://github.com/mobz/elasticsearch-head.git

 

cd /home/stt/elasticsearch-head

npm install (提示:如果遇到网络的瓶颈,将预先下载的源码包放在对应的位置效果一样,目录为/tmp/phantomjs/,确定位置后可自行创建并上传包)

 

修改 elasticsearch-head/ _site/app.js

// 把localhost改为ip

找到:

this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";

改为:

this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.8.116:9200";

 

修改 elasticsearch-head/Gruntfile.js

 

connect: {

server: {

options: {

hostname: "0.0.0.0",     //增加这个配置

port: 9100,

base: '.',

keepalive: true

}

}

}

 

启动服务:(后台运行)

grunt server &    //需要在 /home/stt/elasticsearch-head 下执行,因为我的 grunt 没有进行全局的安装

全局执行报错:

grunt-cli: The grunt command line interface (v1.2.0)

Fatal error: Unable to find local grunt.

If you're seeing this message, grunt hasn't been installed locally to
your project. For more information about installing and configuring grunt,
please see the Getting Started guide:

http://gruntjs.com/getting-started

 

##安装Logstash:

解压源码包:

tar zxf logstash-5.1.1.tar.gz -C /home/stt/server/

 

mkdir /home/stt/server/logstash-5.1.1/conf /home/stt/server/logstash-5.1.1/logs

 

vim conf/central.conf    (处理基于 FILE 方式输入的日志信息,这里是简单的举个例子,日后继续学习补充)

input {

file {

path => "/tmp/XX-YY-ZZ.log"

}

}

 

output {

elasticsearch {

hosts => "192.168.8.116:9200"

index => "nginx-access"

}

 

stdout {

codec => rubydebug

}

}

 

启动服务:(后台运行,logstash 必须要制定配置文件来启动,告诉服务输入和输出)

/home/stt/server/logstash-5.1.1/bin/logstash -f /home/stt/server/logstash-5.1.1/conf/central.conf &

 

##安装Kibana:

解压源码包:

tar zxf kibana-5.1.1-linux-x86_64.tar.gz -C /home/stt/server/

 

vim config/kibana.yml    //修改

    server.port: 5601    //打开注释而已,不用可以去效果,请使用默认端口

    server.host: "0.0.0.0"    //打开监听地址,让别的机器也能访问这个 kibana

    elasticsearch.url: "http://127.0.0.1:9200"

 

启动服务: (后台运行)

/home/stt/server/kibana-5.1.1-linux-x86_64/bin/kibana &

 

通过 head 插件访问 ES 数据:

通过 Kibana 访问 ES 数据:

 

后记:(二次高潮)

在此,我要对5.1.1版本的 elasticsearch 吐槽一下。第一,JVM内存溢出导致的 ES 服务启不来,竟然不会有任何输出和日志生成(不过也可能是因为我在虚拟机上测试的原因,反正换了高配置的实体机后更改了 /etc/sysctl.conf 和 /etc/security/limits.conf 所需用到的配置在启动就完美解决了问题。我的虚拟机上即使更改了比较小的JVM内存也启不来,报错 ERROR: bootstrap checks failed )后来我换了好几个安装包,最后就换了实体机发现了问题,就用最新下载的 zip 包了,不然我还是习惯使用 tar.gz 包,反正都一样;第二,关于 5.0 版本以后的 ES 的 head 插件安装,真是让我步步惊心,因为我是小白,所以不是很懂github 的东西,也感谢有这个机会深入弄一下相关的安装。综上所有,我这个 ELK 前前后后一共弄了差不多3天才完成搭建。

日志分析系统是一个很有用的工具,方便并解放运维人员的劳动力,否则,天天查询 N 台服务器的日志,会很麻烦的。有经验的童鞋就会知道——不是每台服务器都只有一个地方有日志被查询。

安装完 ELK 后,我发现,有点难用。因为我对 Kibana 一点都不熟悉,随便弄了下才有了这个日志内容的显示。等日后继续补充我对 ELK 的各种配置和使用,先做个部署记录并尽快让我们开发人员自己去查日志去,解放我们的双手。而且, Logstash 对日志的处理是很快的,也很精准,一滴不漏。大大的赞。实时分析日志,我相信它。

 

 

转载于:https://my.oschina.net/u/2607319/blog/818688

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值