ELK的简单搭建

文章
林里克斯

Linux下实现ElasticSearch+Logstash+Kibana日志处理

一: 实验平台:CentOs 6.5

二: Java版本:jdk-8u111-linux-x64.tar.gz

三: ElasticSearch版本:elasticsearch-2.4.1.tar.gz

四: Logstash版本:logstash-2.4.1.tar.gz

五: Logstash的运行依赖于Java运行环境, Logstash 1.5以上版本不低于java 7推荐使用最新版本的Java。

六: Kibana版本:kibana-4.3.1-linux-x64.tar.gz

七: Redis版本:redis-3.2.6.tar.gz

八: 所用IP地址:

10.113.128.6 es+logstash+kibana+redis

10.113.128.5 es+logstash

10.113.128.12 es+logstash

ELK的简单搭建



1.Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

2.Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。

3.kibana 也是一个开源和免费的工具,他Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

工作原理:在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到logstash indexer,logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。


一、环境搭建


1.jdk环境的搭建

$ mkdir /ane/jdk
$ tar -xzvf jdk-7u67-linux-x64.tar.gz -C /ane/jdk
#解压缩

添加Java环境变量。编辑/etc/profile/jdk.sh

$ vim/etc/profile/jdk.sh

#!/bin/bash
JAVA_HOME=/ane/java/jdk1.7.0_67
JAVA_BIN=$JAVA_HOME/bin
PATH=$PATH:$JAVA_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export  JAVA_HOME JAVA_BIN PATH CLASSPATH
source /etc/profile
#使环境变量立即生效
$ java -version  #查看jdk版本

java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

二、ElasticSearch安装


1.按官方文档下载解压Elasticsearch

$ curl -L -O https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.4/elasticsearch-2.3.4.tar.gz
#直接下载
https://www.elastic.co/downloads/past-releases/elasticsearch-2-3-4
#进入网页下载
$ mkdir /ane/es       #为es创建目录
$ tar -zxf elasticsearch-2.3.4.tar.gz -C /ane/es/     #解压缩

2.集群运行ES

2.0以后版本的ElasticSearch运行,需要用普通用户的身份

所以需要添加普通用户

$ useradd es
$ mkdir /ane/es/data     #es的数据存放路径
$ mkdir /ane/logs/es     #es的日志路径
$ chown -R es:es es
$ su - es

修改配置文件elasticsearch.yml

$ vim config/elasticsearch.yml

cluster.name: jarbo     #集群名   注意: 集群机器配置一致
node.name: jarbo-1          #节点名   节点不同,机器配置不同
path.data: /ane/data/es     #数据存储位置
#path.data: /path/to/data1,/path/to/data2 #多个数据存储,有利于性能提升
path.logs: /ane/logs/es/    #日志文件的路径
bootstrap.mlockall: true    #锁定内存,避免写入交换空间,降低性能
network.host: 10.113.128.6  #设置IP
http.port: 9200             #设置端口
discovery.zen.ping.unicast.hosts: ["10.113.128.5:9300","10.113.128.12:9300"]
#集群主节点初始列表,使用此列表进行探测
discovery.zen.minimum_master_nodes: 3 #集群中的节点可以知道其它N个有master资格的节点.
#gateway.recover_after_nodes: 3 #一个集群中的N个节点启动后,才允许进行恢复处理
#gateway.recover_after_time: 5m #初始化恢复过程的超时时间
#gateway.expected_nodes: 1 #设置这个集群中期望有多少个节点.一旦这N个节点启动(并且recover_after_nodes也符合),立即开始恢复过程(不等待recover_after_time超时)
#script.engine.groovy.inline.search: on
#script.engine.groovy.inline.aggs: on
#indices.recovery.max_bytes_per_sec: 100mb #设置恢复时的吞吐量,默认无限制
#indices.recovery.concurrent_streams: 10 #设置来限制从其它分片恢复数据时最大同时打开并发流的个数

调整ElasticSearch内存elasticsearch.in.sh

生产比这个大,在此只用于测试

$ pwd
/ane/es/bin/

$ vim elasticsearch.in.sh

ES_MIN_MEM=1g
ES_MAX_MEM=1g

修改系统参数/etc/security/limits.conf(可不操作)

$ vim /etc/security/limits.conf

es soft memlock unlimited  #启用memlock
es hard memlock unlimited  #启用memlock
es soft nofile 204800  #可打开文件数限制
es hard nofile 204800  #可打开文件数限制

3.插件安装

安装kopf插件

ElasticSearchJavaScript编写+ AngularJS + jQuery 一个简单的Web管理工具。

它提供了对一个Elasticsearch集群执行常见任务的一种简单方法。

Elasticsearchbin目录下执行./plugin install lmenezes/elasticsearch-kopf命令

./plugin install lmenezes/elasticsearch-kopf

-> Installing lmenezes/elasticsearch-kopf...
Plugins directory [/ane/es/elasticsearch-2.3.4/plugins] does not exist. Creating...
Trying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip ...
Downloading ....................................................................................................................................................................................................................................................................................DONE
Verifying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed kopf into /ane/es/elasticsearch-2.3.4/plugins/kopf

测试kopf插件

访问测试:

http://10.113.128.6:9200/_plugin/kopf/

ELK的简单搭建

鼠标停留在disk上可以看到磁盘使用情况,还可以看到索引分片文档数量大小以及jvm使用情况、cpuload

ELK的简单搭建

点击nodes可看到更多硬件信息

ELK的简单搭建

rest功能是编写语言的

点击more查看更多功能

ELK的简单搭建

Create index: 创建索引:
Cluster settings: 集群设置:
Aliases: 别名:
Analysis: 分析:
Percolator: 过滤器:
Snapshot: 快照
Index templates: 索引模板:
Cat apis: api
Hot threads: 热线程:

安装head插件

`head`插件:
    1.显示集群的拓扑,并且能够执行索引和节点级别操作
    2.搜索接口能够查询集群中原始json或表格格式的检索数据
    3.能够快速访问并显示集群的状态

ElasticSearchbin目录下执行./plugin install mobz/elasticsearch-head命令

bin/plugin install mobz/elasticsearch-head
-> Installing mobz/elasticsearch-head...
Trying https://github.com/mobz/elasticsearch-head/archive/master.zip ...
Downloading .........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................DONE
Verifying https://github.com/mobz/elasticsearch-head/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed head into /ane/es/elasticsearch-2.3.4/plugins/head

测试head插件

访问测试:

http://10.113.128.6:9200/\_plugin/head/

ELK的简单搭建

添加数据(测试使用,可以不操作)

ELK的简单搭建

ELK的简单搭建

_index:创建了一个索引index-demo 
_type:创建了一个类型test 
_version:版本
total:分片2个 
Successful:成功1个 
Failed:失败0个 
Created:状态成功

我们写一篇文档会帮我们分成5片(0-4,可以修改成多个),粗线代表主分片细线代表副本分片(可以理解为一主一备)正常情况下会将主分片和副本分片放在2台机器上

集群健康值介绍: 
黄色代表没有主分片数据丢失,但是现在不是健康的状态(警告)应该有10个分片,现在只有5个。 
红色代表有数据丢失 
绿色代表正常

索引es

ELK的简单搭建

这里索引信息是open代表我们可以将它给关闭掉,这样就不会继续使用这个索引进行搜索

ELK的简单搭建

提示:删除之后索引数据是无法恢复的

4.启动

后两台按以上步骤安装Elasticsearch

分别启动

$ ./bin/elasticsearch &

jarbo-1启动成功,jarbo-2启动成功,jarbo-3启动成功,jarbo-1会检测到集群

会启用两个端口

9200:集群之间事务通信
9300:集群选举等

验证

$ curl -XGET 'http://10.113.128.6:9200/_cluster/health?pretty'        #集群健康
$ curl -XGET 'http://10.113.128.6:9200/_cat/nodes?v'                  #集群节点数
$ curl -XGET 'http://10.113.128.6:9200/_cat/indices?v'                #集群分片信息

三、logstash安装


1.使用yum安装(按照官方文档)

更新key文件

$ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

创建logstashyum仓库

$ vim /etc/yum.repo.d/logstash.repo

[logstash-2.4]
name=Logstash repository for 2.4.x packages
baseurl=https://packages.elastic.co/logstash/2.4/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
$ yum -y install logstash
#yum安装logstash

2.源码安装

官网下载logstash

https://www.elastic.co/downloads/past-releases/logstash-2-4-1

3.测试logstash(测试使用可不操作)

$ logstash -e "input {stdin{}} output {stdout{}}"  #测试是否正常 
input {stdin{}}   #标准输入
output {stdout{}} #标准输出

输入aa输出aa表示正常

$ logstash -e 'input{stdin{}} output{stdout{codec=>rubydebug}}'

output{stdout{codec=>rubydebug}}                                #json格式输出

创建一个启动logstash配置文件

第三步是用于前端显示,这步是用于文件(可后台操作),供测试,后面搭建完redis后才有接收~

$ pwd
/opt/logstash  #使用 yum 安装的 logstash 在 /opt 目录下
$ vim logstash-simple.conf

input {
        stdin{
        }
}
output {
        stdout{
                codec=>rubydebug
        }
}

以配置文件方式启动

$ bin/logstash -f logstash-simple.conf             #以配置文件方式启动
$ logstash agent -f logstash-simple.conf --verbose #开启debug模式

四、安装redis


1.按官方文档下载解压redis

$ wget http://download.redis.io/releases/redis-3.2.6.tar.gz
$ tar -zxvf redis-3.2.6.tar.gz -C /ane/redis/

2.编译安装redis

$ yum -y install gcc #yum安装 gcc 编译环境
$ pwd
/ane/redis/redis-3.2.6
$ make && make install

成功 编译

修改redis.conf配置文件

$ pwd
/ane/redis/redis-3.2.6
$ vim redis.conf

bind 10.113.128.6     #监听地址
port 6379             #监听端口

启动

$ redis-server redis.conf &                 #后台启动redis
$ redis-cli -c -h 10.113.128.6 -p 6379          #测试是否正常
10.113.128.6:7000> redis-cli -h 192.168.7.221 -p 6379 monitor  #redis动态监控
OK

3.logstash配置redis

修改logstash的启动配置文件

$ pwd
/opt/logstash
$ vim logstash-redis.conf  #编辑收集日志的配置文件(在收集日志端配)俗称客服端

input {
     file {
           path => "/var/log/messages"            #文件输入代替标准输入
           type => "syslogs"                      #日志类型
           }
      }
#输入部分
output {
    stdout{ codec => rubydebug}         ##json格式输出
    redis {
          host => "10.113.128.6:6379"   #redis输出配置
          data_type => 'channel'        #数据类型
          key => 'ambiguous'            #密钥,需要跟服务端配置一样才能接收到数据
          }
}
#输出部分(输出到redis里)

编辑收入redis传来数据 并创建日志的配置文件(在es端配,配合es收集日志)俗称服务端

$ vim logstash-es.conf

input {
        redis {
                host => "10.113.128.6"
                port => 6379
                data_type => 'channel'      #与客服端一样的数据类型
                key => 'ambiguous'          #与客服端一样的密钥
        }
}
output {
        elasticsearch { hosts => ["10.113.128.5:9200","10.113.128.6:9200","10.113.128.12:9200"]}
        file {
                path => "/ane/data/TLSIT/%{+YYYY}/%{+MM}/%{+dd}/%{host}/%{host}_%{type}.%{+HH}.txt"     #定义收集日志的路径
                flush_interval => 0
                message_format => "%{host} %{messages}"     #转换成日志
        }
}

测试

$ logstash agent -f logstash-redis.conf --verbose &  #启动程序
$ redis-cli -h 10.113.128.6 -p 6379 monitor          #监控redis
$ echo 12 >> /var/log/messages                       #伪造数据验证

访问es端网页可以查询到

ELK的简单搭建


五、Kibana


1.官方文档下载解压

$ wget https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar
$ mkdir /ane/kibana
$ tar -zxf kibana-4.1.2-linux-x64.tar.gz -C /ane/kibana/

修改配置文件kibana.yml

$ pwd
/ane/kibana/kibana-4.1.2-linux-x64/config
$ vim kibana.yml

port: 5601                  #端口,默认5601
host: "10.113.128.6"        #主机地址
elasticsearch_url: "http://10.113.128.6:9200"
kibana.index: ".kibana"     #kibana是一个小系统,自己也需要存储数据(将kibana的数据保存到.kibana的索引中,会在ES里面创建一个.kibana)

2.启用

$ pwd
/ane/kibana/kibana-4.1.2-linux-x64/
$ bin/kibana &

结果kibana由于位置错误始终无法启动,网上搜索信息发现是由于版本问题导致的,换了4.3.1的后启动正常。

启用成功 测试访问

10.113.128.6:5601

ELK的简单搭建

创建kibana的索引

ELK的简单搭建

创建一个用于存放系统日志的索引

3.使用Apache代理

Kibana有时候或许毕竟慢,日志不够直视化,就可以使用ApacheNginx代理

$ yum -y install httpd
#yum安装Apache

创建链接

$ ln -s "/ane/data/TLSIT/" /var/www/html/syslogs

如果使用这样的方式的话,可以舍弃Elasticsearchkibana

测试访问

10.113.128.6/syslogs

OVER~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

713 0 2017-01-27


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-04-26

今日天气
站点统计
  • 文章总数:240篇
  • 分类总数:29个
  • 评论总数:10条
  • 本站总访问量 215795 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!