dsfsfs 发表于 2019-1-28 08:29:49

ELK环境部署与群集配置

  一.ELK是什么?
  1.1ELK由来
   ELK是elasticsearch,logstash,kibana这三个工具的简称
  
  1.2ELK三个组件的介绍
  Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  
   Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
  
  Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
  
  要注意的是elasticsearch要和kibana的版本兼容,否则kibana会无法配合elasticsearch显示日志,比如,kibana4.5.3就无法兼容elasticsearch2.2及其以下的版本
  1.3ELK原理图
  

  二、安装配置ELK环境

  http://s5.运维网.com/wyfs02/M00/85/29/wKiom1ebKRaCZe8CAARBsAIWTWo260.png-wh_500x0-wm_3-wmp_4-s_3604484556.png
  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安装完成
  # 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兼容。
  wgethttps://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.logcluster_1_index_indexing_slowlog.logcluster_1_index_search_slowlog.logcluster_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/即可看到elasticsearch的WEB管理界面
  如图:
http://s2.运维网.com/wyfs02/M00/85/29/wKioL1ebKWbyNfGLAAFtxZqFJAw379.png-wh_500x0-wm_3-wmp_4-s_119840440.png
  
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管理界面
  
   http://s5.运维网.com/wyfs02/M01/85/29/wKioL1ebKYWw5PbxAAC_RsJrAnk889.png-wh_500x0-wm_3-wmp_4-s_1941041192.png
  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下# ll /opt/
  总用量 8
  drwxr-xr-x5 logstash logstash 4096 5月25 23:03 logstash
  
2.3.6 启动logstash
  -e参数:执行
  input:输入
  output:输出
  -d参数:daemon模式,后台启动(守护进程)
  
  # /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
  
  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
  
  # grep '^' /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置文件
  
  查看是否监听端口
  # netstat -anpt |grep 5601
  tcp      0      0 0.0.0.0:5601                0.0.0.0:*                   LISTEN      3621/node   
  
  到此,ELK环境就已经部署完成了
  三.收集本机日志
3.1 创建日志索引
在浏览器访问kibana:http://IP:5601就可以看到kibana的页面了
登录之后,首先配置一个索引,默认kibana的数据被指向Elasticsearch,使用默认的logstash-*的索引名称,并且是基于时间(@timestamp)的,如下

http://s5.运维网.com/wyfs02/M01/85/29/wKioL1ebKcSD1qAgAAitN1fY7bA043.png-wh_500x0-wm_3-wmp_4-s_1903133703.png
点击“Create”,看到如下界面说明索引创建完成。

http://s2.运维网.com/wyfs02/M02/85/29/wKiom1ebKdnArk76AAURTV1954I365.png-wh_500x0-wm_3-wmp_4-s_248420202.png点击“Discover”,可以搜索和浏览Elasticsearch中的数据,默认搜索的是最近15分钟的数据,可以自定义选择时间。

3.2 收集本地系统日志
将logstash配置为索引器,并将logstash的日志数据存储到Elasticsearch,本范例主要是索引本地系统日志
#cd /usr/local/logstash/config         路径无所谓
#vimlogstash-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
如下图:http://s3.运维网.com/wyfs02/M02/85/29/wKioL1ebKfaQ0UIXAADYSCVJVlU006.png-wh_500x0-wm_3-wmp_4-s_3292892521.png
测试从一台服务器(ip为10.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 Apr1 17:31:32 2016 from 10.0.90.8
然后查看kibana,看是否搜集到了日志




然后到kibana界面刷新下,就可以看到日志信息了。
http://s5.运维网.com/wyfs02/M00/85/29/wKioL1ebKkLhc8E0AAE5qBeGW_o185.png

以上表示搜集日志成功。


收集多个日志,开启多个logstash进程即可
/opt/logstash/bin/logstash -f ./logstash-indexer.conf &    收集/var/log/secure和message
/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...                ###########################################
   1:jdk1.8.0_77            ###########################################
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
  (所有节点都要安装head和kopf插件) 步骤同上
  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界面
  如图:http://s2.运维网.com/wyfs02/M01/85/29/wKiom1ebKvnx6t15AADcOtqZoHo360.png-wh_500x0-wm_3-wmp_4-s_724591059.png
  1.@centos ~]# /etc/init.d/elasticsearch restart   
  
  到这里,ELK的部署、基本日志监控、群集都部署完成了,但是到这也只是一个入门,深入的话,需要理解logstach配置文件书写方法。后来会补上,未完待续。。。
  
  感觉运维网图片显示好奇葩,,,尤其是上面

  




页: [1]
查看完整版本: ELK环境部署与群集配置