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

深入探究分布式日志系统 Graylog:架构、部署与优化

文章目录

  • 一、Graylog简介
  • 二、Graylog原理架构
  • 三、日志系统对比
  • 四、Graylog部署
    • 传统部署
    • MongoDB部署
    • OS或者ES部署
    • Garylog部署
    • 容器化部署
  • 五、配置详情
  • 六、优化
    • 网络和 REST API
    • MongoDB
  • 七、升级
  • 八、监控
  • 九、常见问题及处理

一、Graylog简介

Graylog是一个简单易用、功能较全面的日志管理工具,Graylog也采用Elasticsearch作为存储和索引以保障性能,MongoDB用来存储少量的自身配置信息,master-node模式具有很好的扩展性,UI上自带的基础查询与分析功能比较实用且高效,支持LDAP、权限控制并有丰富的日志类型和标准(如syslog,GELF)并支持基于日志的报警。
在日志接收方面通常是网络传输,可以是TCP也可以是UDP,在实际生产环境量级较大多数采用UDP,也可以通过MQ来消费日志。

Graylog的优势

  • 部署维护简单
  • 资源占用较少
  • 查询语法简单易懂(对比ES的语法…)
  • 内置简单的告警
  • 可以将搜索结果导出为 json
  • UI 比较友好

二、Graylog原理架构

Graylog 最简单的架构就是单机部署,复杂的也是部署集群模式,架构图示如下所示。我们可以看到其中包含了三个组件,分别是 Elasticsearch、MongoDb 和 Graylog。
其中,Elasticsearch 用来持久化存储和检索日志文件数据(IO 密集),MongoDb 用来存储关于 Graylog 的相关配置信息,而 Graylog 来提供 Web 界面和对外接口(CPU 密集)。

单机版本
在这里插入图片描述
集群版本
在这里插入图片描述
数据处理流程

日志消息通过各种Input输入到Graylog中进行处理;
可以通过Extractors进行正则、Json等形式解析;
通过Streams进行规则匹配分流,对Stream可以配置Pipeline进行数据过滤,最终数据会到到不同的index中;
根据新建index时配置的策略,在elasticsearch的索引中;
告警(Alert)基于Stream进行设置。
在这里插入图片描述
为了让大家能够对graylog有一个完整的认识做了一个思维导图。
可以看出graylog的设计是非常全面的,从日志的采集、数据分类管理、数据清洗、调用第三方API都考虑到了。

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

在这里插入图片描述

三、日志系统对比

对比ELKGraylog
组件ES+Logstash+KibanaES+GraylogServer+GarylogWeb
优点1、处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能
2、配置相对简单:elasticsearch全部使用JSON 接口,logstash使用模块配置,kibana的配置文件部分更简单。
3、检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
4、集群线性扩展:elasticsearch和logstash都可以灵活线性扩展
5、前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单
1、一体化方案,安装方便,不像ELK有3个独立系统间的集成问题。
2、采集原始日志,并可以事后再添加字段,比如http_status_code,response_time等等。
3、自己开发采集日志的脚本,并用curl/nc发送到Graylog Server,发送格式是自定义的GELF,Flunted和Logstash都有相应的输出GELF消息的插件。自己开发带来很大的自由度。实际上只需要用inotify_wait监控日志的MODIFY事件,并把日志的新增行用curl/nc发送到Graylog Server就可。
4、搜索结果高亮显示,就像google一样。
5、搜索语法简单,比如: source:mongo AND reponse_time_ms:>5000 ,避免直接输入elasticsearch搜索json语法6、搜索条件可以导出为elasticsearch的搜索json文本,方便直接开发调用elasticsearch rest api的搜索脚本。
缺点1、不能处理多行日志,比如Mysql慢查询,Tomcat/Jetty应用的Java异常打印
2、不能保留原始日志,只能把原始日志分字段保存,这样搜索日志结果是一堆Json格式文本,无法阅读。
3、不复合正则表达式匹配的日志行,被全部丢弃。
1、控制台操作页面是英文的,针对国内开发使用者使用起来不方便,还得额外汉化,汉化可能失败
2、使用网络传输,可能会占用项目网络

总结:
两者之间最重要的区别在于,从一开始,Graylog就定位为强大的日志解决方案,而ELK则是大数据解决方案。Graylog可以通过网络协议直接从应用程序接收结构化日志和标准syslog。相反,ELK是使用Logstash分析已收集的纯文本日志的解决方案,然后解析并将它们传递给ElasticSearch。在ELK中,Kibana扮演仪表盘的角色并显示从Logstash收到的数据。Graylog在这点上更方便,因为它提供了单一应用程序解决方案(不包括ElasticSearch作为灵活的数据存储),具有几乎相同的功能。因此,部署所需的时间更短。此外,与ELK相比,Graylog开箱即用,且具有出色的权限系统,而Kibana则不具备此功能,Graylog具有直观的GUI,并提供警报、报告和自定义分析功能。最重要的是,它能在多个日志源和跨机房收集数TB的数据。

四、Graylog部署

各组件文件系统默认路径:
在这里插入图片描述

传统部署

Graylog 5.0 需要以下内容来保持与其软件依赖项的兼容性:
OpenJDK 17(嵌入在5.0安装文件中)
Elasticsearch 7.10.2或OpenSearch 2.x
MongoDB(5.x 或 6.x)

MongoDB部署

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.14.tgztar -xf mongodb-linux-x86_64-rhel70-5.0.14.tgz 
mv mongodb-linux-x86_64-rhel70-5.0.14 /usr/local/mongodb
mkdir -p single/logs
mkdir -p single/data/db
vim /etc/profile (添加)
export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
​
source /etc/profile
​
vi /etc/mongodb.conf
#指定数据库路径
dbpath=/root/graylog/single/data
#指定MongoDB日志文件
logpath=/root/graylog/single/logs/mongodb.log
# 使用追加的方式写日志
logappend=true
#端口号
port=27017 
#方便外网访问
bind_ip=0.0.0.0
fork=true # 以守护进程的方式运行MongoDB,创建服务器进程
#auth=true #启用用户验证
#bind_ip=0.0.0.0 #绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定则默认本地所有IPmongod  -f /etc/mongodb.conf #启动mongodb

OS或者ES部署

rpm --import https://artifacts.opensearch.org/publickeys/opensearch.pgp 
#安装OS GPG密钥
wget https://artifacts.opensearch.org/releases/bundle/opensearch/2.4.1/opensearch-2.4.1-linux-x64.tar.gz
tar -xf opensearch-2.4.1-linux-x64.tar.gz
chown -R os:os opensearch-2.4.1/
cd opensearch-2.4.1/
su os (和es一样,root启动会报错)
./opensearch-tar-install.sh 
​rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch  
#安装 ES GPG 密钥
vim  /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.10.2]
name=Elasticsearch repository for 7.10.2 packages
baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-mdyum install elasticsearch-oss
sudo tee -a /etc/elasticsearch/elasticsearch.yml > /dev/null <<EOT
cluster.name: graylog
action.auto_create_index: false
EOT
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl restart elasticsearch.service
sudo systemctl --type=service --state=active
grep elasticsearch

Garylog部署

rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-5.0-repository_latest.rpm
yum install graylog-server
阅读配置文件中的说明并根据需要进行编辑,位于/etc/graylog/server/server.conf. 另外添加password_secret和root_password_sha2因为这些是强制性的,没有它们 Graylog 将无法启动。
​
要创建您的root_password_sha2运行以下命令:
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
为了能够连接到 Graylog,您应该设置http_bind_address您可以连接到的机器的公共主机名或公共 IP 地址。
​
sudo systemctl daemon-reload
sudo systemctl enable graylog-server.service
sudo systemctl start graylog-server.service
sudo systemctl --type=service --state=active | grep graylog
​

在这里插入图片描述

容器化部署

docker-compose.yaml

version: '2'
services:# MongoDB: https://hub.docker.com/_/mongo/mongodb:container_name: mongoimage: mongo:5volumes:- mongo_data:/data/db# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/6.x/docker.htmlelasticsearch:container_name: esimage: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2volumes:- es_data:/usr/share/elasticsearch/dataenvironment:- TZ=Asia/Shanghai- http.host=0.0.0.0- transport.host=localhost- network.host=0.0.0.0- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"ulimits:memlock:soft: -1hard: -1mem_limit: 4g# Graylog: https://hub.docker.com/r/graylog/graylog/graylog:container_name: graylogimage: graylog/graylog:environment:- http_bind_address = 0.0.0.0:9000  # CHANGE ME (must be at least 16 characters)!- GRAYLOG_PASSWORD_SECRET=somepasswordpepper- GRAYLOG_ROOT_USERNAME=admin# Password: admin- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918- GRAYLOG_HTTP_EXTERNAL_URI=http://192.168.3.83:9000/ #这里配置公网访问地址,可注释.- TZ=Asia/Shanghailinks:- mongodb:mongo- elasticsearchdepends_on:- mongodb- elasticsearchports:# Graylog web interface and REST API- 9000:9000# Syslog TCP- 1514:1514# Syslog UDP- 1514:1514/udp# GELF TCP- 12201:12201# GELF UDP- 12201-12205:12201-12205/udp
# Volumes for persisting data, see https://docs.docker.com/engine/admin/volumes/volumes/
volumes:mongo_data:driver: locales_data:driver: localgraylog_journal:driver: local

docker-compose up #启动 graylog 服务
docker-compose down #停止服务并删除容器
graylog 启动后,可以通过ip端口访问 ,如:http://192.168.11.127:9000
至此 graylog 环境以及搭建完毕!!
在这里插入图片描述

五、配置详情

• is_master = true
o 如果您正在运行多个Graylog服务器实例,则只需选择一个graylog-server节点作为主节点。该节点将执行从属节点不会执行的定期和维护操作。
o 每个从属节点都将像主节点一样接受消息。如果集群中已存在主节点,则节点将退回到从属模式。
• node_id_file = /etc/graylog/server/
o 自动生成的节点ID将存储在此文件中,并在重新启动后读取。如果要从初始化脚本或类似脚本启动Graylog服务器,则在此处使用绝对文件路径是个好主意。
• password_secret =
o 您必须设置一个用于密码加密和加密的秘密。如果未设置,服务器将拒绝启动。至少使用64个字符。如果您运行多个graylog-server节点,请确保password_secret对所有节点都使用相同的节点!
注意
例如产生秘密 pwgen -N 1 -s 96
• root_username = admin
o 默认的root用户名为admin。
• root_password_sha2 =
o 您将用于首次登录的密码的SHA2哈希。将此设置为生成的SHA2哈希,您将能够使用用户名admin和密码yourpassword登录Web界面。echo -n “Enter Password: " && head -1 </dev/stdin | tr -d ‘\n’ | sha256sum | cut -d” " -f1
警告
您必须为根用户指定一个哈希密码(您只需要在初始设置系统时使用,以防丢失与身份验证后端的连接)。不能使用API或通过Web界面更改此密码。如果需要更改,请在此文件中对其进行修改。
• root_email = “”
o 根用户的电子邮件地址。默认为空。
• root_timezone = UTC
o root用户的时区设置。请参阅此有效时区列表。默认为UTC。
• bin_dir = bin
o 该目录包含Graylog服务器使用的二进制文件。(相对或绝对)
• data_dir = data
o 该目录用于存储Graylog服务器状态。(相对或绝对)
• plugin_dir = plugin
o 在此处设置插件目录(相对或绝对)
Web和REST API
• http_bind_address = 127.0.0.1:9000
o Graylog HTTP接口使用的网络接口。
o 群集中的所有Graylog节点以及使用Graylog Web界面的所有客户端都必须可以访问此网络界面。
o 如果省略端口,默认情况下,Graylog将使用端口9000。
• http_publish_uri = http://
httpb​inda​ddress/o此Graylog节点的HTTPURI,用于与该群集中的其他Graylog节点以及所有使用GraylogWeb界面的客户端进行通信。oURI将在集群发现API中发布,以便其他Graylog节点将能够找到并连接到该Graylog节点。o如果此Graylog节点在 http_bind_address以外的其他网络接口上可用,则必须使用此配置设置,例如,如果计算机具有多个网络接口或在NAT网关后面
o 此配置设置不得配置为通配符地址!
o 如果http_bind_address包含通配符IPv4地址(0.0.0.0),http_publish_uri则将使用此计算机的第一个非环回IPv4地址填充。
• http_external_uri = 
httpp​ublishu​rioGraylogWeb界面将使用Graylog的公共URI与GraylogRESTAPI进行通信。o如果Graylog在反向代理或负载均衡器后面运行,则通常必须指定外部GraylogURI,并且它将用于生成在GraylogRESTAPI中寻址实体的URL(请参阅http_bind_address)
o 使用Graylog收集器时,此URI将用于接收心跳消息,并且所有收集器都必须可以访问该URI。
o 可以根据每个请求使用“ X-Graylog-Server-URL” HTTP请求标头覆盖此设置。
• http_enable_cors = true
o 为HTTP接口启用CORS标头。
o 这对于JS客户端直接访问服务器是必需的。
o 如果禁用了这些功能,现代浏览器将无法从服务器检索资源。
• http_enable_gzip = true
o 这样可以压缩API响应,因此有助于减少总体往返时间。
• http_max_header_size = 8192
o HTTP请求标头的最大大小(以字节为单位)。
• http_thread_pool_size = 16
o 专用于服务HTTP接口的线程池的大小。
• http_enable_tls = false
o 这样可以确保与具有TLS的HTTP接口的通信安全,以防止伪造和窃听请求。
• http_tls_cert_file = /path/to/graylog.crt
o PEM格式的X.509证书链文件,用于保护HTTP接口。
• http_tls_key_file = /path/to/graylog.key
o PEM格式的PKCS#8私钥文件,用于保护HTTP接口。
• http_tls_key_password = secret
o 用于解锁用于保护HTTP接口的私钥的密码。(如果密钥已加密)
• trusted_proxies = 127.0.0.1/32, 0:0:0:0:0:0:0:1/128
o 逗号分隔的受信任代理列表,允许使用X-Forwarded-For标头设置客户端地址。可能是子网,也可能是主机。
弹性搜索
• elasticsearch_hosts = http://node1:9200,http://user:password@node2:19200
o Elasticsearch主机Graylog应该连接的列表。
o 需要指定为Elasticsearch节点的http端口的有效URI的逗号分隔列表。
o 如果您的一个或多个Elasticsearch主机需要身份验证,请在每个需要身份验证的节点URI中包括凭据。
o 默认: http://127.0.0.1:9200
• elasticsearch_connect_timeout = 10s
o 等待成功连接到Elasticsearch HTTP端口的最长时间。
o 默认值:10秒
• elasticsearch_socket_timeout = 60s
o 等待从Elasticsearch服务器读回响应的最长时间。
o 默认值:60秒
• elasticsearch_idle_timeout = -1s
o Elasticsearch连接的最大空闲时间。如果超出此范围,则该连接将被断开。
o 默认值:无穷大
• elasticsearch_max_total_connections = 200
o 到Elasticsearch的最大总连接数。
o 默认值:200
• elasticsearch_max_total_connections_per_route = 20
o 每个Elasticsearch路由的最大总连接数(通常意味着每个Elasticsearch服务器)。
o 默认值:20
• elasticsearch_max_retries = 2
o Graylog将重试失败的请求到Elasticsearch的最大次数。
o 默认值:2
• elasticsearch_discovery_enabled = false
o 通过节点信息启用自动Elasticsearch节点发现,请参阅Elasticsearch参考»集群API»节点信息。
o 默认: false
警告
如果Elasticsearch需要使用Shield进行身份验证,则自动节点发现将不起作用。
警告
在AWS Elasticsearch Clusters(托管的)上,此设置必须为false,并且应谨慎使用。万一与ES的连接出现问题,这应该是第一个禁用的选项。有关更多详细信息,请参见自动节点发现。
• elasticsearch_discovery_filter = rack:42
o 根据其自定义属性过滤发现中是否包含Elasticsearch节点,请参阅《Elastic Search参考手册》»《集群API》»《节点规范》。
o 默认值:空
• elasticsearch_discovery_frequency = 30s
o Elasticsearch节点发现的频率。
o 默认值:30秒
• elasticsearch_discovery_default_scheme = http
o 连接到Elasticsearch发现的节点时,设置默认方案。(可用选项:http,https)
o 默认值:http
• elasticsearch_compression_enabled = false
o 为Elasticsearch请求启用有效负载压缩。
o 默认值:false
• elasticsearch_use_expect_continue = true
o 为Elasticsearch索引请求启用“期望:100个连续”标头。如果禁用此选项,则Graylog无法正确处理HTTP 413请求实体太大错误。
o 默认值:true
回转
注意
以下设置标识为!本节中的内容已移至Graylog 2.0中的数据库。升级时,请确保将它们设置为以前的1.x设置,以便将它们迁移到数据库!
• rotation_strategy = count !
o Graylog将使用多个索引来存储文档。您可以配置该策略来确定何时旋转当前活动的写索引。
o 它支持多种轮换策略:-count每个索引使用的消息elasticsearch_max_docs_per_index -size每个索引使用elasticsearch_max_size_per_index
o 有效值count,size并且time,默认为count。
• elasticsearch_max_docs_per_index = 20000000 !
o 在创建新索引之前,Elasticsearch索引中的(大约)最大文档数,另请参见no_retention和elasticsearch_max_number_of_indices。
o 如果您在上面使用过,请进行配置。rotation_strategy = count
• elasticsearch_max_size_per_index = 1073741824 !
o 在创建新索引之前,磁盘上每个Elasticsearch索引的(大约)最大大小(以字节为单位),另请参见no_retention和elasticsearch_max_number_of_indices。默认值为1GB。
o 如果您在上面使用过,请进行配置。rotation_strategy = size
• elasticsearch_max_time_per_index = 1d !
o (大约)在创建新的Elasticsearch索引之前的最长时间,另请参阅no_retention和elasticsearch_max_number_of_indices。默认值为1天。
o 如果您在上面使用过,请进行配置。rotation_strategy = time
o 请注意,该轮换周期不考虑接收到的消息中指定的时间,而是使用实际时钟值来决定何时轮换索引!
o 使用持续时间和后缀指定所需的时间,以指定时间:
 1w = 1周
 1d = 1天
 12h = 12小时
o 允许的后缀为:d天,h小时,m分钟,s秒。
• elasticsearch_max_number_of_indices = 20 !
o 您要保留多少个索引?
• retention_strategy = delete !
o 确定在达到最大索引数时最旧的索引会发生什么。
o 可以使用以下策略:
 delete -完全删除索引(默认)
 close-关闭索引并将其从系统隐藏。以后可以重新打开。
​
• elasticsearch_disable_version_check = true
o 禁用检查Elasticsearch版本是否与此Graylog版本兼容。
警告
在不受支持和未经测试的Elasticsearch版本中使用Graylog可能会导致数据丢失!
• no_retention = false
o 在该节点上禁用消息保留,即禁用Elasticsearch索引轮换。
​
注意
以下设置用!! 已被移至Graylog 2.2.0中的数据库。升级时,请确保将它们设置为以前的设置,以便将它们迁移到数据库。此设置在第一次启动时被读取一次,成为数据库中的初始设置。
• elasticsearch_shards = 4 !!
o 索引的分片数。一个好的设置在很大程度上取决于您的Elasticsearch集群中的节点数量。如果您有一个节点,请将其设置为1。
• elasticsearch_replicas = 0 !!
o 索引的副本数。一个好的设置在很大程度上取决于您的Elasticsearch集群中的节点数量。如果您有一个节点,请将其设置为0。
注意
elasticsearch_shards并且elasticsearch_replicas仅适用于新创建的索引。
• elasticsearch_index_prefix = graylog !!
o 由Graylog管理的所有Elasticsearch索引和索引别名的前缀。
• elasticsearch_template_name = graylog-internal !!
o Graylog用于应用强制索引映射的Elasticsearch索引模板的名称。
o 默认值:graylog-internal
• elasticsearch_analyzer = standard !!
o 分析器(令牌器),用于消息和full_message字段。通常,“标准”过滤器是一个好主意。
o 所有受支持的分析器为:标准,简单,空白,停止,关键字,模式,语言,雪球,自定义
o Elasticsearch文档:https : //www.elastic.co/guide/zh-CN/elasticsearch/reference/5.6/analysis.html
o 请注意,此设置仅对新创建的索引有效。
• disable_index_optimization = false !!
o 禁用索引循环后优化Elasticsearch索引。在使用大索引的频繁使用的系统上,这可能会给Elasticsearch带来一些负担,但会降低搜索性能。默认设置是优化循环索引。
• index_optimization_max_num_segments = 1 !!
o 将索引优化到<= index_optimization_max_num_segments。在具有大量索引的频繁使用的系统上,更高的数量可能会从Elasticsearch承受一些负担,但会降低搜索性能。预设值为1。
​
• allow_leading_wildcard_searches = false
o 是否要允许使用前导通配符进行搜索?这可能会非常耗费资源,因此应谨慎启用。
o 另请参阅:搜索
• allow_highlighting = false
o 是否要突出显示搜索?根据消息的大小,这可能会占用大量内存,只有在确保您的Elasticsearch群集具有足够的内存后才能启用它。
• elasticsearch_request_timeout = 1m
o 基于尽力限制Elasticsearch操作的运行时间,Elasticsearch请求的全局请求超时(例如,在搜索,索引创建或索引时间范围计算期间)。
o 默认值:1m
• elasticsearch_index_optimization_timeout = 1h
o 索引优化(强制合并)请求的全局超时。
o 默认值:1h
• elasticsearch_index_optimization_jobs = 20
o 同时运行的索引优化(强制合并)作业的最大数量。
o 如果使用大量不同的索引集,则可能需要增加该数目。
o 默认值:20
• index_ranges_cleanup_interval = 1h
o 索引范围信息清除的时间间隔。此设置定义从数据库中清除过时的索引范围信息的频率。
o 默认值:1h
• output_batch_size = 500
o Elasticsearch输出的批次大小。这是Elasticsearch输出模块将立即获得并以批处理调用方式写入Elasticsearch的最大消息数(!)。如果output_flush_interval几秒钟内未达到配置的批处理大小,则将立即刷新所有可用的内容。请记住,每个输出缓冲区处理器都管理自己的批处理并执行自己的批写调用。(outputbuffer_processors变量)
• output_flush_interval = 1
o Elasticsearch输出的刷新间隔(以秒为单位)。这是两批写入Elasticsearch的消息之间的最长时间。仅在此时间段内您的最小消息数小于时才有效。output_batch_size * outputbuffer_processors
• output_fault_count_threshold = 5
• output_fault_penalty_seconds = 30
o 由于仅按需加载流输出,因此将一遍又一遍尝试未初始化的输出。为避免这种情况,以下配置选项定义了在有多少个故障之后,在可配置的秒数内不会再次尝试输出。
• processbuffer_processors = 5
• outputbuffer_processors = 3
o 并行运行的处理器数。
o 如果缓冲区已满,请增加此数字。
• outputbuffer_processor_keep_alive_time = 5000
• outputbuffer_processor_threads_core_pool_size = 3
• outputbuffer_processor_threads_max_pool_size = 30
• udp_recvbuffer_sizes = 1048576
o 所有消息输入(例如SyslogUDPInput)的UDP接收缓冲区大小。
• processor_wait_strategy = blocking
o 等待策略,描述缓冲区处理器如何在游标序列上等待。(默认:睡眠)
o 可能的类型:
 yielding -降低性能和CPU使用率。
 sleeping-降低性能和CPU使用率。安静时段后可能会发生延迟峰值。
 blocking -高吞吐量,低延迟,更高的CPU使用率。
 busy_spinning-避免可能引起延迟抖动的系统调用。线程可以绑定到特定的CPU内核时最好。
• ring_size = 65536
o 内部环形缓冲区的大小。如果加注outputbuffer_processors不再有用,请加注。
o 为了获得最佳性能,环形缓冲区中的LogMessage对象应适合您的CPU L3高速缓存。
o 必须是2的幂。(512、1024、2048等)
• inputbuffer_ring_size = 65536
• inputbuffer_processors = 2
• inputbuffer_wait_strategy = blocking
• message_journal_enabled = true
o 启用基于磁盘的消息日志。
• message_journal_dir = data/journal
o 用于存储消息日志的目录。该目录必须由Graylog独占使用,并且不得包含除Graylog本身创建的文件以外的任何其他文件。
注意
如果为日记文件创建单独的分区,并使用文件系统在根目录中创建“ lost + found”之类的目录,则需要为日记创建子目录。否则,Graylog将记录一条错误消息,指出日志已损坏,并且Graylog无法启动。
• message_journal_max_age = 12h
• message_journal_max_size = 5gb
o 日志保留消息,然后才能将其写入Elasticsearch。
o 最长12小时或5 GB,以先到者为准。
o 在正常操作期间,轴颈将较小。
• message_journal_flush_age = 1m
o 此设置允许指定一个时间间隔,在该时间间隔我们将强制对日志数据进行fsync。例如,如果将其设置为1000,则在经过1000 ms之后将进行fsync。
• message_journal_flush_interval = 1000000
o 此设置允许指定一个时间间隔,在该时间间隔我们将强制对日志数据进行fsync。例如,如果将其设置为1,我们将在每条消息之后进行fsync;如果是5,则每隔5条消息就会进行fsync。
• message_journal_segment_age = 1h
o 此配置控制时间段,在这段时间后,即使段文件未满,Graylog也会强制日志滚动,以确保保留可以删除或压缩旧数据。
• message_journal_segment_size = 100mb
注意
当日志已满并且继续接收消息时,它将开始以FIFO队列的形式丢弃消息:第一个丢弃的消息将是第一个插入的消息,依此类推(以此类推)。
• async_eventbus_processors = 2
o 专用于调度内部事件的线程数。默认值为2。
• lb_recognition_period_seconds = 3
o 在将节点标记为DEAD以获得可能的负载平衡器与开始实际的关闭过程之间需要等待多少秒。如果前面没有状态检查负载均衡器,则设置为0。
• lb_throttle_threshold_percentage = 95
o 日志使用百分比,该百分比触发从负载均衡器请求对此服务器节点进行节流的操作。如果未设置,则该功能被禁用。
• stream_processing_timeout = 2000
• stream_processing_max_faults = 3
o 每个消息都与已配置的流匹配,并且可能发生的情况是,流包含的规则花费的运行时间非常少,例如,如果流中使用的规则表达式执行了过多的回溯操作。
o 这将影响整个服务器的处理。为了防止此类行为异常的流规则影响其他流,Graylog限制了每个流的执行时间。
o 默认值如下所示,超时以毫秒为单位。
o 如果与一个流匹配的流花费的时间超过了超时值,并且发生的时间超过了禁用该流的“ max_faults”次,并且在Web界面中显示了一条通知。
注意
从0.21开始,Graylog服务器支持可插拔输出模块。这意味着可以将一条消息写入多个输出。下一个设置定义单个输出模块的超时,包括所有消息最终到达的默认输出模块。
• output_module_timeout = 10000
o 等待所有消息输出完成编写单个消息的时间(以毫秒为单位)。
• stale_master_timeout = 2000
o 以毫秒为单位的时间,在此时间之后将在启动时重新检查检测到的陈旧主节点。
• shutdown_timeout = 30000
o Graylog等待所有线程在关闭时停止的时间(以毫秒为单位)。
MongoDB
• mongodb_uri = mongodb://…
o MongoDB连接字符串。在此处输入您的MongoDB连接和身份验证信息。
o 有关详细信息,请参见https://docs.mongodb.com/manual/reference/connection-string/。
o 请注意,+用户名或密码中的-signs必须替换为%2B。
o 例子:
 简单: mongodb://localhost/graylog
 针对MongoDB服务器进行身份验证: mongodb_uri = mongodb://grayloguser:secret@localhost:27017/graylog
 使用副本集而不是单个主机: mongodb://grayloguser:secret@localhost:27017,localhost:27018,localhost:27019/graylog?replicaSet=rs01
 DNS种子列表设置为mongodb+srv://server.example.org/graylog。
• mongodb_max_connections = 1000
o 如果遇到MongoDB连接问题,请根据您的MongoDB服务器可以从单个客户端处理的最大连接数来增加此值。
• mongodb_threads_allowed_to_block_multiplier = 5
o MongoDB连接乘数允许阻止的线程数。默认值:5
o 如果mongodb_max_connections为100,mongodb_threads_allowed_to_block_multiplier则为5,则可能会阻塞500个线程。除此之外,还会引发异常。
o http://api.mongodb.com/java/current/com/mongodb/MongoOptions.html#threadsAllowedToBlockForConnectionMultiplier
电子邮件
• transport_email_enabled = false
• transport_email_hostname = mail.example.com
• transport_email_port = 587
• transport_email_use_auth = true
• transport_email_use_tls = true
o 使用STARTTLS启用SMTP以进行加密连接。
• transport_email_use_ssl = false
o 为加密连接启用SSL上的SMTP(SMTPS)。
注意
确保仅启用这两个设置之一,因为大多数(或所有)SMTP服务仅在同一端口上支持一种加密机制。大多数SMTP服务都支持具有STARTTLS的SMTP,而大多数SMTP服务都已弃用SMTPS。false当您想通过未加密的连接发送时,需要将两者都设置为。
• transport_email_auth_username = you@example.com
• transport_email_auth_password = secret
• transport_email_subject_prefix = [graylog]
• transport_email_from_email = graylog@example.com
• transport_email_web_interface_url = https://graylog.example.com
o 指定此选项可在流警报邮件中包含流的链接。
o 这应该将完全限定的基本URL定义为您的Web界面,与用户访问该URL的方式完全相同。
HTTP
• http_connect_timeout = 5s
o 传出HTTP连接的默认连接超时。
o 值必须为正值(在转换为毫秒时,介于1和2147483647之间)。
o 默认值:5s
• http_read_timeout = 10s
o 传出HTTP连接的默认读取超时。
o 值必须为正值(在转换为毫秒时,介于1和2147483647之间)。
o 默认值:10秒
• http_write_timeout = 10s
o 传出HTTP连接的默认写超时。
o 值必须为正值(在转换为毫秒时,介于1和2147483647之间)。
o 默认值:10秒
• http_proxy_uri =
o 传出HTTP连接的HTTP代理
注意
如果您配置代理,请确保还配置“ http_non_proxy_hosts”选项,以便与其他节点的内部HTTP连接不会通过代理。
• http_non_proxy_hosts =
o 绕过配置的代理服务器应直接访问的主机列表。
o 这是用“,”分隔的模式列表。模式可以以通配符“ *”开头或结尾。
o 匹配这些模式之一的任何主机都将通过直接连接而不是通过代理访问。
处理状态
注意
通常不需要调整处理状态的设置。
• processing_status_persist_interval = 1s
o 服务器正在定期将处理状态信息写入数据库。此设置控制将数据写入数据库的频率。
o 值必须为正值,并且不能小于一秒。
o 默认值:1秒(一秒)
• processing_status_update_threshold = 1m
o 配置检测过时的处理状态记录的阈值。在配置的阈值中尚未更新的所有记录都将被忽略。
o 值必须为正值,并且不能小于一秒。
o 默认值:1m(一分钟)
• processing_status_journal_write_rate_threshold= 1
o 配置日志写速率阈值以选择处理状态记录。一分钟速率低于配置值的任何记录都将被忽略。(取决于日记中的邮件数量)
o 值必须为正值。
o 默认值:1
脚本警报通知
• integrations_web_interface_uri = https://graylog.example.com
o 指定此选项可在脚本参数或JSON中的标准中包括搜索页面链接(显示相关警报消息)。
o 这应该将完全限定的基本URL定义为您的Web界面,与用户访问该URL的方式完全相同。
o 默认值:无
• integrations_scripts_dir = /usr/share/graylog-server/scripts
o 允许从中执行脚本的绝对或相对路径。
o 如果指定,它将覆盖默认位置(请参见“文件位置”文档。
其他
• gc_warning_threshold = 1s
o 垃圾收集的阈值运行。如果GC的运行时间超过此阈值,则会生成系统通知,以警告管理员系统可能存在的问题。默认值为1秒。
• ldap_connection_timeout = 2000
o 已配置的LDAP服务器(例如ActiveDirectory)的连接超时(以毫秒为单位)。
• disable_sigar = false
o 禁止使用SIGAR收集系统统计信息。
• dashboard_widget_default_cache_time = 10s
o 仪表板小部件的默认缓存时间。(默认:10秒,最小:1秒)
• proxied_requests_thread_pool_size = 32
o 对于某些与群集相关的REST请求,该节点必须查询群集中的所有其他节点。这是可用于此目的的最大线程数。如果/cluster/*请求需要很长时间才能完成,请增加它。
o 应该是,如果你有一个高并发用户数。http_thread_pool_size * average_cluster_size
• default_events_index_prefix = gl-events
o Graylog事件的默认索引前缀。
• default_system_events_index_prefix = gl-system-events
o Graylog系统事件的默认索引前缀。
• enabled_tls_protocols = TLSv1.2,TLSv1.3
o 配置系统范围内启用的TLS协议。仅在需要支持旧系统时才进行配置。我们将维持安全的默认设置。(当前为TLS 1.2和TLS 1.3)。(注意:Web界面不支持JDK 8的TLS 1.3)
• content_packs_loader_enabled = false
o 在Graylog的第一次启动时自动将内容包加载到“ content_packs_dir”中。
• content_packs_dir = data/contentpacks
o 该目录包含应在Graylog的第一个开始处加载的内容包。
• content_packs_auto_install
o 以逗号分隔的内容包列表(“ content_packs_dir”中的文件),应在Graylog的第一个开始处应用。
o 默认值:无

六、优化

网络和 REST API

  • http_enable_gzip = true
    这会压缩 API 响应,因此有助于减少整体往返时间。
  • http_max_header_size = 8192
    HTTP 请求标头的最大大小(以字节为单位)。
  • http_thread_pool_size = 16
    专门用于为 HTTP 接口提供服务的线程池的大小。
  • http_enable_tls = false
    这通过 TLS 保护与 HTTP 接口的通信,以防止请求伪造和窃听。
    Elasticsearch
  • elasticsearch_connect_timeout = 10s
    等待成功连接到 Elasticsearch HTTP 端口的最长时间。
    默认值:10 秒
  • elasticsearch_socket_timeout = 60s
    等待从 Elasticsearch 服务器读回响应的最长时间。
    默认值:60 秒
  • elasticsearch_idle_timeout = -1s
    Elasticsearch 连接的最长空闲时间。如果超过这个值,这个连接将被断开。
    默认值:无穷大
  • elasticsearch_max_total_connections = 200
    Elasticsearch 的最大总连接数。
    默认值:200
  • elasticsearch_max_total_connections_per_route = 20
    每个 Elasticsearch 路由的最大总连接数(通常是指每个 Elasticsearch 服务器)。
    默认值:20
  • elasticsearch_max_retries = 2
    Graylog 将向 Elasticsearch 重试失败请求的最大次数。
    默认值:2
    Rotation
  • rotation_strategy = count !
    Graylog 将使用多个索引来存储文档。您可以配置它使用的策略来确定何时轮换当前活动的写入索引。

它支持多种轮换策略:-count 每个索引的消息,使用elasticsearch_max_docs_per_index - size 每个索引,使用elasticsearch_max_size_per_index
有效值为count, size, 和 time; 默认是count。

  • elasticsearch_max_docs_per_index = 20000000 !
    在创建新索引之前,Elasticsearch 索引中的(近似)最大文档数;另见 no_retention 和 elasticsearch_max_number_of_indices.
    如果您在rotation_strategy = count 上面使用过,请配置它。
  • elasticsearch_max_size_per_index = 1073741824 !
    在创建新索引之前,磁盘上每个 Elasticsearch 索引的(近似)最大大小(以字节为单位);另见no_retention 和elasticsearch_max_number_of_indices。默认为 1GB。
    如果您在rotation_strategy = size 上面使用过,请配置它。
  • elasticsearch_max_time_per_index = 1d !
    创建新 Elasticsearch 索引之前的(近似)最长时间;另见 no_retention 和elasticsearch_max_number_of_indices。默认为 1 天。
    如果您在rotation_strategy = time 上面使用过,请配置它。

请注意,这个轮转周期并不看收到的消息中指定的时间,而是使用真实的时钟值来决定何时轮转索引!
使用持续时间和表示所需单位的后缀指定时间:

  • 1w = 1 周
  • 1d = 1 天
  • 12h = 12 小时
    允许的后缀是:d 天、 h 小时、m 分钟、 s 秒。
  • elasticsearch_max_number_of_indices = 20 !
    你想保留多少索引?

MongoDB

  • mongodb_max_connections = 1000
    如果您遇到 MongoDB 连接问题,请根据您的 MongoDB 服务器可以从单个客户端处理的最大连接数增加此值。
  • mongodb_threads_allowed_to_block_multiplier = 5
    MongoDB 连接乘数允许阻塞的线程数。默认值:5
    如果mongodb_max_connections 是100,并且mongodb_threads_allowed_to_block_multiplier 是5,那么500个线程可以阻塞。不止于此,将抛出异常。

七、升级

升级 Graylog 时不要跳过主要版本。例如,要从 4.0.x 升级到 4.3.x,您必须先升级到最新的次要版本 4.0.x、4.1.x 和 4.2.x,然后再升级到 4.3.x。

server.conf在重新启动 Graylog 服务器之前,您可能还需要对 Graylog 配置文件执行手动编辑。

确保在升级 Graylog 堆栈的任何组件之前备份 MongoDB 和 Elasticsearch/OpenSearch 数据库状态以创建回滚选项。

在准备升级 Graylog 时,您必须首先满足任何软件先决条件。MongoDB 和 Elasticsearch/OpenSearch 必须至少运行您希望升级到的 Graylog 版本所需的最低要求版本。
请参考下表确定您的版本兼容性要求:
在这里插入图片描述

八、监控

使用zabbix 监控graylog,在zabbix官方网站上有graylog的监控模板,
地址:https://share.zabbix.com/templates/applications-monitoring-system-template-graylog-node-monitoring-using-zabbix/
在这里插入图片描述
监控包获取
github地址为https://github.com/bezarsnba/zabbix-graylog-monitoring
Python版本只少是大于等于python3.4版本

配置zabbix-agent

配置python

下载monitoring-graylog.py文件并将其复制到服务器上的新建的scripts文件夹:

更改monitoring-graylog.py文件中的变量,分别在15,16,23行,修改自己graylog的配置
在这里插入图片描述
通过传递lldgraylognode参数运行脚本

显示结果 :说明配置成功

在这里插入图片描述
下载user_parameter_graylog.conf并复制到/etc/zabbix/zabboix_agentd.d/下
然后编辑文件,将/usr/bin/python3.4替换为/usr/bin/python3
在这里插入图片描述
在这里插入图片描述
zabbix服务器上导入模板
在这里插入图片描述
根据实际情况,选择版本模板导入,模板上没有图形,但是有很多自动发现的监控项,自己绘制图形即可
在这里插入图片描述
然后再最新数据中,确认获取到最新数据数值,表明监控生效

在这里插入图片描述

九、常见问题及处理

1、graylog启动但是未监听到9000端口
查看日志:ERROR [VersionProbe] Unable to retrieve version from Elasticsearch node: Failed to connect to localhost/[0:0:0:0:0:0:0:1]:9200. - Connection refused.

ES服务状态查询
配置文件es配置排查

2、Graylog日志查询超过10000限制问题
在使用graylog时,默认分页查询存在限制,真实使用不能满足,需要我们手动处理。当查询超过执行长度时,会出现一下错误提示

While retrieving data for this widget, the following error(s) occurred:
Unable to perform search query: Elasticsearch exception [type=illegal_argument_exception, reason=Result window is too large, from + size must be less than or equal to: [10000] but was [3382050]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.].
📙Elasticsearch检索问题
📐Elasticsearch的max_result_window限制
问题描述
查询超过10000页,Elasticsearch出现异常

Elasticsearch exception [type=illegal_argument_exception, reason=Result window is too large, from + size must be less than or equal to: [10000] but was [7135950]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.].

解决方案
方案一:修改配置文件,重启Elasticsearch服务【Elasticsearch5.x版本以后不支持】
修改Elasticsearch 集群中的 配置文件 config/elasticsearch.yml
在配置文件最后增加一行,如下:

index.max_result_window: 1000000

方案二:通过接口修改具体的index
具体操作命令,如下(比如,设置可查询 1000000 条数据,其中 alarm 是index名称):
推荐使用全局修改方式。

# 修改个别索引
PUT alarm/_settings
{ "max_result_window" : 1000000
} 
# 修改全局 100W
PUT _settings
{"index": {"max_result_window": "1000000"}
}  
Curl方式
curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_all/_settings -d '{ "index" : { "max_result_window" : 1000000}}'

3、Deflector exists as an index and is not an alias
官方的步骤
-停止所有Graylog节点
-(可选)如果您想保留已摄取的消息,请通过Elasticsearch reindex API将其重新索引到具有最大数量的Elasticsearch索引中,例如,如果您想修复偏转器graylog_deflector,请使用graylog_23。
-通过Elasticsearch Delete index API删除graylog_deflector索引。
-将action.auto_create_index:false添加到集群中所有Elasticsearch节点的配置文件中,并重新启动这些Elasticearch节点,有关详细信息,请参阅Elasticsearch索引API-自动创建索引和创建索引。
-启动Graylog主节点。
-手动旋转维护下拉菜单中系统/索引/索引集页面上索引集的活动写入索引。
-(可选)启动所有剩余的Graylog从属节点。

实际上我们可以不按照官方的做法,以下是一些实践(前提是现有的数据不是很重要,可以删除的)

  • 可以不用停止graylog server
  • 修改es 配置,添加action.auto_create_index: false注意需要重启es集群,理论上单台重启不会有影响的(和部署模型也有关系)
  • 删除*_deflector 索引(可以通过api以及ui)
  • 手工 rotate active write

相关文章:

深入探究分布式日志系统 Graylog:架构、部署与优化

文章目录 一、Graylog简介二、Graylog原理架构三、日志系统对比四、Graylog部署传统部署MongoDB部署OS或者ES部署Garylog部署容器化部署 五、配置详情六、优化网络和 REST APIMongoDB 七、升级八、监控九、常见问题及处理 一、Graylog简介 Graylog是一个简单易用、功能较全面的…...

HTML新春烟花

系列文章 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心&#xff08;双心版&#xff09;1…...

CentOS 7 安装fail2ban hostdeny方式封禁ip —— 筑梦之路

centos 7 换源参考CentOS 7.9 停止维护(2024-6-30)后可用在线yum源 —— 筑梦之路_centos停止维护-CSDN博客 安装fail2ban yum install fail2ban 新增配置文件 cat > /etc/fail2ban/action.d/hostsdeny.conf << EOF [Definition] actionstart actionstop action…...

java入门基础笔记语法篇(3)

一、 注释 什么是注释 注释定义&#xff1a;注释是写在程序中对代码进行解释说明的文字&#xff0c;方便自己和他人查看以理解程序。 Java注释的三种写法&#xff1a; 单行注释&#xff1a;以“//”开头&#xff0c;注释内容只能写一行。多行注释&#xff1a;以“/*”开头&…...

VUE对接deepseekAPI调用

1.先去开放平台注册账号申请api key。开放平台&#xff1a;https://platform.deepseek.com/api_keys 2.你的项目需要有发送请求的axios或者自己写。 npm install axios # 或 yarn add axios 3.创建 API 调用函数 在 Vue 项目中&#xff0c;通常会将 API 调用的逻辑封装到一个…...

【C++高并发服务器WebServer】-1:Linux中父子进程fork创建及关系、GDB多进程调试

本文目录 一、进程创建二、GDB多进程调试 一、进程创建 在Linux中输入man 2 fork可以查看man文档中的fork的相关函数信息。 fork的作用就是创建一个子进程。 通过fork我们可以知道&#xff0c;创建子进程的时候&#xff0c;复制父进程的信息。 我们看看翻译的man文档信息&am…...

leetcode——相交链表(java)

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…...

Spring 框架:配置缓存管理器、注解参数与过期时间

在 Spring 框架中&#xff0c;可通过多种方式配置缓存具体行为&#xff0c;常见配置方法如下。 1. 缓存管理器&#xff08;CacheManager&#xff09;配置 基于内存的缓存管理器配置&#xff08;以SimpleCacheManager为例&#xff09; SimpleCacheManager 是 Spring 提供的简单…...

UDP協議與代理IP介紹

UDP&#xff0c;全稱是用戶數據報協議&#xff08;User Datagram Protocol&#xff09;&#xff0c;是Internet協議套組的一部分&#xff0c;與TCP協議一道工作。與TCP相比&#xff0c;UDP可以理解為一個更“羽量級”的協議。它不需要像TCP那樣在數據傳輸開始之前建立連接&…...

24.日常算法

1. 数组中两元素的最大乘积 题目来源 给你一个整数数组 nums&#xff0c;请你选择数组的两个不同下标 i 和 j&#xff0c;使 (nums[i]-1)*(nums[j]-1) 取得最大值。请你计算并返回该式的最大值。 示例 1&#xff1a; 输入&#xff1a;nums [3,4,5,2] 输出&#xff1a;12 解释…...

【Python】FastAPI框架快速实现后端(一)

FastAPI框架快速实现后端-SQLModel的使用 介绍正文基础模型模型与表定义数据表模型关系定义 介绍 最近1个多月&#xff0c;用FastAPI做了几个日常工作用的小功能&#xff0c;感觉FastAPI确实很适合这种场景&#xff0c;功能要求简单&#xff0c;交付要求比较急&#xff0c;这个…...

西门子【Library of General Functions (LGF) for SIMATIC S7-1200 / S7-1500】

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 通用函数库 (LGF) 扩展了 TIA Portal 中用于 PLC 编程的 STEP 7 指令&#xff08;数学函数、时间、计数器 等&#xff09;。该库可以不受限制地使用&#xff0c;并包含 FIFO 、搜索功能、矩阵计算、 astro 计…...

年度总结和寒假总结

年度总结 加入Hope实验室 年初&#xff0c;我加入了Hope实验室&#xff0c;在实验室里&#xff0c;我接触到了更加前沿的技术和项目。刚开始时&#xff0c;我主要学习了Java语言和MySQL数据库。这是我第一次系统地接触这些技术&#xff0c;相比之前的课堂学习&#xff0c;实验…...

STM32 GPIO配置 点亮LED灯

本次是基于STM32F407ZET6做一个GPIO配置&#xff0c;实现点灯实验。 新建文件 LED.c、LED.h文件&#xff0c;将其封装到Driver文件中。 双击Driver文件将LED.c添加进来 编写头文件&#xff0c;这里注意需要将Driver头文件声明一下。 在LED.c、main.c里面引入头文件LED.h LED初…...

C#标准Mes接口框架(持续更新)

前言 由于近期我做了好几个客户的接入工厂Mes系统的需求。但是每个客户的Mes都有不同程度的定制需求&#xff0c;原有的代码复用难度其实很大。所以打算将整个接入Mes系统的框架单独拿出来作为一个项目使用&#xff0c;同时因为不同的设备接入同一个Mes系统&#xff0c;所以代…...

22_设计方案(4.1.7)

4.1.7 数据组织存储实例 全区所有数据库信息根据业务使用范围存储在互联网区、政务外网区、自然资源业务网区的服务器。互联网区的服务器主要存储互联网数据库。政务外网区的服务器主要存储全区所有市、县(区)不动产登记业务库、档案库、后台管理库、工作流库,全区共享查询…...

Ansys Thermal Desktop 概述

介绍 Thermal Desktop 是一种用于热分析和流体分析的通用工具。它可用于组件或系统级分析。 来源&#xff1a;CRTech 历史 Thermal Desktop 由 C&R Technologies (CR Tech) 开发。它采用了 SINDA/FLUINT 求解器。SINDA/FLUINT 最初由 CR Tech 的创始人为 NASA 的约翰逊航…...

PageView组件的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了如何屏蔽事件关的内容,本章回中将介绍PageView Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的PageView是指左右滑动或者上下滑动显示不同的页面&#xff0c;Flutter把它…...

自动化实现的思路变化

阶段一&#xff1a; 1、成功调用。第一步&#xff0c;一般是用现用的工具&#xff0c;或者脚本成功调用接口 2、解决关联接口的参数传递。有的接口直接&#xff0c;存在参数的传递&#xff0c;一般的思路&#xff0c;就是将这个参数设置为变量。 3、简化代码。总会有些东西是重…...

微信小程序启动小程序APP Page Component创建顺序

之前之后的打印 都是在&#xff08;&#xff09;之外...

从 UTC 日期时间字符串获取 Unix 时间戳:C 和 C++ 中的挑战与解决方案

在编程世界里&#xff0c;从 UTC 日期时间字符串获取 Unix 时间戳&#xff0c;看似简单&#xff0c;实则暗藏玄机。你以为输入一个像 “Fri, 17 Jan 2025 06:07:07” 这样的 UTC 时间&#xff0c;然后轻松得到 1737094027&#xff08;从 1970 年 1 月 1 日 00:00:00 UTC 开始经…...

[Spring] Gateway详解

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

计数排序算法

基本思想 先确定待排序数组的最大值&#xff08;Max&#xff09;和最小值&#xff08;Min&#xff09;&#xff0c;随后创建Max - Min 1个长度的数组称为计数数组&#xff0c;计数数组的索引对应着待排序数组中元素的值&#xff0c;数组的值表示该元素的出现次数。通过从前往…...

Spring--基于注解的声明式事务

基于注解的声明式事务 1.选择一个合适的事务管理器实现加入到ioc容器 2.使用注解指定哪些方法需要添加事务即可 1.事务属性&#xff1a;只读 // readOnly true把当前事务设置为只读 默认是false! Transactional(readOnly true)Transactional注解放在类上 生效原则 如果一…...

SQL-leetcode—1164. 指定日期的产品价格

1164. 指定日期的产品价格 产品数据表: Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | new_price | int | | change_date | date | ---------------------- (product_id, change_date) 是此表的主键&#xff08;具…...

微服务搭建----springboot接入Nacos2.x

springboot接入Nacos2.x nacos之前用的版本是1.0的&#xff0c;现在重新搭建一个2.0版本的&#xff0c;学如逆水行舟&#xff0c;不进则退&#xff0c;废话不多说&#xff0c;开搞 1、 nacos2.x搭建 1&#xff0c;首先第一步查询下项目之间的版本对照&#xff0c;不然后期会…...

JavaEE:多线程进阶

JavaEE&#xff1a;多线程进阶 一、对比不同锁策略之间的应用场景及其区别1. 悲观锁 和 乐观锁1.1 定义和原理1.2 应用场景1.3 示例代码 2. 重量级锁 和 轻量级锁2.1 定义和原理2.2 应用场景2.3 示例代码 3. 挂起等待锁 和 自旋锁3.1 定义和原理3.2 应用场景3.3 示例代码 4. 几…...

软件测试 —— jmeter(2)

软件测试 —— jmeter&#xff08;2&#xff09; HTTP默认请求头&#xff08;元件&#xff09;元件作用域和取样器作用域HTTP Cookie管理器同步定时器jmeter插件梯度压测线程组&#xff08;Stepping Thread Group&#xff09;参数解析总结 Response Times over TimeActive Thre…...

[java] 面向对象进阶篇1--黑马程序员

目录 static 静态变量及其访问 实例变量及其访问 静态方法及其访问 实例方法及其访问 总结 继承 作用 定义格式 示例 总结 子类不能继承的内容 继承后的特点 成员变量 成员变量不重名 成员变量重名 super访问父类成员变量 成员方法 成员方法不重名 成员方法…...

openstack单机安装

openstack单机安装 网卡配置安装依赖开启虚拟环境修改配置文件 部署openstack部署openstack客户端访问可视化界面Horizon补充 本篇主要讲述Ubuntu2204单机安装openstackstable/2024.2。其他版本的Linux系统或者openstack版本&#xff0c;请参考openstack官网。 网卡配置 需要配…...

OFD、PDF 电子签章系统处理流程

在C#中实现电子签章系统的处理流程&#xff0c;可以参考以下步骤和技术实现&#xff1a; 1. 电子签章系统的基本流程 电子签章系统的核心流程包括以下几个步骤&#xff1a; 密钥生成&#xff1a;生成公钥和私钥对&#xff0c;私钥由签章人保管&#xff0c;公钥用于验证签名。…...

「 机器人 」系统辨识实验浅谈

前言 系统辨识实验是一种通过实验和数据分析的方法,用于建立物理系统的数学模型的技术。系统辨识是控制工程和系统科学中的重要环节,尤其是在模型未知或复杂的情况下。以下是系统辨识实验的详细介绍: 1. 系统辨识实验的目的 1.1 建模 为动态系统(如机械系统、电气系统或生…...

15.7k!DISM++一款快捷的系统优化工具

软件介绍 链接 软件介绍 dism是一款由初雨团队开发的win系统优化工具&#xff0c;可当作是微软系统命令行工具dism的GUI版本。可用作系统垃圾清除、启动项管理、程序卸载、驱动管理、系统优化等 该工具个人感觉最重要的就是系统优化选项&#xff0c;它将一些实用、无用或者没…...

Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决

个人博客地址&#xff1a;Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决 | 一张假钞的真实世界 msvcp120.dll、msvcr120.dll、vcomp120.dll属于VC2013版中的动态链接库&#xff0c;如果丢失重新安装VC2013即可。下载地址&#xff1a;https://www.microsoft.com…...

Vue 3 30天精进之旅:Day 03 - Vue实例

引言 在前两天的学习中&#xff0c;我们成功搭建了Vue.js的开发环境&#xff0c;并创建了我们的第一个Vue项目。今天&#xff0c;我们将深入了解Vue的核心概念之一——Vue实例。通过学习Vue实例&#xff0c;你将理解Vue的基础架构&#xff0c;掌握数据绑定、模板语法和指令的使…...

被遮挡QT窗口置顶

问题描述 开发环境&#xff1a;windows QT 需求&#xff1a; 单击托盘将桌面窗口在被遮挡的情况下置顶解决方案 方案1 资料链接 代码实现 Qt::WindowFlags flags windowFlags(); this->setWindowFlags((flags | Qt::WindowStaysOnTopHint)); this->showMaximized();…...

Apache Flink 概述学习笔记

一、引言 在大数据处理领域&#xff0c;Apache Flink 是一个极具影响力的开源流批一体化计算框架&#xff0c;它以其独特的架构和强大的功能&#xff0c;为大规模数据处理提供了高效、灵活的解决方案。 二、基本概念 Flink 是什么&#xff1a;Flink 是一个分布式流批处理框架…...

系统思考—复杂问题的根源分析

在企业中&#xff0c;许多问题看似简单&#xff0c;背后却潜藏着复杂的因果关系。传统的思维方式往往只能看到表面&#xff0c;而无法深入挖掘问题的真正根源。我们常常通过“表面解决”来应对眼前的症状&#xff0c;但这往往只是治标不治本。 比如&#xff0c;销量下降时&…...

Python 之 Excel 表格常用操作

示例文件 test.xlsx 将各个表单拆分成单独的 Excel 文件 import os.pathimport openpyxl import pandasdef handle_excel(file_path):dirname os.path.dirname(file_path)basename os.path.basename(file_path).split(".")[0]wb openpyxl.load_workbook(file_pat…...

《用DOTS解决实际需求》集锦

去年作者发布了一篇《DOTS-ECS系列课程》&#xff0c;深受同学们的好评&#xff01;前期课程是基于0.51版本录制的&#xff0c;DOTS升级至1.0版本后&#xff0c;同学们纷纷希望能使用DOTS 1.0版本录制实战课程。 今年作者带着DOTS 1.0版本的实战课程回来啦&#xff01;&#x…...

【MySQL】存储引擎有哪些?区别是什么?

频率难度60%⭐⭐⭐⭐ 这个问题其实难度并不是很大&#xff0c;只是涉及到的相关知识比较繁杂&#xff0c;比如事务、锁机制等等&#xff0c;都和存储引擎有关系。有时还会根据场景选择不同的存储引擎。 下面笔者将会根据几个部分尽可能地讲清楚 MySQL 中的存储引擎&#xff0…...

ios打包:uuid与udid

ios的uuid与udid混乱的网上信息 新人开发ios&#xff0c;发现uuid和udid在网上有很多帖子里是混淆的&#xff0c;比如百度下&#xff0c;就会说&#xff1a; 在iOS中使用UUID&#xff08;通用唯一识别码&#xff09;作为永久签名&#xff0c;通常是指生成一个唯一标识&#xf…...

Jadx动态调试安卓逆向

adb shell su ls 找到default.prop cat default.prop ro.debuggable0(代表没有调试权限) adb shell getprop ro.debuggable # 检查设备是否可调试&#xff08;1可调试&#xff09; adb shell getprop ro.product.cpu.abi # 获取设备 CPU 架构&#xff08;如 arm64-v…...

在Ubuntu上使用Apache+MariaDB安装部署Nextcloud并修改默认存储路径

一、前言 Nextcloud 是一款开源的私有云存储解决方案&#xff0c;允许用户轻松搭建自己的云服务。它不仅支持文件存储和共享&#xff0c;还提供了日历、联系人、任务管理、笔记等丰富的功能。本文将详细介绍如何在 Ubuntu 22.04 LTS 上使用 Apache 和 MariaDB 安装部署 Nextcl…...

FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转

本文主要介绍如何基于FPGA实现视频的90度/270度无裁剪旋转&#xff0c;关于视频180度实时旋转&#xff0c;请见本专栏前面的文章&#xff0c;旋转效果示意图如下&#xff1a; 为了实时对比旋转效果&#xff0c;采用分屏显示进行处理&#xff0c;左边代表旋转前的视频在屏幕中…...

六、深入了解DI

依赖注入是⼀个过程&#xff0c;是指IoC容器在创建Bean时,去提供运⾏时所依赖的资源&#xff0c;⽽资源指的就是对象. 在上⾯程序案例中&#xff0c;我们使⽤了 Autowired 这个注解&#xff0c;完成了依赖注⼊的操作. 简单来说,就是把对象取出来放到某个类的属性中。 关于依赖注…...

kotlin内联函数——let,run,apply,also,with的区别

一、概述 为了帮助您根据使用场景选择合适的作用域函数&#xff08;scope function&#xff09;&#xff0c;我们将对它们进行详细描述并提供使用建议。从技术上讲&#xff0c;许多情况下范围函数是可以互换使用的&#xff0c;因此示例中展示了使用它们的约定俗成的做法。 1.…...

火语言RPA—超级鹰打码

&#x1f6a9;【组件功能】&#xff1a;通过传入图像返回图像中的文字或结果信息 针对不同类型图片形式的验证码&#xff0c;提交至平台api&#xff0c;以字符串形式返回图片识别结果。 配置预览 配置说明 文件路径 支持T或# 默认FLOW输入项 待识别本地图片的完整路径。 用…...

C#新语法

目录 顶级语句&#xff08;C#9.0&#xff09; using 全局using指令&#xff08;C#10.0&#xff09; using资源管理问题 using声明&#xff08;C#8.0&#xff09; using声明陷阱 错误写法 正确写法 文件范围的命名空间声明&#xff08;C#10.0&#xff09; 可空引用类型…...

Cloudflare通过代理服务器绕过 CORS 限制:原理、实现场景解析

第一部分&#xff1a;问题背景 1.1 错误现象复现 // 浏览器控制台报错示例 Access to fetch at https://chat.qwenlm.ai/api/v1/files/ from origin https://ocr.doublefenzhuan.me has been blocked by CORS policy: Response to preflight request doesnt pass access con…...