ELK日志分析

目录

一、ELK概述

(一)ELK的定义

(二)ELK工具

1.ElasticSearch

2.Kiabana

3.Logstash

(1)定义

(2)插件

① input

② filter

③ output

(三)可以添加的其它组件

1.Filebeat

(1)定义

(2)filebeat 结合 logstash 带来好处

2.缓存/消息队列(redis、kafka、RabbitMQ等

3.Fluentd

(四)ELK的好处

(五)完整日志系统基本特征

(六)ELK 的工作原理

二、ELK Elasticsearch集群部署

(一)环境准备

(二)部署Elasticsearch软件

1.安装elasticsearch—rpm包

2.修改elasticsearch主配置文件

3.es 性能调优参数

(1)优化最大内存大小和最大文件描述符的数量

(2)优化elasticsearch用户拥有的内存权限

4.启动elasticsearch是否成功开启

5.查看节点信息

(1)查看节点 Node1、Node2、Node3的信息

(2)查看群集的健康情况

(3)检查群集状态信息

(三)安装 Elasticsearch-head 插件

1.编译安装 node

2.安装phantomjs

3.安装Elasticsearch-head数据可视化工具

4.修改Elasticsearch主配置文件

5.启动elasticsearch-head服务

6.通过Elasticsearch-head查看Elasticsearch信息

​编辑

7.插入索引

(1)创建索引

(2)浏览器访问查看索引信息

三、 ELK Logstash 部署

(一)安装nginx服务并启动

(二)安装Java环境

(三)安装logstash

(四)测试logstash

1.使用 rubydebug 输出详细格式显示

2.浏览器访问查看索引信息

(五)定义 logstash配置文件

1.修改 Logstash 配置文件

(六)浏览器访问查看索引信息

四、ELK Kiabana部署

(一)安装 Kiabana

(二)设置Kibana的主配置文件

(三)创建日志文件,启动 Kibana 服务

(四)验证Kibana

1.查看

2.创建索引

(五)将 nginx服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示

1.修改配置文件

2.浏览器访问查看


一、ELK概述

(一)ELK的定义

       ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。

(二)ELK工具

1.ElasticSearch

  • 是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。
  • Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信。
  • Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档。

2.Kiabana

       Kibana 通常与 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 提供图形化的 web 界面来浏览 Elasticsearch 日志数据,可以用来汇总、分析和搜索重要数据。

3.Logstash

(1)定义
  • 作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。
  • Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。
(2)插件
① input
  • 表示从数据源采集数据,常见的数据源如Kafka、日志文件等
  • file   beats   kafka   redis   stdin
② filter

表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式

  • grok       对若干个大文本字段进行再分割成一些小字段   (?<字段名>正则表达式)   字段名: 正则表达式匹配到的内容
  • date       对数据中的时间格式进行统一和格式化
  • mutate     对一些无用的字段进行剔除,或增加字段
  • mutiline   对多行数据进行统一编排,多行合并或拆分
③ output
  • 表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
  • elasticsearch   stdout 

(三)可以添加的其它组件

1.Filebeat

(1)定义

       轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。常应用于 EFLK 架构当中。

(2)filebeat 结合 logstash 带来好处
  • 通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻 Elasticsearch 持续写入数据的压力
  • 从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取
  • 将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件
  • 使用条件数据流逻辑组成更复杂的处理管道

2.缓存/消息队列(redis、kafka、RabbitMQ等

       可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。

3.Fluentd

  • 是一个流行的开源数据收集器。由于 logstash 太重量级的缺点,Logstash 性能低、资源消耗比较多等问题,随后就有 Fluentd 的出现。相比较 logstash,Fluentd 更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为 logstash 的一种替代方案,常应用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案。
  • 在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。

(四)ELK的好处

  1. 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
  2. 往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
  3. 一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

(五)完整日志系统基本特征

  1. 收集:能够采集多种来源的日志数据
  2. 传输:能够稳定的把日志数据解析过滤并传输到存储系统
  3. 存储:存储日志数据
  4. 分析:支持 UI 分析
  5. 警告:能够提供错误报告,监控机制

(六)ELK 的工作原理

  1. 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
  2. Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
  3. Elasticsearch 对格式化后的数据进行索引和存储。
  4. Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

总结logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。

二、ELK Elasticsearch集群部署

(一)环境准备

java -version
#设置环境若没有,则可通过以下方式安装
//3个noede节点同时配置
tar -xf jdk-8u361-linux-x64.tar.gz
mkdir -p /usr/java                 #先在此目录下创建一个java目录
mv jdk1.8.0_361/ /usr/java         #将此文件移动过去vim /etc/profile.d/java.shexport JAVA_HOME=/usr/java/jdk1.8.0_361
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATHsource /etc/profile.d/java.sh      #启动此脚本

(二)部署Elasticsearch软件

1.安装elasticsearch—rpm包

安装elasticsearch—rpm包
#上传elasticsearch-6.7.2.rpm到/opt目录下
cd /opt
rpm -ivh elasticsearch-6.7.2.rpm

2.修改elasticsearch主配置文件

#修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2,Node3节点为node3
node.name: node1
node.master: true		#是否master节点,false为否
node.data: true			#是否数据节点,false为否
--33--取消注释,指定数据存放路径
path.data: /var/lib/elasticsearch
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch
--43--取消注释,避免es使用swap交换分区
bootstrap.memory_lock: true
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200					#指定es集群提供外部访问的接口
transport.tcp.port: 9300		#指定es集群内部通信接口
--68--取消注释,集群发现通过单播实现,指定要发现的节点
discovery.zen.ping.unicast.hosts: ["172.16.72.40:9300", "172.16.72.50:9300","172.16.72.60:9300"]grep -v "^#" /etc/elasticsearch/elasticsearch.yml

3.es 性能调优参数

(1)优化最大内存大小和最大文件描述符的数量
#优化最大内存大小和最大文件描述符的数量
vim /etc/security/limits.conf
......
*  soft    nofile          65536
*  hard    nofile          65536
*  soft    nproc           32000
*  hard    nproc           32000
*  soft    memlock         unlimited
*  hard    memlock         unlimitedvim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity需重启生效

(2)优化elasticsearch用户拥有的内存权限

        由于ES构建基于lucene, 而lucene设计强大之处在于lucene能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。lucene的索引文件segements是存储在单文件中的,并且不可变,对于OS来说,能够很友好地将索引文件保持在cache中,以便快速访问;因此,我们很有必要将一半的物理内存留给lucene ; 另一半的物理内存留给ES(JVM heap )。所以, 在ES内存设置方面,可以遵循以下原则:

  • 当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给操作系统,供lucene使用
  • 当机器内存大于64G时,遵循原则:建议分配给ES分配 4~32G 的内存即可,其它内存留给操作系统,供lucene使用
#优化elasticsearch用户拥有的内存权限
vim /etc/sysctl.conf
#一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
vm.max_map_count=262144sysctl -p
sysctl -a | grep vm.max_map_count

4.启动elasticsearch是否成功开启

#启动elasticsearch是否成功开启
systemctl start elasticsearch.service
systemctl enable elasticsearch.service
netstat -antp | grep 9200

5.查看节点信息

(1)查看节点 Node1、Node2、Node3的信息
浏览器访问  http://172.16.72.40:9200  、 http://172.16.72.50:9200 、http://172.16.72.60:9200
#查看节点 Node1、Node2、Node3的信息。#使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。

(2)查看群集的健康情况
浏览器访问 http://172.16.72.40:9200/_cluster/health?pretty
#查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。

(3)检查群集状态信息
浏览器访问 http://172.16.72.40:9200/_cluster/state?pretty  
#检查群集状态信息。

(三)安装 Elasticsearch-head 插件

  • Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
  • 安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
  • node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
  • phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

1.编译安装 node

yum install gcc gcc-c++ make -y
cd /opt
tar -xf node-v8.2.1.tar.gz cd node-v8.2.1/
./configure
make && make install    #如果电脑内存多 建议多核编译安装 -j 指定核数

2.安装phantomjs

#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar -xf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd /opt/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

3.安装Elasticsearch-head数据可视化工具

#上传软件包 elasticsearch-head-master.zip 到/opt
cd /opt
unzip elasticsearch-head-master.zip
cd /opt/elasticsearch-head-master/
npm install		 //安装依赖包

4.修改Elasticsearch主配置文件

vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true				#开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"			#指定跨域访问允许的域名地址为所有systemctl restart elasticsearch

5.启动elasticsearch-head服务

#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /opt/elasticsearch-head-master/
npm run start &> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt serverRunning "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100

6.通过Elasticsearch-head查看Elasticsearch信息

          通过浏览器访问 http://172.16.72.40:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。

7.插入索引

(1)创建索引
#通过命令插入一个测试索引,索引为 index-demo,类型为 test。
curl -X PUT '172.16.72.40:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
//输出结果如下:
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}

(2)浏览器访问查看索引信息
浏览器访问 http://172.16.72.40:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。
点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。创建索引
curl -X PUT[|POST] http://IP:9200/<索引名>[/<类型>/<文档ID>?pretty&pretty] \
[-H 'content-Type: application/json' -d '{"键名1":"键值","键名2":"键值"}']删除索引
curl -X DELETE http://IP:9200/<索引名>[,<索引名2>,....]查看索引配置
curl -X GET http://IP:9200/<索引名>/_settings修改索引配置
curl -X PUT http://IP:9200/<索引名>/_settings \
-H 'content-Type: application/json' -d '{"键名":"键值"}'创建索引别名
curl -X POST http://IP:9200/_aliases \
-H 'content-Type: application/json' -d '{"actions":[{"add":{"index":"索引名","alias":"索引别名"}}]}'删除索引别名
curl -X POST http://IP:9200/_aliases \
-H 'content-Type: application/json' -d '{"actions":[{"remove":{"index":"索引名","alias":"索引别名"}}]}'

三、 ELK Logstash 部署

(一)安装nginx服务并启动

(二)安装Java环境

tar -xf jdk-8u361-linux-x64.tar.gz
mkdir -p /usr/java                 #先在此目录下创建一个java目录
mv jdk1.8.0_361/ /usr/java         #将此文件移动过去vim /etc/profile.d/java.shexport JAVA_HOME=/usr/java/jdk1.8.0_361
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATHsource /etc/profile.d/java.sh      #启动此脚本
java -version

(三)安装logstash

#上传软件包 logstash-6.7.2.rpm 到/opt目录下
cd /opt
rpm -ivh logstash-6.7.2.rpm                          
systemctl start logstash.service                      
systemctl enable logstash.serviceln -s /usr/share/logstash/bin/logstash /usr/local/bin/

(四)测试logstash

1.使用 rubydebug 输出详细格式显示

logstash -e 'input { stdin{} } output { stdout{} }'

2.浏览器访问查看索引信息

(五)定义 logstash配置文件

1.修改 Logstash 配置文件

让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。

chmod +r /var/log/messages					#让 Logstash 可以读取日志cd /etc/logstash/conf.d/
vim system.conf
input {file{path =>"/var/log/messages"type =>"system"start_position =>"beginning"# ignore_older => 604800sincedb_path => "/etc/logstash/sincedb_path/log_progress"add_field => {"log_hostname"=>"${HOSTNAME}"}}
}
#path表示要收集的日志的文件位置
#type是输入ES时给结果增加一个叫type的属性字段
#start_position可以设置为beginning或者end,beginning表示从头开始读取文件,end表示读取最新的,这个要和ignore_older一起使用
#ignore_older表示了针对多久的文件进行监控,默认一天,单位为秒,可以自己定制,比如默认只读取一天内被修改的文件
#sincedb_path表示文件读取进度的记录,每行表示一个文件,每行有两个数字,第一个表示文件的inode,第二个表示文件读取到的位置(byteoffset)。默认为$HOME/.sincedb*
#add_field增加属性。这里使用了${HOSTNAME},即本机的环境变量,如果要使用本机的环境变量,那么需要在启动命令上加--alow-envoutput {elasticsearch {												#输出到 elasticsearchhosts => ["172.16.72.40:9200","172.16.72.70:9200","172.16.72.80:9200"]	#指定 elasticsearch 服务器的地址和端口index =>"system-%{+YYYY.MM.dd}"							#指定输出到 elasticsearch 的索引格式}
}mkdir /etc/logstash/sincedb_path/
touch /etc/logstash/sincedb_path/log_progress
chown logstash:logstash /etc/logstash/sincedb_path/log_progresslogstash -f system.conf

(六)浏览器访问查看索引信息

四、ELK Kiabana部署

(一)安装 Kiabana

#上传软件包 kibana-6.7.2-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-6.7.2-x86_64.rpm

(二)设置Kibana的主配置文件

vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--28--取消注释,配置es服务器的ip,如果是集群则配置该集群中master节点的ip
elasticsearch.url:  ["http://172.16.72.40:9200","http://172.16.72.70:9200","http://172.16.72.80:9200"] 
--37--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
--96--取消注释,配置kibana的日志文件路径(需手动创建),不然默认是messages里记录日志
logging.dest: /var/log/kibana.log
--113--取消注释,设置为中文
i18n.locale: "zh-CN"

(三)创建日志文件,启动 Kibana 服务

touch /var/log/kibana.log
chown kibana:kibana /var/log/kibana.logsystemctl start kibana.service
systemctl enable kibana.servicenetstat -natp | grep 5601

(四)验证Kibana

1.查看

2.创建索引

浏览器访问 http://172.16.72.40:5601
第一次登录需要添加一个 Elasticsearch 索引:
Management -> Index Pattern -> Create index pattern
Index pattern 输入:system-*	#在索引名中输入之前配置的 Output 前缀“system”Next step -> Time Filter field name 选择 @timestamp -> Create index pattern单击 “Discover” 按钮可查看图表信息及日志信息。
数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果

(五)将 nginx服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示

1.修改配置文件

vim /etc/logstash/conf.d/nginx_log.conf
input {file{path => "/usr/local/nginx/logs/access_log"type => "access"start_position => "beginning"}file{path => "/usr/local/nginx/logs/error_log"type => "error"start_position => "beginning"}
}
output {if [type] == "access" {elasticsearch {hosts => ["172.16.72.40:9200","172.16.72.70:9200","172.16.72.80:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}if [type] == "error" {elasticsearch {hosts => ["172.16.72.40:9200","172.16.72.70:9200","172.16.72.80:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}
}cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf

2.浏览器访问查看

浏览器访问 http://172.16.72.40:9100 查看索引是否创建浏览器访问 http://172.16.72.40:5601 登录 Kibana,单击“Index Pattern -> Create Index Pattern”按钮添加索引, 在索引名中输入之前配置的 Output 前缀 apache_access-*,并单击“Create”按钮。在用相同的方法添加 apache_error-*索引。
选择“Discover”选项卡,在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索引, 可以查看相应的图表及日志信息。

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

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

相关文章

快速排序(三)——hoare法

目录 ​一.前言 二.快速排序 hoare排法​ 三.结语 一.前言 本文给大家带来的是快速排序&#xff0c;快速排序是一种很强大的排序方法&#xff0c;相信大家在学习完后一定会有所收获。 码字不易&#xff0c;希望大家多多支持我呀&#xff01;&#xff08;三连&#xff0b;关…

Spring Boot3整合Druid(监控功能)

目录 1.前置条件 2.导依赖 错误依赖&#xff1a; 正确依赖&#xff1a; 3.配置 1.前置条件 已经初始化好一个spring boot项目且版本为3X&#xff0c;项目可正常启动。 作者版本为3.2.2最新版 2.导依赖 错误依赖&#xff1a; 这个依赖对于spring boot 3的支持不够&#…

H5嵌入小程序适配方案

时间过去了两个多月&#xff0c;2024已经到来&#xff0c;又老了一岁。头发也掉了好多。在这两个月时间里都忙着写页面&#xff0c;感觉时间过去得很快。没有以前那么轻松了。也不是遇到了什么难点技术&#xff0c;而是接手了一个很烂得项目。能有多烂&#xff0c;一个页面发起…

开源无代码应用程序生成器Saltcorn

什么是 Saltcorn &#xff1f; Saltcorn 是一个无需编写任何代码即可构建数据库 Web 应用程序的平台。它配备了一个吸睛的仪表板&#xff0c;丰富的生态系统、视图生成器以及支持主题的界面&#xff0c;使用直观的点击、拖放用户界面来构建整个应用程序。 软件的特点&#xff1…

智慧文旅运营综合平台:重塑文化旅游产业的新引擎

目录 一、建设意义 二、包含内容 三、功能架构 四、典型案例 五、智慧文旅全套解决方案 - 210份下载 在数字化浪潮席卷全球的今天&#xff0c;智慧文旅运营综合平台作为文化旅游产业与信息技术深度融合的产物&#xff0c;正逐渐显现出其强大的生命力和广阔的发展前景。 该…

海外抖音TikTok、正在内测 AI 生成歌曲功能,依靠大语言模型 Bloom 进行文本生成歌曲

近日&#xff0c;据外媒The Verge报道&#xff0c;TikTok正在测试一项新功能&#xff0c;利用大语言模型Bloom的AI能力&#xff0c;允许用户上传歌词文本&#xff0c;并使用AI为其添加声音。这一创新旨在为用户提供更多创作音乐的工具和选项。 Bloom 是由AI初创公司Hugging Fac…

C语言——内存函数介绍和模拟实现(memcpy、memmove、memset、memcmp)

之前我们讲过一些字符串函数&#xff08;http://t.csdnimg.cn/ZcvCo&#xff09;&#xff0c;今天我们来讲一讲几个内存函数&#xff0c;那么可能有人要问了&#xff0c;都有字符串函数了&#xff0c;怎么又来个内存函数&#xff0c;这不是一样的么&#xff1f; 我们要知道之前…

第十二站(20天):C++泛型编程

模板 C提供了模板(template)编程的概念。所谓模板&#xff0c;实际上是建立一个通用函数或类&#xff0c; 其 类内部的类型和函数的形参类型不具体指定 &#xff0c;用一个虚拟的类型来代表。这种通用的方式称 为模板。 模板是泛型编程的基础, 泛型编程即以一种独立于任何特定…

C++面试:跳表

目录 跳表介绍 跳表的特点&#xff1a; 跳表的应用场景&#xff1a; C 代码示例&#xff1a; 跳表的特性 跳表示例 总结 跳表&#xff08;Skip List&#xff09;是一种支持快速搜索、插入和删除的数据结构&#xff0c;具有相对简单的实现和较高的查询性能。下面是跳表…

职业规划,软件开发工程师的岗位任职资格

软件工程师是指从事软件开发的人&#xff0c;主要的工作涉及到项目培训和项目设计两个方面。在实际工作中&#xff0c;软件工程师是一个广义的概念&#xff0c;包括了很多与软件相关的人员。除开最基础的编程语言&#xff0c;还有数据库语言等等。从事这份工作&#xff0c;需要…

记录一下uniapp 集成腾讯im特别卡(已解决)

uniapp的项目运行在微信小程序 , 安卓 , ios手机三端 , 之前这个项目集成过im,不过版本太老了,0.x的版本, 现在需要添加客服功能,所以就升级了 由于是二开 , 也为了方便 , 沿用之前的webview嵌套腾讯IM的方案 , 选用uniapp集成ui ,升级之后所有安卓用户反馈点击进去特别卡,几…

HR人才测评,如何做技术研发人员基本素质测评?

技术研发人员的基本素质测评&#xff0c;可以从以下几个方面考虑&#xff1a; 1. 技术能力&#xff1a;首要的因素是技术能力&#xff0c;包括编程能力、算法能力、架构设计能力、代码调试和优化能力等。在测评中可以通过技术测试、编程练习、项目经验等方式来考察。 2. 学习…

Java - 深入理解加密解密和签名算法

文章目录 应用的接口安全性问题可能来源加密解密Why保护数据隐私防止未经授权的访问防止数据泄露 对称加密 VS 单向加密 VS 非对称加密一、对称加密二、单向加密&#xff08;哈希加密&#xff09;三、非对称加密 常用的对称加密算法1. AES&#xff08;高级加密标准&#xff09;…

Django从入门到精通(二)

目录 三、视图 3.1、文件or文件夹 3.2、相对和绝对导入urls 3.3、视图参数requests 3.4、返回值 3.5、响应头 3.6、FBV和CBV FBV 四、静态资源 4.1、静态文件 4.2、媒体文件 五、模板 5.1、寻找html模板 5.2、模板处理的本质 5.3、常见模板语法 5.4、内置模板函…

对称密码算法有什么优点

对称密码算法是一种加密和解密数据的方法&#xff0c;其中加密和解密使用相同的密钥。这种方法的一个关键特点是加密和解密的速度非常快&#xff0c;因此它在许多需要高速加密的应用中非常有用。 对称密码算法的优点主要在于其效率和安全性。由于加密和解密使用相同的密钥&…

自定义注解与拦截器实现不规范sql拦截(拦截器实现篇)

最近考虑myBatis中sql语句使用规范的问题&#xff0c;如果漏下条件或者写一些不规范语句会对程序性能造成很大影响。最好的方法就是利用代码进行限制&#xff0c;通过拦截器进行sql格式的判断在自测环节就能找到问题。写了个简单情景下的demo&#xff0c;并通过idea插件来将myB…

UE5 Windows打包时报错“SDK Not Found”解决方案

在Unreal Engine 5.0.3 Windows平台下打包时报错&#xff1a;“Windows的SDK未正常安装&#xff0c;而其是生成数据的必需项。请检查主工具栏中“启动“菜单SDK部分来更新SDK。” 解决方案&#xff1a; 1、打开 Visual Studio Installer&#xff0c;点击“修改”按钮&#xf…

EtherNet/IP开发:C++搭建基础模块,EtherNet/IP源代码

这里是CIP资料的协议层级图&#xff0c;讲解协议构造。 ODVA&#xff08;www.ODVA.org&#xff09;成立于1995年&#xff0c;是一个全球性协会&#xff0c;其成员包括世界领先的自动化公司。结合其成员的支持&#xff0c;ODVA的使命是在工业自动化中推进开放、可互操作的信息和…

到店商详架构变迁

一、项目背景 到店商详是平台为京东到店业务提供的专属商详页面&#xff0c;将传统电商购物路径打造成以LBS门店属性的本地生活服务交易链路。 二、架构变迁 1、 主站商详扩展点 **优点&#xff1a;**到店侧仅关注业务&#xff0c;无需过度关注服务部署、性能优化等。 **缺…

数据结构与算法(一)线性表

逻辑结构 逻辑结构有以下几种关系 没关系 一对一关系 一对多关系 多对多关系 a是b的前驱&#xff0c;c是b的后继 该四种关系有以下别名 集合 线性表 树 图 …