当前位置: 首页 > news >正文

ELK日志解决方案

ELK日志解决方案

ELK套件日志系统应该是Elasticsearch使用最广泛的场景之一了,Elasticsearch支持海量数据的存储和查询,特别适合日志搜索场景。广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例,使用Logstash和Beats组件进行日志收集,Elasticsearch存储和查询应用日志,Kibana提供日志的可视化搜索界面。

在这里插入图片描述

安装es和kibana

本文版本为8.5.0

安装es和kibana文档可以参考:

https://blog.csdn.net/weixin_73195042/article/details/135835820

https://blog.csdn.net/weixin_73195042/article/details/135567295

此处es配置密码:elastic/111111

安装Logstash

请注意:Logstash版本必须和es版本一致!这里以8.5.0版本为例。

第一步:拉取镜像

docker pull logstash:8.5.0

第二步:需要提前在linux服务器上环境 /mydata/logstash/logstash.conf,内容如下

mkdir -p /mydata/logstash

input {tcp {mode => "server"host => "0.0.0.0"port => 5044codec => json_lines}
}
filter{}
output {elasticsearch {hosts => "192.168.200.6:9200"index => "project-%{+YYYY.MM.dd}"user => "elastic"password => "111111"}
}

第三步:创建容器

docker run --name docker_logstash -p 5044:5044 \
--restart=always \
--link docker_elasticsearch:es \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:8.5.0

安装Filebeat

第一步:授权

chmod 777 -R /var/log/messages

第二步:启动日志收集器

docker run -d \--name=filebeat \--restart=always \-v filebeat-conf:/usr/share/filebeat \-v /var/log/messages:/var/log/messages \--link 1833f6a65c2a:docker_elasticsearch \elastic/filebeat:7.8.01833f6a65c2a: es容器的ID

第三步:修改配置文件:

进入到目录:
cd /var/lib/docker/volumes/filebeat-conf/_data
修改配置文件
vim filebeat.yml
内容如下
filebeat.inputs:
- type: logenabled: truepaths:- /var/log/messages
filebeat.config:modules:path: ${path.config}/modules.d/*.ymlreload.enabled: falseprocessors:- add_cloud_metadata: ~- add_docker_metadata: ~output.elasticsearch:hosts: '192.168.200.128:9200'indices:- index: "filebeat-%{+yyyy.MM.dd}"

重启filebeat 容器,运行检索模块

效果:以后虚拟机上的所有日志都会收集保存到es中,可以在kibana中进行检索。

Logstash环境问题

  1. 安装Logstash

  2. 通过查看Logstash容器日志,401未授权异常 ES8.0后必须有授权许可

  3. 修改宿主机Logstash配置文件添加授权配置信息即可:/mydata/logstash/logstash.conf。

    此处密码应该与es密码一致

    user => "elastic"
    password => "111111"
    
  4. 重启Logstash容器,再查看一下日志,发现没有报错。

项目中整合

  1. 引入依赖

    <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>5.1</version>
    </dependency>
    
  2. 日志配置文件logback-spring.xml增加,日志Logstash策略

    <!-- logstash日志 -->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!-- logstash ip和暴露的端口,logback就是通过这个地址把日志发送给logstash --><destination>192.168.200.6:5044</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender><!-- 开发环境 -->
    <springProfile name="dev"><!-- com.atguigu日志记录器:业务程序INFO级别  --><logger name="com.atguigu" level="INFO" /><!--<logger name="com.alibaba" level="WARN" />--><!-- 根日志记录器:INFO级别  --><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="LOGSTASH" /></root>
    </springProfile>
    
  3. 启动项目测试Java进程启动会将日志发送到Logstash,Logstash会自动将数据存入ES

  4. 这时候我们启动项目,然后进入es的控制台,输入:

    GET /project-2024.01.26/_search
    {"query": {"term": {"level.keyword": {"value": "WARN"}}}
    }
    

    这样我们就可以得到服务的日志了。

我们还可以通过一些开源组件让日志可视化的直接展示出来,而不需要我们每次在es中查询。例如:

Plumelog: 一个简单易用的java日志系统,解放你的日志查询困难问题,方便快速追踪问题,安装配置简单,性能优秀 演示视频地址:https://v.qq.com/x/page/g3308uxlcnw.html (gitee.com)

相关文章:

  • React16源码: React中commit阶段的commitAllLifeCycles的源码实现
  • HTML-框架标签、实体、全局属性和元信息
  • 编曲学习:和声音程 调式体系 唱名法 调式调性
  • Java和Redis实现一个简单的热搜功能
  • YOLOv8融合改进 更换检测头同时改进C2f模块
  • 详讲api网关之kong的基本概念及安装和使用(一)
  • web安全学习笔记【08】——算法1
  • Qt/QML编程之路:ListView实现横排图片列表的示例(40)
  • React中文官网已经搬迁了,原网址内容将不再更新
  • std::for_each
  • 【小呆的力学笔记】弹塑性力学的初步认知二:应力应变分析(2)
  • 小黑艰难的前端啃bug之路:内联元素之间的间隙问题
  • Python 进阶语法:lambda函数
  • 浅聊 DNS 和 host
  • MySQL索引类型及数据结构【笔记】
  • [译] React v16.8: 含有Hooks的版本
  • 【RocksDB】TransactionDB源码分析
  • Angular4 模板式表单用法以及验证
  • Angular6错误 Service: No provider for Renderer2
  • iOS 颜色设置看我就够了
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • js写一个简单的选项卡
  • laravel5.5 视图共享数据
  • Python学习之路13-记分
  • Python中eval与exec的使用及区别
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • springboot_database项目介绍
  • vue-cli在webpack的配置文件探究
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 从伪并行的 Python 多线程说起
  • 基于HAProxy的高性能缓存服务器nuster
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 跳前端坑前,先看看这个!!
  • 写代码的正确姿势
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # centos7下FFmpeg环境部署记录
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #WEB前端(HTML属性)
  • #宝哥教你#查看jquery绑定的事件函数
  • (0)Nginx 功能特性
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (四)Linux Shell编程——输入输出重定向
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .apk 成为历史!
  • .gitignore
  • .net core 依赖注入的基本用发
  • .NET 中 GetProcess 相关方法的性能