ELK平台学习笔记

一、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的匹配规则匹配不上新的索引,只需修改匹配规则就可解决该问题

上一篇:第二十二章 Centos7下Docker安装Elasticsearch


下一篇:GRPC