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 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux企业运维——ELK日志分析平台(中)ES节点优化、logstash数据采集、过滤插件 -> 正文阅读

[系统运维]Linux企业运维——ELK日志分析平台(中)ES节点优化、logstash数据采集、过滤插件

Linux企业运维——ELK日志分析平台(中)ES节点优化、logstash数据采集、过滤插件

一、ES节点优化

1.1、ES节点角色

  • Master: 主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader。
  • Data Node: 主要负责集群中数据的索引和检索,一般压力比较大。
  • Coordinating Node: 原来的Clientnode的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinatingnode,且不能关闭该属性。
  • Ingest Node: 专门对索引的文档做预处理

1.2、节点角色属性

在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。
默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。

节点角色是由以下属性控制:

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

默认情况下这些属性的值都是true。

属性名称属性作用
node.master这个属性表示节点是否具有成为主节点的资格
node.data这个属性表示节点是否存储数据
node.ingest是否对文档进行预处理
search.remote.connect是否禁用跨集群查询

注意:
node.master属性的值为true,并不意味着这个节点就是主节点。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。

1.3、属性组合方式

组合一:
默认

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

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

组合二:
Data Node

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

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

组合三:
Master Node

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

这种组合表示这个节点不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点。
这个节点我们称为master节点。

组合四:
Coordinating Node

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

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

组合五:
Ingest Node

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

这种组合表示这个节点即不会成为主节点,也不会存储数据,
这个节点的意义是ingest节点,对索引的文档做预处理。

1.4、节点职责划分

生产集群中可以对这些节点的职责进行划分:

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

ES通过shared分片将数据分散到不同的节点上,分片从角色上分为主分片primary shared和辅助分片replica shared,数据会先写入主分片,然后同步到辅助分片中,主分片和辅助分片不能分配到同一个节点上,通过“分”的思想,突破单机在存储空间和处理性能上的限制,这是分布式系统的核心目的。分片可以在客户端进行设置,当主分片数据丢失或被删除时,辅助分片会升级为主分片。分片在集群节点上会自动迁移,尤其是在节点重启时。

节点需求

  • master节点:普通服务器即可(CPU、内存 消耗一般)
  • data节点:主要消耗磁盘、内存。 path.data: data1,data2,data3 这样的配置可能会导致数据写入不均匀,建议只指定一个数据路径,磁盘可以使用raid0阵列,而不需要成本高的ssd。
  • Coordinating节点:对cpu、memory要求较高。

server4进入到elasticsearch-head-master目录下,使用cnpm run start &运行head插件,运行在本地9100端口
在这里插入图片描述
使用浏览器访问server4的9100端口可以看到显示server5为master节点,当前只有三个节点,保留当前的master节点,集群中至少留一个master,做预处理
在这里插入图片描述
选择server4节点禁用数据节点参数重启服务,如果该节点已有部分共享数据重启会失败(图形界面的绿色方框-副本/分片),可以查看日志清理该节点数据,注意清理时es服务要停掉,此时该节点数据/副本会迁移到其他主机上
server4进入/etc/elasticsearch/目录下,编辑elasticsearch.yml配置文件,将node.data属性置为false
在这里插入图片描述
重新启动es服务
在这里插入图片描述
在网页管理界面查看server4的集群节点信息,此时server4中role角色有 Ingest(预处理),Master(整个集群的master),ml(机器学习),data已经被关闭了
在这里插入图片描述

二、logstash数据采集

2.1、logstash简介

Logstash是一个开源的服务器端数据处理管道。
logstash拥有200多个插件,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(大多都是 Elasticsearch。)
Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器。
在这里插入图片描述
输入:
采集各种样式、大小和来源的数据
Logstash 支持各种输入选择 ,同时从众多常用来源捕捉事件。
能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
在这里插入图片描述
过滤器:
实时解析和转换数据
数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。
? 利用 Grok 从非结构化数据中派生出结构
? 从 IP 地址破译出地理坐标
? 将 PII 数据匿名化,完全排除敏感字段
? 简化整体处理,不受数据源、格式或架构的影响

输出:
选择您的存储库,导出您的数据
尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。
Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。
在这里插入图片描述

2.2、logstash安装与配置

真实主机新开一台虚拟机server7
在这里插入图片描述
为server7添加域名解析
在这里插入图片描述
真实主机将logstash和jdk安装包发送给server7
在这里插入图片描述
server7安装jdk和logstash
在这里插入图片描述
先用命令行方式测试环境,方便调用可以作一个软连接
在这里插入图片描述
调用stdin(终端录入)和stdout(输出到终端屏幕)插件进行标准输入输出
在这里插入图片描述
输入输出测试
在这里插入图片描述
标准输出到文件(官方文档):可以在指定目录下编写.conf文件(path指定输出文件路径,codec定义文件格式),执行logstash命令-f指定读取文件
在这里插入图片描述

[root@server6 conf.d] cat test.conf 
input {
	stdin {}
}

output {
 file {
   path => "/tmp/testfile"
   codec => line { format => "custom format: %{message}"}
 }
}

测试输出,可以看到输出到指定的文件中
在这里插入图片描述
输出到es:通过elasticsearch模块向es输出数据,指定es集群节点(可以写多个),要在es中创建索引index,使用默认索引logstash,但是写入es看不到回显,所以在output中加入stdout
在这里插入图片描述

[root@server6 conf.d] cat es.conf 
input {
	stdin {}
}

output {
	stdout {}

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

测试输出消息到es
在这里插入图片描述
es管理界面点击Browser选项可以看到发来的消息
在这里插入图片描述

2.3、logstash采集系统日志

logstash在运行时是以logstash身份,要保证该用户对日志文件有权限
在这里插入图片描述
修改配置文件,将输入信息设置为日志文件,指定文件读取位置:从文件开头
在这里插入图片描述
开始输出
在这里插入图片描述
在es界面中可以查看到输出的日志信息
在这里插入图片描述
将日志文件删除
在这里插入图片描述
在这里插入图片描述
再次执行es.conf,会发现没有数据输出了
在这里插入图片描述
在这里插入图片描述
真实主机ssh连接到server7,写入新的日志
在这里插入图片描述
可以看到logstash将日志进行输出
在这里插入图片描述
在es中可以查看到刚才的日志
在这里插入图片描述
在图形界面删除es中这一文件后,再次执行,不会再重新写文件,文件只会写入变更(避免数据冗余),这是因为在指定目录下的.sincedb隐藏文件会实时变更记录文件的字节偏移量,删除这一隐藏文件,文件会重新从头写入
在这里插入图片描述
es界面中再次将所有日志文件删除
在这里插入图片描述
现在再执行es.conf
在这里插入图片描述
可以看到日志文件从头开始重新进行输出了
在这里插入图片描述
在es的管理界面可以查看到所有日志文件
在这里插入图片描述

2.4、logstash伪装成日志服务器,直接接收远程日志

server7编辑es.conf文件,514是日志收集端口,server7监听514端口伪装成日志服务器
在这里插入图片描述
查看514端口状态为开放
在这里插入图片描述
server4编辑/etc/rsyslog.conf配置文件,打开514端口
在这里插入图片描述
所有日志都发送给server7的514端口
在这里插入图片描述
重新启动rsyslog服务
在这里插入图片描述
server7这里已经可以看到日志输入
在这里插入图片描述
server6编辑/etc/rsyslog.conf配置文件,打开514端口
在这里插入图片描述
所有日志都发送给server7的514端口
在这里插入图片描述
重新启动rsyslog服务
在这里插入图片描述
server7查看514端口状态可以看到已经与server4和server6的514端口建立连接
在这里插入图片描述
server7这里已经可以看到接收到server6的日志信息
在这里插入图片描述
在es管理界面中可以查看到
在这里插入图片描述
在这里插入图片描述

三、过滤插件

3.1、多行过滤插件

多行录入,当遇到预定义的关键字时,会向上合并输出(错误日志一般都是多行显示一条事件记录,所以需要用到多行输出)

server7编辑test.conf,结束符为EOF,遇到定义的EOF时向上合并进行输出
在这里插入图片描述
测试多行输出,可以看到在EOF处截止
在这里插入图片描述
正确的日志都以时间开头,而错误的日志会分为很多行,输出错误的日志时我们也需要将其正常处理
server4将my-es.log发送给server7
在这里插入图片描述
可以看到错误日志信息,分了很多行
在这里插入图片描述
server7编辑test.conf文件,以/var/log/my-es.log作为输入,从头开始输入,输出到es,先将多行输入模块注释起来,看看效果
在这里插入图片描述

[root@server6 conf.d] cat test.conf 
input {
      file {
        path => "/var/log/my-es.log"
        start_position => "beginning"
         # codec => multiline {
         #   pattern => "EOF"
         #   negate => "true"
         #   what => "previous"
         # }
      }
}

output {
	stdout {}

	elasticsearch {
		hosts => ["172.25.0.3:9200"]
		index => "eslog-%{+yyyy.MM.dd}"
	}

}

可以看到输出了很多文件
在这里插入图片描述
在es界面中查看可以发现错误日志中的每一行都被单独分成了一个文件
在这里插入图片描述
在这里插入图片描述
删除eslog日志
在这里插入图片描述
删除.sincedb文件以便我们重新输出
在这里插入图片描述
再次编辑test.conf文件,加入多行输出部分
在这里插入图片描述

[root@server6 conf.d]# cat test.conf 
input {
      file {
        path => "/var/log/my-es.log"
        start_position => "beginning"
          codec => multiline {
            pattern => "^\["   (预定义关键字为以[开头的行,\转译[)
            negate => "true"
            what => "previous"
          }
      }
}

output {
	stdout {}

	elasticsearch {
		hosts => ["172.25.0.3:9200"]
		index => "eslog-%{+yyyy.MM.dd}"
	}

}

查看es管理界面,现在可以看到只有两个文件
在这里插入图片描述
错误日志被正确的处理到一个文件当中了
在这里插入图片描述

3.2、grok过滤插件

grok过滤插件:可以对输入信息进行切片,便于最后分析

server7在conf.d目录下创建并编辑grok.conf文件,将输入信息分成5块部分
在这里插入图片描述

[root@server6 conf.d] cat grok.conf 
input {
	stdin {}
}

filter {
	grok {
	match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
	}
}

output {
	stdout {}
}

测试输入,可以看到输入信息按配置文件中设定的被分成了5个部分
在这里插入图片描述
server7安装httpd
在这里插入图片描述
给index页面中添加一行内容
在这里插入图片描述
真实主机测试访问server7可以正常访问到web服务
在这里插入图片描述
查看/var/log/httpd/access_log内apache的日志格式内容,
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns目录下选择查看apache的日志输出格式
在这里插入图片描述
按照文件中的格式来规定grok切片
在这里插入图片描述
将apache的日志作为输入,因为操作时是以logstash用户身份,所以设置文件权限
在这里插入图片描述
server7编辑grok.conf文件,按照HTTPD_COMBINEDLOG方式切片
在这里插入图片描述
可以按到按照规定好的方式进行了切片
在这里插入图片描述
es界面查看到成功进行了切片
在这里插入图片描述
真实主机对server7的web页面进行压力测试
在这里插入图片描述
es页面中可以看到出现了很多日志信息,来自于真实主机的访问
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 23:03:01  更:2022-03-10 23:06:39 
 
开发: 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/16 3:20:10-

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