基于Docker搭建Graylog分布式日志采集系统

news2024/11/16 21:38:01

文章目录

  • 一、简介
  • 二、Graylog
    • 1、主要特点
    • 2、组件
    • 3、工作流程介绍
    • 4、使用场景
  • 三、Graylog 安装部署
    • 1、 安装 docker
    • 2、安装docker compose
    • 3、 安装graylog
    • 4、Graylog控制台
  • 四、springboot集成Graylog


一、简介

Graylog是一个开源的日志管理工具,主要功能包括日志收集、解析、存储、搜索和可视化。它可以从各种数据源(如应用程序、系统和网络设备)收集日志,通过内置的解析器将日志格式化并存储在数据库中。用户可以使用其强大的搜索功能快速查找特定日志,设置告警规则以监控关键事件,且支持创建自定义仪表板和图表以可视化数据。这样,Graylog帮助用户实时监控系统健康,快速定位问题源,并进行深入分析。

二、Graylog

1、主要特点

  1. 日志收集:支持从多种数据源(如系统日志、应用日志、网络设备)收集日志数据,通过多种输入插件(如Syslog、HTTP、Kafka)进行接入。
  2. 日志解析:通过内置的解析器和提取器将日志数据标准化和格式化,支持对复杂日志数据进行提取和解析,使数据更加结构化和可操作。
  3. 存储和索引:将日志数据存储在Elasticsearch中,利用其高效的索引和搜索功能来处理大规模的日志数据。
  4. 实时搜索:提供强大的搜索功能,支持基于时间、字段和内容的复杂查询,以快速检索和分析日志信息。
  5. 可视化:允许创建自定义的仪表板、图表和报告,实时展示关键指标和日志数据的趋势,帮助用户更直观地理解系统状态和性能。
  6. 告警和通知:支持设置告警条件,根据日志内容或系统指标触发通知,及时响应潜在问题或异常情况。
  7. 用户管理:提供多级别的权限控制,允许管理员配置用户角色和权限,以确保数据访问的安全性和合规性。
  8. 插件和扩展:支持通过插件扩展功能,包括自定义输入、处理管道、输出插件等,以满足特定需求。

这些功能共同作用,使Graylog成为一个强大的日志管理和分析工具,帮助用户实时监控和优化系统性能。

2、组件

  1. Graylog Server:核心组件,负责处理和分析日志数据。包括接收、解析、存储、索引和搜索功能。
  2. Elasticsearch:用于存储和索引日志数据的搜索引擎,支持高效的全文搜索和复杂查询。
  3. MongoDB:存储Graylog的配置数据、用户信息和其他元数据。
  4. Graylog Web Interface:基于Web的用户界面,提供日志搜索、仪表板创建、报告生成和告警配置功能。

3、工作流程介绍

部署 graylog 最简单的架构就是单机部署,复杂的就是部署集群模式,架构图如下所示。我们可以看到其中包含了三个组件,分别是 Elasticsearch、MongoDB 和 Graylog。

  • Elasticsearch 用来持久化存储和检索日志文件数据(IO 密集)
  • MongoDB 用来存储关于 Graylog 的相关配置
  • Graylog 用来提供 Web 界面和对外接口的(CPU 密集)。

Alt

最小化单机部署

Alt

最优化集群部署

配置 Graylog 服务的核心就是理解对应组件的功能以及其运作方式!

简单来讲,Input 表示日志数据的来源,对不同来源的日志可以通过 Extractors 来进行日志的字段转换,比如将日记 Nginx 的状态码变成对应的英文表述等。然后,通过不同的标签类型组成不同的标签 Stream,并将这些日志数据存储到指定的地方 Index 库中进行了持久化保存。

组件名称功能介绍主要特点
Dashboards数据面板固定展示主要是用来保存特定搜索条件的数据面板
Searching日志信息条件搜索关键字搜索、时间搜索、搜索保存、创建面板、分组查询、结果导出、查询高亮显示,自定义时间
Alert设置告警提示方式支持邮件告警、HTTP 回调和自定义脚本触发
Inputs日志数据抓取接收部署 Sidercar 主动抓取或使用其他服务被动上报
Extractors日志数据格式转换json 解析、kv 解析、时间解析、正则解析
Streams日志信息分类分组设置日志分类条件并发送到不同的索引文件中去
Indices持久化数据存储设置数据存储性能
Outputs日志数据的转发解析的 Stream 发送到其他 Graylog 集群或服务
Pipelines日志数据的过滤建立数据清洗的过滤规则、字段添加删除、条件过滤、自定义函数等
Sidecar轻量级的日志采集器相当于 C/S 模式,大规模时使用
Lookup Tables服务解析基于 IP 的 Whois 查询和基于来源 IP 的情报监控
Geolocation可视化地理位置实现基于来源 IP 的情报监控

在这里插入图片描述

  • Graylog 通过 Input 搜集日志,每个 Input 单独配置 Extractors 用来做字段转换。Graylog
    中日志搜索的基本单位是 Stream,每个 Stream 可以有自己单独的 Elastic Index Set,也可以共享一个 Index
    Set。

  • Extractor 在 System/Input 中配置。Graylog 中很方便的一点就是可以加载一条日志,然后基于这个实际的例子进行配置并能直接看到结果。内置的 Extractor 基本可以完成各种字段提取和转换的任务,但是也有些限制,在应用里写日志的时候就需要考虑到这些限制。Input 可以配置多个 Extractors,按照顺序依次执行。

  • 系统会有一个默认的 Stream,所有日志默认都会保存到这个 Stream 中,除非匹配了某个 Stream,并且这个 Stream 里配置了不保存日志到默认 Stream。可以通过菜单 Streams 创建更多的 Stream,新创建的 Stream 是暂停状态,需要在配置完成后手动启动。Stream 通过配置条件匹配日志,满足条件的日志添加 stream ID 标识字段并保存到对应的 Elastic Index Set 中。

  • Index Set 通过菜单 System/Indices 创建。日志存储的性能,可靠性和过期策略都通过 Index Set 来配置。性能和可靠性就是配置 Elastic Index 的一些参数,主要参数包括,Shards 和 Replicas。

  • 除了上面提到的日志处理流程,Graylog 还提供了 Pipeline 脚本实现更灵活的日志处理方案。这里不详细阐述,只介绍如果使用 Pipelines 来过滤不需要的日志。下面是丢弃 level > 6 的所有日志的 Pipeline Rule 的例子。从数据采集(input),字段解析(extractor),分流到 stream,再到 pipeline 的清洗,一气呵成,无需再通过其他方式进行二次加工。

  • Sidecar 是一个轻量级的日志采集器,通过访问 graylog 进行集中式管理,支持 linux 和 windows 系统。Sidecar 守护进程会定期访问 graylog 的 REST API 接口获取 Sidecar 配置文件中定义的标签(tag) ,Sidecar 在首次运行时会从 graylog 服务器拉取配置文件中指定标签(tag) 的配置信息同步到本地。目前 Sidecar 支持 NXLog,Filebeat 和 Winlogbeat。他们都通过 graylog 中的 web 界面进行统一配置,支持 Beats、CEF、Gelf、Json API、NetFlow 等输出类型。Graylog 最厉害的在于可以在配置文件中指定 Sidecar 把日志发送到哪个 graylog 群集,并对 graylog 群体中的多个 input 进行负载均衡,这样在遇到日志量非常庞大的时候,graylog 也能应付自如。

  • 日志集中保存到 Graylog 后就可以方便地使用搜索器了。不过有时候还是需要对数据进行近一步的处理。主要有两个途径,分别是直接访问。 Elastic 中保存的数据,或者通过 Graylog 的 Output 转发到其它服务。

在这里插入图片描述

使用 Graylog 来收集日志

4、使用场景

  1. 系统监控:实时收集和分析系统日志,监控服务器、应用程序和网络设备的健康状态和性能。
  2. 故障排除:快速定位系统或应用程序中的问题,通过日志搜索和分析找到错误和异常的根源。
  3. 安全事件管理:跟踪和分析安全日志,检测异常行为,识别潜在的安全威胁。
  4. 合规性审计:记录和存档日志数据,满足行业合规性要求,如PCI-DSS、HIPAA等。
  5. 性能优化:分析日志数据以了解系统性能瓶颈,优化资源分配和应用程序性能。
  6. 运维自动化:设置告警和自动化响应策略,减少人工干预,提高运维效率。

三、Graylog 安装部署

1、 安装 docker

linux上进行docker安装有两种方式:

  1. Docker自动化安装
  2. Docker手动安装

可以根据该文章的步骤进行安装:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502

2、安装docker compose

  1. 国内镜像秒下载
	curl -L https://get.daocloud.io/docker/compose/releases/download/2.16.0/docker-compose-`uname -s`-`uname -m`  > /usr/local/bin/docker-compose

如果遇到版本更新,把版本数字更改一下就可以了。

  1. 修改文件执行权限
	sudo chmod +x /usr/local/bin/docker-compose
  1. 创建软链
	sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  1. 测试是否安装成功
	docker-compose --version

3、 安装graylog

  1. 创建目录
	mkdir -p /opt/graylog/mongo_data
	mkdir -p /opt/graylog/es_data
	mkdir -p /opt/graylog/graylog_data
	mkdir -p /opt/graylog/graylog_data/config
  1. 目录赋权
chmod -R +777 /opt/graylog/mongo_data
chmod -R +777 /opt/graylog/es_data
chmod -R +777 /opt/graylog/graylog_data
  1. 进入/opt/graylog/graylog_data/config目录
cd /opt/graylog/graylog_data/config
  1. 下载配置文件
wget http://raw.githubusercontent.com/Graylog2/graylog-docker/4.3/config/graylog.conf
wget http://raw.githubusercontent.com/Graylog2/graylog-docker/4.3/config/log4j2.xml
  1. 目录赋权
chown -R 1100:1100 /opt/graylog/graylog_data
  1. 设置查询高亮和国内时区
vim /opt/graylog/graylog_data/config/graylog.conf

国内时区:root_timezone = PRC
查询高亮:allow_highlighting = true

  1. 进入/opt/graylog目录
cd /opt/graylog
  1. 创建docker-compose.yml文件
vim docker-compose.yml
  • 文件内容如下
version: '3'
services: 
  mongodb:
    container_name: mongodb
    image: mongo:4.4.0
    restart: always
    volumes:
      - /opt/graylog/mongo_data:/data/db
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
 
 
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
    container_name: elasticsearch
    restart: always
    volumes:
      - /opt/graylog/es_data:/usr/share/elasticsearch/data
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - TZ=Asia/Shanghai
      - http.host=0.0.0.0
      - transport.host=localhost
      - network.host=0.0.0.0
      - http.cors.allow-origin=*
      - http.cors.enabled=true
      - discovery.type=single-node
      - 'ES_JAVA_OPTS=-Xms1024m -Xmx1024m'
 
 
  graylog:
    image: graylog/graylog:4.3.6
    container_name: graylog
    restart: always
    volumes:
      - /opt/graylog/graylog_data:/usr/share/graylog/data
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
    environment:
      # CHANGE ME (must be at least 16 characters)!
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      # Password: admin
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
      - GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog
      - GRAYLOG_ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - TZ=Asia/Shanghai
    entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 --  /docker-entrypoint.sh
    depends_on:
      - mongodb
      - elasticsearch
    links:
      - mongodb
      - elasticsearch
    ports:
      # Graylog web interface and REST API
    - 9000:9000
    # Syslog TCP
    - 1514:1514
    # Syslog UDP
    - 1514:1514/udp
    # GELF TCP
    - 12201:12201
    # GELF UDP
    - 12201:12201/udp
  1. 开始安装(也是启动命令)
docker-compose up -d
  1. 指定文件启动
docker-compose -f docker-compose.yml up -d
  1. 停止
docker-compose down
  1. 指定文件停止
docker-compose -f docker-compose.yml down
  1. 验证安装
docker ps

可以看见 graylog 容器的运行情况,可以看到 12201 udp这样才算成功
在这里插入图片描述

版本兼容要求
在这里插入图片描述

见官方文档说明链接:
https://go2docs.graylog.org/5-2/downloading_and_installing_graylog/installing_graylog.html

4、Graylog控制台

  1. 测试

安装完成之后,访问

http://127.0.0.1:9000/  (或 ip:9000)

在这里插入图片描述
默认docker-compose.yml文件设置的账号密码
账号:admin
密码:admin

在这里插入图片描述
至此,Graylog分布式日志服务就安装成功了

  1. 设置Graylog日志保留时间
    在这里插入图片描述
    在这里插入图片描述
  • 在导航栏中选择“System”。
  • 在左侧面板中选择“Indices”。
  • 在“Indices”页面中,可以看到已经存在的索引以及它们的相关信息。
  • 在这里,点击“Edit”按钮来编辑索引的保留策略。
  • 在弹出的窗口中,可以设置索引的保留策略,包括保留时间、最大文档数、最大索引大小等。

四、springboot集成Graylog

  1. 项目pom.xml中引入logback-gelf
        <!--  graylog 日志依赖      -->
        <dependency>
            <groupId>de.siegmar</groupId>
            <artifactId>logback-gelf</artifactId>
            <version>3.0.0</version>
        </dependency>

这样就可以再logback配置文件中加入 GelfTcpAppender GelfUdpAppender

  1. 项目logback文件中加入 Gelf Appender
  • 在application.yaml 中指定logback的配置文件
#配置logback日志组件
logging:
  config: classpath:logback.xml
  • 在 logback.xml配置文件中加入GelfTcpAppender (GELF_LOG 为graylog的日志记录)
    (为了防止graylog出现故障,可以在本地和graylog中同时记录日志)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="./logs"/>
    <property name="APP_NAME" value="cx-mail"/>
    <property name="LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS}\t%-5level\t%thread\t%logger\t%file:%line\t[%X{traceid}]\t%msg%n"/>


    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>


    <!-- INFO 日志文件 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/info.${APP_NAME}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>64MB</maxFileSize>
            <maxHistory>15</maxHistory>
            <totalSizeCap>32GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
            <immediateFlush>true</immediateFlush>
        </encoder>
        <!-- 排除带有 apiLogger marker 的日志 -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>apiLogger</marker>
            </evaluator>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>

    <!-- ERROR 日志文件 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/error.${APP_NAME}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>64MB</maxFileSize>
            <maxHistory>15</maxHistory>
            <totalSizeCap>32GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
            <immediateFlush>true</immediateFlush>
        </encoder>
        <!-- 排除带有 apiLogger marker 的日志 -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>apiLogger</marker>
            </evaluator>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>

    <!-- graylog日志配置 -->
    <appender name="GELF_LOG" class="de.siegmar.logbackgelf.GelfUdpAppender">
        <!-- Graylog服务的地址 -->
        <graylogHost>10.0.32.199</graylogHost>
        <!-- UDP Input端口 -->
        <graylogPort>12201</graylogPort>
        <!--以下为可选配置-->
        <maxChunkSize>508</maxChunkSize>
        <useCompression>true</useCompression>
        <encoder class="de.siegmar.logbackgelf.GelfEncoder">
            <!-- 是否发送原生的日志信息 -->
            <includeRawMessage>true</includeRawMessage>
            <includeMarker>true</includeMarker>
            <includeMdcData>true</includeMdcData>
            <includeCallerData>true</includeCallerData>
            <includeRootCauseData>true</includeRootCauseData>
            <includeLevelName>true</includeLevelName>

            <!-- 是否发送日志级别的名称,否则默认以数字代表日志级别 -->
            <includeLevelName>true</includeLevelName>
            <shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%m%nopex</pattern>
            </shortPatternLayout>
            <fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
                <!-- 使用定义的格式模式 -->
                <pattern>[%-5level]\t%d{yyyy-MM-dd HH:mm:ss.SSS}\t%thread\t%logger\t%file:%line\t[%X{traceid}]\t%msg%n</pattern>
            </fullPatternLayout>
            <!--
             配置应用名称(服务名称),通过staticField标签可以自定义一些固定的日志字段
            -->
            <staticField>app_name:${APP_NAME}</staticField>
        </encoder>
    </appender>

    <logger name="com.cx" level="INFO"/>

    <!-- 日志级别排序为: TRACE < DEBUG < INFO < WARN < ERROR -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
        <appender-ref ref="GELF_LOG"/>
    </root>
</configuration>


  1. 配置GrayLog
  • 此时需要配置GrayLog 的input选择 新增TCP 或 UDP 的输入

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 测试日志收集
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++中的匿名对象及内存管理及模版初阶

c中的匿名对象 A a;//a的生命周期在整个main函数中 a.Sum(1); //匿名对象生命周期只有一行&#xff0c;只有这一行会创建对象,出了这一行就会调析构 A().Sum(1);//只有这一行需要这个对象&#xff0c;其他地方不需要。 return 0; 日期到天数的转换 计算日期到天数转换_牛客…

解读GaussianTalker:利用音频驱动的基于3D高斯点染技术的实时高保真讲话头像合成

单位&#xff1a;首尔大学 项目地址&#xff1a;https://ku-cvlab.github.io/GaussianTalker/ github&#xff1a;https://github.com/KU-CVLAB/gaussiantalker 本文是对GaussianTalker的解读&#xff0c;欢迎大家阅读指正&#xff01; 目录 前言摘要一、背景介绍二 相关工作三…

拼多多Temu半托管和全托管对比

根据东吴证券报告显示&#xff0c;与全托管相比&#xff0c;半托管给予商家更灵活的物流选择&#xff0c;允许商家自行负责仓配物流&#xff1b;与传统3P模式相比&#xff0c;半托管仍保留平台核价、平台负责营销售后客服等特点。 Temu 最开始采用全托管模式&#xff0c;但随着…

【C++ Primer Plus习题】7.6

问题: 解答: #include <iostream> using namespace std;#define SIZE 20int Fill_array(double* arr, int len) {int i 0;for (i 0; i < len; i){cout << "请输入值:";cin >> arr[i];if (cin.fail()){cout << "输入非法数字,结束…

.NET中分布式服务

单体架构 特点&#xff1a; 所有的功能集成在一个项目工程中。所有的功能打在一个安装包。 优点&#xff1a; 项目架构简单。开发效率高。容易打包。 缺点&#xff1a; 全部功能集成在一个工程中&#xff0c;如果要更新&#xff0c; 所有的都要重新发布版本迭代速度逐渐变…

C#笔记4 详细解释事件及其原型、匿名方法和委托的关系

匿名方法 定义 匿名方法允许一个与委托关联的代码被内联的写入使用委托的位置。 语法形式 delegate(参数列表) {代码块 } 前文说过&#xff0c;委托是定义了一个公司&#xff0c;公司专门承接某一类型的任务。 委托的实例化就是公司把任务交给了具体的职员&#xff08;方…

【React】从零开始搭建 react 项目(初始化+路由)

创建 React 项目 创建项目的方式&#xff1a;create-react-app 项目名称 如果没有安装 react 脚手架&#xff0c;请先安装 npm isntall create-react-app -g安装成功后&#xff0c;开始配置项目 配置项目的 icon 和标题 配置 jsconfig.json 目的&#xff1a;用于配置 Java…

Google Earth Engine(GEE)——在 CloudCompare软件 中处理地面激光扫描 (TLS) 数据

背景和目的 本实验的目标是熟悉 3D 点云数据。我们将使用上周在 Boab 法院校园收集的数据。我们使用 Leica BLK360 激光扫描仪收集了多次扫描,今天我们将处理其中的一些扫描。 可以在此处以 .las 格式下载扫描数据(请注意,每个文件约为 1GB):这个是链接 https://www.dro…

批量进行Mysql数据处理的一项工作记录以及保存一个nginx变量大全

一、批量进行Mysql数据处理的一项工作记录 在使用SQL执行一起数据批量处理的时候遇到执行数速度非常慢。表temp_users是一个包含百万级的用户ID表&#xff0c;表user_list是一个亿级的表&#xff0c;因为跨库&#xff0c;这里使用的是federated引擎创建的结构表。根据要实现的目…

FPGA实现SDI视频H265压缩网络推流输出,基于VCU架构,支持12G-SDI 4K60帧,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我这里已有的视频图像编解码方案本博已有的 SDI 编解码方案 3、详细设计方案设计框图FPGA开发板视频输入SDI硬件均衡器LMH1219UHD-SDI GT SDI视频解串SMPTE UHD-SDI RX SUBSYSTEM SDI视频解码Video Frame Buffer WriteZynq UltraS…

大模型时代下,软件检测行业将如何发展?

大模型时代&#xff0c;软件测试面临着前所未有的机遇和挑战&#xff0c;各类产品测试领域将如何应对技术发展和时代变化&#xff1f; 2024年8月28日晚八点&#xff0c;安畅检测首席专家李龙与腾讯Tech Lead茹炳晟、中电金信质量团队负责人王壮做客人民邮电出版社创办的IT专业…

springboot集成guava布隆过滤器

1.创建springboot项目&#xff0c;引入maven依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></dependency>2.创建guava布隆过滤器 Component public class Gua…

DexclassLoader读取dex在Android14上遇到问题

报错如下&#xff1a; 在Android 14&#xff08;API 级别 34&#xff09;及以后版本中&#xff0c;DexClassLoader 被进一步限制&#xff0c;只能用于加载只读文件中的代码。这意味着你不能再使用 DexClassLoader 来加载从应用的内部存储空间中读取的文件。 我想通过JNI来修改…

Elasticsearch 8.13.4 LocalDateTime类型转换问题

框架背景 springboot 3.3.1elasticseach8.13.4spring-data-elasticsearch5.3.1(其实只要用了springboot3.3.1 上下两个的版本都在里面绑死了) 问题描述 使用spring-data-elasticsearch操作es&#xff0c;当字段增加映射注解,其实如果是日期类型&#xff0c;你不加默认也给你…

计算机网络概述(协议层次与服务模型)

目录 1.协议层次 2.服务模型 1.协议层次 层次化方式实现复杂网络功能&#xff1a; 将网络复杂的功能分成明确的层次&#xff0c;每一层实现了其中一个或一组功能&#xff0c;功能中有其上层可以使用的功能&#xff1a;服务本层协议实体相互交互执行本层的协议动作&#xff0…

C++(Qt)-GIS开发-QGraphicsView显示在线瓦片地图

C(Qt)-GIS开发-QGraphicsView显示在线瓦片地图 文章目录 C(Qt)-GIS开发-QGraphicsView显示在线瓦片地图1、概述2、实现效果3、主要代码4、源码地址 更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;GIS开发 &#x1f448; 1、概述 支持加载显示在线瓦片…

TD学习笔记————中级教程总结(NEW)

目录 Instance功能讲解 问题&#xff1a; 报错All ops must generate the same number of instances (have the same length Replicator功能讲解 问题&#xff1a; 视频分辨率过大 Cannot find function named:onValueChange Instance功能讲解 数据通道的长度要一致 N…

redroid搭建云手机学习笔记(一)

参考链接 通过Redroid搭建自己的云手机 docker安装 docker官网目前打不开了&#xff0c;通过官网安装的方式无法实现&#xff0c;这里需要借助镜像网站来实现docker的安装 参考链接&#xff1a;https://developer.aliyun.com/mirror/docker-ce # step 1: 安装必要的一些系统…

Dockerfile 实例

删除不需要的镜像&#xff1a;示例&#xff1a;通配符可用 [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 580260c93725 2 hours ago 4.27MB <none&…

基于python的足球比赛数据及可视化 python 足球预测

Python 足球可视化分析是使用 Python 编程语言来进行足球比赛数据分析&#xff0c;并将结果呈现为可视化图形的过程。Python 作为一种高效灵活的编程语言&#xff0c;可以用于数据处理和分析&#xff0c;同时也有丰富的可视化库。 足球比赛数据可以从各种数据来源获取&#xf…