1.ELK实战概述

1.概述

ELK 是一套开源免费且功能强大的日志分析管理系统,由 Elasticsearch、Logstash、Kibana 三部分组成,简称 ELK。

ELK 可以将系统日志、网站日志、应用系统日志等各种日志进行收集、过滤、清洗,然后进行集中存放并可用于检索、分析。

这三款软件都是开源软件,通常是配合使用,且归于 Elastic.co 公司名下,所以被简称为 ELK Stack。

2.系统架构

其中每个架构有什作用

第一部分:收集日志的部分Filebaet收集日志,就是将所有的日志收集到一起,比如nginx,tomcat,mysql等日志收集到一起

第二部分:Kafka集群,用于存储收集日志数据,因为收集数据是非常快的,但是在第三部分的日志分析却又是异常缓慢的,因此就需要有一个缓冲的部分也就是Kafka集群

第三部分:对日志数据进行分析,格式化

第四部分:其中有两个部分第一个部分elasticsearch用于存储日志,增加索引以达到增加其搜索效率的目的,第二个部分就是kibana就是用于展示日志用图形化的界面

2.ES概述

1.概述

ElasticSearch(简称ES): 是一个基于Lucene构建的开源、分布式、RESTful的全文本搜索引擎; 它还是一个分布式实时文档存储, 其中每个field均是被索引的数据且可被搜索; 也是一个带实时分析功能的分布式搜索引擎, 并且能够扩展至数以百计的服务器存储及处理PB级的数据。

2.核心概念

1.全文检索

全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。 全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如“接下来听我给大家讲解ES的基本使用与深层原理”可能会被分词成:“接下来”,“大家”,“学会”,“基本”,“原理”等词条,这样当你搜索“你们”或者“原理”都会把这句搜出来。

2.近实时查询

Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒以内)

3.倒排索引

倒排索引(反向索引):倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。 由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。

先通过关键字在倒排索引查询到文档ID,在通过ID查询正排索引返回内容

4.集群

ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群

5.节点

形成集群的每个服务器称为节点

6.分片

一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上 至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。

7.副本

在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。 复制之所以重要,有两个主要原因:在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。扩展你的搜索量/吞吐量,因为搜索可以在所有的复制上并行运行。总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。 默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

3.ES与MySQL对比

两者都差不多基本就是一一对应的

3.ES集群搭建

1.环境概述

主机 IP 内存 / CPU 安装软件 磁盘
node1 192.168.217.155 4G/2 elasticsearch、kibana、filebeat sda
node2 192.168.217.156 4G/2 elasticsearch、logstash sda
node3 192.168.217.157 4G/2 elasticsearch、kafka sda

服务器初始化脚本

#!/bin/bash

# 1. 设置主机名
hostnamectl set-hostname $1

# 2. 修改hosts文件
echo 192.168.22.151 node1 >> /etc/hosts
echo 192.168.22.147 node2 >> /etc/hosts
echo 192.168.22.148 node3 >> /etc/hosts

# 3. 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

# 4. 配置yum源
cd /etc/yum.repos.d
rm -rf *
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum install epel-release -y

# 5. 安装必要软件
yum install vim -y
yum install net-tools -y
yum install wget -y
yum install yum-utils -y
yum install ntp -y

# 6. 时间同步
systemctl enable ntpd --now

# 7. 重启
reboot

2.安装

1.上传资源

jdk-8u371-linux-x64.tar.gz
elasticsearch-7.13.2-x86_64.rpm

这里直接yum安装java吧

yum list java*

yum install java-1.8.0-openjdk.x86_64 -y

elasticsearch-7.13.2-x86_64.rpm这里直接源码安装下面下载链接

Elasticsearch 7.13.2 | Elastic
下载好之后看下面一篇文章吧,非常详细

Linux环境下安装Elasticsearch,史上最详细的教程来啦~_linux elasticsearch-CSDN博客

vim /etc/elasticsearch/config/elasticsearch.yml


# 下面有的就修改没有的就添加
cluster.name: elk
node.name: node1
node.data: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts:
  - node1                         #下面三个都按格式添加   
  - 192.168.22.147:9300
  - 192.168.22.148
cluster.initial_master_nodes: ["node1", "node2", "node3"]

2.测试

#ES测试直直接访问看是否启动
http://192.168.22.151:9200/

这里我三台都正常启动了

ES集群测试
http://192.168.22.151:9200/_cat/health?v

ES节点测试

都是正常连接到了

4.分词器

1.概述

IKAnalyzer 是一个开源的,基于 Java 语言开发的轻量级的中文分词工具包。从 2006 年 12 月推出 1.0 版开始,IKAnalyzer 已经推出了 3 个大版本。最初,它是以开源项目 Lucene 为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的 IKAnalyzer3.0 则发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对 Lucene 的默认优化实现。

IK 分词器 3.0 的特性如下:

  1. 采用了特有的 “正向迭代最细粒度切分算法”,具有 60 万字 / 秒的高速处理能力。
  2. 采用了多子处理器分析模式,支持:英文字母(IP 地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
  3. 对中英联合支持不是很好,在这方面的处理比较麻烦,需再做一次查询,同时支持个人词条的优化的词典存储,更小的内存占用。
  4. 支持用户词典扩展定义。
  5. 针对 Lucene 全文检索优化的查询分析器 IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高 Lucene 检索的命中率。

2.安装

# 下载地址
https://get.infini.cloud/elasticsearch/analysis-ik/7.13.2
# 上传到系统中
elasticsearch-analysis-ik-7.13.2.zip
# 解压到指定目录
mkdir /usr/share/elasticsearch-7.13.2/plugins/ik
unzip elasticsearch-analysis-ik-7.13.2.zip -d /usr/local/elasticsearch-7.13.2/plugins/ik/

# 重启ES

下载好之后我们用接口测试工具来测试一下他的分词效果

# json的数据格式发送
# ik_smart 智能分词    ik_max_word最大智能分词

{
    "analyzer": "ik_smart",
    "text": "我是中国人"
}

智能分词效果

最大智能分词效果

分出来的更多

5.kibana安装配置

1、概述

Kibana 是一个开源的数据分析和可视化平台,它是 Elastic Stack(包括 Elasticsearch、Logstash、Kibana 和 Beats)的一部分,用于对 Elasticsearch 中的数据进行搜索、查看、交互操作。

Kibana 的主要功能和用途包括:

  • 数据可视化:Kibana 提供了丰富的数据可视化选项,如柱状图、线图、饼图、地图等,帮助用户以图形化的方式理解数据。
  • 数据探索:Kibana 提供了强大的数据探索功能,用户可以使用 Elasticsearch 的查询语言进行数据查询,也可以通过 Kibana 进行数据筛选和排序。
  • 仪表盘:用户可以将多个可视化组件组合在一起,创建交互式的仪表盘,用于实时监控数据。
  • 机器学习:Kibana 还集成了 Elasticsearch 的机器学习功能,可以用于异常检测、预测等任务。
  • 定制和扩展:Kibana 提供了丰富的 API 和插件系统,用户可以根据自己的需求定制和扩展 Kibana。

总的来说,Kibana 是一个强大的数据分析和可视化工具,它可以帮助用户更好地理解和探索他们的数据。

2.安装

1.上传资料文件(其中一台机器就可以了,比如就上传到 node1 服务器)

kibana-7.13.2-linux-x86_64.tar.gz

2.解压缩

tar -xf kibana-7.13.2-linux-x86_64.tar.gz -C /usr/local

3.修改配置文件

vim /usr/local/kibana-7.13.2-linux-x86_64/config/kibana.yml


###########################
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://node1:9200"]
logging.dest: /var/log/kibana.log
i18n.locale: "zh-CN"

4.root用户来运行kibana

nohup /usr/local/kibana-7.13.2-1inux-x86_64/bin/kibana --allow-root &

这里启动成功,里面有一个开发工具,可以测试接口

这里就测试上面的分词器接口

点击发送之后就可以看到效果

6.Filebeat安装与使用

1、概述

1.概述

Filebeat 是一个轻量级的日志托运工具,用于转发和集中日志数据。Filebeat 作为代理安装在服务器上,监控指定的日志文件或目录,收集日志事件,并将它们转发到 Elasticsearch 或 Logstash 进行索引。

Filebeat 是用于 “转发” 和 “集中日志数据” 的 “轻量型数据采集器”,用 go 语言开发,相比 Logstash 来说轻便。

2.组件

Filebeat 包含两个主要组件,输入和收割机,两个组件协同工作将文件尾部最新数据发送出去

  • 输入 Input:输入负责管理收割机从哪个路径查找所有可读取的资源。
  • 收割机 Harvester:负责逐行读取单个文件的内容,然后将内容发送到输出。

3.原理

当 filebeat 启动后,filebeat 通过 Input 读取指定的日志路径,然后为该日志启动一个收割进程 harvester,每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序 spooler,处理程序会集合这些事件,最后 filebeat 会发送集合的数据到你指定的位置。

2.安装

1.上传压缩包(需要收集日志的机器都要安装 Filebeat,此处我们以 node1 为例,将 Filebeat 安装在 node1 机器上)

filebeat-7.13.2-linux-x86_64.tar.gz

2.解压缩

tar -xf filebeat-7.13.2-linux-x86_64.tar.gz -C /usr/local

3.配置 Filebeat 为系统服务

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


############################################
[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Environment="BEAT_CONFIG_OPTS=-c /usr/local/filebeat-7.13.2-linux-x86_64/filebeat.yml"
ExecStart=/usr/local/filebeat-7.13.2-linux-x86_64/filebeat $BEAT_CONFIG_OPTS
Restart=always

[Install]
WantedBy=multi-user.target


#重新加载配置文件
systemctl daemon-reload

4.修改配置文件

vim /usr/local/filebeat-7.13.2-linux-x86_64/filebeat.yml


##########################################################

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /tmp/*.log # 指定需要收集日志的路径,支持通配符可以写多个

filebeat.config.modules: # 内置的收集日志的模块配置文件的存放路径
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false # 当模块的配置文件有更新时,此程序是否要自动加载,false不加载,true 加载

setup.template.settings:
  index.number_of_shards: 1

output.console: #添加 输出到终端即屏幕上
  pretty: true

processors: #改
  - add_host_metadata: # 添加此主机的源数据信息到输出数据中,比如 IP MAC OS 等信息
      when.not.contains.tags: forwarded

3.测试

我们先收集nginx目录下的日志

1.先安装nginx

vim /etc/yum.repos.d/nginx.repo


###################################################
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
 
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

2.修改 nginx 日志模块配置文件,(如果 nginx 的日志文件在默认位置,则不需要修改)

vim nginx.yml.disabled

3.启动nginx日志模块

/usr/local/filebeat-7.13.2-linux-x86_64/filebeat -c /usr/local/filebeat-7.13.2-linux-x86_64/filebeat.yml modules enable nginx

启动完成之后后面的disable不见了

4.启动filebeat

./filebeat -c filebeat.yml

访问nginx产生日志文件,每刷新一次就产生下面的类似一个日志

7.ES的基本用法

1.ES索引操作

put goods

1.删除索引

delete goods

2.查询索引

get goods
get goods/_cat/indices?v

3.创建索引指定映射关系

PUT goods
{
  "mappings": {
    "properties": {
      "id": {
        "type": "long",
        "index": false
      },
      "title": {
        "type": "text",
        "index": true
      },
      "brand_name": {
        "type": "keyword",
        "index": true
      }
    }
  }
}

就类似于数据库,数据库里面有id,titile,brand_name字段

2.ES 文档操作与查询命令

1.添加文档

POST goods/_doc/1001
{
  "id": 1001,
  "title": "mate40",
  "brand_name": "华为"
}

POST goods/_doc/1002
{
  "id": 1002,
  "title": "mate50",
  "brand_name": "华为"
}

2.删除文档

# 删除文档
DELETE goods/_doc/1001

3.修改文档

# 全量修改(会覆盖原文档所有字段)
PUT goods/_doc/1001
{
  "id": 1001
}

PUT goods/_doc/1001
{
  "price": 4999
}

# 局部修改(仅更新指定字段,保留其他字段)
POST goods/_update/1001
{
  "doc": {
    "price": 5999
  }
}

4.查询文档

# 查询单条文档
GET goods/_doc/1001

# 查询索引所有文档
GET goods/_search

5.term查询说明

term 主要用于分词精确匹配,如字符串、数值、日期等(不适合情况:1. 列中除英文字符外有其它值;2. 字符串值中有冒号或自带属性如_version)

# term查询示例1:查询brand_name为“华为”的文档
GET goods/_search
{
  "query": {
    "term": {
      "brand_name": {
        "value": "华为"
      }
    }
  }
}

# term查询示例2:查询title中包含“mate”的文档
GET goods/_search
{
  "query": {
    "term": {
      "title": {
        "value": "mate"
      }
    }
  }
}

6.match 查询说明

match 查询是标准查询,全文本 / 精确查询场景都适用。使用 match 查询全文本字段时,会在查询前用分析器先处理查询词,再进行匹配。

# match查询示例1:查询brand_name为“华为”的文档
GET goods/_search
{
  "query": {
    "match": {
      "brand_name": "华为"
    }
  }
}

# match查询示例2:查询title中包含“mate”的文档
GET goods/_search
{
  "query": {
    "match": {
      "title": "mate"
    }
  }
}

文档操作就相当于给数据库里面添加值

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐