单机部署ELK + Filebeat 收集应用日志

news2024/9/21 18:39:00

目录

  • 前言
  • 一、ELK是什么?
  • 二、系统环境(CentOS 7)(2C4G的机器。。。)
  • 三、安装步骤
    • 3.1 安装ElasticSearch
      • 3.1.1 解压到/usr/local
      • 3.1.2 修改jvm堆配置(可选,测试服务器内存低)
      • 3.1.3 修改elasticsearch.yml
      • 3.1.4 创建es用户
      • 3.1.5 赋予es操作权限
      • 3.1.6 万事俱备
      • 3.1.7 启动问题清单
      • 3.1.8 启动成功
    • 3.2 安装Kibana
      • 3.2.1 解压到/usr/local,并赋予用户es权限
      • 3.2.2 修改kibana.yml配置
      • 3.2.3 关闭ssl配置
      • 3.2.4 使用es用户启动
      • 3.2.5 启动成功、测试
    • 3.3 Logstash安装
      • 3.3.1 解压到/usr/local
      • 3.3.2 测试配置
      • 3.3.3 多应用如何推送
      • 3.3.3 关闭logstash
      • 3.3.4 错误收集
    • 3.4 Filebeat安装
      • 3.4.1 解压(后续在各服务器下安装,把对应日志推送到logstash或者直接推给ES即可)
      • 3.4.2 新增测试配置
      • 3.4.3 关闭Filebeat
      • 3.4.4 收尾工作
  • 四、其他操作
    • 4.1 获取所有索引
    • 4.2 删除索引


前言

单机部署ELK + Filebeat 收集应用日志。


一、ELK是什么?

ELK 是一个开源的数据分析和日志管理解决方案,全称为 Elasticsearch, Logstash, Kibana。ELK Stack 主要用于收集、管理和分析日志数据,帮助用户理解和洞察大型数据集。以下是各个组件的功能概述:

  • Elasticsearch:这是一个基于 Lucene 的全文搜索引擎和分布式索引引擎,用于存储、管理和搜索大量数据。它提供了一个用于查询和分析数据的 RESTful API,并利用其强大的搜索和分析功能,帮助用户处理和理解大规模数据集。
  • Logstash:这是一个强大的数据处理工具,用于实时地收集、解析、过滤和转换日志数据。Logstash 可以从各种源收集数据,包括文件、网络流、数据库、API 调用等,并通过一系列插件进行过滤、转换和格式化,以便更容易地处理和分析数据。
  • Kibana:这是一个用于管理和可视化 Elasticsearch 数据的 Web 界面。Kibana 提供了几种方式来查看和探索数据,包括可视化图表、地图、时间序列图和搜索功能。它可以帮助用户快速提取洞察,提供了数据探索、分析和报告的界面。

Filebeat 是 Elastic Stack(ELK)中的一个组件,用于轻量级的日志文件收集和转发。它能够实时监控指定的日志文件,并将其发送到 Elasticsearch 或 Logstash 进行处理和分析。

ELK和Filebeat的关系

二、系统环境(CentOS 7)(2C4G的机器。。。)

cat /etc/os-release

在这里插入图片描述

cat /etc/centos-release

在这里插入图片描述

三、安装步骤

  • ElasticSearch 下载地址 https://www.elastic.co/cn/downloads/elasticsearch
  • Kibana 下载地址 https://www.elastic.co/cn/downloads/kibana
  • Logstash 下载地址 https://www.elastic.co/cn/downloads/logstash
  • Filebeat 下载地址 https://www.elastic.co/cn/downloads/beats/filebeat

在这里插入图片描述
安装的方式很多,这里提供的是下载包的方式,上传到服务器里,解压改配置再后台启动。

3.1 安装ElasticSearch

ElasticSearch 8.0以上,和其他低版本最大的区别就是,默认开启安全防护。kibana访问时需要token访问。
首次启动Elasticsearch时,默认情况下会启用并配置安全功能。以下安全配置将自动进行:
启用身份验证和授权,并为弹性内置超级用户生成密码。
为传输层和HTTP层生成TLS的证书和密钥,并使用这些密钥和证书启用和配置TLS。
为Kibana生成一个注册令牌,有效期为30分钟。

开发文档: https://www.elastic.co/guide/en/elasticsearch/reference/8.14/index.html

3.1.1 解压到/usr/local

tar -zxvf elasticsearch-8.14.3-linux-x86_64.tar.gz -C /usr/local

3.1.2 修改jvm堆配置(可选,测试服务器内存低)

vim /usr/local/elasticsearch-8.14.3/config/jvm.options

修改配置

-Xms512m
-Xmx512m

3.1.3 修改elasticsearch.yml

vim /usr/local/elasticsearch-8.14.3/config/elasticsearch.yml

修改配置

# 集群名称
cluster.name: my-application
# 节点名称
node.name: node-1
# 指定访问主机 设置成0.0.0.0可以被任何机器访问
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]

# 关闭安全配置(这里为了后面配置少些,安全性低)
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: false
# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
  enabled: false

3.1.4 创建es用户

不可使用root用户直接启动elasticsearch,需要创建一个用户来启动ES。

java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Elasticsearch.initializeNatives(Elasticsearch.java:286) ~[elasticsearch-8.14.3.jar:?]
        at org.elasticsearch.bootstrap.Elasticsearch.initPhase2(Elasticsearch.java:169) ~[elasticsearch-8.14.3.jar:?]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:74) ~[elasticsearch-8.14.3.jar:?]
# 创建用户es
groupadd es
useradd -g es es
passwd es

3.1.5 赋予es操作权限

chown -R es:es /usr/local/elasticsearch-8.14.3/

3.1.6 万事俱备

cd /usr/local/elasticsearch-8.14.3/bin/
# 切换es用户
su es
# 启动(第一次建议这个,可以看看输出)
./elasticsearch
# 后台启动
nohup ./elasticsearch &
# 不需要nohup.out文件 执行命令
nohup ./elasticsearch > /dev/null 2>&1 &
# 查看启动的进程
ps -ef | grep elasticsearch

在这里插入图片描述

3.1.7 启动问题清单

bootstrap check failure [1] of [1]: 
max virtual memory areas vm.max_map_count [65530] is too low, 
increase to at least [262144];
# 切换到root用户:
su root

sysctl -w vm.max_map_count=262144

# 查看结果:
sysctl -a|grep vm.max_map_count

# 切换用户,再次启动
su es
# 进入到bin目录,启动命令
./elasticsearch

目前就碰到这问题,待大家补充。

3.1.8 启动成功

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.

ℹ️  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  Q1dedsRMdwW3TlCurM6S

ℹ️  HTTP CA certificate SHA-256 fingerprint:
  a760b450bc408134a581a7dae6f10c934d12f03490464bbe6bf03f1f8a29f1ee

ℹ️  Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTAuMC4xMi4yOjkyMDAiXSwiZmdyIjoiYTc2MGI0NTBiYzQwODEzNGE1ODFhN2RhZTZmMTBjOTM0ZDEyZjAzNDkwNDY0YmJlNmJmMDNmMWY4YTI5ZjFlZSIsImtleSI6IkQxVm1CcEVCUUoyYWhtcGZFQjFHOnBRSFg3YTU3VDlXQXVTTUZDYlp3UncifQ==

ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTAuMC4xMi4yOjkyMDAiXSwiZmdyIjoiYTc2MGI0NTBiYzQwODEzNGE1ODFhN2RhZTZmMTBjOTM0ZDEyZjAzNDkwNDY0YmJlNmJmMDNmMWY4YTI5ZjFlZSIsImtleSI6IkRWVm1CcEVCUUoyYWhtcGZFQjA4Onl2ODNUM29VVEhXcWhXNi1Ub3BjYncifQ==

  If you're running in Docker, copy the enrollment token and run:
  `docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.14.3`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

查看ElasticSearch是否启动成功。

curl 127.0.0.1:9200
{
  "name" : "node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "VlzgSvECRRqg8iFbmzB1Tw",
  "version" : {
    "number" : "8.14.3",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "d55f984299e0e88dee72ebd8255f7ff130859ad0",
    "build_date" : "2024-07-07T22:04:49.882652950Z",
    "build_snapshot" : false,
    "lucene_version" : "9.10.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

3.2 安装Kibana

3.2.1 解压到/usr/local,并赋予用户es权限

tar -zxvf kibana-8.14.3-linux-x86_64.tar.gz -C /usr/local

chown -R es:es /usr/local/kibana-8.14.3/

3.2.2 修改kibana.yml配置

vim /usr/local/kibana-8.14.3/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

3.2.3 关闭ssl配置

vim /usr/local/kibana-8.14.3/config/node.options
# 注释掉
## --openssl-legacy-provider

3.2.4 使用es用户启动

# kibana也不能使用root启动
su es

nohup ./kibana &
# 1、启动时的进程号可以直接kill命令停止

在这里插入图片描述

# 2、或者使用,找到进程号再kill
ps aux | grep /src/cli/dist 

在这里插入图片描述

3.2.5 启动成功、测试

在这里插入图片描述

3.3 Logstash安装

官方文档:https://www.elastic.co/guide/en/logstash/current/first-event.html

Logstash提供了一个灵活的数据处理平台,可以用于过滤、解析、聚合、转换数据,并且支持多种插件来实现复杂的处理逻辑。这包括但不限于时间戳解析、用户自定义的脚本、日志格式转换、字段重命名等。

原理:
Logstash 事件处理管道有三个阶段:输入 → 过滤器 → 输出。

在这里插入图片描述

3.3.1 解压到/usr/local

tar -zxvf logstash-8.14.3-linux-x86_64.tar.gz -C /usr/local

3.3.2 测试配置

配置测试文件:进入logstash-8.14.3文件夹下进行配置

vim /usr/local/logstash-8.14.3/config/privacy_phone.logstash.conf

# logstash配置文件: privacy_phone.logstash.conf
input {
  stdin {
    id => "stdin_input"
  }
}

filter {
  grok {
    match => { "message" => "(?<phone_number>\d{11})" }
  }

  if [phone_number] {
    mutate {
      add_field => { "masked_phone_number" => "%{phone_number}" }
    }
    ruby {
      code => "
        event.set('masked_phone_number', event.get('masked_phone_number').gsub(/(\d{3})\d{4}(\d{4})/, '\\1****\\2'))
      "
    }
    mutate {
      remove_field => ["phone_number"]
    }
  }
}
#输出到ElasticSearch
output {
  elasticsearch {
    hosts => ["http://127.0.0.1:9200"]
    # 推送到 ElasticSearch的哪个索引
    index => "testphone-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

#输出到控制台
#output {
#  stdout {
#    codec => rubydebug
#  }
#}
#进入bin目录执行
./logstash -f /usr/local/logstash-8.14.3/config/privacy_phone.logstash.conf

启动成功后,输入文本。

在这里插入图片描述

进入kibana : http://ip地址:5601/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这块例子有点生硬,但主旨就是logstash是可以处理数据的。
【开发文档写的很详细,无非就是数据输入,经过过滤器处理,再输出数据的流程】

3.3.3 多应用如何推送

vim /usr/local/logstash-8.14.3/config/multiple.logstash.conf

input {
  beats {
    port => 5044
  }
}

output {
  if [fields][appname] == "app1" {
    elasticsearch {
      hosts => ["localhost:9200"]
      index => "app1-%{+YYYY.MM.dd}"
    }
  }
}

input {
  beats {
    port => 5045
  }
}

output {
  if [fields][appname] == "app2" {
    elasticsearch {
      hosts => ["localhost:9200"]
      index => "app2-%{+YYYY.MM.dd}"
    }
  }
}
#进入bin目录执行
nohup ./logstash -f /usr/local/logstash-8.14.3/config/multiple.logstash.conf & 

3.3.3 关闭logstash

ps -ef|grep logstash

kill 进程号

3.3.4 错误收集

org.jruby.exceptions.SystemExit: (SystemExit) exit

在这里插入图片描述
提示找不到文件、修改路径即可。

3.4 Filebeat安装

3.4.1 解压(后续在各服务器下安装,把对应日志推送到logstash或者直接推给ES即可)

tar -zxvf filebeat-8.14.3-linux-x86_64.tar.gz

# 进入文件夹
cd filebeat-8.14.3-linux-x86_64

3.4.2 新增测试配置

# 新增app1_filebeat.yml
vim app1_filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /opt/elk/logs1/*.log
  fields:
    appname: app1 # 标志

output.logstash:
  hosts: ["127.0.0.1:5044"]
# 按配置文件启动
nohup ./filebeat -e -c app1_filebeat.yml &

# 模拟日志生成
mkdir /opt/elk/logs1/

cd /opt/elk/logs1/

vim info.2024-08-02.log

# 插入以下数据模拟正常日志
我是日志文件11111111111111111111111111111啊

filebeat控制台输出。
在这里插入图片描述

在这里插入图片描述
kibana再对应创建下就能看见数据了。

(app2也一样,filebeat复制一份改下配置,appname:改成app2,filebeat推到logstash就会被推到对应的index)

3.4.3 关闭Filebeat

ps -ef | grep filebeat

kill 进程号

3.4.4 收尾工作

关于java的一些错误日志,按以上配置收集到es中时,因为是逐行收集,看着就难以排查问题,例如

[2024-08-02 09:16:00.305] [xxl-job, executor ExecutorRegistryThread] ERROR c.x.job.core.util.XxlJobRemotingUtil : Connection refused (Connection refused)
java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:607)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
	at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
	at sun.net.www.http.HttpClient.New(HttpClient.java:339)
	at sun.net.www.http.HttpClient.New(HttpClient.java:357)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
	at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:99)
	at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:42)
	at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
	at java.lang.Thread.run(Thread.java:748)

在kibana中显示为:
在这里插入图片描述

修改filebeat配置

vim app1_filebeat.yml
filebeat.inputs:
- input_type: log
  enabled: true
  paths:           
    - /opt/elk/logs1/*.log
  encoding: utf-8
  fields: 
    appname: app1 # logstash可以用此字段判断
  multiline:
    pattern: '^\d{4}-\d{1,2}-\d{1,2}' # 匹配以 YYYY-MM-DD 开头的行 
    negate: true # 是否匹配 pattern 的情况
    match: after # 将其追加到上一行之后 pattern + negate + match 组合成一条语意为: 如果匹配 YYYY-MM-DD HH:mm:ss 开头的行,则将其合并到当前行的上一行
    max_lines: 200 # 最多匹配多少行,如果超出最大行数,则丢弃多余的行(默认500)
    timeout: 6s # 一次合并事件的超时时间,默认为 5s
output.logstash:
  hosts: ["127.0.0.1:5044"]

在日志文件中插入以上报错信息,再次查看。
在这里插入图片描述

四、其他操作

4.1 获取所有索引

在这里插入图片描述

GET /_cat/indices?v

在这里插入图片描述

4.2 删除索引

DELETE /app1-2024.08.02

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

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

相关文章

C++初阶:类和对象(下)

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 1.再探构造函数 1.1构造函数体内赋值 之前…

Parsing error: The keyword ‘interface‘ is reserved配置优化

当我们在创建Vue项目时,Vue默认是配置了eslint代码规范检查的,不过我们在项目中Typescript来编写代码时,却报了标题的错误,对应的代码如下: <script lang="ts"> export default{name: "DlHeader" } </script><script setup lang=&quo…

利用OpenCvSharp进行图像相关操作

前言 程序设计过程&#xff0c;有时也需要对图像进行一些简单操作&#xff0c;C#没有现成的图像处理库&#xff0c;但有人对OpenCV进行了包装&#xff0c;我们可以很方便的使用OpenCvSharp对图像进行操作。当然了&#xff0c;这也需要使用的人员进行一些研究&#xff0c;但相对…

【C语言篇】猜数字游戏(赋源码)

文章目录 猜数字游戏前言随机数生成randsrandtime设置随机数生成范围 猜数字游戏的实现 猜数字游戏 前言 在前两篇博客对于分支和循环语句进行了详细的介绍&#xff1a; 分支语句详解 循环语句详解 我们就可以写一写稍微有趣的代码了&#xff0c;比如&#xff1a; 写一个…

用uniapp 及socket.io做一个简单聊天app 撤回聊天及保留聊天记录 6

撤回的设计 通过聊天&#xff0c;发送一个信息&#xff0c;界面自动将信息撤回&#xff0c; 当时要有时间的限制。同时也要将撤回记录到数据库中。async sendMessage(message, type text) {this.$refs.popup.close();const messageData {sn: uuidv4(),group_name: this.gro…

【MySQL】MySQL9.0发布,有点小失望

前言 &#x1f34a;缘由 MySQL一更新&#xff0c;实在有点闹心 &#x1f3c0;事情起因&#xff1a; 大家好&#xff0c;我是JavaDog程序狗 今天跟大家聊一下MySQL9.0新版本发布&#xff0c;仅代表个人观点&#xff0c;大佬DBA轻喷 &#x1f4d8;『你想听的故事 』 本狗在…

【python】Python中实现定时任务常见的几种方式原理分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

安全主机软件是如何有效应对暴力破解的?

在网络安全日益严峻的今天&#xff0c;暴力破解作为一种常见的攻击手段&#xff0c;时刻威胁着企业和个人的账户安全。为了有效抵御这一威胁&#xff0c;主机安全作为一款集实时监测、智能分析、风险预警于一体的主机安全软件&#xff0c;通过多维度、智能化的防护策略&#xf…

便携式气象监测系统的功能与应用

在科技日新月异的今天&#xff0c;气象监测作为农业生产、城市规划、环境保护及灾害预防等领域不可或缺的一环&#xff0c;正经历着前所未有的变革。其中&#xff0c;便携式气象监测系统的出现&#xff0c;如同一股清新的风&#xff0c;吹散了传统气象观测的种种限制&#xff0…

3.达梦数据库基础运维管理

文章目录 前言一、基础数据库管理权限角色管理1.1 DM 系统管理员的类型1.2 角色责则分类 DM 数据库2.1 数据库评估2.2 状态和模式 参考内容 前言 本篇博客为上一篇博客的进阶版&#xff0c;主要针对常规达梦数据库的基本管理上面 一、基础数据库管理 权限角色管理 1.1 DM 系…

【Git企业级开发实战指南②】分支管理、远程操作

目录 一、分支管理1.1理解分支1.2创建分支1.3切换分支1.4合并分支1.5删除分支1.6合并冲突1.7 分支管理策略1.7.1分支策略 1.8bug分支1.9删除临时分支 二、远程操作2.1理解分布式版本控制系统2.2 远程仓库2.2.1 新建远程仓库2.2.2 克隆远程仓库2.2.3向远端仓库推送2.2.4拉取远端…

ROS2 Humble 学习【openEuler】

ROS2 Humble 学习 1 介绍1.1 概述1.2 ROS2 详细介绍1.3 openEuler 安装 ROS2 Humble1.4 ROS2 系统架构 2 ROS2 基础2.1 节点编写、编译、运行【简单示例】节点编写节点编译 g节点运行节点编译 make节点编译 CMakeLists.txtCMake依赖查找流程Python 依赖查找流程 2.2 节点交互、…

MySQL深分页和浅分页

前言 最近有面试过也遇到了问关于深分页问题&#xff0c;在这里简单从MySQL、ES等方面分享一下自己对该问题认识和总结。 一、深分页定义 可以从ES定义上来划分浅分页和深分页的边界&#xff0c;即页数超过10000页为深分页&#xff0c;少于10000页为浅分页。 二、MySQL深分…

数字化时代:蚓链助力企业破局与腾飞!

在当今数字化浪潮汹涌澎湃的时代&#xff0c;企业面临着前新机遇与新挑战。您是否渴望在竞争激烈的市场中实现数字化弯道超车&#xff1f;是否梦想着打造专属自己的独特生意赛道&#xff1f;是否期盼着拥有专享的资源生态圈&#xff1f;如果您的答案是肯定的&#xff0c;那么蚓…

CSP - J day9

一. 题目 &#xff08;1&#xff09;早安 思路&#xff1a; &#xff08;1&#xff09;cin和scanf读入字符串时遇到空格或换行就停止读入&#xff0c;对于要读入带空格的字符串时&#xff0c;常用 两种方法&#xff1a; // 法一string s;getline( cin, s ); // 法…

OrangePi AIpro学习1 —— 烧写和ssh系统

目录 一、下载烧写工具和系统 二、烧写和启动 2.1 烧写和启动 2.2 烧写失败后的问题解决 三、串口连接到主机 3.1 串口连接到主机 四、网络连接到主机 4.1 修改香橙派IP地址 4.2 win11配置以太网静态ip 4.4 主机和香橙派直连 4.5 主机和香橙派连接到同一个路由器 五…

Hive SQL进阶:掌握间隔连续查询技巧,优化大数据分析(二)

目录 1.访问次数最多的5个用户 2.近 30 天的每日活跃用户数 3.获取1-180天注册活跃留存表 4.学生名次统计 5.最近连续3周连续活跃用户数 6.最近7天内连续3天活跃用户数 7.餐馆营业额变化增长 相关拓展 1.访问次数最多的5个用户 输出每个app 下访问次数最多的5个用户 返…

DC-7靶机渗透测试

DC-7靶机 DC: 7 ~ VulnHub 文章目录 DC-7靶机信息收集web渗透权限提升Drupal后台getshell权限提升靶机总结信息收集 经过扫描得到IP地址为192.168.78.154.其中开启了ssh和80端口,看来立足点就在于web渗透找到漏洞,获取用户密码来进行ssh连接进行寻找提权方案了使用dirb扫描…

Windows平台下内存泄漏检测工具Visual Leak detector介绍(vscode使用)

!!!此工具只能检测配合VC进行代码的内存泄漏检测 1、搜索VLD工具下载 2、配置环境变量 3、在main.cpp中加入#include<vld.h> 4、在CMakeLists.txt中添加 SET(VLD_PATH "xxx") # 链接vld静态库 target_link_libraries(${PROJECT_NAME} PRIVATE ${VLD_PATH})…

学习STM32(2)--STM32单片机GPIO应用

目录 1 引 言 2 实验目的 3 实验内容 3.1掌握STM32F103的GPIO控制 3.1.1 GPIO的分组 3.1.2 GPIO的常用功能 3.1.3 STM32单片机GPIO位结构 3.1.4 STM32单片机GPIO工作模式 3.1.5 STM32的GPIO 输出-点亮LED编程要点 使用GPIO时&#xff0c;按下面步骤进行&#xff1…