12.0、架构图:

服务器名称

ip地址

controller-node1(主)

172.16.1.90

slave-node1(从)

172.16.1.91

12.1、elk介绍:

(1)ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻

量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

(2)Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分

片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

1)NRT:

elasticsearch是一个近似实时的搜索平台,从索引文档到可搜索有些延迟,通常为1秒。

2)集群:

集群就是一个或多个节点存储数据,其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一

性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。一个集

群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。

3)节点:

节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机

分配的字符名。当然啦,你可以自己定义。该名字也蛮重要的,在集群中用于识别服务器对应的节点。节点可以通过指定集群名字来加入到集群中。默认情况

下,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。

4)索引:

索引是有几分相似属性的一系列文档的集合。如nginx日志索引、syslog索引等等。索引是由名字标识,名字必须全部小写。这个名字用来进行索引、搜

索、更新和删除文档的操作。 索引相对于关系型数据库的库。

5)类型:

在一个索引中,可以定义一个或多个类型。类型是一个逻辑类别还是分区完全取决于你。通常情况下,一个类型被定于成具有一组共同字段的文档。如ttlsa

运维生成时间所有的数据存入在一个单一的名为logstash-ttlsa的索引中,同时,定义了用户数据类型,帖子数据类型和评论类型。 类型相对于关系型数据库的表。

6)文档:

文档是信息的基本单元,可以被索引的。文档是以JSON格式表现的。 在类型中,可以根据需求存储多个文档。虽然一个文档在物理上位于一个索引,实际上一个文档

必须在一个索引内被索引和分配一个类型。 文档相对于关系型数据库的列。

7)分片和副本:

在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个十亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太

慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索

引,可以位于集群中任何节点上。

A、分片的两个最主要原因:

a、水平分割扩展,增大存储量;

b、分布式并行跨分片操作,提高性能和吞吐量,分布式分片的机制和搜索请求的文档如何汇总完全是有elasticsearch控制的,这些对用户而言是透明的。 网络问题等等

其它问题可以在任何时候不期而至,为了健壮性,强烈建议要有一个故障切换机制,无论何种故障以防止分片或者节点不可用。 为此,elasticsearch让我们将索引分片复

制一份或多份,称之为分片副本或副本。

B、副本也有两个最主要原因:

a、高可用性,以应对分片或者节点故障。出于这个原因,分片副本要在不同的节点上。

b、提供性能,增大吞吐量,搜索可以并行在所有副本上执行。

C、总之,每一个索引可以被分成多个分片。索引也可以有0个或多个副本。复制后,每个索引都有主分片(母分片)和复制分片(复制于母分片)。分片

和副本数量可以在每个索引被创建时定义。索引创建后,可以在任何时候动态的更改副本数量,但是,不能改变分片数。 默认情况下,elasticsearch为每个索引分片5个

主分片和1个副本,这就意味着集群至少需要2个节点。索引将会有5个主分片和5个副本(1个完整副本),每个索引总共有10个分片。 每个elasticsearch分片是一个

Lucene索引。一个单个Lucene索引有最大的文档数LUCENE-5843, 文档数限制为2147483519(MAX_VALUE – 128)。 可通过_cat/shards来监控分片大小。

(3)Logstash主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要

收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

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

(5)Filebeat隶属于Beats。目前Beats包含四种工具:

1)Packetbeat(搜集网络流量数据);

2)Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);

3)Filebeat(搜集文件数据);

4)Winlogbeat(搜集 Windows 事件日志数据);

12.2、前期准备:

主从服务器的准备一致;

1、增大系统文件描述符:

echo '* hard nofile 65535' >>/etc/security/limits.conf

echo '* soft nofile 65535' >>/etc/security/limits.conf

2、关闭防火墙:

systemctl stop firewalld.service

systemctl disable firewalld.service

systemctl status firewalld.service

3、关闭selinux:

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

grep "SELINUX=disabled" /etc/selinux/config

setenforce 0

getenforce

4、保证两台服务器的时间一致:

crontab -e

*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com $>/dev/null

12.3、建立新的磁盘分区:

因为elk存储的数据量比较大对io有一定的影响,所以需要把数据放在新的磁盘分区上;

主节点和从节点配置相同;

1、磁盘分区:

在虚拟机关机的情况下添加20G的虚拟磁盘,开机后使用fdisk工具对磁盘只分一个分区;

2、格式化磁盘;

mkfs.xfs /dev/sdb1

3、挂载磁盘:

mkdir -p /data/

blkid /dev/sdb1

/dev/sdb1: UUID="ff880315-2872-49dd-b867-d80beb66a20f" TYPE="xfs"

vim /etc/fstab

UUID=ff880315-2872-49dd-b867-d80beb66a20f /data xfs defaults 0 0

#使用磁盘分区的uuid挂载磁盘,防止重启服务器后磁盘名称(/dev/sdb...) 发生改变;

mount -a

df -hT

/dev/sdb1 xfs 20G 33M 20G 1% /data

12.4、安装elasticsearch:

主从服务器安装方法一致;

1、下载软件包:

mkdir /tools/

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-x86_64.rpm

#说明:因为该版本的rpm包中自带版本适应性jdk,所以不需要另下jdk rpm包;

2、安装:

cd /tools/

rpm -ivh elasticsearch-7.0.0-x86_64.rpm

3、配置elasticsearch主配置文件:

grep "^[a-z]" /etc/elasticsearch/elasticsearch.yml

cluster.name: elk-cluster

#集群的名称,一个集群中唯一;

node.name: elk-node1

#节点名称,每个节点唯一;

path.data: /data/elkdata

#节点存放索引的目录;

path.logs: /data/logs

#节点存放日志的目录;

bootstrap.memory_lock: true

#开启内存锁;

network.host: 172.16.1.90

#监听的网卡;

http.port: 9200

#9200作为Http协议,主要用于外部通讯;9300作为Tcp协议,jar之间就是通过tcp协议通讯,集群之间是通过9300进行通讯;

discovery.seed_hosts: ["172.16.1.90", "172.16.1.91"]

#集群中节点列表;

cluster.initial_master_nodes: ["172.16.1.90"]

#集群中的主节点;

http.cors.enabled: true

http.cors.allow-origin: "*"

#授权跨域访问,因为从另外一个域的浏览器访问ES服务器数据,会出现跨域的问题;

4、创建数据和日志存放目录并授权:

mkdir -p /data/{elkdata,logs}

chown -R elasticsearch.elasticsearch /data/

5、修改内存限制:

因为在上面的主配置文件中开启了bootstrap.memory_lock: true内存锁,不修改以下配置文件会导致elasticsearch启动失败;

(1)修改内存锁定的大小:

vim /etc/elasticsearch/jvm.options

-Xms2g

-Xmx2g

#说明: 默认锁定内存是1GB,该参数是锁定elasticsearch内存防止其用尽系统的内存,一般设置为服务器内存的50%最好,但是最大不能超过32G;

(2)开启内存锁定:

vim /usr/lib/systemd/system/elasticsearch.service

LimitMEMLOCK=infinity

#说明:改参数需要自己添加,要放到[install]标签的上面,不然启动不了;

6、启动elasticsearch服务并加入开机自启动:

systemctl enable elasticsearch.service

systemctl start elasticsearch.service

netstat -tunlp | egrep "9200|9300"

tcp6 0 0 172.16.1.90:9200 :::* LISTEN 5888/java

tcp6 0 0 172.16.1.90:9300 :::* LISTEN 5888/java

7、登录验证:

12.5、安装elasticsearch的插件:

该插件作为单独的服务运行,主要是监控集群的作用,该插件装在主节点上;

1、下载插件:

yum install git -y

cd /tools/

git clone https://github.com/mobz/elasticsearch-head.git

2、安装:

mkdir -p /application/

cd /tools/

cp -a elasticsearch-head/ /application/

cd /application/elasticsearch-head/

yum install npm -y

npm install grunt -save

ll node_modules/grunt

npm install

提示:修改监听的网卡地址:

vim /application/elasticsearch-head/Gruntfile.js

connect: {

server: {

options: {

hostname: '服务器ip',

port: 9100,

base: '.',

keepalive: true

}

}

}

3、启动:

cd /application/elasticsearch-head/

npm run start & &>/dev/null

netstat -tunlp | grep 9100

tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 9645/grunt

4、网页访问:

(1)

(2)连接说明:

在上面的箭头框内输入http://172.16.1.90:9200后点击连接,连接的是elk-node1节点上由于是集群且在节点上都授予

了跨域访问的权限,所以其它的节点也会显示出来并且知道整个集群的健康状态,同理输入其它节点也是一样的道理;

(3)集群健康颜色说明 :

绿色——最健康的状态,代表所有的主分片和副本分片都可用;

黄色——所有的主分片可用,但是部分副本分片不可用;

红色——部分主分片不可用,此时执行查询部分数据仍然可以查到,遇到这种情况,还是赶快解决比较好;

(4)使用命令查看集群健康状态:

curl http://172.16.1.90:9200/_cluster/health?pretty=true

{

"cluster_name" : "elk-cluster",

"status" : "green",

"timed_out" : false,

"number_of_nodes" : 2,

"number_of_data_nodes" : 2,

"active_primary_shards" : 5,

"active_shards" : 10,

"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

}

(5)将服务加入到开机自启动:

chmod +x /etc/rc.d/rc.local

echo 'cd /application/elasticsearch-head/ && /usr/bin/npm run start & &>/dev/null' >>/etc/rc.local

(6)通过脚本判断集群健康状态:

此脚本方便zabbix进行监控;

[root@controller-node1 ~]# vim /scripts/elastic-health.py

#!/usr/bin/env/ python

#coding:utf-8

import subprocess

false="false"

obj=subprocess.Popen(("curl -sXGET http://172.16.1.90:9200/_cluster/health?pretty=true"),shell=True,stdout=subprocess.PIPE)

data=eval(obj.stdout.read())

status=data.get("status")

if status == "green":

print "0"

else:

print "1"

#在elasticsearch集群正常的情况下:

[root@controller-node1 ~]# python /scripts/elastic-health.py

0

#在elasticsearch集群损坏的情况下:

[root@controller-node1 ~]# python /scripts/elastic-health.py

1

12.6、安装logstash:

logstash是日志收集工具,这里将其装在从节点上,在实际的环境中是装在需要收集日志的服务器上的;

1、安装java环境:

cd /tools/

wget https://download.oracle.com/otn/java/jdk/8u202-b08/1961070e4c9b4e26a04e7f5a083f551e/jdk-8u202-linux-x64.rpm

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

2、安装:

cd /tools/

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.0.0.rpm

rpm -ivh logstash-7.0.0.rpm

3、配置主配置文件:

vim /etc/logstash/logstash.yml

http.host: "172.16.1.91"

4、测试logstash:

1)普通测试:

/usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout { codec => rubydebug } }'

......

2

{

"host" => "slave-node1",

#标记时间发生的位置;

"@version" => "1",

#事件版本号,一个事件就是一个ruby对象;

"@timestamp" => 2019-05-09T16:18:12.377Z,

#当前事件发生的时间;

"message" => "2"

#消息的具体内容;

}

2)压缩测试:

/usr/share/logstash/bin/logstash -e 'input { stdin {} } output { file { path => "/tmp/test-%{+YYYY.MM.dd}.log.gz" gzip => "true" } }'

hello

[INFO ] 2019-05-10 01:24:49.984 [[main]>worker0] file - Opening file {:path=>"/tmp/test-2019.05.09.log.gz"}

[INFO ] 2019-05-10 01:25:07.098 [[main]>worker0] file - Closing file /tmp/test-2019.05.09.log.gz

ls -l /tmp/test-2019.05.09.log.gz

-rw-r--r-- 1 root root 115 5月 10 01:25 /tmp/test-2019.05.09.log.gz

gzip -d /tmp/test-2019.05.09.log.gz

cat /tmp/test-2019.05.09.log

{"@version":"1","@timestamp":"2019-05-09T17:24:49.324Z","host":"slave-node1","message":"hello"}

3)写入到elasticsearch测试:

/usr/share/logstash/bin/logstash -e 'input { stdin {} } output { elasticsearch { hosts => ["172.16.1.90:9200"] index => "logstash-test-%{+YYYY.MM.dd}" } }'

#在界面中查看集群收到的索引:

#索引在节点上存放的位置:

ll /data/elkdata/nodes/0/indices/

总用量 0

drwxr-xr-x 4 elasticsearch elasticsearch 29 5月 10 01:33 7yFKJD2NTHG91O-N71rGqw

#提示:在删除索引时,要在集群的监控界面(动作选项)删除;切勿在节点上存放索引的物理目录中删除,因为集群节点上每个都有这样的数据,删除某一个,可能会导致elasticsearch无法启动。

5、启动logstash服务并加入开机自启动:

chown -R logstash.logstash /usr/share/logstash/data/queue/

#权限更改为logstash用户和组,否则启动时日志报错;

systemctl start logstash

systemctl enable logstash

netstat -tunlp | grep 9600

tcp6 0 0 172.16.1.91:9600 :::* LISTEN 791/java

12.7、安装kibana:

kibana为elasticsearch集群提供一个友好的web界面(和上面安装的elasticsearch插件类似,只是功能更多),我们将其装在主节点上;

1、安装:

cd /tools/

wge thttps://artifacts.elastic.co/downloads/kibana/kibana-7.0.0-x86_64.rpm

rpm -ivh kibana-7.0.0-x86_64.rpm

2、配置主配置文件:

grep "^[a-z]" /etc/kibana/kibana.yml

server.port: 5601

#kibana服务端口号;

server.host: "172.16.1.90"

#kibana监听的ip地址;

elasticsearch.hosts: ["http://172.16.1.90:9200"]

#kibana连接elasticsearch的url地址;

3、启动kibana服务并加入开机自启动:

systemctl enable kibana.service

systemctl start kibana.service

netstat -tunlp | grep 5601

tcp 0 0 172.16.1.90:5601 0.0.0.0:* LISTEN 3014/node

4、使用浏览器进行访问:

12、elk的使用(1)的更多相关文章

  1. ELK实践(一):基础入门

    虽然用了ELK很久了,但一直苦于没有自己尝试搭建过,所以想抽时间尝试尝试.原本打算按照教程 <ELK集中式日志平台之二 - 部署>(作者:樊浩柏科学院) 进行测试的,没想到一路出了很多坑, ...

  2. ELK处理Spring Boot 日志,妙!

    在排查线上异常的过程中,查询日志总是必不可缺的一部分.现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难. 工欲善其事,必先利其器.如果此时有一个统一的实时日志分析平台,那 ...

  3. ELKStack之极速入门(上)

    ELKStack之极速入门(上) 链接:https://pan.baidu.com/s/1V2aYpB86ZzxL21Hf-AF1rA 提取码:7izv 复制这段内容后打开百度网盘手机App,操作更方 ...

  4. ELK6环境搭建

    (一)什么是ELK Stack ELK 到底是什么呢? "ELK"是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kibana. E ...

  5. python 各模块

    01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...

  6. Python Standard Library

    Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...

  7. 在mybatis中写sql语句的一些体会

    本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...

  8. 12.10、elk实用案例

    1.架构图: 服务器名称 ip地址 controller-node1(主) 172.16.1.90 slave-node1(从) 172.16.1.91 2.安装filebeat: filebeat不 ...

  9. ELK——在 CentOS/Linux 把 Kibana 3.0 部署在 Nginx 1.9.12

    上一篇文章<安装 logstash 2.2.0.elasticsearch 2.2.0 和 Kibana 3.0>,介绍了如何安装 Logstash.Elasticsearch 以及用 P ...

随机推荐

  1. systemctl服务------字符和图像界面切换systemctl set-default multi-user.target systemctl isolate multi-user.target #当前立即进入字符模式 [root@room4pc09 桌面]# systemctl isolate graphical.target #当前立即进入图形模式

    查看服务运行状态 [root@room4pc09 桌面]# systemctl status crond #查看服务运行状态 ● crond.service - Command Scheduler L ...

  2. Docker------Linux安装Docker

    1.添加yum源 yum install epel-release –y yum clean all yum list 2.安装并运行Docker yum install docker-io –y s ...

  3. 使用 IPMI 远程为服务器安装操作系统教程

    使用 IPMI 远程为服务器安装操作系统教程 shida_csdn 2019-01-09 11:30:10 9588 收藏 16展开一.什么是 IPMI? IPMI 是智能平台管理接口(Intelli ...

  4. 一看就懂的 安装完ubuntu 18.04后要做的事情和使用教程

    一看就懂的 安装完ubuntu 18.04后要做的事情和使用教程原创CrownP 最后发布于2019-02-05 00:48:30 阅读数 2982 收藏展开1.更改为阿里云的源点击软件和更新 点击其 ...

  5. mysql基础之数据库备份和恢复实操

    一.基于二进制文件的恢复*** 1.算好要恢复数据的时间段,重定向输入到bin.sql文件中 [root@ren7 mysql]# mysqlbinlog --start-datetime=" ...

  6. [leetcode] 212. 单词搜索 II(Java)

    212. 单词搜索 II 这leetcode的评判机绝对有问题!!同样的代码提交,有时却超时!害得我至少浪费两个小时来寻找更优的答案= =,其实第一次写完的代码就可以过了,靠!!!第207位做出来的 ...

  7. Docker删除某个容器时失败解决方案

    删除某个容器时,报错 ocker rm 容器id   image is being used by stopped container e11efb30362a   该报错的原因是要删除的该镜像,被某 ...

  8. ML Pipelines管道

    ML Pipelines管道 In this section, we introduce the concept of ML Pipelines. ML Pipelines provide a uni ...

  9. 在 CUDA C/C++ kernel中使用内存

    在 CUDA C/C++ kernel中使用内存 如何在主机和设备之间高效地移动数据.本文将讨论如何有效地从内核中访问设备存储器,特别是 全局内存 . 在 CUDA 设备上有几种内存,每种内存的作用域 ...

  10. JUC下工具类CountDownLatch用法以及源码理解

    CountDownLoatch是JUC下一个用于控制计数的计数器,比如我需要从6开始计数,每个线成运行完之后计数减一,等计数器到0时候开始执行其他任务. public static void main ...