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

[经验分享] ELK环境部署与群集配置

[复制链接]

尚未签到

发表于 2019-1-28 08:29:49 | 显示全部楼层 |阅读模式
  .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配置文件书写方法。后来会补上,未完待续。。。
  
  感觉运维网图片显示好奇葩,,,尤其是上面

  





运维网声明 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-668479-1-1.html 上篇帖子: ELK 根据业务配置及优化 下篇帖子: Centos 7 部署ELK Stack+beats+kafka
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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