IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> ELK(ElasticSearch Logstash Kibana) -> 正文阅读

[系统运维]ELK(ElasticSearch Logstash Kibana)

一、ELK介绍

ELK简介
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。主要负责将日志索引并存储起来,方便业务方检索查询。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。

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

二、elasticsearch实战

1.elasticsearch简介

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene? 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:

1.分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
2.实时分析的分布式搜索引擎。
3.可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

2.elasticsearch安装与配置

server2/3/4安装软件

软件下载:https://elasticsearch.cn/download/
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/index.html

安装软件:
rpm -ivh jdk-8u171-linux-x64.rpm
rpm -ivh elasticsearch-7.6.1-x86_64.rpm //7.6版本自带jdk

设置服务自启:
systemctl daemon-reload
systemctl enable elasticsearch

在下载软件后,修改配置文件:

vim /etc/elasticsearch/elasticsearch.yml 
 17 cluster.name: my-es                                //集群名称
 23 node.name: server2                                //主机名,需要解析
 33 path.data: /var/lib/elasticsearch                    //数据目录
 37 path.logs: /var/log/elasticsearch                    //日志目录
 43 #bootstrap.memory_lock: true                        //锁定内存,内存小时千万不要开(我这里不开了)
 55 network.host: 172.25.254.2                            //主机IP
 59 http.port: 9200                                        //http服务端口
 68 discovery.seed_hosts: ["server2", "server3", "server4"]            //集群中包含的节点
 72 cluster.initial_master_nodes: ["server2", "server3", "server4"]        //集群中的master节点(在启动这个集群的时候要找一个引导节点 derver2、3、4都可以成为引导节点)
 

上述在server2上已经做出下载及相应配置,此时要在server 3、4上做相同的配置,我们直接复制相关文件过去即可:

[root@server2 ~]# scp elasticsearch-7.6.1-x86_64.rpm server3:~
[root@server2 ~]# scp elasticsearch-7.6.1-x86_64.rpm server4:~
然后修改相应参数即可。
 systemctl enable --now elasticsearch  ## 设置服务自启

在这里插入图片描述

cat /var/log/elasticsearch/my-es.log

由下图可知,9300端口是节点之间用来通信的端口,ES集群之间是通过9300进行通讯。
并且 他会在三个节点中选一个当master(当然每个节点都有成为master的可能,他会自行选举),现在是分布式的节点,down一个,其他三个还都能用。

在这里插入图片描述
此时 三台机器的elasticsearch.service均已启动,现在我们需要一个图形来管理这个集群,当然用命令行也可以去控制,并且官方也给出了文档,(https://www.elastic.co/guide/en/elasticsearch/reference/7.6/cluster-health.html
在这里插入图片描述
类似于下图,有好多API文档 都是关于管理的,可以自行查看:
在这里插入图片描述
在这里插入图片描述

3.elasticsearch图形化插件安装——elasticsearch-head

1.安装

上面我们也介绍到了:ealsticsearch只是后端提供各种api,那么怎么直观的使用它呢?elasticsearch-head将是一款专门针对于elasticsearch的客户端工具。

安装elasticsearch-head插件

安装docker镜像或者通过github下载elasticsearch-head项目都是可以的,1或者2两种方式选择一种安装使用即可

1. 使用docker的集成好的elasticsearch-head

    # docker run -p 9100:9100 mobz/elasticsearch-head:5

        docker容器下载成功并启动以后,运行浏览器打开http://localhost:9100/

2. 使用git安装elasticsearch-head

    # yum install -y npm

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

    # cd elasticsearch-head

    # npm install

    # npm run start

        检查端口是否起来

        netstat -antp |grep 9100

    浏览器访问测试是否正常

        http://IP:9100/

下面介绍详细的安装步骤:

官方文档:https://gitcode.net/mirrors/mobz/elasticsearch-head?utm_source=csdn_github_accelerator

下载elasticsearch-head插件:

# wget https://github.com/mobz/elasticsearch-head/archive/master.zip
 
# unzip elasticsearch-head-master.zip

head插件本质上是一个nodejs的工程(其实就是前端),因此需要安装node:

# wget https://mirrors.tuna.tsinghua.edu.cn/nodesource/rpm_9.x/el/7/x86_64/nodejs-9.11.2-1nodesource.x86_64.rpm
# rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm
# node -v
# npm -v	

更换npm源安装

cd elasticsearch-head-master/
npm install  --registry=https://registry.npm.taobao.org  ##更换为国内淘宝的镜像源,不然安装的时候会很慢

当然中途遇到一个软件从github上下载 特别慢,所以我们直接按照下图所示安装即可:

在这里插入图片描述
在这里插入图片描述
修改ES集群的主机ip和端口(入口):任何节点都可以,这里以server2为例

# vim elasticsearch-head-master/_site/app.js
 
    4388 "http://172.25.254.2:9200"

在这里插入图片描述

上面的修改代表这个插件(简单服务)和我们的es集群是相互独立的,因为它是通过http端口来访问的,不一定要安装在一个节点上,完全可以再开一台机器来运行它。

启动head插件

# npm run start &  ##必须在elasticsearch-head-master目录里面运行,不然就得不到里面的依赖文件了

下图也展示了,9100端口已经起来了。
在这里插入图片描述

端口监听:通过某一端口来提供某一项服务。ip上有某一个接口,说明该程序在运行,没有就说明该程序没在运行。
我们可以把端口理解为 程序对外开放的接口。

接下来,修改ES跨域主持(server2/3/4三个节点都要设置)
在这里插入图片描述

#vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true	# 是否支持跨域
http.cors.allow-origin: "*"	# *表示支持所有域名

在这里插入图片描述

最后,重启ES服务

# systemctl restart elasticsearch.service 

因上上面设置监听了本机所有端口,所以可以直接通过localhost来访问9200端口:
在这里插入图片描述
在这里插入图片描述

2.测试

在server2中添加数据
在这里插入图片描述
在这里插入图片描述

由上图可知:Server3、4上是有一个索引的,刚刚我们创建的index,数据存在3和4上,默认情况下server2也是可以存储的,可以看到 每个节点的节点状态都是一样的,但是在生产环境里面我们会将他们做一个区分,这样更利于集群的运行。(不然server2既要管理集群,又要存储数据,压力蛮大的,所以我们让节点各司其职就好了)

在这里插入图片描述

4.elasticsearch图形化插件安装——cerebro

可以使用docker部署cerebro。在Redhat8上,podman作为docker的完美替代,运行cerebro容器,可以用来管理ES集群节点。

项目地址:https://gitcode.net/mirrors/lmenezes/cerebro?utm_source=csdn_github_accelerator

在宿主机<172.25.254.50>上运行cerebro镜像。

podman search cerebro
podman load -i /home/westos/Desktop/cerebro.tar 
podman run -d --name cerebro -p 9000:9000 docker.io/lmenezes/cerebro

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上两个插件都是非常好的,根据个人喜好选择一即可。

5.elasticsearch节点角色

Master主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader。
Data Node主要负责集群中数据的索引和检索,一般压力比较大
Coordinating Node(提取节点)原来的Client node的,负责处理所有来自客户端的请求以及返回给客户端的响应结果,默认情况下每个node都是协调节点。主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性。
Ingest Node(协调节点)专门对索引的文档做预处理

如果将node按功能分配角色:master node处理主节点事务、data node保存数据、ingest node进行数据预处理,那么coordinating node则是 route 客户端请求、处理搜索数据整合阶段并且分配批量索引操作 bulk indexing。

6.elasticsearch节点优化

在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。所以,在生产环境下,我们一般会把密集型计算的应用,尽量的区分开,保证它们之间尽量不要产生冲突,要是放在一起的话 绝对会产生争抢资源的情况,
默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
节点角色是由以下属性控制:( 默认情况下这些属性的值都是true。)

node.master: false|true
node.data: true|false
node.ingest: true|false
search.remote.connect: true|false

node.master这个属性表示节点是否具有成为主节点的资格注意:此属性的值为true,并不意味着这个节点就是主节点。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。
node.data这个属性表示节点是否存储数据。
node.ingest是否对文档进行预处理。
search.remote.connect是否禁用跨集群查询

在这里插入图片描述

1.第一种组合:(默认)

node.master: true
node.data: true
node.ingest: true
search.remote.connect: true
这种组合表示这个节点即有成为主节点的资格,又存储数据。
如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。
测试环境下这样做没问题,但实际工作中不建议这样设置。

2.第二种组合:(Data node)

node.master: false
node.data: true
node.ingest: false
search.remote.connect: false
这种组合表示这个节点没有成为主节点的资格,也就不参与选举,只会存储数据。
这个节点称为data(数据)节点。在集群中需要单独设置几个这样的节点负责存储数据。后期提供存储和查询服务。

3.第三种组合:(master node)

node.master: true
node.data: false
node.ingest: false
search.remote.connect: false
这种组合表示这个节点不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点。
这个节点我们称为master节点。

4.第四种组合:(Coordinating Node)

node.master: false
node.data: false
node.ingest: false
search.remote.connect: false
这种组合表示这个节点即不会成为主节点,也不会存储数据,
这个节点的意义是作为一个协调节点,主要是针对海量请求的时候可以进行负载均衡。

5.第五种组合:(Ingest Node)

node.master: false
node.data: false
node.ingest: true
search.remote.connect: false
这种组合表示这个节点即不会成为主节点,也不会存储数据,
这个节点的意义是ingest节点,对索引的文档做预处理。

生产集群中可以对这些节点的职责进行划分:
??建议集群中设置3台以上的节点作为master节点,这些节点只负责成为主节点,维护整个集群的状态。
?
??再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。
?
??所以在集群中建议再设置一批协调节点,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。

三、logstash数据采集——日志采集/数据预处理

1.logstash简介

2.Logstash安装与配置

(1)软件下载
https://elasticsearch.cn/download/

官方文档
https://www.elastic.co/guide/en/logstash/7.6/index.html

(2)logstash安装

rpm -ivh jdk-8u171-linux-x64.rpm
rpm -ivh logstash-7.6.1.rpm

数据目录在/var/lib/logstash
在这里插入图片描述

3.标准输入到标准输出(一般情况下不用这种)

stdin/stdout,表示以命令行的格式,在终端输入什么信息,那么在终端也输出什么(类似一个管道)

/usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'

在这里插入图片描述

4.file输出插件——标准输入到文件

可以参考官方文档:

input {
        stdin {}
}

output {
        stdout{}

        elasticsearch {
        hosts => ["172.25.254.2:9200"]  ## 最后要输出到哪里
        index => "logstash-%{+YYYY.MM.dd}"
      }
}
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 

在这里插入图片描述
在这里插入图片描述

5.file输入文件-把文件内容输出到es主机

我们将/var/log/messages 定为输入的文件,但是首先要解决其权限问题:

[root@server5 conf.d]# ll /var/log/messages 
-rw------- 1 root root 72575 Mar 28 17:01 /var/log/messages
[root@server5 conf.d]# ll -d /var/log/
drwxr-xr-x. 8 root root 248 Mar 28 16:22 /var/log/
[root@server5 conf.d]# chmod 644 /var/log/messages 
 vim /etc/logstash/conf.d/test.conf
 
input {
        #stdin {}
        file {
                path => "/var/log/messages"
                start_position =>"beginning"
        }
}

output {
        stdout{}

        elasticsearch {
        hosts => ["172.25.254.2:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
      }
}

[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 

在这里插入图片描述

在这里插入图片描述

6.sincedb文件

这里我们将上一个索引删掉,再次运行指令,发现,虽然依旧读取的是/var/log/message文件,但是却没有任何输出了,
在这里插入图片描述

[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 

在这里插入图片描述
下面 我们测试一下他是否还能记录输入的数据,下面显示logstash的输入输出没问题。
在这里插入图片描述
在这里插入图片描述
但是,与我们规定的逻辑不一致,我们规定的是读取/var/log/message的beginning,但是上图显示的却只有新产生的日志。
但是在生产环境中,如果节点意外重启,它始终会记得上一个进程,也就是logstash读到哪一个地方了,他有这样一个缓存,那么即使重启,也会先读取缓存,然后接着读取即可,以免造成数据冗余。

那么这个缓存文件在什么地方?
/usr/share/logstash/data/plugins/inputs/file

[root@server5 conf.d]# cd /usr/share/logstash/
[root@server5 logstash]# ls
bin           data     Gemfile.lock  LICENSE.txt    logstash-core-plugin-api  NOTICE.TXT  vendor
CONTRIBUTORS  Gemfile  lib           logstash-core  modules                   tools       x-pack
[root@server5 logstash]# cd data/
[root@server5 data]# ls
dead_letter_queue  plugins  queue  uuid
[root@server5 data]# cd plugins/
[root@server5 plugins]# ls
inputs
[root@server5 plugins]# cd inputs/
[root@server5 inputs]# ls
file
[root@server5 inputs]# cd file/
[root@server5 file]# ls
[root@server5 file]# l .
-bash: l: command not found
[root@server5 file]# l.
.  ..  .sincedb_452905a167cf4509fd08acb964fdb20c
[root@server5 file]# cat .sincedb_452905a167cf4509fd08acb964fdb20c 
51212556 0 64768 616 1648461662.537986 /var/log/messages
[root@server5 file]# pwd
/usr/share/logstash/data/plugins/inputs/file
[root@server5 file]# rm -f .sincedb_452905a167cf4509fd08acb964fdb20c 
[root@server5 file]# cd

sincedb文件内容解释:
??cat .sincedb_452905a167cf4509fd08acb964fdb20c
??20297 0 64768 119226 1551859343.6468308 /var/log/messages
?sincedb文件一共6个字段
??1.inode编号
??2.文件系统的主要设备号
??3.文件系统的次要设备号
??4.文件中的当前字节偏移量
??5.最后一个活动时间戳(浮点数)
??6.与此记录匹配的最后一个已知路径

那么 如果我们将sincedb文件删除,那么logstash就会重新从头读取文件。

在这里插入图片描述

7.Syslog输入插件——实现简单的日志采集及管理

logstash可以伪装成日志服务器,直接接受远程日志。其他节点只需要配置一下rsyslog,就会自动把你的日志传过去了。

input {
        #stdin {}
        #file {
        #       path => "/var/log/messages"
        #       start_position =>"beginning"
        #}
        syslog {}
}

output {
        stdout{}

        elasticsearch {
        hosts => ["172.25.254.2:9200"]
        index => "syslog-%{+YYYY.MM.dd}"
      }
}

[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 

服务起来以后,会自动开一个端口,用来接收日志:
在这里插入图片描述
然后,配置客户端传入日志:(把日志发过去)

[root@server3 ~]# vim /etc/rsyslog.conf 
 15 $ModLoad imudp
 16 $UDPServerRun 514
 92 *.*     @@172.25.254.5:514                //所有日志发送到server5的514端口
 
[root@server3 elasticsearch]# systemctl restart rsyslog.service

在这里插入图片描述
在这里插入图片描述

8.多行过滤插件——多行过滤可以把多行日志记录合并为一行事件

针对多行日志表示的单个事件,如果按照之前的方法上传到ES后,会分别按多行显示出来,无法分析多行日志表示的意思,因此需要通过“多行过滤”将多个日志记录合并为一行事件。

首先,编辑配置文件</etc/logstash/conf.d/file.conf>:

vim /etc/logstash/conf.d/file.conf
input {
        #stdin {}
        file {
                path => "/var/log/my-es.log"
                start_position =>"beginning"
                 codec => multiline {
                 pattern => "^\["
                 negate => "true"
                 what => "previous"
                }
        }
        syslog {}
}

output {
        stdout{}

        elasticsearch {
        hosts => ["172.25.254.2:9200"]
        index => "eslog-%{+YYYY.MM.dd}"
      } 
}     
[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 

最后,在server5终端和浏览器上查看:
在这里插入图片描述
在这里插入图片描述

9.grok过滤插件

(1)grok简介

官方文档:
https://www.elastic.co/guide/en/logstash/7.6/plugins-filters-grok.html

grok是Logstash最重要的插件之一,用于将非结构化数据解析为结构化和可查询的数据。即将一个key对应的一长串非结构化的value,转成多个结构化的key-value。

从数据分析的角度:非结构化数据不便于检索、统计、分析。
非结构化数据变成结构化数据后才有检索、统计、分析的价值。

Grok是将非结构化日志数据解析为结构化和可查询内容的好方法。

下图是官方给出的例子:
在这里插入图片描述
(2)grok插件的具体使用

[root@server5 html]# yum install -y httpd
[root@server5 html]# echo www.westos.org > index.html
[root@server5 html]# systemctl start httpd
[root@server5 html]# curl localhost
www.westos.org

在这里插入图片描述
压力测试的结果是以下面的方式呈现的,这很不科学。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
response 200表明该请求被成功地完成,所请求的资源发送到客户端。

这都是httpd响应状态码

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 19:10:50  更:2022-03-30 19:14:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:31:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码