023、ELK 从入门到实践

ELK 从入门到实践


第一章:ELK基础概念

1.1 为什么需要ELK?

传统日志处理的痛点

  1. 日志分散

    • 应用部署在不同服务器
    • 需要逐个登录查看
    • 无法统一管理
  2. 查询困难

    • 只能用grep等命令
    • 无法复杂检索
    • 分析效率低
  3. 展示受限

    • 纯文本格式
    • 无法可视化
    • 难以直观展示

ELK的解决方案

  1. 集中化管理

    • 统一收集所有日志
    • 集中存储和检索
    • 一站式管理平台
  2. 强大的搜索能力

    • 全文检索
    • 复杂查询
    • 实时分析
  3. 可视化展示

    • 丰富的图表
    • 实时监控
    • 自定义仪表盘

1.2 组件详解

Elasticsearch

  1. 核心功能

    • 分布式搜索引擎
    • 数据存储和索引
    • 提供REST API
  2. 工作原理

    数据 -> 分片存储 -> 倒排索引 -> 快速检索
    
  3. 重要概念

    • Index(索引): 类似数据库
    • Type(类型): 类似表
    • Document(文档): 类似行记录
    • Field(字段): 类似列

Logstash

  1. 数据处理流程

    Input -> Filter -> Output
    
  2. 主要功能

    • 收集多源数据
    • 实时解析转换
    • 数据过滤处理
  3. 插件体系

    • input插件: file, syslog, kafka等
    • filter插件: grok, date, mutate等
    • output插件: elasticsearch, redis等

Kibana

  1. 可视化功能

    • Discover: 数据探索
    • Visualize: 图表制作
    • Dashboard: 仪表盘
    • Dev Tools: 开发工具
  2. 数据分析能力

    • 聚合分析
    • 趋势图表
    • 地理信息

第二章:环境准备详解

2.1 服务器规划

硬件配置

# 节点配置
node1/node2: 
- CPU: 2核
- 内存: 4G
- 磁盘: 50G# IP规划
node1: 192.168.91.100    # Elasticsearch主节点
node2: 192.168.91.101    # Elasticsearch从节点
apache: 192.168.91.103   # Logstash + Kibana + Apache

配置说明:

  1. CPU配置

    • ES是CPU密集型应用
    • 需要处理复杂查询
    • 2核满足基本需求
  2. 内存配置

    • ES大量使用内存缓存
    • JVM堆内存建议2G
    • 系统预留2G
    • 避免使用swap
  3. 磁盘配置

    • 日志数据增长快
    • 需要定期清理
    • 建议使用SSD
    • 预留足够空间
  4. 网络要求

    • 内网环境部署
    • 千兆网络
    • 集群间通信
    • 数据传输安全

2.2 基础环境配置

Java环境

# 安装Java
yum -y install java# 验证版本
java -version# 建议使用Java 8
# ELK 6.x版本最兼容Java 8

系统优化

# 关闭防火墙
systemctl disable --now firewalld# 关闭SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

优化说明:

  1. 关闭防火墙原因

    • ELK组件间通信频繁
    • 需要多个端口
    • 简化部署过程
    • 生产环境建议配置安全组
  2. 关闭SELinux原因

    • 避免权限问题
    • 简化配置过程
    • 生产环境可以配置策略

系统限制调整

# 修改系统限制
vim /etc/security/limits.conf
*  soft    nofile          65536
*  hard    nofile          65536
*  soft    nproc           32000
*  hard    nproc           32000
*  soft    memlock         unlimited
*  hard    memlock         unlimited

参数详解:

  1. nofile(文件描述符)

    • 为什么要调大?

      • ES需要大量打开文件
      • 默认1024太小
      • 建议65536或更大
    • soft/hard区别

      • soft: 警告限制
      • hard: 硬性限制
      • 建议设置相同
  2. nproc(进程数)

    • 调整原因
      • ES会创建多个进程
      • 需要足够进程数
      • 默认值可能不够
  3. memlock(内存锁定)

    • 作用
      • 防止内存交换
      • 提高性能
      • 保证稳定性

内核参数优化

# 修改内核参数
vim /etc/sysctl.conf
vm.max_map_count=262144# 立即生效
sysctl -p

参数说明:

  1. max_map_count
    • 定义

      • 限制进程内存映射区域数量
      • 影响ES内存使用
      • 过小会启动失败
    • 设置建议

      • 2G内存: 262144
      • 4G内存: 524288
      • 8G内存: 1048576

第三章:Elasticsearch部署详解

3.1 安装过程

软件安装

# 安装ES
rpm -ivh elasticsearch-6.7.2.rpm# 创建配置备份
cd /etc/elasticsearch/
mkdir bak
cp -a *.yml bak/

安装说明:

  1. 目录结构

    /etc/elasticsearch/: 配置文件目录
    /usr/share/elasticsearch/: 程序文件目录
    /var/lib/elasticsearch/: 数据目录
    /var/log/elasticsearch/: 日志目录
    
  2. 备份原因

    • 保留原始配置
    • 便于回滚
    • 作为参考模板

3.2 配置详解

核心配置

# 集群配置
cluster.name: my-elk-cluster    # 集群名称
node.name: node1               # 节点名称
node.master: true             # 主节点角色
node.data: true              # 数据节点角色# 内存配置
bootstrap.memory_lock: true   # 锁定内存# 网络配置
network.host: 0.0.0.0        # 监听地址
http.port: 9200             # HTTP端口
transport.tcp.port: 9300    # 集群通信端口# 集群发现
discovery.zen.ping.unicast.hosts: ["192.168.91.100:9300", "192.168.91.101:9300"]
image-20241112192102237 image-20241112192108022

配置详解:

  1. 集群配置

    • cluster.name

      • 标识集群的唯一名称
      • 所有节点必须相同
      • 建议有意义的名称
    • node.name

      • 节点唯一标识
      • 建议使用主机名
      • 集群内不能重复
  2. 节点角色

    • master节点职责

      • 管理集群状态
      • 处理索引操作
      • 分片分配决策
      • 集群状态维护
    • data节点职责

      • 存储数据
      • 处理CRUD
      • 执行搜索
      • 数据聚合分析
  3. 内存管理

    • bootstrap.memory_lock
      • 锁定物理内存
      • 禁止swap
      • 提高性能
      • 保证稳定性
  4. 网络设置

    • network.host

      • 0.0.0.0表示所有接口
      • 生产环境指定IP
      • 安全性考虑
    • 端口说明

      • 9200: REST API接口
      • 9300: 节点间通信
      • 注意防火墙配置
  5. 集群发现机制

    • unicast发现
      • 显式指定节点列表
      • 比广播更可靠
      • 生产环境推荐
      • 支持域名配置

启动验证

# 启动服务
systemctl enable --now elasticsearch# 检查端口
netstat -antp | grep 9200# 验证集群
curl http://localhost:9200/_cluster/health?pretty

验证说明:

  1. 服务启动

    • enable: 开机自启

    • –now: 立即启动

    • 检查状态: systemctl status elasticsearch

  2. 端口检查

    • 9200端口正常监听

    • 确认IP和端口绑定

    • 检查进程状态

  3. 集群健康检查

    • green: 完全健康
    • yellow: 副本未分配
    • red: 主分片未分配

3.3 插件安装配置

Head插件安装

# 安装node
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install# 安装phantomjs
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
ln -s /opt/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/bin# 安装head插件
cd /opt
unzip elasticsearch-head-master.zip
cd elasticsearch-head/
npm install

安装说明:

  1. 依赖组件

    • node.js: JavaScript运行环境

    • phantomjs: 无头浏览器

    • npm: 包管理工具

  2. head插件功能

    • 集群状态监控
    • 索引数据查看
    • 执行简单操作
    • 可视化管理

配置ES支持head

# 添加到elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

配置说明:

  1. cors.enabled

    • 启用跨域访问
    • head插件需要
  2. cors.allow-origin

    • 允许所有来源
    • 生产环境应限制

启动head插件

cd /opt/elasticsearch-head/
npm run start &# 访问测试
http://192.168.91.100:9100

使用说明:

  1. 连接集群

    • 输入ES地址
    • 检查连接状态
    • 查看集群健康
  2. 常用功能

    • 索引管理

    • 数据浏览

    • 简单查询

    • 集群监控

第四章:Logstash部署详解

4.1 基础安装

软件安装

# 安装Logstash
rpm -ivh logstash-6.7.2.rpm# 启动服务
systemctl enable --now logstash.service# 创建软链接
ln -s /usr/share/logstash/bin/logstash /usr/bin/

安装说明:

  1. 目录结构

    /etc/logstash/: 配置文件目录
    /usr/share/logstash/: 程序目录
    /var/log/logstash/: 日志目录
    
  2. 软链接作用

    • 方便命令执行
    • 无需指定完整路径
    • 简化操作过程

4.2 配置文件详解

基本结构

input { }    # 输入配置
filter { }   # 过滤配置
output { }   # 输出配置

配置说明:

  1. input部分

    • 定义数据来源
    • 支持多种输入
    • 常用插件:file, beats, syslog
  2. filter部分

    • 数据处理转换
    • 格式化解析
    • 字段处理
  3. output部分

    • 定义输出目标
    • 支持多目标输出
    • 常用:elasticsearch, redis

系统日志收集示例

input {file {path => "/var/log/messages"type => "system"start_position => "beginning"stat_interval => "3"}
}output {elasticsearch {hosts => ["192.168.91.100:9200","192.168.91.101:9200"]index => "system-%{+YYYY.MM.dd}"}
}

配置解析:

  1. input配置

    • path: 日志文件路径
    • type: 日志类型标识
    • start_position: 读取位置
    • stat_interval: 扫描间隔
  2. output配置

    • hosts: ES集群地址
    • index: 索引名称模板
    • 支持时间变量

第五章:Kibana部署详解

5.1 基础安装

# 安装Kibana
rpm -ivh kibana-6.7.2-x86_64.rpm# 创建配置备份
cd /etc/kibana/
cp kibana.yml kibana.yml.bak

5.2 配置详解

# kibana.yml 核心配置
server.port: 5601                # 访问端口
server.host: "0.0.0.0"          # 监听地址
elasticsearch.hosts: ["http://192.168.91.100:9200", "http://192.168.91.101:9200"]  # ES地址
kibana.index: ".kibana"         # 配置索引
i18n.locale: "zh-CN"           # 中文界面
logging.dest: /var/log/k.log    # 日志文件

配置说明:

  1. 服务配置

    • server.port: 访问端口
    • server.host: 监听地址
      • 0.0.0.0表示所有接口
      • 生产环境建议限制
  2. ES连接配置

    • elasticsearch.hosts
      • 支持多个ES节点
      • 实现负载均衡
      • 提高可用性
  3. 其他设置

    • kibana.index: 存储Kibana配置
    • i18n.locale: 界面语言
    • logging.dest: 日志位置

5.3 启动与验证

# 设置日志文件权限
chown kibana:kibana /var/log/k.log# 启动服务
systemctl enable --now kibana# 检查端口
ss -nap |grep 5601
访问地址模板:http://192.168.91.103:5601

第六章:ELK Stack 常见问题与解决方案

6.1 安装阶段问题

1. RPM包安装问题

现象1: 安装时报依赖错误

error: Failed dependencies: java-1.8.0-openjdk is needed by elasticsearch

解决方案:

# 检查Java版本
java -version# 安装正确版本Java
yum install java-1.8.0-openjdk* -y# 如果存在多个Java版本,设置默认版本
alternatives --config java

现象2: 提示文件冲突

file /etc/elasticsearch/elasticsearch.yml from install of elasticsearch conflicts with...

解决方案:

# 备份已存在的配置
mv /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak# 强制安装
rpm -ivh --force elasticsearch-6.7.2.rpm

2. 目录权限问题

现象: 启动服务报权限错误

failed to create node environment
java.security.AccessControlException: access denied

解决方案:

# 检查目录权限
ls -l /var/lib/elasticsearch
ls -l /var/log/elasticsearch# 修正权限
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch
chown -R elasticsearch:elasticsearch /var/log/elasticsearch
chmod 755 /var/lib/elasticsearch
chmod 755 /var/log/elasticsearch# 检查目录存在
mkdir -p /var/lib/elasticsearch
mkdir -p /var/log/elasticsearch

6.2 启动阶段问题

1. 内存相关问题

现象1: 启动时报内存锁定错误

[1]: max virtual memory areas vm.max_map_count [65530] is too low

解决方案:

# 临时修改
sysctl -w vm.max_map_count=262144# 永久修改
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

现象2: bootstrap checks failed

memory locking requested for elasticsearch process but memory is not locked

解决方案:

# 检查limits配置
cat /etc/security/limits.conf# 添加配置
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited# 检查systemd配置
vim /usr/lib/systemd/system/elasticsearch.service
LimitMEMLOCK=infinity# 重载systemd
systemctl daemon-reload

2. 网络相关问题

现象1: 无法绑定端口

[ERROR][o.e.b.Bootstrap] [node1] bind_exception

解决方案:

# 检查端口占用
netstat -tulpn | grep 9200
netstat -tulpn | grep 9300# 如果端口被占用,找到并关闭进程
fuser -k 9200/tcp
fuser -k 9300/tcp# 检查防火墙
firewall-cmd --list-ports
firewall-cmd --permanent --add-port=9200/tcp
firewall-cmd --permanent --add-port=9300/tcp
firewall-cmd --reload

现象2: 集群节点无法发现

no known nodes

解决方案:

# 检查配置文件中的host配置
vim elasticsearch.yml# 确保network.host配置正确
network.host: 0.0.0.0# 检查节点间通信
ping 对方节点IP
telnet 对方节点IP 9300# 检查hosts文件
vim /etc/hosts
添加节点IP和主机名映射

6.3 运行阶段问题

1. 日志文件问题

现象1: Logstash无法读取日志

Failed to open file {...} Permission denied

解决方案:

# 检查文件权限
ls -l /var/log/messages# 添加logstash用户到相应组
usermod -a -G adm logstash
usermod -a -G root logstash# 修改日志文件权限
chmod 644 /var/log/messages# 检查SELinux
getenforce
setenforce 0

现象2: 日志轮转后无法继续读取

Failed to open file: no such file or directory

解决方案:

# 检查logrotate配置
vim /etc/logrotate.d/nginx# 添加create权限
create 0644 nginx nginx# 确保新建日志文件权限正确
chmod 644 /var/log/nginx/access.log

2. 性能问题

现象1: ES查询响应慢

took: 15000ms

解决方案:

# 检查堆内存设置
cat /etc/elasticsearch/jvm.options# 调整堆内存
-Xms4g
-Xmx4g# 检查索引设置
curl -XGET 'localhost:9200/_settings?pretty'# 优化索引设置
curl -XPUT 'localhost:9200/_settings' -H 'Content-Type: application/json' -d '
{"index" : {"refresh_interval" : "30s","number_of_replicas" : 1}
}'

现象2: Logstash处理延迟

Pipeline has blocked

解决方案:

# 调整pipeline配置
vim /etc/logstash/pipelines.yml# 添加pipeline设置
pipeline.workers: 2
pipeline.batch.size: 125
pipeline.batch.delay: 50# 使用持久化队列
queue.type: persisted
queue.max_bytes: 1gb

3. 磁盘问题

现象1: 磁盘空间不足

[WARN] disk usage exceeded 85%

解决方案:

# 检查磁盘使用
df -h# 查看索引大小
curl -XGET 'localhost:9200/_cat/indices?v'# 删除旧索引
curl -XDELETE 'localhost:9200/logstash-2024.01.*'# 设置索引生命周期
curl -XPUT 'localhost:9200/_ilm/policy/my_policy' -H 'Content-Type: application/json' -d '
{"policy": {"phases": {"hot": {"actions": {}},"delete": {"min_age": "7d","actions": {"delete": {}}}}}
}'

现象2: 索引只读

index read-only/allow delete (api)

解决方案:

# 检查磁盘使用阈值
curl -XGET 'localhost:9200/_cluster/settings?pretty'# 修改磁盘阈值设置
curl -XPUT 'localhost:9200/_cluster/settings' -H 'Content-Type: application/json' -d '
{"persistent": {"cluster.routing.allocation.disk.threshold_enabled": true,"cluster.routing.allocation.disk.watermark.low": "85%","cluster.routing.allocation.disk.watermark.high": "90%","cluster.routing.allocation.disk.watermark.flood_stage": "95%"}
}'# 解除索引只读
curl -XPUT 'localhost:9200/_all/_settings' -H 'Content-Type: application/json' -d '
{"index.blocks.read_only_allow_delete": null
}'

4. Kibana展示问题

现象1: 无法显示数据

No results found

解决方案:

# 检查索引模式配置
Management -> Index Patterns# 确认时间范围设置
调整时间选择器范围# 检查索引是否存在
curl -XGET 'localhost:9200/_cat/indices?v'# 验证字段映射
curl -XGET 'localhost:9200/索引名称/_mapping?pretty'

现象2: 图表加载慢

Loading...一直显示

解决方案:

# 检查浏览器控制台错误
F12 -> Console# 优化查询设置
vim /etc/kibana/kibana.yml
elasticsearch.requestTimeout: 60000
elasticsearch.shardTimeout: 30000# 减少时间范围
使用较小的时间窗口# 使用索引模板优化
curl -XPUT 'localhost:9200/_template/template_1' -H 'Content-Type: application/json' -d '
{"index_patterns": ["logstash-*"],"settings": {"number_of_shards": 1,"number_of_replicas": 1}
}'

6.4 其他常见问题

1. 时区问题

现象: 日志时间显示不正确
解决方案:

# 检查系统时区
timedatectl# 修改系统时区
timedatectl set-timezone Asia/Shanghai# 修改Kibana配置
vim /etc/kibana/kibana.yml
dateFormat:tz: Asia/Shanghai# 修改Logstash配置
filter {date {match => [ "timestamp", "ISO8601" ]target => "@timestamp"timezone => "Asia/Shanghai"}
}

2. 字符编码问题

现象: 日志中文显示乱码
解决方案:

# 检查系统编码
locale# 设置系统编码
export LANG=zh_CN.UTF-8# Logstash配置添加编码设置
input {file {path => "/var/log/messages"codec => plain { charset => "UTF-8" }}
}# 检查日志文件编码
file -i /var/log/messages# 转换文件编码
iconv -f GBK -t UTF-8 input.log > output.log

3. 内存泄漏问题

现象: 服务占用内存持续增长
解决方案:

# 监控内存使用
top -p `pgrep -f elasticsearch`# 查看GC日志
vim /etc/elasticsearch/jvm.options
-Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,pid,tags:filecount=32,filesize=64m# 分析堆内存
jmap -heap PID# 调整JVM参数
vim /etc/elasticsearch/jvm.options
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/elasticsearch/

4.主机压缩包传不上xshell

解决办法:

yum -y install lrzsz

5.tar解压bz2包失败(同上)

tar (child): bzip2:无法 exec: 没有那个文件或目录

解决办法:

yum install -y bzip2

6.make出错

出错示例:

[root@localhost opt]# yum -y install make
软件包 1:make-3.82-24.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@localhost opt]# make -j2
make: *** 没有指明目标并且找不到 makefile。 停止。
[root@localhost zabbix-4.0.30]# make install
make: *** 没有规则可以创建目标“install”。 停止。

解决办法:

[root@localhost opt]# yum -y install make
[root@localhost opt]# yum -y install gcc

[root@localhost opt]#./configur

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

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

相关文章

《操作系统 - 清华大学》3 -3:连续内存分配:内存碎片与分区的动态分配

文章目录 0. 概述1. 内存碎片问题2. 动态分配3. 首次适配算法4. 最优适配算法5. 最差适配算法 0. 概述 内存分配是操作系统管理过程中很重要的环节,首先需要考虑的是一块连续区域分配的过程,这个过程中会有很多问题,首先比较关注的一个问题是…

7.高可用集群架构Keepalived双主热备原理

一. 高可用集群架构Keepalived双主热备原理 (1)主机+备机keepalived配置(192.168.1.171) ! Configuration File for keepalivedglobal_defs {# 路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_101 } #计算机节点(主机配置) vrrp_instance VI_1 {</

Notepad++的完美替代

由于Notepad的作者曾发表过可能在开发者代码中植入恶意软件的言论&#xff0c;他备受指责。在此&#xff0c;我向大家推荐一个Notepad的完美替代品——NotepadNext和Notepad--。 1、NotepadNext NotepadNext的特点&#xff1a; 1、跨平台兼容性 NotepadNext基于Electron或Qt…

【Chapter 3】Machine Learning Classification Case_Prediction of diabetes-XGBoost

文章目录 1、XGBoost Algorithm2、Comparison of algorithm implementation between Python code and Sentosa_DSML community edition(1) Data reading and statistical analysis(2)Data preprocessing(3)Model Training and Evaluation(4)Model visualization 3、summarize 1…

Linux(CentOS)安装达梦数据库 dm8

CentOS版本&#xff1a;CentOS 7&#xff0c;查看操作系统版本信息&#xff0c;请查阅 查看Linux内核版本信息 达梦数据库版本&#xff1a;dm8 一、获取 dm8 安装文件 1、下载安装文件 打开达梦官网&#xff1a;https://www.dameng.com/ 下载的文件 解压后的文件 2、上传安…

ReactPress与WordPress:两大开源发布平台的对比与选择

ReactPress与WordPress&#xff1a;两大开源发布平台的对比与选择 在当今数字化时代&#xff0c;内容管理系统&#xff08;CMS&#xff09;已成为各类网站和应用的核心组成部分。两款备受欢迎的开源发布平台——ReactPress和WordPress&#xff0c;各自拥有独特的优势和特点&am…

前后端请求响应

引入 在之前的例子中&#xff0c;我们编写了一个简单的web类&#xff0c;我们运行启动类&#xff0c;启动内嵌的tomcat后就可以在浏览器通过特定的路径访问tomcat中的应用程序。 但之前编写的程序仅仅是个简单的java类&#xff0c;其并未实现某个接口或继承某个类&…

Ubuntu24 上安装搜狗输入法

link 首先在终端中依次输入以下代码 sudo apt update sudo apt install fcitx 找到语言支持 在终端中依次输入 sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/ sudo apt purge ibus 进入网页 搜狗输入法linux-首页​ shurufa.sogou.com/linux 找到刚才下…

Linux从0——1之shell编程4

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)

引言&#xff1a;对于嵌入式硬件这个庞大的知识体系而言&#xff0c;太多离散的知识点很容易疏漏&#xff0c;因此对于这些容易忘记甚至不明白的知识点做成一个梳理&#xff0c;供大家参考以及学习&#xff0c;本文主要针对芯片输入接入0.1uf电容的本质的知识点的进行学习。 目…

树莓派4B Qt+FFMPEG 多线程录制USB相机mjpeg数据流“h264_omx“硬件编码的MP4文件

文章目录 1 前言2 一些问题说明2.0 树莓派4b系统版本2.1 Qt2.2 FFMPEG2.3 图像格式 3 核心代码3.0 代码逻辑3.1 pro文件3.2 avframequeue.cpp3.3 decodethread.cpp 4 资源下载 1 前言 本项目为在树莓派4B开发板上&#xff0c;通过QtFFMPEG以多线程分别解码、编码USB摄像头视频数…

Cartographer激光雷达slam -20241116

Cartographer Cartographer代码结构 cartographer&#xff1a;负责处理来自雷达、IMU和里程计的数据并基于这些数据进行地图的构建&#xff0c;是cartographer理论的底层实现cartographer_ros&#xff1a;基于ros的通信机制获取传感器的数据并将它们转换成cartographer中定义…

Scratch 014生日贺卡(上)

知识回顾&#xff1a; 1、“面向鼠标指针”积木块 2、“重复执行直到”积木块 本次分享制作生日贺卡引入广播模块 案列效果&#xff1a; 生日贺卡上案例效果-CSDN直播 步骤拆解&#xff1a; 1、添加背景和角色 2、编辑贺卡造型添加名字 3、流程图的组成和画法 4、…

外网访问 WebDav 服务

从外部网络环境&#xff08;比如异地和家中网络&#xff09;来访问公司内网的 WebDav 服务&#xff08;基于 IIS &#xff09;并映射成本地虚拟磁盘。 步骤如下 第一步 在公司内网的电脑上设置 webDav。 1&#xff0c;找到【控制面板】&#xff0c;双击进入。 2&#xff0c…

渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流

11月14日&#xff0c;渑池县人大副主任、工商联主席杨航率县中药材产业党委代表团一行13人&#xff0c;莅临河南广宇集团参观交流。河南广宇集团总经理王峰、副总经理王培等领导热情接待并陪同参观、座谈。 代表团一行首先参观了集团旗下郑州美信中医院&#xff08;庚贤堂中医药…

WP网站如何增加文章/页面的自定义模板

通过Wordpress我们后台在发布文章或者页面的时候其实可以看到有些主题 他有选择使用的页面模板&#xff0c;可以自定义模板&#xff0c;但是有些主题却没有选择主题这个功能&#xff0c;那这个自定义模板的功能是如何实现的呢&#xff1f;以下分两种情况&#xff1a;Page页面和…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,

也就是将摄像头采集到的YUV 的数据换成 AVFrame&#xff0c;然后再次转成 AVPacket&#xff0c;那么这AVPakcet数据要怎么办呢&#xff1f;分为三种情况&#xff1a; 一种是将AVPacket存储成h264文件&#xff0c;由于h264编码器在将avframe变成avpacket的时候就是按照h264的格…

SQL Server 查询设置 - LIKE/DISTINCT/HAVING/排序

目录 背景 一、LIKE - 模糊查询 1. 通配符 % 2. 占位符 _ 3. 指定集合 [] 3.1 表示否定 ^ 3.2 表示范围 - 4. 否定 NOT 二、DISTINCT - 去重查询 三、HAVING - 过滤查询 四、小的查询设置 1. ASC|DESC - 排序 2. TOP - 限制 3. 子查询 4. not in - 取补集&…

动态规划-完全背包问题——322.零钱兑换

1.题目解析 题目来源 322.零钱兑换——力扣 测试用例 2.算法原理 1.状态表示 这里需要寻找硬币使总面值等于一个值求出所需硬币的最小个数&#xff0c;所以不妨设置一个二维dp表&#xff0c;即dp[i][j]&#xff1a;在[1,i]个硬币中选择的硬币总面值完全等于j时所需要的最小硬…

从零到一:利用 AI 开发 iOS App 《震感》的编程之旅

在网上看到一篇关于使用AI开发的编程经历&#xff0c;分享给大家 作者是如何在没有 iOS 开发经验的情况下&#xff0c;借助 AI&#xff08;如 Claude 3 模型&#xff09;成功开发并发布《震感》iOS 应用。 正文开始 2022 年 11 月&#xff0c;ChatGPT 诞生并迅速引发全球关注。…