ELK介绍及搭建 Elasticsearch 分布式集群

笔记内容:ELK介绍及搭建 Elasticsearch 分布式集群
笔记日期:2018-03-02

  • 27.1 ELK介绍
  • 27.2 ELK安装准备工作
  • 27.3 安装es
  • 27.4 配置es
  • 27.5 curl查看es集群情况

ELK介绍

需求背景:

  • 业务发展越来越庞大,服务器越来越多
  • 各种访问日志、应用日志、错误日志量越来越多,导致运维人员无法很好的去管理日志
  • 开发人员排查问题,需要到服务器上查日志,不方便
  • 运营人员需要一些数据,需要我们运维到服务器上分析日志

为什么要用到ELK:

一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大也就是日志量多而复杂的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

大型系统通常都是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

  • 收集-能够采集多种来源的日志数据
  • 传输-能够稳定的把日志数据传输到中央系统
  • 存储-如何存储日志数据
  • 分析-可以支持 UI 分析
  • 警告-能够提供错误报告,监控机制

而ELK则提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。是目前主流的一种日志系统。

ELK简介:

ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana , 它们都是开源软件。不过现在还新增了一个Beats,它是一个轻量级的日志收集处理工具(Agent),Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具,目前由于原本的ELK Stack成员中加入了 Beats 工具所以已改名为Elastic Stack。

Elastic Stack包含:

  • Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。详细可参考Elasticsearch权威指南
  • Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
  • Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
  • Beats在这里是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比 Logstash,Beats所占系统的CPU和内存几乎可以忽略不计

ELK Stack (5.0版本之后)--> Elastic Stack == (ELK Stack + Beats)。目前Beats包含六种工具:

  • Packetbeat: 网络数据(收集网络流量数据)
  • Metricbeat: 指标 (收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
  • Filebeat: 日志文件(收集文件数据)
  • Winlogbeat: windows事件日志(收集 Windows 事件日志数据)
  • Auditbeat:审计数据 (收集审计日志)
  • Heartbeat:运行时间监控 (收集系统运行时的数据)

关于x-pack工具:

  • x-pack对Elastic Stack提供了安全、警报、监控、报表、图表于一身的扩展包,是收费的

ELK官网:

https://www.elastic.co/cn/

中文指南:

https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details

ELK架构图:


ELK安装准备工作

准备3台机器,这样才能完成分布式集群的实验,当然能有更多机器更好:

  • 192.168.77.128
  • 192.168.77.130
  • 192.168.77.134

角色划分:

  • 3台机器全部安装jdk1.8,因为elasticsearch是java开发的
  • 3台全部安装elasticsearch (后续都简称为es)
  • 192.168.77.128作为主节点
  • 192.168.77.130以及192.168.77.134作为数据节点
  • 主节点上需要安装kibana
  • 在192.168.77.130上安装 logstash

配置三台机器的hosts文件内容如下:

$ vim /etc/hosts
192.168.77.128 master-node
192.168.77.130 data-node1
192.168.77.134 data-node2

然后三台机器都得关闭防火墙或清空防火墙规则。


安装es

先上官方的安装文档:

https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html

我这里也是通过官方给的源进行安装,以下操作3台机器上都要执行,因为三台机器都需要安装es:

[[email protected] ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[[email protected] ~]# vim /etc/yum.repos.d/elastic.repo  # 增加以下内容
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[[email protected] ~]# yum install -y elasticsearch

如果使用官方的源下载实在太慢的话,也可以直接下载rpm包进行安装:

[[email protected] ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.rpm
[[email protected] ~]# rpm -ivh elasticsearch-6.0.0.rpm

配置es

elasticsearch配置文件在这两个地方,有两个配置文件:

[[email protected] ~]# ll /etc/elasticsearch
总用量 16
-rw-rw---- 1 root elasticsearch 2869 2月  17 03:03 elasticsearch.yml
-rw-rw---- 1 root elasticsearch 2809 2月  17 03:03 jvm.options
-rw-rw---- 1 root elasticsearch 5091 2月  17 03:03 log4j2.properties
[[email protected] ~]# ll /etc/sysconfig/elasticsearch
-rw-rw---- 1 root elasticsearch 1613 2月  17 03:03 /etc/sysconfig/elasticsearch
[[email protected] ~]# 

elasticsearch.yml 文件用于配置集群节点等相关信息的,elasticsearch 文件则是配置服务本身相关的配置,例如某个配置文件的路径以及java的一些路径配置什么的。

官方的配置文档:

https://www.elastic.co/guide/en/elasticsearch/reference/6.0/rpm.html

开始配置集群节点,在 192.168.77.128 上编辑配置文件:

[[email protected] ~]# vim /etc/elasticsearch/elasticsearch.yml  # 增加或更改以下内容
cluster.name: master-node  # 集群中的名称
node.name: master  # 该节点名称
node.master: true  # 意思是该节点为主节点
node.data: false  # 表示这不是数据节点
network.host: 0.0.0.0  # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200  # es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.168.77.128", "192.168.77.130", "192.168.77.134"] # 配置自动发现
[[email protected] ~]# 

然后将配置文件发送到另外两台机器上去:

[[email protected] ~]# scp /etc/elasticsearch/elasticsearch.yml data-node1:/tmp/
[[email protected] ~]# scp /etc/elasticsearch/elasticsearch.yml data-node2:/tmp/

到两台机器上去更改该文件,修改以下几处地方:

192.168.77.130:

[[email protected] ~]# vim /tmp/elasticsearch.yml
node.name: data-node1
node.master: false
node.data: true
[[email protected] ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml
cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
[[email protected] ~]# 

192.168.77.134:

[[email protected] ~]# vim /tmp/elasticsearch.yml
node.name: data-node2
node.master: false
node.data: true
[[email protected] ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml
cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
[[email protected] ~]# 

完成以上的配置之后,到主节点上,启动es服务:

systemctl start elasticsearch.service

主节点启动完成之后,再启动其他节点的es服务。

排错记录:

我这里启动主节点的时候没有启动成功,于是查看es的日志,但是却并没有生成,那就只能去看系统日志了:

[[email protected] ~]# ls /var/log/elasticsearch/
[[email protected] ~]# tail -n50 /var/log/messages

错误日志如下:

如图,可以看到是JDK的路径配置得不对,没法在PATH里找到相应的目录。

于是查看JAVA_HOME环境变量的值指向哪里:

[[email protected] ~]# echo $JAVA_HOME
/usr/local/jdk1.8/
[[email protected] ~]# ls /usr/local/jdk1.8/
bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt
[[email protected] ~]# 

发现指向的路径并没有错,那就可能是忘记在profile里写export了,于是在profile的末尾加上了这一句:

export JAVA_HOME JAVA_BIN JRE_HOME PATH CLASSPATH

使用source命令重新加载了profile之后,重新启动es服务,但是依旧启动不起来,于是我发现我忽略了一条错误日志:

这是无法在环境变量中找到java可执行文件,那就好办了,做一个软链接过去即可:

[[email protected] ~]# ln -s /usr/local/jdk1.8/bin/java /usr/bin/

再次启动es服务,这次就终于启动成功了:

[[email protected] ~]# systemctl restart elasticsearch.service
[[email protected] ~]# ps aux |grep elasticsearch
elastic+   2655  9.4 31.8 3621592 1231396 ?     Ssl  15:42   0:14 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch.4M9NarAc -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/log/elasticsearch/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet
root       2735  0.0  0.0 112660   968 pts/0    S+   15:44   0:00 grep --color=auto elasticsearch
[[email protected] ~]# netstat -lntp |grep java  # es服务会监听两个端口
tcp6       0      0 :::9200                 :::*                    LISTEN      2655/java
tcp6       0      0 :::9300                 :::*                    LISTEN      2655/java
[[email protected] ~]# 

9300端口是集群通信用的,9200则是数据传输时用的。

主节点启动成功后,依次启动其他节点即可,我这里其他节点都是启动正常的。


curl查看es集群情况

集群的健康检查:

[[email protected] ~]# curl ‘192.168.77.128:9200/_cluster/health?pretty‘
{
  "cluster_name" : "master-node",
  "status" : "green",  # 为green则代表健康没问题,如果是yellow或者red则是集群有问题
  "timed_out" : false,  # 是否有超时
  "number_of_nodes" : 3, # 集群中的节点数量
  "number_of_data_nodes" : 2, # 集群中data节点的数量
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
[[email protected] ~]# 

查看集群的详细信息:

[[email protected] ~]# curl ‘192.168.77.128:9200/_cluster/state?pretty‘
{
  "cluster_name" : "master-node",
  "compressed_size_in_bytes" : 354,
  "version" : 4,
  "state_uuid" : "QkECzZHVQJOXB7K_9CgXYQ",
  "master_node" : "SGez5oKUTa2eIijLp8MsLQ",
  "blocks" : { },
  "nodes" : {
    "4sJURH6cTsykgLberJ6pVw" : {
      "name" : "data-node1",
      "ephemeral_id" : "t16_uw92T5ajJqp2HWodrg",
      "transport_address" : "192.168.56.128:9300",
      "attributes" : { }
    },
    "SGez5oKUTa2eIijLp8MsLQ" : {
      "name" : "master",
      "ephemeral_id" : "eJZX20tpSNyJCHgBIC4x4Q",
      "transport_address" : "192.168.77.128:9300",
      "attributes" : { }
    },
    "nZ4L5-KwSdirnluhJTGn7Q" : {
      "name" : "data-node2",
      "ephemeral_id" : "pQENcoUcRY6fTs7SamX2KQ",
      "transport_address" : "192.168.77.134:9300",
      "attributes" : { }
    }
  },
  "metadata" : {
    "cluster_uuid" : "jZPv-awrQDe163Nu3y2hHw",
    "templates" : { },
    "indices" : { },
    "index-graveyard" : {
      "tombstones" : [ ]
    }
  },
  "routing_table" : {
    "indices" : { }
  },
  "routing_nodes" : {
    "unassigned" : [ ],
    "nodes" : {
      "nZ4L5-KwSdirnluhJTGn7Q" : [ ],
      "4sJURH6cTsykgLberJ6pVw" : [ ]
    }
  },
  "restore" : {
    "snapshots" : [ ]
  },
  "snapshot_deletions" : {
    "snapshot_deletions" : [ ]
  },
  "snapshots" : {
    "snapshots" : [ ]
  }
}
[[email protected] ~]# 

检查没有问题后,我们的es集群就搭建完成了,很简单。

更多使用curl命令操作elasticsearch的内容,可参考以下文章:

http://zhaoyanblog.com/archives/732.html

原文地址:http://blog.51cto.com/zero01/2079879

时间: 2024-10-12 12:36:09

ELK介绍及搭建 Elasticsearch 分布式集群的相关文章

Spark入门 - 1 搭建Hadoop分布式集群

安装Ubuntu系统 不论是通过虚拟机方式还是直接在物理机上安装Ubuntu系统,网上都有丰富的教程,此处不再赘述. 为了方便起见,此处设置的机器名最好与书本的设置一致:Master.Slave1和Slave2. 配置root用户登录 这里有一步与普通教程不同.在安装好系统,重启之后,完成了相关配置.可以进行这一步,设置使用root用户登录,方便以后多个服务器相互操作.如下所示. 为了简化权限问题,需要以root用户的身份登录使用Ubuntu系统.而在默认情况下,Ubuntu没有开启root用户

搭建Spark分布式集群

搭建Spark分布式集群 0.准备 先准备好以下软件: 软件 版本 ubuntu 14.04 64bit java jdk1.8.0_25 64bit hadoop 2.4.1 64bit scala 2.10.4 spark 1.1.0 maven 3.2.3 1.设置静态IP Ubuntu系统设置静态IP l 设置静态IP Sudogedit /etc/network/interfaces 修改文件: autolo ifaceio inet loop back autoeth0 ifacee

在 Ubuntu 上搭建 Eadoop 分布式集群 Eclipse 开发环境

一直在忙Android FrameWork,终于闲了一点,利用空余时间研究了一下Hadoop,并且在自己和同事的电脑上搭建了分布式集群,现在更新一下blog,分享自己的成果. 一 .环境 1.操作系统:Ubuntu 12.04 LTS 64位 2.Java版本:openjdk-7-jdk 3.Hadoop版本:2.6.0 4.结点信息: 机器名 IP hostname 作用 master 10.13.14.83 rdcdz140395 NameNode and JobTracker slave-

centos7搭建伪分布式集群

centos7搭建伪分布式集群 需要 centos7虚拟机一台: jdk-linux安装包一个 hadoop-2.x安装包1个(推荐2.7.x) 一.设置虚拟机网络为静态IP(最好设成静态,为之后编程提供方便,不设置静态ip也可以) 1.进入网络配置查看ip 2.选择NAT模式链连接 3.点击NAT设置,记住网关IP,后面要用到 4.进入终端,输入命令: cd  /etc/sysconfig/network-scripts,然后 vim ./ifcfg-eth0,(有的虚拟机是文件是:ifcfg

使用Docker在本地搭建Hadoop分布式集群

学习Hadoop集群环境搭建是Hadoop入门必经之路.搭建分布式集群通常有两个办法: 要么找多台机器来部署(常常找不到机器) 或者在本地开多个虚拟机(开销很大,对宿主机器性能要求高,光是安装多个虚拟机系统就得搞半天……). 那么,问题来了! 有没有更有可行性的办法? 提到虚拟化,Docker最近很是火热!不妨拿来在本地做虚拟化,搭建Hadoop的伪分布式集群环境.虽然有点大材小用,但是学习学习,练练手也是极好的. 文章比较长,建议先倒杯水,听我慢慢到来…… 先说一下我的思路吧: 先使用Dock

elasticsearch 分布式集群搭建

elasticsearch环境搭建及单节点搭建可参考我的上一篇:http://www.cnblogs.com/xuwenjin/p/8745624.html 本文以Elaticsearch 6.2.2 版本为基础,讲解Elasticsearch三个节点的分布式部署.核心配置的含义以及分布式部署遇到的坑 楼主是在一台机器上配置的,所有下面的network.host全部配置同一IP 1.配置节点 1.1配置主节点: #集群名称 cluster.name: xwj #节点名称 node.name: m

搭建docker-spark-hadoop-hive-zeppelin分布式集群环境

一.软件准备 1.基础docker镜像:ubuntu,目前最新的版本是18 2.需准备的环境软件包: (1) spark-2.3.0-bin-hadoop2.7.tgz (2) hadoop-2.7.3.tar.gz (3) apache-hive-2.3.2-bin.tar.gz (4) jdk-8u101-linux-x64.tar.gz (5) mysql-5.5.45-linux2.6-x86_64.tar.gz.mysql-connector-java-5.1.37-bin.jar (

(转)CentOS7.4环境下搭建--Gluster分布式集群存储

原文:https://blog.csdn.net/qq_39591494/article/details/79853038 环境如下:OS:Centos7.4x86_64IP地址如下: Daasbank1: 192.168.1.102---CentOS7.4x86_64 Daasbank2: 192.168.1.103---CentOS7.4x86_64 Daasbank3: 192.168.1.105---CentOS7.4x86_64 Client: 192.168.1.106---Cent

CDH搭建Hadoop分布式集群(超级小白)

1首先对于一个java还白的小白,先理解CDH与Hadoop的关系 一.Hadoop版本选择. Hadoop大致可分为Apache Hadoop和第三方发行第三方发行版Hadoop,考虑到Hadoop集群部署的高效,集群的稳定性, 以及后期集中的配置管理,业界多使用Cloudera公司的发行版,简称为CDH. 下面是转载的Hadoop社区版本与第三方发行版本的比较: Apache社区版本 优点: 完全开源免费.社区活跃文档.资料详实 缺点: 因为很活跃所以版本对应关系,各个版本层出不穷,让使用者