docker快速实现ELK的安装和使用

目录

一、ELK功能原理

二、项目功能展示​

三、日志查询展示​

四、ELK安装步骤

1、创建elasticsearch、kibana、filebeat相关data、log、conf目录

2、进入/usr/local/elk目录,并创建一个docker网络

3、启动 elasticsearch容器

4、运行kibana容器

5、启动filebeat容器

6、查看上述三个服务运行状态

7、复制elasticsearch、kibana、filebeat配置文件

8、修改elasticsearch、kibana、filebeat配置文件 

 9、修改完成配置文件后,再次分别修改三个容器服务的启动命令

10、修改elasticsearch系统用户密码 

11、浏览器访问服务

12、配置和使用Kibana


一、ELK功能原理

项目使用过程中,功能的操作,如查询、修改、删除、添加、第三方请求日志等功能的操作过程中,后台会产生日志,实时存入.log日志文件中,filebeat容器根据配置的日志文件路径,及日志文件路径映射关系,监听日志文件内容变动,将项目产生的实时变动日志内容发送到elasticsearch中存储,最后kibana界面从elasticsearch中查询日志变动数据,最后展示在kibana的日志界面中。

二、项目功能展示

三、日志查询展示

四、ELK安装步骤

1、创建elasticsearch、kibana、filebeat相关data、log、conf目录

sudo mkdir -p /usr/local/elk/elasticsearch/config
sudo mkdir -p /usr/local/elk/elasticsearch/data
sudo mkdir -p /usr/local/elk/elasticsearch/logs
sudo mkdir -p /usr/local/elk/kibana/config
sudo mkdir -p /usr/local/elk/kibana/data
sudo mkdir -p /usr/local/elk/kibana/logs
sudo mkdir -p /usr/local/elk/filebeat/config
sudo mkdir -p /usr/local/elk/filebeat/data
sudo mkdir -p /usr/local/elk/filebeat/logs

2、进入/usr/local/elk目录,并创建一个docker网络

进入目录,然后先创建一个名为elk-net的docker网络,当然名字自己可以随意定义

cd /usr/local/elk/ && docker network create elk-net

为什么创建专用 Docker 网络?

  • 更好的网络隔离:创建专用网络可以将 ELK 组件与其他容器和服务隔离开来,避免网络冲突和安全风险。
  • 更简单的服务发现:在同一个 Docker 网络中的容器可以通过容器名称互相通信,而不需要使用 IP 地址。这使得配置更加简单和灵活。
  • 更好的性能:专用网络可以减少网络延迟,提高 ELK 堆栈的性能。
  • 更清晰的管理:专用网络使网络管理更加清晰,便于维护和扩展

3、启动 elasticsearch容器

docker run -d \
--name elasticsearch \
--env cluster.name=es-app-cluster \
--env bootstrap.memory_lock=true \
--env node.name=node-01 \
--env discovery.type=single-node \
--env xpack.security.enabled=true \
--env xpack.security.http.ssl.enabled=false \
--env xpack.security.transport.ssl.enabled=false \
--env ingest.geoip.downloader.enabled=false \
--env ELASTIC_USERNAME=elastic \
--env ELASTIC_PASSWORD=elastic \
--env ES_JAVA_OPTS="-Xms256m -Xmx256m" \
--ulimit memlock=-1:-1 \
--volume /etc/localtime:/etc/localtime:ro \
--volume /etc/timezone:/etc/timezone:ro \
--publish 9200:9200 \
--publish 9300:9300 \
--network elk-net \
--restart always \
--privileged \
docker.elastic.co/elasticsearch/elasticsearch:8.6.2

注意:因为我提前已经下载或elasticsearch镜像,所以比较快,你们首次运行这个命令,下载很慢,耐心等待下载完成并运行容器即可。

参数说明

### `docker run -d`
- **作用**:以后台模式(detached mode)运行容器。
- **解释**:`-d` 参数表示容器在后台运行,不会占用当前终端。### `--name elasticsearch`
- **作用**:为容器指定一个名称。
- **解释**:`elasticsearch` 是容器的名称,方便后续管理和引用。### `--env cluster.name=es-app-cluster`
- **作用**:设置 Elasticsearch 集群的名称。
- **解释**:`es-app-cluster` 是集群的名称,用于标识和管理多个集群。### `--env bootstrap.memory_lock=true`
- **作用**:启用内存锁定。
- **解释**:`true` 表示 Elasticsearch 将锁定内存,防止操作系统交换内存到磁盘,从而提高性能。### `--env node.name=node-01`
- **作用**:设置节点的名称。
- **解释**:`node-01` 是节点的名称,用于标识集群中的不同节点。### `--env discovery.type=single-node`
- **作用**:设置发现类型为单节点模式。
- **解释**:`single-node` 表示这是一个单节点的 Elasticsearch 实例,适用于开发和测试环境。### `--env xpack.security.enabled=true`
- **作用**:启用 X-Pack 安全功能。
- **解释**:`true` 表示启用 X-Pack 安全功能,包括用户认证、授权等。### `--env xpack.security.http.ssl.enabled=false`
- **作用**:禁用 HTTP SSL/TLS 加密。
- **解释**:`false` 表示不启用 HTTP SSL/TLS 加密,适用于内部网络或开发环境。### `--env xpack.security.transport.ssl.enabled=false`
- **作用**:禁用传输层 SSL/TLS 加密。
- **解释**:`false` 表示不启用传输层 SSL/TLS 加密,适用于内部网络或开发环境。### `--env ingest.geoip.downloader.enabled=false`
- **作用**:禁用 GeoIP 下载器。
- **解释**:`false` 表示不启用 GeoIP 下载器,减少不必要的资源消耗。### `--env ELASTIC_USERNAME=elastic`
- **作用**:设置 Elasticsearch 的用户名。
- **解释**:`elastic` 是默认的超级管理员用户名。### `--env ELASTIC_PASSWORD=elastic`
- **作用**:设置 Elasticsearch 的密码。
- **解释**:`elastic` 是默认的超级管理员密码。在生产环境中,建议使用更复杂的密码。### `--env ES_JAVA_OPTS="-Xms256m -Xmx256m"`
- **作用**:设置 JVM 的堆内存大小。
- **解释**:`-Xms256m` 设置初始堆内存大小为 256MB,`-Xmx256m` 设置最大堆内存大小为 256MB。### `--ulimit memlock=-1:-1`
- **作用**:设置内存锁定限制。
- **解释**:`-1:-1` 表示不限制内存锁定,允许 Elasticsearch 锁定所有分配的内存。### `--volume /etc/localtime:/etc/localtime:ro`
- **作用**:挂载宿主机的 `/etc/localtime` 到容器的 `/etc/localtime`,并且以只读方式挂载。
- **解释**:确保容器使用宿主机的系统时间。### `--volume /etc/timezone:/etc/timezone:ro`
- **作用**:挂载宿主机的 `/etc/timezone` 到容器的 `/etc/timezone`,并且以只读方式挂载。
- **解释**:确保容器使用宿主机的时区设置。### `--publish 9200:9200`
- **作用**:将容器的 9200 端口映射到宿主机的 9200 端口。
- **解释**:9200 端口是 Elasticsearch 的 HTTP API 端口。### `--publish 9300:9300`
- **作用**:将容器的 9300 端口映射到宿主机的 9300 端口。
- **解释**:9300 端口是 Elasticsearch 的传输层通信端口,用于节点间通信。### `--network elk-net`
- **作用**:将容器连接到指定的 Docker 网络。
- **解释**:`elk-net` 是之前创建的专用 Docker 网络,用于连接 ELK 组件。### `--restart always`
- **作用**:设置容器的重启策略。
- **解释**:`always` 表示无论容器退出状态如何,都会自动重启容器。### `--privileged`
- **作用**:赋予容器特权模式。
- **解释**:`--privileged` 表示容器具有几乎所有的内核能力,适用于需要高级权限的场景。### `docker.elastic.co/elasticsearch/elasticsearch:8.6.2`
- **作用**:指定要使用的 Docker 镜像。
- **解释**:`docker.elastic.co/elasticsearch/elasticsearch:8.6.2` 是 Elasticsearch 的官方镜像,版本为 8.6.2。

4、运行kibana容器

docker run -d \
--name kibana \
--env ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
--env ELASTICSEARCH_USERNAME=kibana_system \
--env ELASTICSEARCH_PASSWORD=elastic \
--env XPACK_SECURITY_ENABLED=true \
--env SERVER_NAME=kibana \
--volume /etc/localtime:/etc/localtime:ro \
--volume /etc/timezone:/etc/timezone:ro \
--publish 5601:5601 \
--network elk-net \
--restart always \
--privileged \
docker.elastic.co/kibana/kibana:8.6.2

注意:请耐心等待下载完成并运行即可

参数说明

docker run -d
作用:以后台模式(detached mode)运行容器。
解释:-d 参数表示容器在后台运行,不会占用当前终端。
--name kibana
作用:为容器指定一个名称。
解释:kibana 是容器的名称,方便后续管理和引用。
--env ELASTICSEARCH_HOSTS=http://elasticsearch:9200
作用:设置 Kibana 连接的 Elasticsearch 实例的地址。
解释:http://elasticsearch:9200 表示 Kibana 将连接到名为 elasticsearch 的主机上的 Elasticsearch 服务,端口为 9200。这通常用于 Docker 容器或 Kubernetes 集群中的服务发现。
--env ELASTICSEARCH_USERNAME=kibana_system
作用:设置 Kibana 连接 Elasticsearch 时使用的用户名。
解释:kibana_system 是 Kibana 用于连接 Elasticsearch 的用户名。
--env ELASTICSEARCH_PASSWORD=elastic
作用:设置 Kibana 连接 Elasticsearch 时使用的密码。
解释:elastic 是 Kibana 用于连接 Elasticsearch 的密码。在生产环境中,建议使用更复杂的密码。
--env XPACK_SECURITY_ENABLED=true
作用:启用 X-Pack 安全功能。
解释:true 表示启用 X-Pack 安全功能,包括用户认证、授权等。
--env SERVER_NAME=kibana
作用:设置 Kibana 服务器的名称。
解释:kibana 是 Kibana 服务器的名称,用于标识和管理。
--volume /etc/localtime:/etc/localtime:ro
作用:挂载宿主机的 /etc/localtime 到容器的 /etc/localtime,并且以只读方式挂载。
解释:确保容器使用宿主机的系统时间。
--volume /etc/timezone:/etc/timezone:ro
作用:挂载宿主机的 /etc/timezone 到容器的 /etc/timezone,并且以只读方式挂载。
解释:确保容器使用宿主机的时区设置。
--publish 5601:5601
作用:将容器的 5601 端口映射到宿主机的 5601 端口。
解释:5601 端口是 Kibana 的默认 HTTP 服务端口,用于访问 Kibana 用户界面。
--network elk-net
作用:将容器连接到指定的 Docker 网络。
解释:elk-net 是之前创建的专用 Docker 网络,用于连接 ELK 组件。
--restart always
作用:设置容器的重启策略。
解释:always 表示无论容器退出状态如何,都会自动重启容器。
--privileged
作用:赋予容器特权模式。
解释:--privileged 表示容器具有几乎所有的内核能力,适用于需要高级权限的场景。在大多数情况下,Kibana 不需要特权模式,除非有特殊需求。
docker.elastic.co/kibana/kibana:8.6.2
作用:指定要使用的 Docker 镜像。
解释:docker.elastic.co/kibana/kibana:8.6.2 是 Kibana 的官方镜像,版本为 8.6.2。

5、启动filebeat容器

docker run -d \
--name filebeat \
--volume /etc/localtime:/etc/localtime:ro \
--volume /etc/timezone:/etc/timezone:ro \
--network elk-net \
--restart always \
--privileged \
--user root \
docker.elastic.co/beats/filebeat:8.6.2

参数说明

docker run -d
作用:以后台模式(detached mode)运行容器。
解释:-d 参数表示容器在后台运行,不会占用当前终端。
--name filebeat
作用:为容器指定一个名称。
解释:filebeat 是容器的名称,方便后续管理和引用。
--volume /etc/localtime:/etc/localtime:ro
作用:挂载宿主机的 /etc/localtime 到容器的 /etc/localtime,并且以只读方式挂载。
解释:确保容器使用宿主机的系统时间。
--volume /etc/timezone:/etc/timezone:ro
作用:挂载宿主机的 /etc/timezone 到容器的 /etc/timezone,并且以只读方式挂载。
解释:确保容器使用宿主机的时区设置。
--network elk-net
作用:将容器连接到指定的 Docker 网络。
解释:elk-net 是之前创建的专用 Docker 网络,用于连接 ELK 组件。这样可以确保 Filebeat 能够与 Elasticsearch 和 Kibana 通信。
--restart always
作用:设置容器的重启策略。
解释:always 表示无论容器退出状态如何,都会自动重启容器。这有助于确保 Filebeat 服务的高可用性。
--privileged
作用:赋予容器特权模式。
解释:--privileged 表示容器具有几乎所有的内核能力,适用于需要高级权限的场景。在大多数情况下,Filebeat 不需要特权模式,除非有特殊需求。
--user root
作用:指定容器以特定用户身份运行。
解释:root 表示容器将以 root 用户身份运行。这通常是出于权限管理的考虑,确保 Filebeat 有足够的权限访问日志文件。
docker.elastic.co/beats/filebeat:8.6.2
作用:指定要使用的 Docker 镜像。
解释:docker.elastic.co/beats/filebeat:8.6.2 是 Filebeat 的官方镜像,版本为 8.6.2。

6、查看上述三个服务运行状态

docker ps  如上图所示,表示三个服务都已正常启动

7、复制elasticsearch、kibana、filebeat配置文件

将elasticsearch、kibana容器内的config、data、logs这三个目录复制到宿主机咱们刚才第一步创建的目录中,具体操作如下

  • elasticsearch容器目录复制到宿主机对应目录

    docker cp elasticsearch:/usr/share/elasticsearch/config /usr/local/elk/elasticsearch/

    docker cp elasticsearch:/usr/share/elasticsearch/data /usr/local/elk/elasticsearch/

    docker cp elasticsearch:/usr/share/elasticsearch/logs /usr/local/elk/elasticsearch/
    我是这三个命令一次性执行的,如下图Successfully,表示复制成功

  • kibana容器目录复制到宿主机对应目录
    docker cp kibana:/usr/share/kibana/config /usr/local/elk/kibana/

    docker cp kibana:/usr/share/kibana/data /usr/local/elk/kibana/

    docker cp kibana:/usr/share/kibana/logs /usr/local/elk/kibana/

  • filebeat容器目录复制到宿主机对应目录
    docker cp filebeat:/usr/share/filebeat/filebeat.yml /usr/local/elk/filebeat/config/
    docker cp filebeat:/usr/share/filebeat/data /usr/local/elk/filebeat/
    docker cp filebeat:/usr/share/filebeat/logs /usr/local/elk/filebeat/

8、修改elasticsearch、kibana、filebeat配置文件 

  • 修改elasticsearch配置文件
    cd elasticsearch/config/ && rm -rf elasticsearch.yml && vi elasticsearch.yml 
    这个命令回车后输入以下内容后保存
    #elasticsearch 配置文件 elasticsearch.yml内容
    cluster.name: "es-app-cluster"
    # 确保Elasticsearch监听所有接口
    network.host: 0.0.0.0
    node.name: node-01
    path.data: /usr/share/elasticsearch/data
    path.logs: /usr/share/elasticsearch/logs
    http.port: 9200
    discovery.type: single-node
    xpack.security.enabled: true
    bootstrap.memory_lock: true
    # 禁用证书检查
    xpack.security.http.ssl.enabled: false
    xpack.security.transport.ssl.enabled: false
    #GeoIP数据库用于将IP地址映射到地理位置信息,关闭它
    ingest.geoip.downloader.enabled: false
  • 修改kibana配置文件
    cd ../../kibana/config/ && rm -rf kibana.yml && vi kibana.yml
    回车后输入以下内容后保存
    #Kibana 服务监听的网络接口地址
    server.host: "0.0.0.0"
    #Kibana 服务在接收到关闭信号后等待的时间
    server.shutdownTimeout: "10s"
    elasticsearch.hosts: [ "http://elasticsearch:9200" ]
    #启用或禁用 Kibana 监控界面中对 Elasticsearch 容器的监控
    monitoring.ui.container.elasticsearch.enabled: true
    #界面汉化
    i18n.locale: "zh-CN"
    #启用或禁用 Kibana 报告功能的角色管理
    xpack.reporting.roles.enabled: false
  • 修改filebeat配置文件
    cd ../../filebeat/config/ && rm -rf filebeat.yml && vi filebeat.yml
    回车后输入以下内容后保存
    filebeat.inputs:
    - type: filestreamid: third-data-send #id要唯一enabled: truepaths:- /host/var/log/third-data-send/*.log #你的某个项目日志文件路径fields_under_root: truefields:type: third-data-send-apiproject: third-data-sendapp: third-data-send- type: filestreamid: third-data-send-manager #id要唯一enabled: truepaths:- /host/var/log/third-data-send-manager/*.log #你的某个项目日志文件路径fields_under_root: truefields:type: third-data-send-managerproject: third-data-send-managerapp: third-data-send-manageroutput.elasticsearch:hosts: ["http://elasticsearch:9200"]username: elasticpassword: elasticindices:- index: "third-data-send-api-%{+yyyy.MM.dd}"when.equals:type: "third-data-send-api"- index: "third-data-send-manager-%{+yyyy.MM.dd}"when.equals:type: "third-data-send-manager"setup.template.name: "third-data-send"  # 设置模板名称
    setup.template.pattern: "third-data-send-*"  # 设置模板模式
    setup.ilm.enabled: false #如果你不需要自动管理索引生命周期,或者 Elasticsearch 集群没有配置 ILM 策略,建议禁用setup.kibana:host: "kibana:5601"
    

    上面的配置说明一下
    我主要模拟配置两个项目的日志配置

    项目1:配置third-data-send项目日志作为一个模拟项目的日志目录
    项目2:配置third-data-send-manager项目日志作为一个模拟项目的日志目录

    具体配置几个项目日志目录,就写几个类似下图的模块

    type、enabled、fields_under_root固定不变,其他的值自己根据实际情况自定义
    (如果上述配置运行后报错yml文件格式错误,解决思路:需要将文件内容的-type模块整体往右缩进两个字符)

 9、修改完成配置文件后,再次分别修改三个容器服务的启动命令

在我们修改三个容器服务的启动命令之前,先将它们停止并删除

docker stop filebeat kibana elasticsearch
docker rm filebeat kibana elasticsearch
 

修改elasticsearch启动命令,并最终以此命令为最终执行启动容器的命令(多加入了三个volume映射目录),然后执行此命令
docker run -d \
--name elasticsearch \
--env cluster.name=es-app-cluster \
--env bootstrap.memory_lock=true \
--env node.name=node-01 \
--env discovery.type=single-node \
--env xpack.security.enabled=true \
--env xpack.security.http.ssl.enabled=false \
--env xpack.security.transport.ssl.enabled=false \
--env ingest.geoip.downloader.enabled=false \
--env ELASTIC_USERNAME=elastic \
--env ELASTIC_PASSWORD=elastic \
--env ES_JAVA_OPTS="-Xms256m -Xmx256m" \
--ulimit memlock=-1:-1 \
--volume /usr/local/elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
--volume /usr/local/elk/elasticsearch/data:/usr/share/elasticsearch/data \
--volume /usr/local/elk/elasticsearch/logs:/usr/share/elasticsearch/logs \
--volume /etc/localtime:/etc/localtime:ro \
--volume /etc/timezone:/etc/timezone:ro \
--publish 9200:9200 \
--publish 9300:9300 \
--network elk-net \
--restart always \
--privileged \
docker.elastic.co/elasticsearch/elasticsearch:8.6.2

 接下来,修改kibana启动命令(多加入了三个volume映射目录)

docker run -d \
--name kibana \
--env ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
--env ELASTICSEARCH_USERNAME=kibana_system \
--env ELASTICSEARCH_PASSWORD=elastic \
--env XPACK_SECURITY_ENABLED=true \
--env SERVER_NAME=kibana \
--volume /usr/local/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
--volume /usr/local/elk/kibana/data:/usr/share/kibana/data \
--volume /usr/local/elk/kibana/logs:/usr/share/kibana/logs \
--volume /etc/localtime:/etc/localtime:ro \
--volume /etc/timezone:/etc/timezone:ro \
--publish 5601:5601 \
--network elk-net \
--restart always \
--privileged \
docker.elastic.co/kibana/kibana:8.6.2

最后,修改filebeat启动容器命令 (多加入了三个volume映射目录,同时为了filebeat有足够的权限,给filebeat容器配置用户为root)

docker run -d \
--name filebeat \
--volume /usr/local/elk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \
--volume /usr/local/elk/filebeat/data:/usr/share/filebeat/data \
--volume /usr/local/elk/filebeat/logs:/usr/share/filebeat/logs \
--volume /usr/workspace/logs/third-data-send:/host/var/log/third-data-send \
--volume /usr/workspace/logs/third-data-send-manager:/host/var/log/third-data-send-manager \
--volume /etc/localtime:/etc/localtime:ro \
--volume /etc/timezone:/etc/timezone:ro \
--network elk-net \
--restart always \
--privileged \
--user root \
docker.elastic.co/beats/filebeat:8.6.2

上述三个服务启动命令修改并成功运行后,查看服务状态
docker ps 

如图所示status都是Up开头则表示启动成功,且正常运行

10、修改elasticsearch系统用户密码 

进入elasticsearch容器

docker exec -it elasticsearch /bin/bash

执行下面的代码
./bin/elasticsearch-setup-passwords interactive

回车后选择“y”后再回车,然后就是漫长的输入密码-确认密码的过程了,要耐心,一直输下去,直至最终结束,在此过程中,为了方便,我所有的用户的密码,我都设置为elastic,你可以设置其它密码也行,密码要求最低6个字符

修改密码结束后exit退出容器

重启服务

docker restart elasticsearch kibana filebeat

11、浏览器访问服务

我的ip是192.168.7.46,

打开浏览器访问http://服务器IP:9200/ 查看elasticsearch状态,提示登录,

 

输入刚才你设定的密码,就可以登录,比如我给elastic用户设定的密码是elastic,然后就可以登录了,登录成功后如下图

然后访问kibana服务

打开浏览器访问http://服务器IP:5601/,注意ip是你的服务器ip,端口就是5601,首次访问页面如下,需要先配置Elastic,我们选择自己手动配置一下,然后配置Elastic服务地址,修改下ip和端口,如我就是配置的是192.168.7.46:9200,访问后提示登录,同上一步一样,我使用elastic用户,密码我设定的elastic,然后登录即可

12、配置和使用Kibana

登录成功进入首页

查看索引

进入索引管理,就能看到我们配置的数据流数据、索引模板数据了

配置kibana,进行日志查看

创建数据视图

然后如上图所示:名称自己可以自定义一个名称,索引模式必须按之前filebeat.yml里配置的索引,格式为:索引-*,正确配置好索引模式后,右边会显示适配的结果,如上图: 您的索引模式匹配 1 个源,third-data-send-api-2024.12.13数据流,最后保存即可。

然后按照此步骤我又创建了third-data-send-manager视图,共两个视图

创建好视图后,左侧菜单Discover进入日志查询界面

进入Discover日志查询界面,可切换不同项目,查看日志

显示区域里的日志内容太乱,我们没必要显示那么多字段,只需显示message即可,如下配置:

添加完成message字段以后,如下图,显示的日志更清晰了

如果日志内容太多,我们想精确查询,可以使用KQL语法进行查询,列如,我想查询message里包含“温湿度”的日志,输入语法为 message:温湿度,如下图

关于更具体的KQL语法,可自行百度学习,此处不再赘述。

关于查询条件,我们可以根据自己的需要自己设置查询时间,刷新频率等

至此,docker安装ELK完成。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下Qt5自动编译配置QtMqtt环境

原文链接:windows下Qt5自动编译配置QtMqtt环境(11)-CSDN博客 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配置;网络所有的QtMqtt配置的文章都是编译完成手动复制,非常麻烦&#x…

动态高优先权优先进程调度

一、实验目的 目的:了解并掌握动态高优先权优先调度算法的理论,掌握动态优先权的设置方式。 任务:模拟实现动态高优先权优先的调度(若数值越大优先权越高,每运行一个时间单位优先权-n,若数值越小优先权越高…

编程考古-CPU(中)

P5:The First Pentium 奔腾 奔腾(Pentium)处理器于1993年首次亮相,标志着英特尔x86处理器家族的一个新时代的开始。它打破了以往80x86数字命名的传统,成为英特尔首个不沿用此命名规则的x86处理器。内部架构上,奔腾采用…

基于米尔全志T527开发板的OpenCV进行手势识别方案

本文将介绍基于米尔电子MYD-LT527开发板(米尔基于全志T527开发板)的OpenCV手势识别方案测试。 摘自优秀创作者-小火苗 米尔基于全志T527开发板 一、软件环境安装 1.安装OpenCV sudo apt-get install libopencv-dev python3-opencv 2.安装pip sudo apt…

《数据结构之美-- 单链表》

引言: 首先由上次我们实现的顺序表聊起,我们在实现顺序表的时候会发现,在每次插入数据时当空间不够时就会涉及到扩容,而顺序表的扩容一般都是呈二倍的形式来进行,因此这就有可能造成空间的浪费,那该如何解…

薄膜电容的种类与应用

聚酯电容 应用:对稳定性和损耗要求不高的低频电路 聚酯(涤纶)电容(CL)是用两片金属箔作电极,夹在极薄绝缘介质中,卷成圆柱形或扁柱形芯子介质是涤纶。聚酯电容的介电常数较大,体积…

YashanDB演讲实录|王南:YAC集群,核心平替

本文为“2024国产数据库创新生态大会”深算院首席产品官兼崖山科技副总裁王南的演讲实录分享,主题为 《YAC集群,核心平替》,欢迎阅读。 尊敬的各位领导、各位专家、各位来宾:大家下午好!我是王南。今天非常荣幸能够有…

51c大模型~合集89

我自己的原文哦~ https://blog.51cto.com/whaosoft/12815167 #OpenAI很会营销 而号称超强AI营销的灵感岛实测成效如何? OpenAI 是懂营销的,连续 12 天发布,每天一个新花样,如今刚过一半,热度依旧不减。 毫无疑问&…

细说Flash存储芯片W25Q128FW和W25Q16BV

目录 一、Flash存储芯片W25Q128FW 1、W25Q128硬件接口和连接 2、存储空间划分 3、数据读写的原则 4、操作指令 (1)“写使能”指令 (2)“读数据”指令 (3)“写数据”指令 5、状态寄存器SR1 二、Fl…

浩辰CAD教程004:柱梁板

文章目录 柱梁板标准柱角柱构造柱柱齐墙边绘制梁绘制楼板 柱梁板 标准柱 绘制标准柱: ①:点选插入柱子②:沿着一根轴线布置柱子③:指定的矩形区域内的轴线交点插入柱子 替换现有柱子:选择替换之后的柱子形状&#x…

关于Git分支合并,跨仓库合并方式

关于Git合并代码的方式说明 文章目录 关于Git合并代码的方式说明前情提要开始合并方式一:git merge方式二:git cherry-pick方式三:git checkout Git跨仓库合并的准备事项前提拉取源仓库代码 前情提要 同仓库不同分支代码的合并可直接往下看文…

Python Turtle 实现动态时钟:十二时辰与星空流星效果

在这篇文章中,我将带你通过 Python 的 turtle 模块构建一个动态可视化时钟程序。这个时钟不仅具备传统的时间显示功能,还融合了中国古代的十二时辰与八卦符号,并通过动态星空、流星效果与昼夜背景切换,为程序增添了观赏性和文化内…

鸿蒙NEXT开发案例:颜文字搜索器

【引言】 本文将介绍一个名为“颜文字搜索器”的开发案例,该应用是基于鸿蒙NEXT平台构建的,旨在帮助用户快速查找和使用各种风格的表情符号。通过本案例的学习,读者可以了解如何在鸿蒙平台上进行数据处理、UI设计以及交互逻辑的实现。 【环…

Linux进阶·如何在Ubuntu安装、调试、运行gcc/g++,以及如何进行多文件编译

目录 1. 简介 2. 安装gcc 3. gcc的编译流程 3.1 预处理 3.2 编译 3.3 汇编 3.4 链接 4. gcc相关参数 5. 多文件编译 6. gcc和g的区别 1. 简介 gcc是Linux下的编译工具集,是GNU Compiler Collection的缩写,包含gcc, g等编译器。这个工…

Python鼠标轨迹算法(游戏防检测)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

【新人系列】Python 入门(十六):正则表达式

✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…

uni-app实现小程序、H5图片轮播预览、双指缩放、双击放大、单击还原、滑动切换功能

前言 这次的标题有点长,主要是想要表述的功能点有点多; 简单做一下需求描述 产品要求在商品详情页的头部轮播图部分,可以单击预览大图,同时在预览界面可以双指放大缩小图片并且可以移动查看图片,双击放大&#xff0…

计算机网络之传输层协议TCP

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之传输层协议TCP 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目…

知识库系统,集成neo4j,集成activiti工作流,集成es全文检索,知识图谱血缘关系,nlp知识库

一、项目介绍 一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,一款让企业知识变为实打实的数字财富的系统,应用在需要进行文档整理、分类、归集、检索、分析的场景。 为什么建立知识库平台? 助力企业…

Eclipse MAT(Memory Analyzer Tool) 使用手册

参考:JAVA内存泄露使用MAT(Memory Analyzer Tool)快速定位代码 Eclipse MAT 1.15.0提示JDK版本最低需要使用17版本的,如果不想安装可以下载ZIP包,或者使用较低版本的MAT。 为了避免下载的17版本JDK和本地环境干扰,可以直接在MAT配…