卧疾丰暇豫,翰墨时间作。这篇文章主要讲述elk日志篇相关的知识,希望能为你提供帮助。
架构
Elasticsearch(简称ES)是java语言开发,是一个分布式、RESTful 风格的搜索和数据分析引擎,用于集中存储日志数据。
图中elasticsearch我是用3台服务器做的集群,logstash也是3台服务
需求背景:? 业务发展越来越庞大,服务器越来越多
? 各种访问日志、应用日志、错误日志量越来越多
? 开发人员排查问题,需要到服务器上查日志,效率低、权限不好控制
? 运维需实时关注业务访问情况
ELK介绍ELK 是三个开源软件的缩写,提供一套完整的企业级日志平台解决方案。
分别是:
? Elasticsearch:搜索、分析和存储数据
? Logstash :采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储
? Kibana:Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。
? Beats :集合了多种单一用途数据采集器,用于实现从边缘机器向 Logstash 和Elasticsearch 发送数据。里面应用最多的是Filebeat,是一个轻量级日志采集器。
第一章 elasticsearch部署1.1术语:
? Index:索引是多个文档的集合
【elk日志篇】? Document:Index里每条记录称为Document,若干文档构建一个Index
? Type:一个Index可以定义一种或多种类型,将Document逻辑分组
? Field:ES存储的最小单元
![image-20220320104139180](H:\\ELK\\01elk学习笔记\\elk学习笔记.assets\\image-20220320104139180.png)
一个 对象 是基于特定语言的内存的数据结构。为了通过网络发送或者存储它,我们需要将它表示成某种标准的格式。 JSON 是一种以人可读的文本表示对象的方法。 它已经变成 NoSQL 世界交换数据的事实标准。当一个对象被序列化成为 JSON,它被称为一个 JSON 文档 。
Elastcisearch 是分布式的 文档 存储。它能存储和检索复杂的数据结构—序列化成为JSON文档—以 实时 的方式。 换句话说,一旦一个文档被存储在 Elasticsearch 中,它就是可以被集群中的任意节点检索到。
#大多数人把一个文档document比作一行(在kibana看到时候就像是一行数据),我觉得可以叫做个json文件,因为es存在在本地的就是文件数据,这些文件就是一个个json文档。
_index文档在哪存放
_type文档表示的对象类别
索引中对数据进行逻辑分区。不同 types 的文档可能有不同的字段,但最好能够非常相似,type就像写代码的类,不同类有不同属性。
_id文档唯一标识,基于 Base64 编码且长度为20个字符的 GUID 字符串
#这3个字段确定一个文档数据,后面介绍api的时候,会根据这个3个字段返回一个文档。
命名规范:(2.x版本中,新版本中不知道)这个名字必须小写,不能以下划线开头,不能包含逗号。我们用 website 作为索引名举例。
一个索引仅仅是逻辑上的命名空间, 这个命名空间由一个或者多个分片组合在一起。 然而,这是一个内部细节,我们的应用程序根本不应该关心分片,对于应用程序而言,只需知道文档位于一个 索引 内。
主机a有2份数据(主机a是master),主机a把它的数据复制一份放到主机b上,当主机a死机了,他的数据不会丢失;此时,来了另外主机c,主机a会把主机b存的两份数据,分一份给主机c,此时主机a有2份数据,主机b和c分别的各存了其中一份(注意主机b,c不是全部复制主机a的所有数据),这样就成了分布式保存,他和同步复制不一样,效率比同步的高。
副本是只读,不可以删除修改,写入要经过master来操作,操作完成后再分发到各副本。
这里推荐一个官方的文档,里面主要讲一些术语、原理,以及一些重要的设置,文档虽然是2.x版本,但是术语这些词,以及一些原理永远不变。这个文档是中文的,权威的官方文档,其它的版本没有出中文版。啊啊了; 凶了尽可能可能了了 看就看监控尽可能理解你看见你看见了空间可能理解了可能可能你看 了了了了了了了会哦
可能了了了了了哪里
https://www.elastic.co/guide/cn/elasticsearch/guide/current/_revisit_this_list_before_production.html
1.2 集群内部原理
#官方文档:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/_add-an-index.html如果你想搞懂es的集群切换原理,一定要看这个文章,完全的去理解一遍,还是很有用的。
一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。
当一个节点被选举成为 主 节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。 而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。
作为用户,我们可以将请求发送到 集群中的任何节点 ,包括主节点。 每个节点都知道任意文档(理解为行)所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。 Elasticsearch 对这一切的管理都是透明的。
Elasticsearch 的集群监控信息中包含了许多的统计数据,其中最为重要的一项就是 集群健康 , 它在 status 字段中展示为 green 、 yellow 或者 red 。
green,表示所有的主分片和副本分片都正常运行。
yellow,表示所有的主分片都正常运行,但副本分片有的不正常运行。这时候可以继续使用不影响,这种情况就类似某个节点断开了,集群会临时变为yellow,但是随着master会把切片重新自动分配,一两分钟后就又变为green了,当集群下架某个节点的时候能看到此现象。
red,表示有一些主分片没能正常运行。
总结:集群的状态是看分片的状态。如果所有分片在一个机器,分片停止了,表示集群就是red(通常es不会把所有主分片放在一个主机器,他们的副本分片也会分开放)。
#这3个状态一定要记住。集群是yellow没事可以继续工作,如果出现red就不能工作了。
官方地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_add-an-index.html
Elasticsearch 添加数据时需要用到 索引 —— 保存相关数据的地方。 索引实际上是指向一个或者多个物理 分片 的 逻辑命名空间 。
一个 分片 是一个底层的 工作单元 ,它仅保存了全部数据中的一部分。 在分片内部机制中,我们将详细介绍分片是如何工作的,而现在我们只需知道一个分片是一个 Lucene 的实例,以及它本身就是一个完整的搜索引擎。 我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。
Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。
主分片的数目在索引创建时就已经确定了下来,下图所示:
![image-20220401151503875](H:\\ELK\\01elk学习笔记\\elk学习笔记.assets\\image-20220401151503875.png)
注意观察:主切片数,副本数,总切片数。
3个主切片,每个切片1个副本,在2个机器的集群分布上:此时总切片数量=6
![image-20220401151654721](H:\\ELK\\01elk学习笔记\\elk学习笔记.assets\\image-20220401151654721.png)
3个主切片,每个切片1个副本,在3个机器的集群分布上:总切片数量=6
![image-20220401151755827](H:\\ELK\\01elk学习笔记\\elk学习笔记.assets\\image-20220401151755827.png)
3个主切片,每个切片2个副本,在3个集群机器的分布上:总切片数量=9
![image-20220401151928050](H:\\ELK\\01elk学习笔记\\elk学习笔记.assets\\image-20220401151928050.png)
1.2 安装方法
安装方式很多,yum,apt安装,二进制包安装,docker安装,这里我们使用二进制安装。
最新版下载地址:https://www.elastic.co/cn/downloads/elasticsearch
其它版本地址点击 View past releases,或地址:https://www.elastic.co/downloads/past-releases#elasticsearch
1.3 安装版本,机器环境
3台centos7服务器,ip地址如下,都是用来安装es
192.168.68.19,
192.168.68.128,
192.168.68.129
安装lrzsz,ntpdate对时自己对好,关闭防火墙,selinux
[root@elk1 config]# cat /etc/ntp/step-tickers
# List of NTP servers used by the ntpdate service.
0.centos.pool.ntp.org
[root@elk1 config]# ntpdate 0.centos.pool.ntp.org #对时
软件版本:
![image-20220320161058199](H:\\ELK\\01elk学习笔记\\elk学习笔记.assets\\image-20220320161058199.png)
1.4ES 部署
#3台机器都要操作
cd /opt/elk
tar zxvf elasticsearch-7.9.3-linux-x86_64.tar.gz
mv elasticsearch-7.9.3 elasticsearch
useradd es# 出于安全考虑,默认不能用root账号启动,启动的时候,看日志会报错。es可以不要密码
chown -R es:es elasticsearch
chage -M 99999 es
#调整进程最大打开文件数数量
ulimit -n 65535
vi /etc/security/limits.conf#永久设置
* hard nofile 65535
* soft nofile 65535
#调整进程最大虚拟内存区域数量
sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" >
>
/etc/sysctl.conf #永久设置
sysctl -p
1.5ES 集群部署
es集群部署配置在配置文件里面 config/elasticsearch.yml,配置文件官方介绍很详细:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/important-configuration-changes.html
#3台es节点机器按照如下配置,稍微有小的区别:
[root@elk2 elasticsearch]# cat config/elasticsearch.yml
cluster.name: elk-cluster#集群名字,一定修改成自己的,以免别人不小心加入集群,同一个网段具有多个elasticsearch集群时cluster.name就成为同一个集群的标识。
node.name: elk1#每个节点不一样,其实写一样也是可以的,写一样在查看集群的时候你会自己都搞不清楚。
#path.data: /path/to/data#默认不动就好了,日志会保存在安装目录下的logs目录。数据可以保存到多个不同的目录,如果将每个目录分别挂载不同的硬盘,,这可是一个简单且高效的办法。
#path.logs: /path/to/logs#不动
network.host: 0.0.0.0#如果你的网卡有多个地址可以这么写,如果只想绑定到某个地址就写具体的,否则写每个节点自己的地址,写具体ip地址吧。
http.port: 9200
#transport.tcp.port: 9300#默认使用9300,不写也可以。
discovery.seed_hosts: ["elk1", "elk2", "elk3"]#我写的别名,前提我写在/etc/hosts了
cluster.initial_master_nodes: [“node-1”]#首次启动指定的Master节点
注意:在节点2或节点3不启用cluster.initial_master_nodes参数,注释掉。其实配置好节点1之后,
配置系统服务管理:
# cat /usr/lib/systemd/system/elasticsearch.service
[Unit]
Description=elasticsearch
[Service]
User=es#前面我们创建的es用户用到了
LimitNOFILE=65535
ExecStart=/opt/elk/elasticsearch/bin/elasticsearch
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl start elasticsearch
# systemctl start elasticsearch#启动elasticsearch
看日志方法:
#用systemd接管的服务,启动后,可以在journalctl看到日志了。
journalctl -u elasticsearch -f
journalctl -xe #也可以看到日志
systemctl status elasticsearch #也可以看到日志
项目文件夹logs目录下也可以看到日志,总共看日志就这么几个地方。
1.6 查看集群节点,状态:
查看集群节点:curl -XGET http://127.0.0.1:9200/_cat/nodes?pretty
查询集群状态: curl -i -XGET http://127.0.0.1:9200/_cluster/health?pretty
查看哪台是主节点:
[root@elk1 ~]# curl -XGET http://127.0.0.1:9200/_cat/nodes?v
ipheap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.68.128418300.060.050.05 dilmrt*elk2
192.168.68.129399200.000.020.05 dilmrt-elk3
192.168.68.19149610.300.140.09 dilmrt-elk1
这是通过api的方式查看。
[root@elk1 elasticsearch]# curl -i -XGET http://127.0.0.1:9200/_cluster/health?pretty
HTTP/1.1 200 OK
content-type: application/json;
charset=UTF-8
content-length: 464
"cluster_name" : "elk-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"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
[root@elk1 elasticsearch]#
[root@elk1 elasticsearch]# curl -XGET http://127.0.0.1:9200/_cat/nodes?pretty
192.168.0.10415 96 0 0.02 0.03 0.12 dilmrt * elk1#因为我服务器有多个ip地址,配置文件绑定地址我写的是0.0.0.0,所以这里随机获取了一个ip。
192.168.68.129 40 96 0 0.01 0.04 0.05 dilmrt - elk3
192.168.68.208 75 0 0.17 0.11 0.09 dilmrt - elk2
![image-20220402125116769](H:\\ELK\\01elk学习笔记\\elk学习笔记.assets\\image-20220402125116769.png)
1.7 图形界面管理集群
两种方法,下面我们用elastichd试试
1、ElasticHD
ElasticHD 是一款 ElasticSearch的可视化应用。不依赖ES的插件安装,更便捷;导航栏直接填写对应的ES IP和端口就可以操作Es了。目前支持如下功能:
linux and MacOs用法
下载对应的elasticHD版本,unzip xxx_elasticHd_xxx.zip
修改权限 chmod 0777 ElasticHD
可指定ip端口运行elastichd,执行 ./ElasticHD -p 127.0.0.1:9800 默认ip和端口也是这个。放到后台加个nohup &
windows
直接下载对应windows版本,解压,双击运行。当然想指定端口的话同linux
[root@elk1 elk]# unzip elasticHD_linux_amd64.zip
Archive:elasticHD_linux_amd64.zip
inflating: ElasticHD
[root@elk1 elk]#
[root@elk1 elk]# ls
ElasticHDelasticHD_linux_amd64.zipelasticsearchelasticsearch-7.9.3-linux-x86_64.tar.gz
[root@elk1 elk]#
[root@elk1 elk]# ls -l
total 327908
-rwxr-xr-x1 root root22871350 Jun 292017 ElasticHD
-rw-r--r--1 root root6464861 Nov42020 elasticHD_linux_amd64.zip
drwxr-xr-x 10 eses167 Mar 20 22:20 elasticsearch
-rw-r--r--1 root root 306436527 Oct 222020 elasticsearch-7.9.3-linux-x86_64.tar.gz
[root@elk1 elk]#
[root@elk1 elk]# ./ElasticHD
To view elasticHD console open http://0.0.0.0:9800 in browser
exec: "xdg-open": executable file not found in $PATH
也可以到后台启动:
[root@elk1 elk]# nohup ./ElasticHD &
[1] 46517
[root@elk1 elk]# nohup: ignoring input and appending output to ‘nohup.out’
[root@elk1 elk]#
[root@elk1 elk]# tail nohup.out
To view elasticHD console open http://0.0.0.0:9800 in browser
exec: "xdg-open": executable file not found in $PATH
![image-20220320212125755](H:\\ELK\\01elk学习笔记\\elk学习笔记.assets\\image-20220320212125755.png)
2、cerebro
还有其它工具,自己可以去g
推荐阅读
- 模拟磁盘引导故障修复
- vue 性能监控分析
- 怎么提高C++编程的基本功(这才是硬实力)
- 一文玩转Linux(NAT)网络配置(保姆级别教程)
- Linux系统安装LAMP中的MysQy 和PHP
- find文件查找
- python实验10 ?动检测?络配置变化
- CentOS7忘记mysql的root用户密码,重置流程
- python实验11 JSON的应用