一、ELK平台
1.1概念: ELK是由ElasticSearch、Logstash和Kiabana三个开源工具组成的开源实时日志分析平台
1.2 ELK的工作原理:
1.3解析:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
二、Elasticsearch
2.1概念:Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎
2.2存储数据结构:
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
一个 Elasticsearch 集群可以包含多个索引(数据库),也就是说其中包含了很多类型(表)。这些类型中包含了很多 的文档(行),然后每个文档中又包含了很多的字段(列)。
三、Logstash
3.1概念:Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。
四、Kibana
4.1概念:Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。
4.2作用:用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。
可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。
Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实 时显示Elasticsearch查询的变化。
五、Filebeat
5.1概念:采集数据,并上报到Logstash或Elasticsearch
六、需求:Elasticsearch 6.2版本的数据怎么备份,恢复有几种方式
备份群集的唯一可靠方法是使用快照和还原功能,必须先注册快照存储库,然后才能执行快照和还原操作,快照存储库使用共享文件系统存储库,快照存储库注册完成后,可在库中创建快照,默认情况下,会创建群集中所有打开和已启动索引的快照,快照以增量方式拍摄,这样可避免复制相同的数据。恢复快照时,默认情况下会恢复快照中的所有索引,并且不会还原群集状态。
七、从零开始搭建ELK平台:
7.1确定主机信息: 华为云主机ECS
7.2登录主机后,获取初始化脚本hec_init.sh到/root目录下:
若/root目录下没有初始化脚本,则需要从其他远程主机拷贝:
7.3执行初始化脚本文件:
sh hec_init.sh
7.4将新添加的磁盘文件系统格式化为ext4:
mkfs.ext4 /dev/vdb
7.5查询磁盘分区的UUID:
blkid /dev/vdb
7.6执行 vim /etc./stab 命令打开配置文件,添加配置:
UUID=前面查询到的UUID /opt/mateinfo ext4 defaults 0 0
7.7执行mount –a命令,完成挂载
7.8跳转到/opt目录下:cd /opt
7.9下载logstash安装包:
wget https://wyktest.s3-eu-west-1.amazonaws.com/mateinfo-logstash.zip
7.10需要先安装unzip解压工具:yum install unzip
7.11解压logstash:unzip mateinfo-logstash.zip
7.12进入/mate info/maintenance目录:cd /mate info/maintenance
7.13下载elastic search和kibana包:
wget https://wyktest.s3-eu-west-1.amazonaws.com/elasticsearch.zip
wget https://wyktest.s3-eu-west-1.amazonaws.com/kibana.zip
7.14解压elastic search和kibana包:
unzip elastic search
unzip kibana
7.15修改kibana配置文件:
vim /opt/mate info/maintenance/kibana/config/kibana.yml
修改为:server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: http://elk1:9200
elk1为私网IP,可通过ifconfig命令查询
7.16修改elasticsearch配置文件:
vim /opt/mate info/maintenance/elastic search/config/elasticsearch.yml
修改为:cluster.name: my_es_cluster //自定义集群名称
node.name: ${HOSTNAME}
path.data: /opt/mate info/data/elastic search
path.logs: /opt/mate info/logs/elastic search
network.host: elk1
http.port: 9200 //默认端口9200
discovery.zen.ping.unicast.hosts: [“elk1”]
elk1为私网IP,可通过ifconfig命令查询
7.17修改jvm.options文件,依据虚拟机内存大小,修改为适合大小,本节点为32G
修改为:-Xms16g
-Xmx16g
7.18修改logstash配置文件
vim /opt/mate info/maintenance/logstash/config/logstash.yml
修改为:path.logs: "/opt/mateinfo/logs/logstash"
xpack.monitoring.elasticsearch.url: ["http://elk1:9200"]
//其中elk1为私网IP,可通过ifconfig命令查询
7.19修改jvm.options文件,依据虚拟机内存大小,修改为适合大小,本节点为32G
修改为:-Xms8g
-Xmx8g
7.20修改logstash-indexer.conf文件:
vim /opt/mateinfo/maintenance/logstash/customize/logstash-indexer.conf
修改为:hosts => "http://elk1:9200"
//其中elk1为私网IP,可通过ifconfig命令查询
7.21修改系统资源配置:
vim /etc./security/limits.conf
修改如下:
root hard nofile 65536
root soft nofile 65536
mateinfo hard nofile 65536
mateinfo soft nofile 65536
* hard nofile 65536
* soft nofile 65536
* - as unlimited
* - memlock unlimited
7.22修改/etc./sysctl.conf文件,修改如下:
vm.max_map_count = 262144
kernel.shmall = 4294967296
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tw_recycle = 1
然后 root执行 sysctl –p 使配置生效
7.23先切换到mate info用户:su – mate info
7.24可以使用ll命令查看当前路径下的文件的权限
7.25如果出现权限不允许的错误,需要转到root用户下修改mateinfo文件的属主:
执行命令 chown -R mateinfo:inoc mateinfo
修改mateinfo文件的属主为mateinfo用户,属组为inoc
7.26启动elastic search服务:
su到 mate info 用户下,cd到/opt/mate info/maintenance/elastic search/bin/目录下,
执行 sh ./elasticsearch-admin.sh start 命令启动,查看9200端口是否开启
7.27启动kibana服务:
su 到 mate info 用户下,cd到/opt/mate info/maintenance/kibana/bin/目录下,
执行sh ./kibana-admin.sh start 命令,查看5601端口是否开启
7.28启动logstash服务:
su 到 mate info 用户下,cd到/opt/mate info/maintenance/logstash/bin/目录下,
执行sh ./logstash-admin.sh start 命令启动服务,查看9092端口是否开启
7.29执行netstat -ntlp命令可查看所有开启的端口
八、项目实战——数据迁移
8.1需求:将6.2版本的ELK平台上的数据迁移到7.2版本的ELK平台
注意点:数据量很大,传输过程较消耗时间且容易造成数据丢失,同时要注意扩充服务器磁盘容量来存储数据
8.2准备:搭建了6.2版本ELK平台的服务器A,搭建了7.2版本ELK平台的服务器B
8.3在服务器A配置快照存储仓库的路径:
cd到/opt/mate info/maintenance/elastic search/config/目录下,修改elasticsearch.yml文件
path.repo: ["/opt/mate info/my_backup"]
8.4在服务器A注册快照存储仓库:
命令行输入:
curl –XPUT http://192.168.254.32:9200/_snapshot/backup -H
'Content-Type: application/json' -d '{
"type": "fs",
"settings": {
"location": "/opt/mate info/my_backup"
}
}'
8.5注册完成后可查看存储仓库信息:
curl -XGET http://192.168.254.32:9200/_snapshot/backup
8.6在服务器A创建快照备份:
curl -XPUT http://192.168.254.32:9200/_snapshot/backup/snapshot_1
由于数据量较大,备份时间会很长,耐心等待!
8.7在服务器B创建和注册快照存储仓库,方法步骤同上
8.8将服务器A中备份好的快照传输到服务器B中的存储仓库中:
scp -r /opt/mateinfo1/my_backup/* root@139.9.192.44:/opt/mateinfo/my_backup
这一步是耗时最久的操作,耐心等待!应该还有更好的传输方法,不过时间有限,只能先用这种方法了
8.9可在服务器B中查看传输的快照状态:
curl -XGET http://192.168.254.240:9200/_snapshot/backup/snapshot_1 /_status
8.10在服务器B恢复快照数据:
curl -XPOST http://192.168.254.240:9200/_snapshot/backup/snapshot_1/_restore
-H 'Content-Type: application/json' -d '{
"indices":"*",
"partial":"true",
"ignore_unavailable":"true"
}'
8.11至此,数据迁移的步骤已完成,但实际开发中会遇到很多问题,下面总结一下遇到的问题及解决方案
8.12首先就是传输过程中的数据丢失问题,这会导致执行快照恢复操作时报错,并且整个ES集群的状态会变红,因为有未分配的分片。
8.13可通过执行命令来查看当前集群的状态:
curl -XGET 'http://192.168.254.240:9200/_cluster/health?pretty'
8.14可通过执行命令来查看当前集群分片的状态,来定位未分配的分片:
curl -X GET "http://192.168.254.240:9200/_cat/shards"
8.15针对数据丢失问题,解决方案有简单粗暴和天衣无缝两种。
简单粗暴:直接执行命令:
curl -XPUT "http://192.168.254.240:9200/_settings" -H 'Content-Type: application/json' -d'{ "number_of_replicas" : 0 }'
该命令强行将所有未分配的分片进行分配,优点是方便快捷,可快速让集群恢复健康,缺点是治标不治本,无法定 位缺失的数据。
天衣无缝:查询出快照包含的所有索引,然后逐个索引进行快照恢复,这样就可定位出现数据丢失的索引,缺点就是 比较麻烦,耗时较长。
8.16由于我们的数据迁移是跨版本迁移(6.2到7.2)所以在数据恢复过程中会出现重名的索引,比如.secrity索引,该索引是用来存储用户信息的,而在快照恢复过程中,6.2版的.secrity就会跟7.2版的.secrity索引重名,造成数据错乱。最终导致用户信息丢失,无法连接到ELK平台。
8.17针对上述问题,解决方案十分简单,只需删除旧版的.secrity索引即可解决。
8.18数据迁移完成后,会出现ES无法识别Logstash收集的日志信息的问题,该问题出现的原因是Kibana的匹配规则匹配不上新的索引,只需修改匹配规则就可解决该问题