码迷,mamicode.com
首页 > 其他好文 > 详细

ELK环境部署与群集配置

时间:2016-07-29 23:08:16      阅读:1296      评论:0      收藏:0      [点我收藏+]

标签:elk   群集   日志收集   

.ELK是什么?

1.1  ELK由来

 ELK是elasticsearch,logstash,kibana  这三个工具的简称

 

1.2  ELK三个组件的介绍

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

 

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

 

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

 

要注意的是elasticsearch要和kibana的版本兼容,否则kibana会无法配合elasticsearch显示日志,比如,kibana4.5.3就无法兼容elasticsearch2.2及其以下的版本

1.3  ELK原理图


二、安装配置ELK环境

技术分享

2.1  安装java  

很多教程上写的都是安装openjdk,但是感觉openjdk还是Bug多多,这里就用Oracle JDK了。

ELK要求java版本比较新,所以下载的最新版本的rpm

wget http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.rpm?AuthParam=1469771524_1517498b1a49fd5cb625bada1952bf53

rpm -ivh jdk-8u102-linux-x64.rpm

确认java安装完成

[root@centos67 ~]# java -version

java version "1.8.0_102"

Java(TM) SE Runtime Environment (build 1.8.0_102-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

 

2.2安装elasticsearch-2.3.4.rpm

注意,这里的版本要安装的新一点,要和kibana兼容。

wget  https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.4/elasticsearch-2.3.4.rpm

 

rpm -ivh elasticsearch-2.3.4.rpm

安装完成之后,修改配置文件

 vim /etc/elasticsearch/elasticsearch.yml

 主要就是修改:

 cluster.name: cluster_1      群集名字

 node.name: node-1          节点名字

 path.data: /path/to/data    数据目录

path.logs: /path/to/logs   日志目录

network.host: 0.0.0.0    监听地址

http.port: 9200         监听端口

 

创建数据和日志文件夹:

mkdir  -p  /path/to/data   /path/to/logs

创建日志文件:

cd /path/to/logs

touch cluster_1_deprecation.log  cluster_1_index_indexing_slowlog.log  cluster_1_index_search_slowlog.log  cluster_1.log

建立群集文件夹:

mkdir  -p /path/to/data/cluster_1

最后设置这些文件和文件夹的权限。

chown -R elasticsearch.elasticsearch    /path

或者chmod 777 -R path

 

 

 

完成这些操作之后,就可以启动elasticsearch了。(如果出错,这里大多都是文件权限问题,对应解决就行)

chkconfig --add elasticsearch

/etc/init.d/elasticsearch start

 

 curl 127.0.0.1:9200            访问9200端口测试一下

{

  "name" : "node-1",

  "cluster_name" : "cluster_1",

  "version" : {

    "number" : "2.3.4",

    "build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f",

    "build_timestamp" : "2016-06-30T11:24:31Z",

    "build_snapshot" : false,

    "lucene_version" : "5.5.0"

  },

  "tagline" : "You Know, for Search"}

到此elasticsearch就已经安装完成了。

 

2.2.1安装head插件

head插件提供elasticsearch可视化功能的一个插件

 

usr/share/elasticsearch/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 /usr/share/elasticsearch/plugins/head

安装完成后访问http://IP:9200/_plugin/head/即可看到elasticsearchWEB管理界面

如图:

技术分享 

 

2.2.2 kopf添加插件

kpof是提供lasticsearch群集状态管理的一个插件(单个lasticsearch性能有限,这里先安装上kopf插件,后续再做群集)

/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf

-> Installing lmenezes/elasticsearch-kopf...

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 /usr/share/elasticsearch/plugins/kopf

安装完成后访问:

http://IP:9200/_plugin/kopf/即可打开群集的WEB管理界面

 

 技术分享

2.3 安装logstash

2.3.1下载并安装GPG key

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html   官网地址

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

2.3.2 添加yum仓库

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

[logstash-2.3]

name=Logstash repository for 2.3.x packages

baseurl=https://packages.elastic.co/logstash/2.3/centos

gpgcheck=1

gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch

enabled=1

2.3.4 安装logstash

yum install -y logstash

2.3.5 logstash目录位置

安装完成的logstash在目录/opt[root@ELK-C-02-47 ~]# ll /opt/

总用量 8

drwxr-xr-x  5 logstash logstash 4096 5月  25 23:03 logstash

 

2.3.6 启动logstash

-e参数:执行

input:输入

output:输出

-d参数:daemon模式,后台启动(守护进程)

 

[root@ELK-C-02-47 ~]# /opt/logstash/bin/logstash -e ‘input { stdin{} } output { stdout{} }‘

 

Settings: Default pipeline workers: 1

Pipeline main started

hello world

2016-05-25T15:15:22.035Z ELK-C-02-47 hello world

这里可以看出来   输入(logstash收集)到什么内容,logstach 就会格式化的输出一些内容。

我们可以把日志文件让logstach收集到,然后输出到elasticsearch ,再通过kibana展示elasticsearch的内容,这就是ELK的原理。

2.4安装kibana

 

2.4.1下载并安装GPG key

https://www.elastic.co/guide/en/kibana/current/setup.html     官网地址

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

2.4.2添加yum源地址文件:

vim /etc/yum.repos.d/kibana.repo

[kibana-4.5]

name=Kibana repository for 4.5.x packages

baseurl=http://packages.elastic.co/kibana/4.5/centos

gpgcheck=1

gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch

enabled=1

2.4.2 安装kibana

yum install kibana

2.4.3  修改配置文件

vim /opt/kibana/config/kibana.yml

 

[root@ELK-C-01-46 config]# grep ‘^[a-z]‘ /opt/kibana/config/kibana.yml

server.port: 5601                             端口

server.host: "0.0.0.0"   本地监听地址

elasticsearch.url: "http://10.0.0.130:9200"         elasticsearch的地址

kibana.index: ".kibana"

保存退出后启动kibana

/etc/init.d/kibana start置文件

 

查看是否监听端口

[root@centos67 ~]# netstat -anpt |  grep 5601

tcp        0      0 0.0.0.0:5601                0.0.0.0:*                   LISTEN      3621/node     

 

到此,ELK环境就已经部署完成了

.收集本机日志

3.1 创建日志索引

在浏览器访问kibanahttp//IP:5601就可以看到kibana的页面了
登录之后,首先配置一个索引,默认kibana的数据被指向Elasticsearch,使用默认的logstash-*的索引名称,并且是基于时间(@timestamp)的,如下

技术分享
点击“Create”,看到如下界面说明索引创建完成。


 技术分享点击“Discover”,可以搜索和浏览Elasticsearch中的数据,默认搜索的是最近15分钟的数据,可以自定义选择时间。

3.2 收集本地系统日志
logstash配置为索引器,并将logstash的日志数据存储到Elasticsearch,本范例主要是索引本地系统日志
#cd /usr/local/logstash/config         路径无所谓
#vim  logstash-indexer.conf         
input {
  file {
     type => "syslog"                   
     path => ["/var/log/messages", "/var/log/secure" ]           收集/var/log/messages secure这两个日志
  }
  syslog {
     type => "syslog"
     port => "5544"
  }
}
output {
  elasticsearch { hosts => "10.0.0.130:9200" }                输出到Elasticsearch
  stdout { codec => rubydebug }
}
测试是否有语法错误:
#/usr/local/logstash/bin/logstash --configtest -f logstash-indexer.conf 
Configuration OK
启动
nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash-indexer.conf &

测试echo一条日志信息到/var/log/messages,然后再通过kibana界面查看
#echo "`date` This is a test for logstash for indexer" >> /var/log/messages
如下图:技术分享

测试从一台服务器(ip10.0.18.12)登录到10.0.0.130
#ssh root@10.0.0.130

The authenticity of host ‘10.0.90.24 (10.0.90.24)‘ can‘t be established.
RSA key fingerprint is 4b:97:0a:97:e8:cf:a5:39:49:6c:65:8e:32:79:64:c8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.0.90.24‘ (RSA) to the list of known hosts.
root@10.0.0.130s password:      --输入10.0.0.130服务器的root密码
Last login: Fri Apr  1 17:31:32 2016 from 10.0.90.8
然后查看kibana,看是否搜集到了日志



然后到kibana界面刷新下,就可以看到日志信息了。

技术分享


以上表示搜集日志成功。

 

 

收集多个日志,开启多个logstash进程即可

 /opt/logstash/bin/logstash -f ./logstash-indexer.conf &    收集/var/log/securemessage

/opt/logstash/bin/logstash -f ./logstash-http.conf &        收集Apache的访问日志

logstash-indexer.conf文件内容:

input {
 file {
    type => "syslog"
    path => ["/var/log/messages","/var/log/secure"]
    }

syslog {
    type => "syslog"
    port => "5544"
    }
    }
output {
elasticsearch {hosts => "10.0.0.130"}
stdout { codec => rubydebug  }
}


logstash-http.conf文件内容:input {
  file {
        path => "/var/log/httpd/access_log"
        codec => "json"
}
}
output {
elasticsearch {
        hosts => ["10.0.0.130:9200"]
        index => "http-access-log-%{+YYYY.MM.dd.HH}"
        workers =>5
        template_overwrite => true
}
}

这两个附件是收集两个日志所需要的配置文件 ,收集不同的日志,所写的配置文件都有所不同。

 

四、收集其它主机的日志

收集其它主机的日志的时候,只需要安装上logstach,通过logstach对日志进行收集和输出到elasticsearch即可

Client的IP是10.0.0.129,安装配置了httpd服务
4.1 安装jdk
# rpm -ivh jdk-8u77-linux-x64.rpm
Preparing...                ########################################### [100%]
   1:jdk1.8.0_77            ########################################### [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
        jfxrt.jar...
测试jdk安装是否成功
#java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
表示安装OK

4.2 安装logstash 

方法同上,就不写了。

4.3 同步时间

yum  -y insall ntpdate          

 ntpdate cn.ntp.org.cn

客户端的时间要保证和ELK服务端的时间一致,否则会出现Kibana上无法显示数据的情况

4.4运行logstach

/opt/logstash/bin/logstash -f logstash-http.conf  

 

这里监控的还是Apache的访问日志,还是之前那个配置文件。可以新建一个索引  但是这里就用之前个索引了。(我这样做是不合适的。不同主机用一个索引很不好,因为那样会不知道日志信息是哪台主机的,建立索引可以根据主机名来建立。)

总结:收集一个日志的流程:

1.在Kibana上面建立索引

2.编写logstach配置文件

3.开启一个logstach进程,并指定配置文件

 

五、elasticsearch群集配置

单个elasticsearch性能有限,而且无法实现数据冗余,这时候,就需要配置群集了。

5.1 在节点2上同样安装elasticsearch

(所有节点都要安装headkopf插件) 步骤同上

5.2 在节点1(原ELK服务器)上修改配置文件。

其它的保持不变,添加这两行:

discovery.zen.ping.multicast.enabled: false

discovery.zen.ping.unicast.hosts: ["10.0.0.130", "10.0.0.128"]   

这里也就是两个节点的IP

5.3 在节点2上修改配置文件(elasticsearch群集节点

 cluster.name: cluster_1      群集名字要和节点1相同

 node.name: node-2         节点名字  不能重复了

 path.data: /path/to/data    数据目录

path.logs: /path/to/logs   日志目录

network.host: 0.0.0.0    监听地址

http.port: 9200       

discovery.zen.ping.multicast.enabled: true

discovery.zen.ping.unicast.hosts: ["10.0.0.130","10.0.0.128"]    

5.4重启所有节点

重启完成后访问:http://IP:9200/_plugin/kopf/   即可跳转到cluster界面

如图:技术分享

1.@centos ~]# /etc/init.d/elasticsearch restart   

 

到这里,ELK的部署、基本日志监控、群集都部署完成了,但是到这也只是一个入门,深入的话,需要理解logstach配置文件书写方法。后来会补上,未完待续。。。

 

感觉51cto图片显示好奇葩,,,尤其是上面


本文出自 “唐家强” 博客,请务必保留此出处http://tangtangit.blog.51cto.com/10662825/1831847

ELK环境部署与群集配置

标签:elk   群集   日志收集   

原文地址:http://tangtangit.blog.51cto.com/10662825/1831847

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!