Docker搭建ELKF日志分析系统

news2025/1/16 22:00:46

Docker搭建ELKF日志分析系统

文章目录

  • Docker搭建ELKF日志分析系统
    • 资源列表
    • 基础环境
    • 一、系统环境准备
      • 1.1、创建所需的映射目录
      • 1.2、修改系统参数
      • 1.3、单击创建elk-kgc网络桥接
    • 二、基于Dockerfile构建Elasticsearch镜像
      • 2.1、创建Elasticsearch工作目录
      • 2.2、上传资源到指定工作路径
      • 2.3、编写Dockerfile文件
      • 2.4、构建Elasticsearch镜像
    • 三、基于Dockerfile构建Kibana镜像
      • 3.1、创建Kibana工作目录
      • 3.2、上传资源到指定工作目录
      • 3.3、编写Dockerfile文件
      • 3.4、构建Kibana镜像
    • 四、基于Dockerfile构建Logstash镜像
      • 4.1、创建Logstash工作目录
      • 4.2、编写Dockerfile文件
      • 4.3、创建CMD运行的脚本文件
      • 4.4、上传资源到指定工作目录
      • 4.5、构建Logstash镜像
      • 4.6、logstash配置文件详解
        • 4.6.1、关于filter部分
        • 4.6.2、关于output部分
    • 五、基于Dockerfile构建Filebeat镜像
      • 5.1、创建Filebeat工作目录
      • 5.2、编写Dockerfile文件
      • 5.3、创建CMD运行的脚本文件
      • 5.4、上传资源到指定工作目录
      • 5.5、构建Filebeat镜像
      • 5.6、Filebeat.yml文件详解
    • 六、启动Nginx容器作为日志输入源
    • 七、启动Filebeat+ELK日志收集环境
      • 7.1、启动Elasticsearch
      • 7.2、启动Kibana
      • 7.3、启动Logstash
      • 7.4、启动Filebeat
    • 八、Kibana Web管理
      • 8.1、访问Kibana
    • 九、Kibana图示分析

资源列表

操作系统配置主机名IP所需软件
CentOS 7.94C8Gdocker192.168.93.165Docker-ce 26.1.2

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
  • 修改主机名
hostnamectl set-hostname docker

一、系统环境准备

  • 基于Docker环境部署ELKF日志分析系统,实现日志分析功能

1.1、创建所需的映射目录

# 根据实际情况做修改
[root@docker ~]# mkdir -p /var/log/elasticsearch
[root@docker ~]# chmod -R 777 /var/log/elasticsearch/

1.2、修改系统参数

# 定义了一个进程可以拥有的最大内存映射区域数
[root@docker ~]# echo "vm.max_map_count=655360" >> /etc/sysctl.conf 
[root@docker ~]# sysctl -p
vm.max_map_count = 655360

# 配置用户和系统级的资源限制。修改的内容立即生效(严谨)
[root@docker ~]# cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 63335
* soft memlock unlimited
* hard memlock unlimited
EOF

1.3、单击创建elk-kgc网络桥接

[root@docker ~]# docker network create elk-kgc
b8b1b7e36412169d689c39b39b5624c79f8fe0698a3c7b95dc1c78852285644e
[root@docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
e8a2cadd9616   bridge    bridge    local
b8b1b7e36412   elk-kgc   bridge    local
3566b89c775b   host      host      local
a5914394299b   none      null      local

二、基于Dockerfile构建Elasticsearch镜像

  • 执行步骤如下:

2.1、创建Elasticsearch工作目录

[root@docker ~]# mkdir -p /root/elk/elasticsearch
[root@docker ~]# cd /root/elk/elasticsearch/

2.2、上传资源到指定工作路径

  • 上传Elasticsearch的源码包和Elasticsearch配置文件到/root/elk/elasticsearch目录下,所需文件如下
[root@docker elasticsearch]# ll
total 27872
-rw-r--r-- 1 root root 28535876 Jun  6 22:45 elasticsearch-6.1.0.tar.gz
-rw-r--r-- 1 root root     3017 Jun  6 22:44 elasticsearch.yml

# 配置文件内容yml如下
[root@docker elasticsearch]# cat elasticsearch.yml | grep -v "#"
cluster.name: kgc-elk
node.name: node-1
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false 
network.host: 0.0.0.0
http.port: 9200

2.3、编写Dockerfile文件

[root@docker elasticsearch]# cat Dockerfile 
FROM centos:7
MAINTAINER wzh@kgc.com
RUN yum -y install java-1.8.0-openjdk vim telnet lsof
ADD elasticsearch-6.1.0.tar.gz /usr/local/
RUN cd /usr/local/elasticsearch-6.1.0/config
RUN mkdir -p /data/behavior/log-node1
RUN mkdir /var/log/elasticsearch
COPY elasticsearch.yml /usr/local/elasticsearch-6.1.0/config/
RUN useradd es && chown -R es:es /usr/local/elasticsearch-6.1.0/
RUN chmod +x /usr/local/elasticsearch-6.1.0/bin/*
RUN chown -R es:es /var/log/elasticsearch/
RUN chown -R es:es /data/behavior/log-node1/
RUN sed -i "s/-Xms1g/-Xms2g/g" /usr/local/elasticsearch-6.1.0/config/jvm.options
RUN sed -i "s/-Xmx1g/-Xmx2g/g" /usr/local/elasticsearch-6.1.0/config/jvm.options
EXPOSE 9200
EXPOSE 9300
CMD su es /usr/local/elasticsearch-6.1.0/bin/elasticsearch

2.4、构建Elasticsearch镜像

[root@docker elasticsearch]# docker build -t elasticsearch .

三、基于Dockerfile构建Kibana镜像

  • 执行步骤如下:

3.1、创建Kibana工作目录

[root@docker ~]# mkdir -p /root/elk/kibana

3.2、上传资源到指定工作目录

  • 上传kibana的源码包到/root/elk/kibana目录下
[root@docker ~]# ll /root/elk/kibana/
total 64404
-rw-r--r-- 1 root root 65947685 Jun  6 23:09 kibana-6.1.0-linux-x86_64.tar.gz

3.3、编写Dockerfile文件

[root@docker ~]# cd /root/elk/kibana/
[root@docker kibana]# cat Dockerfile 
FROM centos:7
MAINTAINER wzh@kgc.com
RUN yum -y install java-1.8.0-openjdk vim telnet lsof
ADD kibana-6.1.0-linux-x86_64.tar.gz /usr/local/
RUN cd /usr/local/kibana-6.1.0-linux-x86_64
RUN sed -i "s/#server.name: \"your-hostname\"/server.name: "kibana-hostname"/g" /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
RUN sed -i "s/#server.port: 5601/server.port: \"5601\"/g" /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
RUN sed -i "s/#server.host: \"localhost\"/server.host: \"0.0.0.0\"/g" /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
RUN sed -ri '/elasticsearch.url/ s/^#|"//g' /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
RUN sed -i "s/localhost:9200/elasticsearch:9200/g" /usr/local/kibana-6.1.0-linux-x86_64/config/kibana.yml
EXPOSE 5601
CMD ["/usr/local/kibana-6.1.0-linux-x86_64/bin/kibana"]

3.4、构建Kibana镜像

[root@docker kibana]# docker build -t kibana .

四、基于Dockerfile构建Logstash镜像

  • 执行步骤如下

4.1、创建Logstash工作目录

[root@docker ~]# mkdir -p /root/elk/logstash

4.2、编写Dockerfile文件

[root@docker ~]# cd /root/elk/logstash/
[root@docker logstash]# cat Dockerfile 
FROM centos:7
MAINTAINER wzh@kgc.com
RUN yum -y install java-1.8.0-openjdk vim telnet lsof
ADD logstash-6.1.0.tar.gz /usr/local/
RUN cd /usr/local/logstash-6.1.0/
ADD run.sh /run.sh
RUN chmod 755 /*.sh
EXPOSE 5044
CMD ["/run.sh"]

4.3、创建CMD运行的脚本文件

[root@docker logstash]# cat run.sh
#!/bin/bash
/usr/local/logstash-6.1.0/bin/logstash -f /opt/logstash/conf/nginx-log.conf

4.4、上传资源到指定工作目录

  • 上传logstash的源码包到/root/elk/logstash目录下,所需文件如下
[root@docker logstash]# ll
total 107152
-rw-r--r-- 1 root root       230 Jun  7 00:41 Dockerfile
-rw-r--r-- 1 root root 109714065 Jun  7 00:40 logstash-6.1.0.tar.gz
-rw-r--r-- 1 root root        88 Jun  7 00:42 run.sh

4.5、构建Logstash镜像

[root@docker logstash]# docker build -t logstash .

4.6、logstash配置文件详解

  • logstash功能非常强大,不仅仅是分析传入的文本,还可以作监控与告警之用。现在介绍logstash的配置文件其使用经验

  • logstash默认的配置文件不需要修改,只需要启动的时候指定一个配置文件即可!比如run.sh脚本中指定/opt/logstash/conf/nginx-log.conf。注意:文件包含了input、filter、output三部分,其中filter不是必须的

[root@docker ~]# mkdir -p /opt/logstash/conf
[root@docker ~]# vim /opt/logstash/conf/nginx-log.conf
input {
  beats {
    port => 5044
  }
}

filter {
    if "www-bdqn-cn-pro-access" in [tags] {
        grok {
                match => {"message" => '%{QS:agent} \"%{IPORHOST:http_x_forwarded_for}\" - \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:http_version})?|-)\" %{NUMBER:response} %{NUMBER:bytes} %{QS:referrer} %{IPORHOST:remote_addr}:%{POSINT:port} %{NUMBER:remote_addr_response} %{BASE16FLOAT:request_time}'}
        }
    }
    urldecode {all_fields => true}
    date {
      match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
    }
    useragent {
      source => "agent"
      target => "ua"
    }
}


output {
  if "www-bdqn-cn-pro-access" in [tags] {
    elasticsearch {
      hosts => ["elasticsearch:9200"]
      manage_template => false
      index => "www-bdqn-cn-pro-access-%{+YYYY.MM.dd}"
    }
  }
}

# 注意:使用nginx-log.conf文件拷贝时,match最长的一行自动换行问题
4.6.1、关于filter部分
  • 输入和输出在logstash配置中是很简单的一步,而对数据进行匹配过滤处理显得复杂。匹配当行日志是入门水平需要掌握的,而多行甚至不规则的日志则需要ruby的协助。本例主要展示grok插件
  • 以下是某生产环境nginx的access日志格式
log_format main '"$http_user_agent""$http_x_forwarded_for" '
		'$remote_user [$time_local] "$request" '
		'$status $body_bytes_sent "$http_referer" '
		'$upstream_addr $upstream_status $upstream_response_time';
  • 下面是对应上述nginx日志格式的grok捕获语法
'%{QS:agent} \"%{IPORHOST:http_x_forwarded_for}\" - \[%{HTTPDATE:timestamp}\]
\"(?:%{WORD:verb} %{NOTSPACE:request}(?:
HTTP/%{NUMBER:http_version})?|-
)\"%{NUMBER:response}%{NUMBER:bytes}%{QS:referrer}%{IP
ORHOST:remote_addr}:%{POSINT:port}
%{NUMBER:remote_addr_response}%{BASE16FLOAT:request_ time}'

在filter段内的第一行是判断语句,如果www-bdqn-cn-pro-access自定义字符在tags内,则使用grok段内的语句对日志进行处理

  • geopi:使用GeoIP数据库对client_ip字段的IP地址进行解析,可得出该IP的经纬度、国家与城市等信息,但精确度不高,这主要依赖于GeoIP数据库
  • date:默认情况下,Elasticsearch内记录的date字段是Elasticsearch接收到该日志的时间,但在实际应用中需要修改为日志中所记录的时间。这时,需要指定记录时间的字段并指定时间格式。如果匹配成功,则会将日志的时间替换至date字段中
  • useragent:主要为webapp提供的解析,可以解析目前常见的一些useragent
4.6.2、关于output部分
  • logstash可以在上层配置一个负载调度器实现群集。在实际应用中,logstash服务需要处理多种不同类型的日志或数据。处理后的日志或数据需要存放在不同的Elasticsearch群集或索引中,需要对日志进行分类
output {
  if "www-bdqn-cn-pro-access" in [tags] {
    elasticsearch {
      hosts => ["elasticsearch:9200"]
      manage_template => false
      index => "www-bdqn-cn-pro-access-%{+YYYY.MM.dd}"
    }
  }
}

通过在output配置中设定判断语句,将处理后的数据存放到不同的索引中。而这个tags的添加有以下三种途径:

  • 在Filebeat读取数据后,向logstash发送前添加到数据中
  • logstash处理日志的时候,向tags标签添加自定义内容
  • 在logstash接收传入数据时,向tags标签添加自定义内容

从上面的输入配置文件中可以看出,这里来采用的第一种图形,在Filebeat读取数据后,向logstash发送数据前添加www-bdqn-cn-pro-access的tag

这个操作除非在后续处理数据的时候手动将其删除,否则将永久存在该数据中

Elasticsearch字段的各参数意义如下:

  • hosts:指定Elasticsearch地址,如有多个节点可用,可以设置为array模式,可实现负载均衡
  • manage_template:如果该索引没有合适的模板可用,默认情况下将由默认的模板进行管理
  • index:只当存储数据的索引

五、基于Dockerfile构建Filebeat镜像

  • 执行步骤如下:

5.1、创建Filebeat工作目录

[root@docker ~]# mkdir -p /root/elk/Filebeat

5.2、编写Dockerfile文件

[root@docker ~]# cd /root/elk/Filebeat/
[root@docker Filebeat]# cat Dockerfile 
FROM centos:7
MAINTAINER wzh@kgc.com
ADD filebeat-6.1.0-linux-x86_64.tar.gz /usr/local/
RUN cd /usr/local/filebeat-6.1.0-linux-x86_64
RUN mv /usr/local/filebeat-6.1.0-linux-x86_64/filebeat.yml /root
COPY filebeat.yml /usr/local/filebeat-6.1.0-linux-x86_64/
ADD run.sh /run.sh
RUN chmod 755 /*.sh
CMD ["/run.sh"]

5.3、创建CMD运行的脚本文件

[root@docker Filebeat]# cat run.sh
#!/bin/bash
/usr/local/filebeat-6.1.0-linux-x86_64/filebeat -e -c /usr/local/filebeat-6.1.0-linux-x86_64/filebeat.yml

5.4、上传资源到指定工作目录

  • 上传Filebeat的源码包和Filebeat配置文件到/root/elk/filebeat目录下,所需文件如下
[root@docker Filebeat]# ll
total 11660
-rw-r--r-- 1 root root      312 Jun  7 01:11 Dockerfile
-rw-r--r-- 1 root root 11926942 Jun  7 01:09 filebeat-6.1.0-linux-x86_64.tar.gz
-rw-r--r-- 1 root root      186 Jun  7 01:14 filebeat.yml
-rw-r--r-- 1 root root      118 Jun  7 01:12 run.sh

5.5、构建Filebeat镜像

[root@docker Filebeat]# docker build -t filebeat .

5.6、Filebeat.yml文件详解

  • Filebeat配置我呢见详解查看Filebeat的配置文件
[root@docker Filebeat]# cat filebeat.yml 
filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/nginx/www.bdqn.cn-access.log
  tags: www-bdqn-cn-pro-access 
  clean_*: true

output.logstash:
  hosts: ["logstash:5044"]

# 每个Filebeat可以根据需求的不同拥有一个或多个prospectors。其他配置信息含义如下:
1、input_type:输入的内容,主要为逐行读取的log格式与标准输入stdin
2、paths:指定需要读取的日志的路径,如果路径拥有相同的结构,则可以使用通配符
3、tags:为该路径的日志添加自定义tags
4、clean_:Filebeat在/var/lib/filebeat/registry下有个注册表文件,它记录着Filebeat读取过的文件,还有已经读取的行数等信息。如果日志文件是定时分割,而且数量会随之增加,那么该注册表文件也会慢慢增大。随着注册表的增大,会导致Filebeat检索的性能下降
5、output.logstash:定义内容输出的路径,这里主要输出到Elasticsearch
6、hosts:只当服务地址

六、启动Nginx容器作为日志输入源

  • 使用docker run命令启动一个nginx容器
[root@docker ~]# docker run -itd -p 80:80 --network elk-kgc -v /var/log/nginx:/var/log/nginx --name nginx-elk nginx:latest
  • 本地目录/var/log/nginx必须挂载到Filebeat容器中,让Filebeat可以采集到日目录
  • 手动模拟生产环境几条日志文件作为nignx容器所产生的站点日志,同样注意拷贝的时候换行问题
[root@docker nginx]# cat www.bdqn.cn-access.log 
"YisouSpider" "106.11.155.156" - [18/Jul/2020:00:00:13 +0800] "GET /applier/position?gwid=17728&qyid=122257 HTTP/1.0" 200 9197 "-" 192.168.10.131:80 2000.032
"-""162.209.213.146" - [18/Jul/2020:00:02:11 +0800] "GET //tag/7764.shtml HTTP/1.0" 200 24922 "-" 192.168.10.131:80 200 0.074
"YisouSpider" "106.11.152.248" - [18/Jul/2020:00:07:44+0800] "GET /news/201712/21424.shtml HTTP/1.0" 200 8821 "-" 192.168.10.131:80 2000.097
"YisouSpider" "106.11.158.233" - [18/Jul/2020:00:07:44+0800] "GET /news/201301/7672.shtml HTTP/1.0" 200 8666 "-" 192.168.10.131:80 2000.111
"YisouSpider" "106.11.159.250" - [18/Jul/2020:00:07:44+0800] "GET /news/info/id/7312.html HTTP/1.0" 200 6617 "-" 192.168.10.131:80 2000.339
"Mozilla/5.0 (compatible;SemrushBot/2~bl;+http://www.semrush.com/bot.html)" "46.229.168.83" - [18/Jul/2020:00:08:57+0800] "GET /tag/1134.shtml HTTP/1.0"2006030"-"192.168.10.131:80 200 0.079

七、启动Filebeat+ELK日志收集环境

  • 注意启动顺序和查看启动日志

7.1、启动Elasticsearch

[root@docker ~]# docker run -itd -p 9200:9200 -p 9300:9300 --network elk-kgc -v /var/log/elasticsearch:/var/log/elasticsearch --name elasticsearch elasticsearch

7.2、启动Kibana

[root@docker ~]# docker run -itd -p 5601:5601 --network elk-kgc --name kibana kibana:latest 

7.3、启动Logstash

[root@docker ~]# docker run -itd -p 5044:5044 --network elk-kgc -v /opt/logstash/conf:/opt/logstash/conf --name logstash logstash:latest 

7.4、启动Filebeat

[root@docker ~]# docker run -itd --network elk-kgc -v /var/log/nginx:/var/log/nginx --name filebeat filebeat:latest

八、Kibana Web管理

  • 因为kibana的数据需要从Elasticsearch中读取,所以需要Elasticsearch中有数据才能创建索引,创建不同的索引区分不同的数据集

8.1、访问Kibana

  • 浏览器输入http://192.168.93.165:5601访问kibana控制台。在Management中找到Indexpatterns,单击进去可以看到类似以下图片中的界面,填写www-bdqn-cn-pro-access-*
    在这里插入图片描述

  • 在TimeFilterfieldname选项框中选中@timestemp这个选项。在kibana中,默认通过时间来排序。如果将日志存放入Elasticsearch的时候没有指定@timestamp字段内容,则Elasticsearch会分配接收到的日志时的时间作为该日志@timestamp的值
    在这里插入图片描述

  • 单击**“Createindexpattern”**按钮,创建www-bdqn-cn-pro-access索引后界面效果如下
    在这里插入图片描述

  • 单击“Discover”标签,可能会看不到数据。需要将时间轴选中为“Thisyear”才可以看到的内容
    在这里插入图片描述

九、Kibana图示分析

  • 打开kibana的管理姐买你,单击“visualize”标签——Create a visualization,选择饼状图pie,添加索引www-bdqn-cn-por-access-*,点开SplitSlices,选中Terms,再从FieId选中messagekeyword,最后点击上面三角按钮即可生成可访问最多的5个公网IP地址
    在这里插入图片描述

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

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

相关文章

Maxkb玩转大语言模型

Maxkb玩转大语言模型 随着国外大语言模型llama3的发布&#xff0c;搭建本地个人免费“人工智能”变得越来越简单&#xff0c;今天博主分享使用Max搭建本地的个人聊天式对话及个人本地知识域的搭建。 1.安装Maxkb开源应用 github docker快速安装 docker run -d --namemaxkb -p 8…

被拖欠6000万,代工大厂倒闭了····

6月7日消息&#xff0c;据综合媒体报道&#xff0c;电子烟代工大厂佳斯特电子&#xff08;东莞&#xff09;发布公告&#xff0c;将自6月3日起停止一切经营活动&#xff0c;开始自行清算工作。根据佳斯特电子科技&#xff08;东莞&#xff09;有限公司的通告&#xff0c;由于公…

IP域名关系的研究与系统设计(学习某知名测绘系统)

IP域名关系库管理包括域名库检索和whois库检索&#xff0c;详情如下。 域名库检索支持以下5项功能&#xff1a; 1.通过过滤器检索 筛选条件包含IP地址、口令、工具名称、可利用的漏洞编号、创建时间&#xff1b; 2.通过关键字检索 在查询框中输入域名库名称的部分关键词&a…

基于语音识别的智能电子病历(其他)网络电话的接入

医生在使用语音识别时有以下几种方式。 医院或者医生通过接口或者网站上传语音文件医生使用电话进行录音&#xff0c;医生拨打电话进行录音。有T1线路语音卡&#xff0c;也有网络电话的接入。医生使用手机APP进行录音。 下面说一下网络电话的使用&#xff0c;&#xff08;注意…

C语言数据结构(排序算法总结)

目录 算法类型 算法比较 稳定性描述 插入排序 选择排序 冒泡排序 希尔排序 堆排序 快速排序 霍尔排序&#xff08;递归&#xff09; 挖坑法&#xff08;递归&#xff09; 双指针&#xff08;递归&#xff09; 快排(非递归) 归并排序 计数排序 总结&#xff08;速…

计算机毕业设计基于YOLOv8的头盔检测系统

1、安装Anaconda 官网下载或者哔哩哔哩有的up分享 https://www.anaconda.com/download 版本无所谓&#xff0c;安装位置不要有中文就行 2、创建环境yolov8 winR打开命令行 conda create -n yolov8 python3.9 3、打开源码 下载下来放到你想放的目录&#xff0c;直接用pyCharm或者…

华为端云一体化开发 (起步1.0)(HarmonyOS学习第七课)

官方文献&#xff1a; 为丰富HarmonyOS对云端开发的支持、实现端云联动&#xff0c;DevEco Studio推出了云开发功能&#xff0c;开发者在创建工程时选择云开发模板&#xff0c;即可在DevEco Studio内同时完成HarmonyOS应用/元服务的端侧与云侧开发&#xff0c;体验端云一体化协…

【排序】插入排序,希尔排序

前面我们讲述了冒泡排序和选择排序&#xff0c;我们本章讲的排序方法是插入排序&#xff0c;插入排序是希尔排序实现的基础函数&#xff0c;大家一定要好好理解插入排序的逻辑&#xff0c;这样才能在后面学习希尔排序的时候&#xff0c;更容易的去理解&#xff0c;我们直接开始…

Vue根据后端返回的tabList动态渲染组件信息

最近做了一个功能&#xff0c;后端根据配置信息&#xff0c;动态返回一个tabList&#xff0c;其中结构是List<String,Object> tabList; map里面的数据是 label、value 页面需要根据tablist动态渲染组件&#xff08;不同的tab都使用了组件进行了封装&#xff09; 实现效果…

[原创][Delphi多线程]TThreadedQueue的经典使用案例.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delph…

Git介绍及应用

1.简介 Git是一个分布式版本控制器&#xff0c;通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件&#xff0c;Git仓库分为两种&#xff1a; 本地仓库:开发人员自己电脑上的Git仓库远程仓库:远程服务器上的Git仓库 2.执行流程 3.Git代码托管服务…

NFT Insider #133:苏富比将拍卖BAYC系列NFT,Taiko创世NFT系列已上线

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members &#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜…

360误删掉的文件怎么恢复?3种文件找回办法!

360是一款电脑安全辅助软件&#xff0c;可以用它来清理垃圾、查杀病毒、修复系统等。然而&#xff0c;有时文件可能会被360误认为是垃圾而自动清理&#xff0c;造成重要文件丢失&#xff0c;那么360删掉的文件怎么恢复&#xff1f;下面&#xff0c;让我们一起来看看如何恢复文件…

Java面试题:Redis持久化问题

Redis持久化问题 RDB (Redis Database Backup File) Redis数据快照 将内存中的所有数据都记录到磁盘中做快照 当Redis实例故障重启时,从磁盘读取快照文件恢复数据 使用 save/bgsave命令进行手动快照 save使用主进程执行RDB,对所有命令都进行阻塞 bgsave使用子进程执行R…

Java——面向对象进阶(一)

前言 面向对象进阶(一)&#xff1a;static&#xff0c;继承&#xff0c;this和super关键字 文章目录 一、static1.1 静态变量1.2 静态方法1.3 静态变量和静态方法在内存中 二、继承2.1 概念2.2 继承的特点和能继承什么2.3 继承中的重写2.4 this和super关键字 一、static 在 Jav…

基于拓扑漏洞分析的网络安全态势感知模型

漏洞态势分析是指通过获取网络系统中的漏洞信息、拓扑信息、攻击信息等&#xff0c;分析网络资产可能遭受的安全威胁以及预测攻击者利用漏洞可能发动的攻击&#xff0c;构建拓扑漏洞图&#xff0c;展示网络中可能存在的薄弱环节&#xff0c;以此来评估网络安全状态。 在网络安…

如何使用Vuforia AR进行增强现实技术的开发?

前言 今天是坚持写博客的第17天&#xff0c;很高兴自己可以一直坚持下来。我们今天来讲讲怎么使用Vuforia AR进行增强现实的开发。 我们需要在今天的开发中用到Vuforia AR和2018版的Unity3d 什么是Vuforia AR Vuforia AR是基于实时计算摄影机影像的位置及角度&#xff0c;并…

【Kubernetes】三证集齐 Kubernetes实现资源超卖(附镜像包)

目录 插叙前言一、思考和原理二、实现步骤0. 资料包1. TLS证书签发2. 使用 certmanager 生成签发证书3. 获取secret的内容 并替换CA_BUNDLE4.部署svc deploy 三、测试验证1. 观察pod情况2. 给node 打上不需要超售的标签【可以让master节点资源不超卖】3. 资源实现超卖4. 删除还…

吴谨言墨雨背后用真诚柱铸就爆款之路

吴谨言&#xff1a;墨雨背后&#xff0c;用真诚铸就爆款之路在繁华的娱乐圈&#xff0c;每一个成功的背后隐藏着不为人知的努力和汗水。而今天&#xff0c;我们要讲述的&#xff0c;正是这样一位用真诚和执着&#xff0c;一步步走向成功的演员——吴谨言。近日&#xff0c;一则…

古字画3d立体在线数字展览馆更高效便捷

在数字时代的浪潮中&#xff0c;大连图书馆以崭新的面貌跃然屏幕之上——3D全景图书馆。这座承载着城市文化精髓与丰富知识资源的数字图书馆&#xff0c;利用前沿的三维建模技术&#xff0c;为我们呈现了一个全新的知识世界。 随时随地&#xff0c;无论您身处何地&#xff0c;只…