• EFK+tomcat


    EFK获取tomcat日志

    一:介绍

    EFK不是一个软件,而是一套解决方案,开源软件之间的互相配合使用,高效的满足了很多场合的应用,是目前主流的一种日志系统。EFK是三个开源软件的缩写,分别表示:Elasticsearch , FileBeat, Kibana , 其中ELasticsearch负责日志保存和搜索,FileBeat负责收集日志,Kibana 负责界面,当然EFK和大名鼎鼎的ELK只有一个区别,那就是EFK把ELK的Logstash替换成了FileBeat,因为Filebeat相对于Logstash来说有2个好处:
    1、侵入低,无需修改程序目前任何代码和配置
    2、相对于Logstash来说性能高,Logstash对于IO占用很大

    Elasticsearch:

    (https://www.elastic.co/cn/elasticsearch/)

    Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。Elasticsearch 是索引、搜索和分析魔法发生的地方。

    Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和聚合信息来发现数据中的趋势和模式。随着数据和查询量的增长,Elasticsearch 的分布式特性可以使部署能够随之无缝增长

    filebeat:

    Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent ,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。

    Filebeat 的可靠性很强,可以保证日志 At least once 的上报,同时也考虑了日志搜集中的各类问题,例如日志断点续读、文件名更改、日志 Truncated 等。

    Filebeat 并不依赖于 ElasticSearch,可以单独存在。我们可以单独使用Filebeat进行日志的上报和搜集。filebeat 内置了常用的 Output 组件, 例如 kafka、ElasticSearch、redis 等,出于调试考虑,也可以输出到 console 和 file 。我们可以利用现有的 Output 组件,将日志进行上报。

    当然,我们也可以自定义 Output 组件,让 Filebeat 将日志转发到我们想要的地方。

    filebeat 其实是 elastic/beats 的一员,除了 filebeat 外,还有 HeartBeat、PacketBeat。这些 beat 的实现都是基于 libbeat 框架

    kibana:

    Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。

    es的增删改查

    索引index(相当于关系型数据库的表)

    类型type,在es7.x:默认为_doc(必须使用单index,单type,多type结构则会完全移除)

    映射mapping(定义字段的类型等信息)

    文档doc(一个doc相当于关系型数据库的一行数据,一行记录)

    es删除索引

    image-20220831170920140

    PUT(创建,修改) localhost:9200/索引名称/类型名称/文档id 创建文档(指定文档id)
    POST(创建) localhost:9200/索引名称/类型名称 创建文档(随机文档id)
    POST(修改) localhost:9200/索引名称/类型名称/文档id/update 修改文档
    DELETE(删除) localhost:9200/索引名称/类型名称/文档id 删除文档
    GET(查询) localhost:9200/索引名称/类型名称/文档id 查询文档通过文档ID
    POST(查询) localhost:9200/索引名称/类型名称/文档id/search 查询所有数据

    倒排索引

    倒排索引(Inverted Index):每个文档都对应一个ID,倒排索引会按照指定语法对每一个文档进行分词,然后维护一张表,列举所有文档中出现的terms以及它们出现的文档ID和出现频率,它是实现"单词-文档矩阵"的一种具体存储形式。倒排索引主要由两部分组成:“单词词典"+"倒排文件”。

    简单的来讲:正序索引是根据key找value,而倒序索引是根据value找key。

    image-20220831172200694

    image-20220831172212395

    单词词典(Lexicon):单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向"倒排列表"的指针。

    倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项。

    倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

    image-20220831172251888

    索引被删除如何恢复

    快照恢复

    创建文件夹用作Elasticsearch备份仓库

    mkdir /usr/local/backup
    chmod 777 /usr/local/backup
    在elasticsearch.yml文件中增加path.repo路径配置
    vim /usr/local/elasticsearch/config/elasticsearch.yml
    #加上这个配置
    path.repo: ["/usr/local/backup"]
    重启elasticsearch
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    创建仓库
    PUT _snapshot/my_backup
    {
        "type": "fs",
        "settings": {
            "location": "/mount/backups/my_backup",
            "max_snapshot_bytes_per_sec" : "50mb",	
            "max_restore_bytes_per_sec" : "50mb"	
        }
    }
    
    my_backup:仓库名称
    
    type:指定仓库的类型是一个共享文件系统
    
    localhost:指定已挂载的设备作为仓库地址
    
    max_snapshot_bytes_per_sec:当快照数据进入仓库时,这个参数控制这个过程的限流情况。默认每秒 20mb
    
    max_restore_bytes_per_sec:当从仓库恢复数据时,这个参数控制什么时候恢复过程会被限流以保障你的网络不会被占满。默认每秒 20mb。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    快照所有打开的索引
    PUT _snapshot/my_backup/snapshot_1
    
    
    • 1
    • 2
    • 3
    快照所有打开的索引到my_backup仓库中,快照的名称为snapshot_1,这个调用会立刻返回,然后快照会在后台运行
    
    PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
    1
    这个会阻塞调用直到快照完成。注意大型快照会花很长时间才返回
    
    • 1
    • 2
    • 3
    • 4
    • 5
    快照指定索引
    PUT _snapshot/my_backup/snapshot_2
    {
        "indices": "index_1,index_2"
    }
    这个快照命令只会备份索引名称为index1 和 index2 了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    查询快照信息
    GET _snapshot/my_backup/snapshot_2
    
    • 1
    • 2
    返回my_backup仓库下snapshot_2索引的详细信息
    
    GET _snapshot/my_backup/_all
    
    • 1
    • 2
    • 3
    删除快照
    DELETE _snapshot/my_backup/snapshot_2
    
    • 1
    • 2
    查看快照进度
    GET _snapshot/my_backup/snapshot_3
    
    INITIALIZING:分片在检查集群状态看看自己是否可以被快照。这个一般是非常快的。
    STARTED:数据正在被传输到仓库。
    FINALIZING:数据传输完成;分片现在在发送快照元数据。
    DONE:快照完成!
    FAILED:快照处理的时候碰到了错误,这个分片/索引/快照不可能完成了。检查你的日志获取更多信息。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    DELETE _snapshot/my_backup/snapshot_3
    1
    这个会中断快照进程。然后删除仓库里进行到一半的快照。
    
    • 1
    • 2
    • 3
    快照恢复
    POST _snapshot/my_backup/snapshot_1/_restore
    默认行为是把这个快照里存有的所有索引都恢复。如果 snapshot_1 包括五个索引,这五个都会被恢复到我们集群里。和 snapshot API 一样,我们也可以选择希望恢复具体哪个索引
    POST /_snapshot/my_backup/snapshot_1/_restore
    {
        "indices": "index_1", //只恢复 index_1 索引,忽略快照中存在的其余索引。
        "rename_pattern": "index_(.+)", //查找所提供的模式能匹配上的正在恢复的索引。
        "rename_replacement": "restored_index_$1" //然后把它们重命名成替代的模式。
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true
    1
    和快照类似, restore 命令也会立刻返回,恢复进程会在后台进行。如果你更希望你的 HTTP 调用阻塞直到恢复完成,添加 wait_for_completion 标记
    
    
    • 1
    • 2
    • 3
    • 4
    监控恢复操作
    GET restored_index_3/_recovery
    
    • 1

    最后可以查看到恢复情况

    type:字段告诉你恢复的类型;SNAPSHOT表示这个分片是在从一个快照恢复。

    source:描述了作为恢复来源的特定快照和仓库。

    percent:恢复进度

    取消一个快照恢复
    DELETE /restored_index_3
    1
    要取消一个恢复,你需要删除正在恢复的索引。因为恢复进程其实就是分片恢复,发送一个 删除索引 API 修改集群状态,就可以停止恢复进程。如果 restored_index_3索引正在恢复中,这个删除命令会停止恢复,同时删除所有已经恢复到集群里的数据。

    二:搭建

    架构

    image-20220830225911135

    环境

    名称IP部署
    tomcat192.168.64.20filebeat
    node1192.168.64.15Elasticsearch、Kibana
    node2192.168.64.16Elasticsearch

    一:配置tomcat服务器环境

    关闭防火墙和核心防护

    [root@tomcat ~]#systemctl stop firewalld.service 
    [root@tomcat ~]#systemctl disable firewalld.service 
    [root@tomcat ~]#setenforce 0
    
    • 1
    • 2
    • 3

    上传安装包

    [root@tomcat ~]#cd /opt/
    [root@tomcat /opt]#ls
    apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm  rh
    
    • 1
    • 2
    • 3

    安装JDK,并设置Java环境

    rpm -ivh jdk-8u201-linux-x64.rpm
    vim /etc/profile.d/java.sh
    
    export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
    export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar		#可执行文件的位置
    export PATH=$JAVA_HOME/bin:$PATH
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20220830230750261

    将脚本导入环境变量,生效

    source /etc/profile.d/java.sh
    java -version
    
    • 1
    • 2

    image-20220830230913419

    安装tomcat

    在安装 Tomcat 之前必须先安装 JDK,因为 JDK 是 java 语言的软件包开发工具,其中包含了JVM(java 虚拟机),编写好的 java 源程序经过编译可形成 java 字节码,只要安装了 JDK ,就可用 JVM 解释这些字节码文件,从而保证了 java 的跨平台性;

    • 解压 apache-tomcat-9.0.16.tar.gz 包
    [root@tomcat /opt]#tar zxvf apache-tomcat-9.0.16.tar.gz					  #解包
    [root@tomcat /opt]#mv apache-tomcat-9.0.16 /usr/local/tomcat     		  #转移包位置并改名
    
    
    • 1
    • 2
    • 3

    启动 Tomcat

    • 创建软连接,优化开启命令,便于管理

      [root@tomcat]#ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/		
      [root@tomcat]#ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
      
      • 1
      • 2

      开启服务

      startup.sh
      metstat -natp | grep 8080
      
      • 1
      • 2

      image-20220830231458301

    image-20220830231533751

    优化tomcat启动速度

    vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
    
    
    
    • 1
    • 2
    • 3

    image-20220830231653074

    重启tomcat服务

    /usr/local/tomcat/bin/shutdown.sh			
    /usr/local/tomcat/bin/startup. sh
    
    • 1
    • 2

    二:配置 Elasticsearch 环境

    node1和node2节点同时进行

    关闭防火墙和核心防护

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    
    • 1
    • 2
    • 3

    修改DNS

    vim /etc/hosts
    192.168.3.12 node1
    192.168.3.13 node2
    
    • 1
    • 2
    • 3

    image-20220830231925910

    设置java环境

    下载jdk包

    rpm -ivh jdk-8u201-linux-x64.rpm
    
    • 1
    vim /etc/profile.d/java.sh				#/etc/profile.d/环境变量脚本目录	
    export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
    export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar		#可执行文件的位置
    export PATH=$JAVA_HOME/bin:$PATH
    
    source /etc/profile.d/java.sh           #将脚本导入到环境变量中,使其生效
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    安装elasticsearch集群

    部署 Elasticsearch 软件

    node1和node2相同

    1.安装 rpm 包
    cd /opt
    #将软件包传至该目录下
    rpm -ivh elasticsearch-5.5.1.rpm 
    
    2.加载系统服务
    systemctl daemon-reload 	//加载系统服务
    systemctl enable elasticsearch	//开启服务
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    更改 ES 主要配置文件

    cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak

    vim /etc/elasticsearch/elasticsearch.yml
    
    • 1

    image-20220830232418323

    image-20220830232426396

    image-20220830232440073

    image-20220830232447073

    image-20220830232502961

    image-20220830232512577

    image-20220830232527233

    image-20220830232605858

    //17行	cluster.name: my-elk-cluster							#集群名字
    //23行	node.name: node1										#节点名字,node2节点就写node2
    //33行	path.data: /data/elk_data								#数据存放路径
    //37行	path.logs: /var/log/elasticsearch/						#日志存放路径
    //43行	bootstrap.memory_lock: false							#不在启动的时候锁定内存(前端缓存,与IOPS-性能测试方式,每秒读写次数相关)
    //55行	network.host: 0.0.0.0									#提供服务绑定的IP地址,0.0.0.0代表所有地址
    //59行	http.port: 9200											#侦听端口为9200
    //68行	discovery.zen.ping.unicast.hosts: ["node1", "node2"]	#集群发现通过单播实现
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    检查配置

    grep -v "^#" /etc/elasticsearch/elasticsearch.yml
    
    • 1

    image-20220830232856317

    创建数据存放路径并授权

    mkdir -p /data/elk_data
    chown elasticsearch:elasticsearch /data/elk_data/
    
    • 1
    • 2

    查看启动 ES 是否成功开启

    systemctl start elasticsearch.service
    netstat -antp | grep 9200	#需要等一会才行,启动比较慢
    
    • 1
    • 2

    image-20220830233302082

    查看节点信息,浏览器登陆

    192.168.64.15:9200
    192.168.64.16:9200
    
    • 1
    • 2

    image-20220830233351050

    image-20220830233408386

    检查集群健康状态

    浏览器打开

    http://192.168.64.15:9200/_cluster/health?pretty
    
    • 1

    image-20220830233553794

    检查集群状态信息

    打开 http://192.168.64.15:9200/_cluster/state?pretty
    
    
    • 1
    • 2

    image-20220830233652347

    安装 elasticsearch-head 插件

    node1、node2操作相同

    cd /opt
    yum install -y gcc gcc-c++ make
    tar zxvf node-v8.2.1.tar.gz
    cd node-v8.2.1/
    make -j 8 && make install
    这边时间很长,建议直直接上j8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    安装 phantomjs(前端框架)
    cd /usr/local/src/
    tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
    cd phantomjs-2.1.1-linux-x86_64/bin
    cp phantomjs /usr/local/bin
    
    • 1
    • 2
    • 3
    • 4
    安装 elasticsearch-head(数据可视化工具)
    cd /usr/local/src/
    tar zxvf elasticsearch-head.tar.gz
    cd elasticsearch-head/
    npm install &
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20220830234243450

    修改主配置文件

    cd ~
    vim /etc/elasticsearch/elasticsearch.yml
    
    • 1
    • 2

    在尾部添加配置

    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    • 1
    • 2

    image-20220830234400051

    #注释 1.开启跨域访问支持,默认为false

    2.跨域访问允许的域名地址

    systemctl restart elasticsearch
    
    • 1

    启动 elasticsearch-head

    cd /usr/local/src/elasticsearch-head/
    npm run start &
    
    • 1
    • 2

    image-20220830234559408

    查看端口

    netstat -lnupt |grep 9100
    netstat -lnupt |grep 9200
    
    • 1
    • 2

    image-20220830234722694

    浏览器查看

    http://192.168.64.15:9100/
    
    • 1

    image-20220830234835157

    image-20220830234935315

    node1

    curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"xcf","mesg":"hello world"}'
    #索引为index-demo,类型为test,可以看到成功创建
    
    
    • 1
    • 2
    • 3

    image-20220830235034527

    可以在浏览器上看到

    三:部署filebeat

    tomcat服务器部署

    把包拖进来。并进行解压,解压到/etc/目录下

    编辑配置文件

    vim /etc/filebeat/filebeat.yml	
    
    • 1

    image-20220830225208353

    image-20220830225148069

    image-20220830225126351

    手动载入ES索引模板

    curl -XPUT 'http://192.168.64.15:9200/_template/filebeat?pretty' -d@/etc/filebeat-5.5.1-linux-x86_64/filebeat.template.json
    
    • 1

    image-20220831001800333

    启动filebeat

    ./filebeat -e -c filebeat.yml &
    
    
    • 1
    • 2

    image-20220831155823334

    浏览器查看

    http://192.168.64.15:9100/
    
    • 1

    image-20220831160210710

    四:node1 安装kibana

    cd /usr/local/src
    
    
    • 1
    • 2

    image-20220831160550709

    rpm -ivh kibana-5.5.1-x86_64.rpm 
    
    • 1
    cp /etc/kibana/
    cp kibana.yml kibana.yml.bak
    
    • 1
    • 2

    image-20220831160731126

    修改配置文件

    打开端口

    image-20220831160818062

    监听地址 0.0.0.0表示任何

    image-20220831160846109

    和es建立联系

    image-20220831160939582

    在elasticsearch中添加.kibana索引

    image-20220831161006629

    启动服务并开机自启

    image-20220831161235397

    浏览器验证

    192.168.64.15:5601
    
    • 1

    image-20220831161524907

    image-20220831161624224

    可以监控到了

    image-20220831163510010

  • 相关阅读:
    抓到Dubbo异步调用的小BUG,再送你一个贡献开源代码的机会
    《奇迹课程》练习手册
    【微服务】服务网关----Gateway
    【AAC文件数据解析和ADTS frame】
    SpringMVC之对JSON的支持以及全局异常处理
    世微 电动车摩托车灯 5-80V 1.2A 一切二降压恒流驱动器AP2915
    vue父组件多次调用同一个echarts组件,只渲染一个echarts组件的问题
    山东大学单片机原理与应用实验 3.2 拓展并行I/O口实验
    Matlab中 * 与 .* 的区别
    全民拼购:重新定义电商营销的新模式
  • 原文地址:https://blog.csdn.net/H_YANG__/article/details/126924284