如何搭建 ELK【elasticsearch+logstash+kibana】日志分析体系

打印 上一主题 下一主题

主题 855|帖子 855|积分 2565

一、为什么须要日志分析体系?

日志重要包括体系日志、应用程序日志和安整日志。体系运维和开发职员可以通过日志了解服务器软硬件信息、检查设置过程中的错误及错误发生的缘故原由。经常分析日志可以了解服务器的负荷,性能安全性,从而及时接纳措施纠正错误
往往单台机器的日志我们利用 grep、awk 等工具就能基本实现简朴分析,但是当日志被分散的储存不同的装备上。如果你管理数十上百台服务器,你还在利用依次登录每台机器的传统方法查阅日志。如许是不是感觉很繁琐和效率低下。
如果:
• 你有很多台机器
• 你有各种各样的Log

只要满意这两个条件其中之一,那么一套日志体系是很有须要的。优秀的日志体系可以让你及时发现标题,轻松追查故障缘故原由,进而提高生产力。
二、什么是 ELK

ELK 即 elasticsearch + logstash + kibana,ELK 平台是一套完整的日志会合处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具共同利用, 完成更强大的用户对日志的查询、排序、统计需求。



  • Logstash:用于收集并处理日志,将日志信息存储到 Elasticsearch 里面
  • Elasticsearch:用于存储收集到的日志信息
  • Kibana :通过Web端的可视化界面来查察日志(数据可视化)
ELK 的工作原理

  • 在所有须要收集日志的服务器上部署 Logstash;大概先将日志进行会合化管理在日志服务器上,在日志服务器上部署 Logstash。
  • Logstash 收集日志,将日志格式化并输出到 Elasticsearch 中。
  • Elasticsearch 对格式化后的数据进行索引和存储。
  • Kibana 从 ES 群会合查询数据生成图表,并进行前端数据的展示。
三、搭建 ELK

1.安装 elasticsearch

https://blog.csdn.net/ShockChen7/article/details/142760578
2.安装kibana

https://blog.csdn.net/ShockChen7/article/details/142760578
3.安装logstash

1.拉取 logstash镜像

  1. docker pull logstash:8.8.1
复制代码
2.创建并运行容器

利用以下命令创建一个新的 logstash 容器并将其启动:
  1. docker run --name some-logstash \
  2.   -e ES_JAVA_OPTS="-Xms1g -Xmx2g" \
  3.   -e TZ=Asia/Shanghai \
  4.   -p 5044:5044 \
  5.   -p 5000:5000 \
  6.   -d logstash:8.8.1
复制代码
创建挂载目录、复制数据卷
  1. mkdir -vp /root/my-logstash
  2. #赋于权限
  3. sudo chown -R 1000:1000 /root/my-logstash
  4. #复制数据卷
  5. docker cp some-logstash:/usr/share/logstash/config /root/my-logstash/
  6. docker cp some-logstash:/usr/share/logstash/pipeline /root/my-logstash/
复制代码
  注:下载的包一定要和 ElasticSearch 的版本一致,我这边选择的版本是8.8.1
  3.设置

Logstash 的 Settings 设置文件通常是 logstash.yml,这是 Logstash 的全局设置文件,用于设置 Logstash 运行的一些基本参数。
在本地编辑文件
  1. vim /root/my-logstash/config/logstash.yml
复制代码
在 logstash.yml 末尾加上以下设置,文件的作用是为 Logstash 设置全局参数,比如日志级别、管道线程数、队列类型等。
  1. http.host: "0.0.0.0"
  2. xpack.monitoring.enabled: true
  3. # xpack.monitoring.elasticsearch.username: logstash_system  #es xpack账号密码
  4. # xpack.monitoring.elasticsearch.password: "123456"
  5. xpack.monitoring.elasticsearch.hosts: ["http://127.0.0.1:9200"]
复制代码
修改 logstash.conf 为以下设置,默认的底子上,将 input 的 beat 改为 tcp 端口 5044
  1. vim /root/my-logstash/pipeline/logstash.conf
复制代码
  1. input {
  2.   tcp {
  3.     port => 5044
  4.     ##格式json  否则中文会变成unicode编码
  5.         codec => json_lines
  6.    
  7.   }
  8. }
  9. output {
  10.   elasticsearch {
  11.     hosts => ["http://localhost:9200"]
  12.     index => "my_log-%{+YYYY.MM.dd}"
  13.     #user => "elastic" #es xpack账号密码
  14.     #password => "changeme"
  15.   }
  16. }
复制代码
注意:如果你的 es 运行在 docker 中,这里的设置中包括上面的,不能是 localhost ,而应该是你 docker 容器的 IP
利用命令可以查察指定容器的IP
  1. docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' your_container_name
复制代码
  另一种做法是将 es 和 logstash 和 kibana 放在同一个 docker 网络中
  4.制止、删除容器

  1. docker stop some-logstash
  2. docker rm some-logstash
复制代码
5.重新挂载文件启动容器

  1. docker run --name some-logstash \
  2.   -e ES_JAVA_OPTS="-Xms1g -Xmx2g" \
  3.   -e TZ=Asia/Shanghai \
  4.   --restart=always --privileged=true \
  5.   -v /root/my-logstash/config:/usr/share/logstash/config \
  6.   -v /root/my-logstash/pipeline:/usr/share/logstash/pipeline \
  7.   -p 5044:5044 \
  8.   -p 5000:5000 \
  9.   -d logstash:8.8.1
复制代码
6.检查可用性

检测 Docker 中的 Logstash 是否能够正常接收和打印消息
可以参考这篇文章:https://blog.csdn.net/weixin_50382197/article/details/139107762?fromshare=blogdetail&sharetype=blogdetail&sharerId=139107762&sharerefer=PC&sharesource=ShockChen7&sharefrom=from_link
四、springboot项目集成

1.添加logstash依赖

  1. <dependency>
  2.     <groupId>net.logstash.logback</groupId>
  3.     <artifactId>logstash-logback-encoder</artifactId>
  4.     <version>7.0.1</version>
  5. </dependency>
复制代码
2.预备logback-spring.xml文件

放在 src/main/resources 下面即可:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.     <include resource="org/springframework/boot/logging/logback/base.xml" />
  4.     <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
  5.     <!--    此处填写的是logstash采集日志的端口    -->
  6.      <destination>192.168.11.131:5044</destination>
  7.         <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
  8.     </appender>
  9.     <root level="INFO">
  10.             <!-- 配置哪个级别使用该appender -->
  11.         <appender-ref ref="LOGSTASH" />
  12.     </root>
  13. </configuration>
复制代码
Spring Boot 官方推荐优先利用带有 -spring 的文件名作为你的日志设置(如利用 logback-spring.xml ,而不是 logback.xml ),命名为 logback-spring.xml 的日志设置文件,spring boot 可以为它添加一些spring boot 特有的设置项
3.进行测试

  1. package com.ruoyi.web;
  2. import com.ruoyi.common.utils.http.HttpUtils;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. public class Test {
  6.     private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
  7.     public static void main(String[] args) {
  8.         log.info("输出info");
  9.         log.debug("输出debug");
  10.         log.error("输出error");
  11.     }
  12. }
复制代码
五、查察日志

利用Kibana的开发者工具

在 Kibana 开发者工具中实行如下语句可以查察到对应日志记载:
  1. GET my_log-2024.11.01/_search
  2. {
  3.   "query": {
  4.     "match_all": {}
  5.   }
  6. }
复制代码
查询结果如下:

可以看到,这里的数据即我们代码中测试的相干日志。但这里的结果并不方便观察和整理。并且时间格式也不抱负,时区也并不是北京时间。
利用 Kibana 的 Discover 功能


进入后创建一个数据视图:

创建时,输入名称,和索引模式即可:

这里的索引模式须要和匹配的源对应,支持通配符,上图即利用 * 通配符创建。填写好后, 点击生存数据视图到 Kibana。
创建好的数据视图如下:

六、添加es动态模板

根据上面的 logstash.conf 设置文件,动态生成的索引。数据布局除了 @timestamp 字段为date类型,其他的都将默认声明为 text 类型,即都将分词。如下:
  1. GET my_log-2024.11.04/_mapping
复制代码
  1. {
  2.   "my_log-2024.11.04": {
  3.     "mappings": {
  4.       "properties": {
  5.         "@timestamp": {
  6.           "type": "date"
  7.         },
  8.         "@version": {
  9.           "type": "long"
  10.         },
  11.         "level": {
  12.           "type": "text",
  13.           "fields": {
  14.             "keyword": {
  15.               "type": "keyword",
  16.               "ignore_above": 256
  17.             }
  18.           }
  19.         },
  20.         "level_value": {
  21.           "type": "long"
  22.         },
  23.         "logger_name": {
  24.           "type": "text",
  25.           "fields": {
  26.             "keyword": {
  27.               "type": "keyword",
  28.               "ignore_above": 256
  29.             }
  30.           }
  31.         },
  32.         "message": {
  33.           "type": "text",
  34.           "fields": {
  35.             "keyword": {
  36.               "type": "keyword",
  37.               "ignore_above": 256
  38.             }
  39.           }
  40.         },
  41.         "thread_name": {
  42.           "type": "text",
  43.           "fields": {
  44.             "keyword": {
  45.               "type": "keyword",
  46.               "ignore_above": 256
  47.             }
  48.           }
  49.         }
  50.       }
  51.     }
  52.   }
  53. }
复制代码
这会导致浪费大量的空间和性能,比如我们的 logger_name 、thread_name 和 level 字段,完全没有须要进行分词,精准查找即可,以是如今我们须要在 logstash 上传日志到es时,精准的建立字段的类型。这里接纳es动态索引模板的方式。
利用 Kibana 开发者工具实行如下指令,创建索引模板:
  1. PUT /_index_template/my_log_template  
  2. {  
  3.   "index_patterns": ["my_log-*"],   
  4.   "template": {  
  5.     "mappings": {  
  6.       "properties": {  
  7.         "@timestamp": {  
  8.           "type": "date"  
  9.         },  
  10.         "data": {  
  11.           "type": "text" ,
  12.           "fields": {  
  13.             "keyword": {  
  14.               "type": "keyword",  
  15.               "ignore_above": 256  
  16.             }  
  17.           }  
  18.         },
  19.         "level": {  
  20.           "type": "keyword"  
  21.         },  
  22.         "logger_name": {  
  23.           "type": "keyword"  
  24.         },  
  25.         "thread_name": {  
  26.           "type": "keyword"  
  27.         }  
  28.       }  
  29.     }
  30.   }  
  31. }
复制代码
这个模板将自动应用于任何以 my_log- 开头的新索引。当让适用于以 my_log- 开头的索引名称。如果字段名称可以和模板对应上,那么字段类型将跟模板一致。
创建模板后,再次测试日志插入,查察类型,发现模板已经生效:

参考文章如下:
https://blog.csdn.net/www1056481167/article/details/128432478?fromshare=blogdetail&sharetype=blogdetail&sharerId=128432478&sharerefer=PC&sharesource=ShockChen7&sharefrom=from_link
https://blog.csdn.net/qq_38548730/article/details/141461285?fromshare=blogdetail&sharetype=blogdetail&sharerId=141461285&sharerefer=PC&sharesource=ShockChen7&sharefrom=from_link
https://blog.csdn.net/qq_36961226/article/details/139211386?fromshare=blogdetail&sharetype=blogdetail&sharerId=139211386&sharerefer=PC&sharesource=ShockChen7&sharefrom=from_link

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表