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

分布式日志分析系统--ELK

文章目录

  • ELK概述
    • ELK主要特点
    • ELK应用架构
  • Elasticsearch
    • 原理
      • JSON格式
      • 倒排索引
    • ES与关系型数据库
    • ES相关概念
    • ES安装说明
      • 1.环境初始化
      • 2.优化系统资源限制配置
      • 3.编辑ES服务文件elasticsearch. yml
    • 优化ELK
    • 集群安装脚本
      • scp的使用
      • 集群安装成功
    • Shell命令
    • API使用
      • 创建索引
      • 创建Type
      • 创建分片和副本
      • 查询数据
    • ES插件
      • elasticsearch-head
      • Cerebro
  • ES集群工作原理
    • 节点分类
      • Master节点
      • Data节点
      • Coordinating节点(协调)
    • 集群选举
    • 集群分片和副本
      • 分片Shard
      • 副本Replication
    • ES集群故障转移
      • ES集群的故障转移流程如下
        • 0.宕掉node-3节点
        • 1.重新选举
        • 2.主分片调整
        • 3.副本分片调整
        • 4.恢复node-3节点
    • ES文档路由
      • 1.ES文档路由原理
      • 2.ES文档创建流程
      • 3.ES文档读取流程
  • Beats收集数据
    • 利用Filebeat收集日志
      • 安装Filebeat
        • 输入和输出
        • Ubuntu安装
      • 案例1:从标准输入读取再输出至标准输出
      • 案例2:从标准输入读取再输出至Json格式的文件
      • 案例3:从文件读取再输出至标准输出
      • 案例4:将nginx的访问日志输出至标准输出
      • 案例5:利用filebeat收集Nginx访问日志到ES中
    • Filebeat收集Nginx Json格式日志
      • 1.配置nginx访问日志为Json格式
      • 2.指定access_log输出为我们自定义的json格式
      • 3.重启Nginx服务
      • 4.修改filebeat.yml
      • 通过Kibana查看收集的日志信息
  • Logstash
  • Kibana
    • 安装kibana
      • Ubuntu安装

ELK概述

ELK是由elastic的三个开源项目( Elasticsearch、Logstash和Kibana)的首字母缩写,三个项目各有不同的功能。后来elastic又增加了许多新项目,于是从5.X版本后改名为Elastic Stack。
在这里插入图片描述

Elastic Stack是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将Elastic Stack称为ELK Stack(代指Elasticsearch、Logstash和Kibana),目前Elastic Stack包括一系列丰富的轻量型数据采集代理,这些代理统称为Beats,可用来向Elasticsearch 发送数据。

官方帮助手册:https://www.elastic.co/cn/elastic-stack/

Elasticsearch是一个实时的全文搜索,存储库和分析引擎。Logstash是服务器端数据处理的管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到Elasticsearch存储库中。Logstash将收集过来的数据做转换,做过滤,比如转换成json格式,我们需要在Logstash上定义转换逻辑和转换策略。Kibana则可以让用户在Elasticsearch中使用图形和图表对数据进行可视化。

ELK下载:https://www.elastic.co/cn/downloads/

ELK权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

ELK主要特点

ELK的主要特点1.功能强大: Elasticsearch是实时全文索引,具有强大的搜索功能。2.配置相对简单: Elasticsearch 全部其于JSON,Logstash使用模块化配置,Kibana的配置都比较简单。3.检索性能高效: 基于优秀的设计,每次查询可以实时响应,即使百亿级数据的查询也能达到秒级响应。4.集群线性扩展: Elasticsearch和Logstash都可以灵活线性扩展前端操作方便:Kibana提供了比较美观UI前端,操作也比较简单。

ELK主要组件

ELK主要组件1.Elasticsearch 管理2.Beats 实现日志收集3.Logstash 实现日志过滤转换4.Kibana 实现图形化展示

ELK应用架构

基于Filebeat的ELK集群架构
在这里插入图片描述

Elasticsearch

Elasticsearch是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch在Apache Lucene的基础上开发而成,由Elasticsearch N.V.(即现在的Elastic)于2010年首次发布。Elasticsearch以其简单的REST风格API、分布式特性、速度和可扩展性而闻名,是Elastic Stack的核心组件。

Elasticsearch支持数据的实时全文搜索、支持分布式和高可用、提供API接口,可以处理大规模的各种日志数据的处理,比如: Nginx、Tomcat、系统日志等功能。

Elasticsearch基于Java语言开发,利用全文搜索引擎Apache Lucene 实现。

原理

原始数据会从多个来源(包括日志、系统指标和网络应用程序)输入到Elasticsearch中。数据采集指在Elasticsearch中进行索引之前解析、标准化并充实这些原始数据的过程。这些数据在Elasticsearch中索引完成之后,用户便可针对他们的数据运行复杂的查询,并使用聚合来检索自身数据的复杂汇总。在Kibana中,用户可以基于自己的数据创建强大的可视化,分享仪表板,并对Elastic Stack进行管理。

JSON格式

Elasticsearch索引指相互关联的文档集合,Elasticsearch 会以JSON文档的形式存储数据。每个文档都会在一组键(字段或属性的名称)和它们对应的值((字符串、数字、布尔值、日期、数组、地理位置或其他类型的数据)之间建立联系。

倒排索引

Elasticsearch使用的是一种名为倒排索引的数据结构,这一结构的设计可以十分快速地进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。在索引过程中,Elasticsearch 会存储文档并构建倒排索引,这样用户便可以近实时地对文档数据进行搜索。索引过程是在索引API中启动的,通过此API既可向特定索引中添加JSON文档,也可更改特定索引中的JSON文档。

ES与关系型数据库

在这里插入图片描述

ES相关概念

● Near Realtime(近实时):Elasticsearch是一个近乎实时的搜索平台,这意味着从索引文档到可搜索文档之间只有一个轻微的延迟(通常是一秒钟)。

● Cluster(集群):群集是一个或多个节点的集合,它们一起保存整个数据,并提供跨所有节点的联合索引和搜索功能。每个集群都有自己的唯一集群名称,节点通过名称加入集群。

● Node(节点):节点是指属于集群的单个Elasticsearch实例,存储数据并参与集群的索引和搜索功能。可以将节点配置为按集群名称加入特定集群,默认情况下,每个节点都设置为加入一个名为elasticsearch的群集。

● Index(索引):索引是一些具有相似特征的文档集合,类似于MySql中数据库的概念。

● Type(类型):类型是索引的逻辑类别分区,通常为具有一组公共字段的文档类型,类似MySql中表的概念。注意:在Elasticsearch 6.0.0及更高的版本中,一个索引只能包含一个类型。

● Document(文档):文档是可被索引的基本信息单位,以JSON形式表示,类似于MySql中行记录的概念。

● Shards(分片):当索引存储大量数据时,可能会超出单个节点的硬件限制,为了解决这个问题,Elasticsearch提供了将索引细分为分片的概念。分片机制赋予了索引水平扩容的能力、并允许跨分片分发和并行化操作,从而提高性能和吞吐量。

● Replicas(副本):在可能出现故障的网络环境中,需要有一个故障切换机制,Elasticsearch提供了将索引的分片复制为一个或多个副本的功能,副本在某些节点失效的情况下提供高可用性。

ES安装说明

官方文档:https://www.elastic.co/guide/en/elastic-stack/index.html

ES系统版本和JAVA版本说明
官方文档:https://www.elastic.co/cn/support/matrix

1.环境初始化

CPU 2C 内存4G或更多
操作系统:ubuntu20.04, ubuntu18.04, Rocky8.x, centos7.x操作系统盘50G
主机名设置规则为es-nodeX
生产环境建议准备单独的数据磁盘

1.1集群中各个服务器配置自己的主机名

[root@ubuntu2004 ~]# hostnamectl set-hostname es-node1

我有3个主机es-node1、es-node2、es-node3

1.2关闭防火墙和SElinux

root@es-node1:~# systemctl disable ufw
Synchronizing state of ufw.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable ufw
Removed /etc/systemd/system/multi-user.target.wants/ufw.service.
sed -i ' /SELINUX/s/enforcing/disabled/' /etc/selinux/config

1.3配置本地域名解析

root@es-node1:~# vim /etc/hosts
192.168.10.145 es-node1.lei.org
192.168.10.146 es-node2.lei.org
192.168.10.147 es-node3.lei.org

2.优化系统资源限制配置

内核参数vm.max_map_count用于限制一个进程可以拥有的VMA(虚拟内存区域)的数量使用默认系统配置,二进制安装时会提示下面错误,包安装会自动修改此配置。

默认值很小,不调大会导致ES起不来。

2.1修改vm.max_map_count配置
基于二进制包的安装会自动修改为262144

查看默认配置

root@es-node3:~# sysctl -a |grep vm.max_map_count
vm.max_map_count = 65530
[root@es-node1 ~]#echo "vm.max_map_count = 262144" >> /etc/sysctl.conf
[root@es-node1 ~]#sysctl -p
vm.max_map_count = 262144

在这里插入图片描述
2.3查看fs.file-max的默认值

[root@es-node1 ~]#echo "fs.file-max = 需要修改的值" >> /etc/sysctl.conf

在这里插入图片描述

2.3limits.conf
vim /etc/security/limits.conf

*                soft    core            unlimited
*                hard    core            unlimited
*                soft    nproc           1000000
*                hard    nproc           1000000
*                soft    nofile          1000000
*                hard    nofile          1000000
*                soft    mem1ock         32000
*                hard    memlock         32000
*                soft    msgqueue        8192000
*                hard    msgqueue        8192000

3.编辑ES服务文件elasticsearch. yml

官方参考文档:
https://www.elastic.co/guide/en/elasticsearch/reference/index.html
https://www.elastic.co/guide/en/elasticsearch/reference/master/settings.html
https://www.elastic.co/guide/en/elasticsearch/reference/master/important-settings.html

[root@es-node1 ~]# grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml#ELK集群名称,同一个集群内每个节点的此项必须相同,新加集群的节点此项和其它节点相同即可加入集群,而无需再验证
cluster.name: ELK-Cluster#当前节点在集群内的节点名称,同一集群中每个节点要确保此名称唯一
node.name: es-node1#ES数据保存目录
path.data: /data/es-data#ES日志保存目录
path.1ogs: /data/es-logs#服务启动的时候立即分配(锁定)足够的内存,防止数据写入swap ,提高启动速度
bootstrap.memory_lock: true#指定监听IP,如果绑定了错误的IP,可将此修改为指定IP
network.host: 0.0.0.0#监听端口
http.port: 9200#发现集群的node节点列表,可以添加部分或全部节点IP#在新增节点到集群时,此处需指定至少一个已经在集群中的节点地址
discovery.seed_hosts: ["192.168.10.145", "192.168.10.146", "192.168.10.147"]#集群初始化时指定希望哪些节点可以被选举为master,只在初始化时使用,新加节点到已有集群时此项可不配置
cluster.initial_master_nodes: ["192.168.10.145", "192.168.10.146", "192.168.10.147"]#一个集群中的N个节点启动后,才允许进行数据恢复处理,默认是1,一般设为为所有节点的一半以上,防止出现脑裂现象
#当集群无法启动时,可以将之修改为1,或者将下面行注释掉,实现快速恢复启动
gateway.recover_after_nodes: 2#设置是否可以通过正则表达式或者_all匹配索引库进行删除或者关闭索引库,默认true表示必须需要明确指定索引库名称,不能使用正则表达式和_all,生产环境建议设置为true,防止误删索引库。
action.destructive_requires_name: true#不参与主节点选举
node.master: false#存储数据,此值为fa1se则不存储数据而成为一个路由节点
#如果将true改为false ,需要先执行/usr/share/elasticsearch/bin/elasticsearch-noderepurpose清理数据
node.data: true

单节点配置

[root@ubuntu2004 ~]#grep -v '#' /etc/elasticsearch/elasticsearch.yml
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
node.name: node-1
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.100"]
cluster.initial_master_nodes: ["node-1"]

集群配置

[root@es-node1 ~]#grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster
node.name: es-node1         #集群中,只需要修改此行,每个节点都不能相同
path.data: /data/es-data
path.1ogs: /data/es-logs
bootstrap.memory_1ock: 
truenetwork.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.101", "10.0.0.102", "10.0.0.103"]
cluster.initia1_master_nodes: ["10.0.0.101", "10.0.0.102,"10.0.0.103"]
gateway.recover_after_nodes: 2
action.destructive_requires_name: true[root@es-node1 ~]#scp /etc/elasticsearch/elasticsearch.yml es-node2: /etc/elasticsearch/
[root@es-node1 ~]#scp /etc/elasticsearch/elasticsearch.yml es-node3: /etc/e1asticsearch/

开启bootstrap.memory_lock: true后,如果内存不够的话,会导致无法启动的错误。
官方解决错误的文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/setting-system-settings.html#systemd

在这里插入图片描述

[root@node1 ~]#systemctl edit elasticsearch[service]
LimitMEMLOCK=infinity[root@node1 ~]#cat /etc/systemd/system/elasticsearch.service.d/override.conf
[service]
LimitMEMLOCK=infinity[root@node1 ~]#systemctl daemon-reload
[root@node1 ~]#systemctl restart elasticsearch.service
[root@node1 ~]#systemctl is-active elasticsearch.service
active

优化ELK

内存不是越大越好
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#heap-size-settings

推荐使用宿主机物理内存的一半,ES的heap内存最大不超过30G,26G是比较安全的
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/master/advanced-configuration.html#set-jvm-heap-size
在这里插入图片描述
翻译为
在这里插入图片描述
内存优化建议:

为了保证性能,每个ES节点的JVM内存设置具体要根据node要存储的数据量来估算,建议符合下面约定1.在内存和数据量有一个建议的比例:对于一般日志类文件,1G内存能存储48G~96GB数据2.JVM堆内存最大不要超过30GB3.对于主分片的数量,单个分片控制在30-50GB

建议将heap内存设置为物理内存的一半且最小和最大设置一样大,但最大不能超过30G

[root@es-node1 ~]# vim /etc/elasticsearch/jvm.options
-xms2g
-xm×2g

集群安装脚本

#!/bin/bash
#
#********************************************************************
#Author:            wangxiaochun
#Date:              2020-06-03
#FileName:          install_elasticsearch_cluster.sh
#URL:               http://www.wangxiaochun.com
#Description:       The test script
#Copyright (C):     2020 All rights reserved
#********************************************************************ES_VERSION=7.17.5
#ES_VERSION=7.9.3
#ES_VERSION=7.6.2
UBUNTU_URL="https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/apt/pool/main/e/elasticsearch/elasticsearch-${ES_VERSION}-amd64.deb"
RHEL_URL="https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/${ES_VERSION}/elasticsearch-${ES_VERSION}-x86_64.rpm"CLUSTER_NAME=es-cluster
NODE_LIST='["192.168.10.145","192.168.10.146","192.168.10.147"]'
ES_DATA=/data/es-data
ES_LOGS=/data/es-logs. /etc/os-releasecolor () {RES_COL=60MOVE_TO_COL="echo -en \\033[${RES_COL}G"SETCOLOR_SUCCESS="echo -en \\033[1;32m"SETCOLOR_FAILURE="echo -en \\033[1;31m"SETCOLOR_WARNING="echo -en \\033[1;33m"SETCOLOR_NORMAL="echo -en \E[0m"echo -n "$1" && $MOVE_TO_COLecho -n "["if [ $2 = "success" -o $2 = "0" ] ;then${SETCOLOR_SUCCESS}echo -n $"  OK  "    elif [ $2 = "failure" -o $2 = "1"  ] ;then ${SETCOLOR_FAILURE}echo -n $"FAILED"else${SETCOLOR_WARNING}echo -n $"WARNING"fi${SETCOLOR_NORMAL}echo -n "]"echo 
}check_mem () {MEM_TOTAL=`head -n1 /proc/meminfo |awk '{print $2}'`if [ ${MEM_TOTAL} -lt 1997072 ];thencolor '内存低于2G,安装失败!' 1exitelif [ ${MEM_TOTAL} -le 2997072 ];thencolor '内存不足3G,建议调整内存大小!' 2elsereturnfi
}set_node_id () {read -p "请输入node编号(默认为 1): " NODE_IDif [ -z "$NODE_ID" ] ;thenNODE_ID=1elif [[ ! "$NODE_ID" =~ ^[0-9]+$ ]];thencolor  "请输入正确的node编号!" 1exitelsetruefiNODE_NAME=node-$NODE_ID
}install_es() {if [ $ID = "centos" -o $ID = "rocky" ];thenwget -P /usr/local/src/ $RHEL_URL || { color  "下载失败!" 1 ;exit ; } yum -y install /usr/local/src/${RHEL_URL##*/}elif [ $ID = "ubuntu" ];thenwget -P /usr/local/src/ $UBUNTU_URL || { color  "下载失败!" 1 ;exit ; }dpkg -i /usr/local/src/${UBUNTU_URL##*/}elsecolor "不支持此操作系统!" 1exitfi[ $? -eq 0 ] ||  { color '安装软件包失败,退出!' 1; exit; }
}config_es () {cp /etc/elasticsearch/elasticsearch.yml{,.bak}cat > /etc/elasticsearch/elasticsearch.yml  <<EOF
cluster.name: $CLUSTER_NAME
node.name: $NODE_NAME
path.data: $ES_DATA
path.logs: $ES_LOGS
bootstrap.memory_lock: true
network.host: 0.0.0.0
discovery.seed_hosts: $NODE_LIST
cluster.initial_master_nodes: $NODE_LIST
gateway.recover_after_nodes: 2
action.destructive_requires_name: true
EOFmkdir -p /etc/systemd/system/elasticsearch.service.d/cat > /etc/systemd/system/elasticsearch.service.d/override.conf <<EOF
[Service]
LimitMEMLOCK=infinity
EOFsystemctl daemon-reloadsystemctl enable  elasticsearch.service
}prepare_es() {echo "vm.max_map_count = 262144" >> /etc/sysctl.confsysctl  -pmkdir -p $ES_DATA $ES_LOGSchown  -R elasticsearch.elasticsearch $ES_DATA $ES_LOGS
}start_es(){systemctl start elasticsearch || { color "启动失败!" 1;exit 1; }sleep 3curl http://127.0.0.1:9200 && color "安装成功" 0   || { color "安装失败!" 1; exit 1; } echo -e "请访问链接: \E[32;1mhttp://`hostname -I|awk '{print $1}'`:9200/\E[0m"
}check_mem
set_node_id
install_es
config_es
prepare_es
start_es

scp的使用

scp /root/install_elasticsearch_cluster.sh root@192.168.10.146:/root

在这里插入图片描述

集群安装成功

cluster_uuid都是一样的,
在这里插入图片描述
cluster_uuid": “na”,的机器,重启一下服务就可以同步其他节点了。

systemctl restart elasticsearch.service

在这里插入图片描述

查看健康状态

curl http://127.0.0.1:9200/_cat/health
ES集群状态:1.绿色状态:表示集群各节点运行正常,而且没有丢失任何数据,各主分片和副本分片都运行正常2.黄色状态:表示由于某个节点宕机或者其他情况引起的,node节点无法连接、所有主分片都正常分配,有副本分片丢失,但是还没有丢失任何数据3.红色状态:表示由于某个节点宕机或者其他情况引起的主分片丢失及数据丢失,但仍可读取数据和存储

在这里插入图片描述
在这里插入图片描述

#查看支持的指令
curl http://127.0.0.1:9200/_cat#查看es集群状态
curl http://127.0.0.1:9200/_cat/healthcurl 'http:/ /127.0.0.1:9200/ _cat/health?v'#查看所有的节点信息
curl ' http://127.0.0.1:9200/_cat/nodes?v'#列出所有的索引以及每个索引的相关信息
curl 'http://127.0.0.1:9200/_cat/indices?v'#查看集群分健康性
curl http://127.0.0.1:9200/_cluster/health?pretty=true

官方使用手册:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

Shell命令

root@es-node1:~# curl 127.0.0.1:9200/_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
/_cat/ml/anomaly_detectors
/_cat/ml/anomaly_detectors/{job_id}
/_cat/ml/trained_models
/_cat/ml/trained_models/{model_id}
/_cat/ml/datafeeds
/_cat/ml/datafeeds/{datafeed_id}
/_cat/ml/data_frame/analytics
/_cat/ml/data_frame/analytics/{id}
/_cat/transforms
/_cat/transforms/{transform_id}

在这里插入图片描述

API使用

创建索引

在这里插入图片描述

查看索引
在这里插入图片描述

root@es-node1:~# curl 'http://127.0.0.1:9200/index2?pretty'
{"index2" : {"aliases" : { },"mappings" : { },"settings" : {"index" : {"routing" : {"allocation" : {"include" : {"_tier_preference" : "data_content"}}},"number_of_shards" : "1",     # 一个分片"provided_name" : "index2","creation_date" : "1720874983389","number_of_replicas" : "1",   # 一个副本"uuid" : "pr4BE8D_TL6PKdicWZxDtw","version" : {"created" : "7170599"}}}}
}没有创建分片和副本的索引,性能又不好,数据的安全性又不高。

创建Type

type就相当于mysql中的数据表

curl -XPOST http://127.0.0.1:9200/index2/food/ -H 'Content-Type:application/json' -d '{"name":"apple","taste":"good","version":"1.0"}'

在这里插入图片描述

创建分片和副本

分片:把大的数据拆分成若干个小的数据,我当前有3个节点,可以创建3个分片,3个分片就也相当于将一个数据分别存储在了这3个节点上,可以做到3个节点负载均衡的效果。但是分片导致数据分散了,一旦某一个节点不能访问就导致整个数据不可用,所以此时就需要使用到副本。

副本:就相当于将一个数据又复制备份了一份,一旦原来的数据不能访问,副本就可以还原原始数据。

curl -XPUT 'http://127.0.0.1:9200/index3' -H 'Content-Type: application/json' -d '
{"settings": {"index": {"number_of_shards": 3,"number_of_replicas": 2}}
}'

在这里插入图片描述
3分片2副本的意思是:每个分片有2个副本

curl '192.168.10.145:9200/index3?pretty'

在这里插入图片描述
数据存放的磁盘的位置
在这里插入图片描述

查询数据

在这里插入图片描述

ES插件

elasticsearch-head

在这里插入图片描述

curl -XPOST http://127.0.0.1:9200/index1/food/ -H 'Content-Type:application/json' -d '{"name":"apple","taste":"good","version":"1.0"}'

在这里插入图片描述
在这里插入图片描述

Cerebro

github地址:https://github.com/lmenezes/cerebro

1.安装jdk
Cerebro依赖于JDK环境

apt -y install openjdk-11-jdk

2.下载deb包

wget https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro_0.9.4_all.deb

3.安装

dpkg -i cerebro_0.9.4_all.deb 

4.修改配置
vim /etc/cerebro/application.conf
在这里插入图片描述
在这里插入图片描述
访问主机的9000端口,即可打开cerebro界面,在Node address输入框中输入任意ES节点即可访问
在这里插入图片描述在这里插入图片描述

ES集群工作原理

官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

节点分类

单机节点ES存在单点问题,可以实现多机的集群,每个节点的角色有所不同。

ES的节点有三种

Master节点

Master节点1.ES集群中只有一个Master节点,用于控制整个集群的操作;2.Master节点负责增删索引,增删节点,shard分片的重新分配;3.Master主要维护Cluster State,包括节点名称,节点连接地址,索引名称和配置认息等;4.Master接受集群状态的变化并推送给所有节点,集群中各节点都有一份完整的集群状态信息,都由master node负责维护;5.Master节点不需要涉及到文档级别的变更和搜索等操作;6.协调创建索引请求或查询请求,将请求分发到相关的node上;7.当Cluster State有新数据产生后, Master会将数据同步给其他Node节点;8.Master节点通过超过一半的节点投票选举产生的;9.可以设置node.master: true指定为是否参与Master节点选举,默认true。

Data节点

Data节点1.存储数据的节点即为data节点2.当创建索引后,索引创建的数据会存储至某个数据节点3.Data节点消耗内存和磁盘IO的性能比较大4.配置node.data: true,默认为true,即默认节点都是data类型

Coordinating节点(协调)

coordinating节点(协调)1.处理请求的节点即为coordinating节点,该节点为所有节点的默认角色,不能取消;2.coordinating节点主要将请求路由到正确的节点处理。比如创建索引的请求会由coordinating路由到master节点处理;3.当配置node.master:false、node.data:false则只充当coordinating节点

集群选举

ES集群的选举是由master-eligble(有资格的master节点)发起,当该节点发现当前节点不是master,并且该节点通过ZenDiscovery模块ping其他节点,得到超过mininum_master_nodes个节点无法连接master时,就会发起选举。

选举时,优先选举ClusterStateVersion最大的Node节点,如果ClusterStateVersion相同,则选举ID最小的Node。

ClusterStateVersion是集群的状态版本号,每一次集群选举ClusterStateVersion都会更新,因此最大的ClusterStateVersion是与原有集群数据最接近或者是相同的,这样就尽可能的避免数据丢失。

Node的ID是在第一次服务启动时随机生成的,直接选用最小ID的Node,主要是为了选举的稳定性,尽量少的出现选举不出来的问题。

每个集群中只有一个Master节点。

每个集群中损坏的节点不能超过集群一半以上,否则集群将无法提供服务。

集群分片和副本

分片Shard

ES中存储的数据可能会很大,有时会达到PB级别

基于性能和容量等原因,可以将一个索引数据分割成多个小的分片,再将每个分片分布至不同的节点从而实现数据的分布存储,实现性能和容量的水平扩展。

在读取时,分片可以实现多节点的并行读取从而提升性能。除此之外,如果一个分片的主机宕机,也不影响其它节点分片的读取。

横向扩展即增加服务器,当有新的Node节点加入到集群中时,集群会动态的重新进行分配和负载。

例如原来有两个Node节点,每个节点上有3个分片,即共6个分片,如果再添加一个node节点到集群中,集群会动态的将此6个分片分配到这三个节点上,最终每个节点上有两个分片。

7.X默认每个索引只有一个分片。

副本Replication

将一个索引分成多个分片,仍然存在数据的单点问题,可以对每一个分片进行复制生成副本即备份,实现数据的高可用。

ES的分片分为主分片(primary shard)和副本分片(复制replica shard),而且通常分布在不同节点,主分片实现数据读写,副本分片只支持读。

每个数据分片只有一个主分片,而副本分片可以有多个,比如:一个副本,即有一个备份。

7.X默认每个索引只有一个副本分片。

ES集群故障转移

故障转移指的是,当集群中有节点发生故障时,ES集群会进行自动修复。

假设由3个节点的ES集群组成(如下截图展示),node-1为master节点,其中一个节点宕机
在这里插入图片描述

ES集群的故障转移流程如下

以索引“leilei”为例

0.宕掉node-3节点

在这里插入图片描述

1.重新选举
1.node-3节点宕机,集群状态变黄,导致node-3的原有的P1和R2分片丢失;
2.node-1和node-2发现node-3无法响应;
3.一段时间后集群会发起master选举,比如这里仍然选择node-1为master节点,此时集群状态变为Yellow;
2.主分片调整
1.新的Master节点node-1发现在原来在node3上的主分片P1未分配,将node-2上的R1提升为主分片;
2.此时所有的主分片都正常分配,但1和2分片没有副本分片,集群状态为Yellow状态。

在这里插入图片描述

3.副本分片调整

node1将P1和P2主分片重新生成新的副本分片R0和R1,
在这里插入图片描述

4.恢复node-3节点

修复好node3节点后,ES会自动将各个分片均匀分配。
在这里插入图片描述
在这里插入图片描述

ES文档路由

参考文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/routing-value.html

1.ES文档路由原理

ES文档是分布式存储,当一个文档存储至ES集群时,如何决定存储的节点位置,以及读取时从哪里获取数据?

首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。

实际上,在ES中通过如下的公式计算文档对应的分片存储到哪个节点

shard = hash(routing) % number_of_primary_shards
# hash算法保证将数据均匀分散在分片中
# routing是一个可变参数,默认是文档id,也可以自定义
# number_of_primary_shards 主分片数
# 这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置。
# 注意:该算法与主分片数相关,一但确定后便不能更改主分片

这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 ,并且永远不会改变这个数量。因为如果数量变化了,那么所有之前路由的值都会无效,文档就再也找不到了。

在这里插入图片描述
我们可以发送请求到集群中的任一节点。每个节点都有能力处理任意请求。每个节点都知道集群中任一文档位置,所以可以直接将请求转发到需要的节点上。在下面的例子中,将所有的请求发送到Node 1,我们将其称为协调节点(coordinating node)。

2.ES文档创建流程

在这里插入图片描述

ES文档创建流程1.客户端向协调节点Node1发送新建索引文档或者删除索引文档请求;2.Node1节点使用文档的_id确定文档属于分片0;3.因为分片0的主分片目前被分配在Node3上,请求会被转发到Node3;4.Node3在主分片上面执行创建或删除请求;5.Node3执行如果成功,它将请求并行转发到Node1和Node2的副本分片上;6.一旦所有的副本分片都报告成功, Node3将向协调节点Node1报告成功;7.协调节点Node1客户端报告成功,在客户端收到响应时,文档变更已经在主分片和所有副本分片执行完成。

3.ES文档读取流程

可以从主分片或者从其它任意副本分片读取文档,
在这里插入图片描述

ES文档读取流程1.客户端向Node1发送读取请求;2.节点使用文档的_id来确定文档属于分片0,分片О的副本分片存在于所有的三个节点上;3.在处理读取请求时,协调结点在每次请求的时候都会通过轮询所有的副本分片来达到负载均衡。在这种情况下,它将请求转发到Node2。4.Node2将文档返回给Node1,然后将文档返回给客户端。

Beats收集数据

Beats是一些工具集,包括以下系列,其中filebeat应用最为广泛
在这里插入图片描述

Beats是一个免费且开放的平台,集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向Logstash 或 Elasticsearch发送数据。

虽然利用logstash就可以收集日志,功能强大,但由于Logtash 是基于Java实现,需要在采集日志的主机上安装JAVA环境,会消耗比较多的内存和磁盘空间,logstash运行时最少也会需要额外的500M以上的内存,资源消耗很大,有些得不偿失。

可以采用基于Go开发的Beat工具代替Logstash 收集日志,部署更为方便,而且只占用10M左右的内存空间及更小的磁盘空间,比较节约资源。

官方链接:https://www.elastic.co/cn/beats/

github链接:https://github.com/elastic/beats

利用Filebeat收集日志

Filebeat 是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引。

filebeat支持从日志,Syslog,Redis,Docker,TCP,UDP,标准输入等读取数据,再输入至Elasticsearch,logstash,Redis,Kafka等。

Filebeat的工作方式如下:
启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取一个日志以获取新内容,并将新日志数据发送到libbeat,libbeat会汇总事件并将汇总的数据发送到为Filebeat配置的输出。

Filebeat官方说明:
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html
https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html

在这里插入图片描述

安装Filebeat

输入和输出

官方说明:https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html

Inputs

filebeat.inputs:
- type: filestreamid: my-filestream-id paths:- /var/log/system.log- /var/log/wifi.log
- type: filestreamid: apache-filestream-idpaths:- "/var/log/apache2/*"fields:apache: truefields_under_root: true

Output到ES中

output.elasticsearch:hosts: ["https://myEShost:9200"] 
Ubuntu安装
wget https://mirrors.aliyun.com/elasticstack/apt/7.x/pool/main/f/filebeat/filebeat-7.17.5-amd64.deb
dpkg -i filebeat-7.17.5-amd64.deb

在这里插入图片描述
官方说明:https://www.elastic.co/guide/en/beats/filebeat/8.3/configuration-general-options.html

查看filebeat安装包有哪些内容

dpkg -L filebeat

开启filebeat的server服务
在这里插入图片描述

filebeat的默认配置
在这里插入图片描述

案例1:从标准输入读取再输出至标准输出

[root@e1k-web1 ~]#vim /etc/filebeat/stdin.yml
filebeat.inputs:
- type: stdinenabled: true
output.console:pretty: trueenable: true

yml编写后需要使用filebeat命令去触发/etc/filebeat/stdin.yml文件的执行,可以使用帮助查看filebeat命令

root@es-plugins:~# filebeat --help
Usage:filebeat [flags]filebeat [command]Available Commands:export      Export current config or index templategenerate    Generate Filebeat modules, filesets and fields.ymlhelp        Help about any commandkeystore    Manage secrets keystoremodules     Manage configured modulesrun         Run filebeatsetup       Setup index template, dashboards and ML jobstest        Test configversion     Show current version infoFlags:-E, --E setting=value              Configuration overwrite-M, --M setting=value              Module configuration overwrite-N, --N                            Disable actual publishing for testing-c, --c string                     Configuration file, relative to path.config (default "filebeat.yml")--cpuprofile string            Write cpu profile to file-d, --d string                     Enable certain debug selectors-e, --e                            Log to stderr and disable syslog/file output--environment environmentVar   set environment being ran in (default default)-h, --help                         help for filebeat--httpprof string              Start pprof http server--memprofile string            Write memory profile to this file--modules string               List of enabled modules (comma separated)--once                         Run filebeat only once until all harvesters reach EOF--path.config string           Configuration path (default "")--path.data string             Data path (default "")--path.home string             Home path (default "")--path.logs string             Logs path (default "")--plugin pluginList            Load additional plugins--strict.perms                 Strict permission checking on config files (default true)--system.hostfs string         Mount point of the host's filesystem for use in monitoring a host from within a container-v, --v                            Log at INFO levelUse "filebeat [command] --help" for more information about a command.

触发命令

filebeat -c /etc/filebeat/stdin.yml -e

在这里插入图片描述
命令执行成功后,窗口会等着你的输入,
在这里插入图片描述
我输入了“hello leilei-filebeat”
在这里插入图片描述
窗口的标准输出内容,其中"message": “hello leilei-filebeat”,打印的就是我输入的内容。

{"@timestamp": "2024-07-15T11:11:17.667Z","@metadata": {"beat": "filebeat","type": "_doc","version": "7.17.5"},"log": {"offset": 0,"file": {"path": ""}},"message": "hello leilei-filebeat","input": {"type": "stdin"},"host": {"name": "es-plugins"},"agent": {"type": "filebeat","version": "7.17.5","hostname": "es-plugins","ephemeral_id": "8221553b-79ce-42fe-a30a-cd75df753470","id": "4302fad7-ece0-4b39-954f-6f8186e73446","name": "es-plugins"},"ecs": {"version": "1.12.0"}
}

案例2:从标准输入读取再输出至Json格式的文件

将我输入的内容输出到“/tmp/filebeat”中

[root@e1k-web1 ~]#vim /etc/filebeat/stdout_file.yml
filebeat.inputs:
- type: stdinenab1ed: truejson.keys_under_root: true #默认False会将json数据存储至message,改为true则会独立message外存储
output.file:path: "/tmp"fi1ename: "filebeat"

在这里插入图片描述
在这里插入图片描述

案例3:从文件读取再输出至标准输出

将/tmp/filebeat文件中的内容输出至窗口标准输出

[root@e1k-web1 ~]#vim /etc/filebeat/file.yml
filebeat.inputs:
- type: logenabled: truepaths:- /tmp/filebeat
output.console:pretty: trueenable: true

在这里插入图片描述
在这里插入图片描述

案例4:将nginx的访问日志输出至标准输出

在这里插入图片描述
vim /etc/filebeat/file.yml

filebeat.inputs:
- type: logenabled: truepaths:- /var/log/nginx/access.log
output.console:pretty: trueenable: true
filebeat -c /etc/filebeat/file.yml -e

可以看出虽然nginx的日志已经被输出到标准输出了,但是此时message的内容是一坨字符串不是json格式的展示,这将不利于分析,此后我们会将其装换成json字符展示。
在这里插入图片描述

案例5:利用filebeat收集Nginx访问日志到ES中

默认生成的索引名称为filebeat-<版本>-<时间>*

1.修改配置文件
vim /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: filestreamid: my-filestream-idenabled: true      # 开启日志paths:- /var/log/nginx/access.log    # 指定收集的日志文件output.elasticsearch:hosts: ["192.168.10.145:9200"]   # 指定ES集群服务器地址和端口

在这里插入图片描述
2.重启filebeat服务

通过插件看filebeat是否成功收集系统日志到ES中。
在这里插入图片描述

在kibana中查看是否收集成功,成功了!
在这里插入图片描述
在这里插入图片描述

Filebeat收集Nginx Json格式日志

官方文档:
https://www.elastic.co/guide/en/beats/filebeat/7.6/filebeat-input-log.html
https://www.elastic.co/guide/en/beats/filebeat/7.6/redis-output.html

生产环境中我们经常需要获取Web访问用户的信息,比如:来源的IP是哪个地域,网站的PV、UV、状态码、访问时间等等;所以需要收集的Nginx访问日志。

1.配置nginx访问日志为Json格式

修改nginx主配置文件nginx.conf中nginx的访问日志为json格式

log_format access_json '{"@timestamp":"$time_iso8601",''"host":"$server_addr",''"c1ientip":"$remote_addr",''"size":"$body_bytes_sent",''"responsetime":"$request_time",''"upstreamtime":"$upstream_response_time",''"upstreamhost":"$upstream_addr",''"http_host":"$host",''"uri":"$uri",''"domain":"$host",''"xff":"$http_x_forwarded_for",''"referer":"$http_referer",''"tcp_xff":"$proxy_protocol_addr",''"http_user_agent":"$http_user_agent",''"status":"$status"}';

Json格式的配置需要定义在http块里
在这里插入图片描述

2.指定access_log输出为我们自定义的json格式

access_log  /var/log/nginx/access_json.log access_json;

3.重启Nginx服务

在这里插入图片描述
可以安装个jq工具查看
在这里插入图片描述
very nice very 丝滑!
在这里插入图片描述

4.修改filebeat.yml

filebeat.inputs:
- type: logenabled: truepaths:- /var/log/nginx/access_json.logjson.keys_under_root: true  #默认false会将全部数据存储至message字段,改为true则会以Json格式存储json.overwrite_keys: true   #设为true,覆盖默认的message字段,使用自定义json格式中的keytags: ["nginx-access"]           #指定tag,用于分类- type: logenabled: truepaths:- /var/log/nginx/error.logtags: ["nginx-error"]output.elasticsearch:hosts: ["10.0.0.101:9200"]        indices:- index: "nginx-access-%{[agent.version]}-%{+yyy.MM.dd}" when.contains:tags: "nginx-access"   #如果记志中有access的tag,就记录到nginx-access的索引中- index: "nginx-error-%{[agent.version]}-%{+yyy.MM.dd}"when.contains:tags: "nginx-error"   #如果记志中有error的tag,就记录到nginx-error的索引中setup.ilm.enabled: false    #关闭索引生命周期ilm功能,默认开启时索引名称只能为filebeat-*
setup.template.name: "nginx"  #定义模板名称,要自定义索引名称,必须指定此项,否则无法启动
setup.template.pattern: "nginx-*"  #定义模板的匹配索引名称,要自定义索引名称,必须指定此项,否则无法启动

通过Kibana查看收集的日志信息

Kibana需要创建索引模式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击discover
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用kibana画图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
展示那些ip访问
在这里插入图片描述

Logstash

Logstash 是Elastic Stack的核心产品之一,可用来对数据进行聚合和处理,并将数据发送到Elasticsearch。

Logstash是一个基于Java实现的开源的服务器端数据处理管道,允许您在将数据索引到Elasticsearch之前同时从多个来源采集数据,并对数据进行过滤和转换。

可以通过插件实现日志收集和转发,支持日志过滤,支持普通log、自定义json格式的日志解析。

Kibana

Kibana是一款适用于Elasticsearch的基于Typescript(增强版的JavaScript)语言实现的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和地图。

Kibana同时还包括诸如Canvas和Elastic Maps 等高级应用程序;Canvas允许用户基于自身数据创建定制的动态信息图表,而Elastic Maps则可用来对地理空间数据进行可视化。

官方文档:https://www.elastic.co/cn/kibana

在这里插入图片描述

安装kibana

Ubuntu安装

1.下载deb包

wget https://mirrors.aliyun.com/elasticstack/apt/7.x/pool/main/k/kibana/kibana-7.17.5-amd64.deb

在这里插入图片描述
2.解包

dpkg -i kibana-7.17.5-amd64.deb

在这里插入图片描述
3.修改配置
vim /etc/kibana/kibana.yml

server.port: 5601      #监听端口,此为默认值
server.host: "0.0.0.0" #修改此行的监听地址,默认为1oca7host
elasticsearch.hosts: ["http://10.0.0.101:9200"] #修改此行,指向ES服务器地址,默认为localhost
i18n.locale: "zh-CN"    #修改此行,使用"zh-CN"显示中文界面,默认英文

在这里插入图片描述
4.启动kibana的server服务
在这里插入图片描述
5.访问kibana的web页面
访问主机的5601端口
在这里插入图片描述
在这里插入图片描述

相关文章:

分布式日志分析系统--ELK

文章目录 ELK概述ELK主要特点ELK应用架构 Elasticsearch原理JSON格式倒排索引 ES与关系型数据库ES相关概念ES安装说明1.环境初始化2.优化系统资源限制配置3.编辑ES服务文件elasticsearch. yml 优化ELK集群安装脚本scp的使用集群安装成功 Shell命令API使用创建索引创建Type创建分…...

Linux初学基本命令

linux文件目录 1、bin->usr/bin binary存放命令 所有账户可以使用 Linux可以执行的文件&#xff0c;我们称之为命令command 2、boot 存放系统启动文件 3、dev device存放设备文件 4、etc 存放配置文件的目录 configration files 5、home home家目录 存…...

如何优化PyTorch以加快模型训练速度?

PyTorch是当今生产环境中最流行的深度学习框架之一。随着模型变得日益复杂、数据集日益庞大&#xff0c;优化模型训练性能对于缩短训练时间和提高生产力变得至关重要。 本文将分享几个最新的性能调优技巧&#xff0c;以加速跨领域的机器学习模型的训练。这些技巧对任何想要使用…...

用最简单的方法对大数据进行处理 vs spark(不需要安装大数据处理工具)

一、大文件处理策略 &#xff08;一&#xff09;、难点 内存管理&#xff1a; 大文件无法一次性加载到内存中&#xff0c;因为这可能会导致内存溢出&#xff08;OutOfMemoryError&#xff09;。 因此&#xff0c;需要使用流&#xff08;Stream&#xff09;或缓冲区&#xff08…...

非线性校正算法在红外测温中的应用

非线性校正算法在红外测温中用于修正传感器输出与实际温度之间的非线性关系。红外传感器的输出信号&#xff08;通常是电压或电流&#xff09;与温度的关系理论上是线性的&#xff0c;但在实际应用中&#xff0c;由于传感器特性的限制&#xff0c;这种关系往往呈现出非线性。非…...

python----线程、进程、协程的区别及多线程详解

文章目录 一、线程、进程、协程区别二、创建线程1、函数创建2、类创建 三、线程锁1、Lock2、死锁2.1加锁之后处理业务逻辑&#xff0c;在释放锁之前抛出异常&#xff0c;这时的锁没有正常释放&#xff0c;当前的线程因为异常终止了&#xff0c;就会产生死锁。2.2开启两个或两个…...

将 magma example 改写成 cusolver example eqrf

1&#xff0c;简单安装Magma 1.1 下载编译 OpenBLAS $ git clone https://github.com/OpenMathLib/OpenBLAS.git $ cd OpenBLAS/ $ make -j DEBUG1 $ make install PREFIX/home/hipper/ex_magma/local_d/OpenBLAS/1.2 下载编译 magma $ git clone https://bitbucket.org/icl…...

微信小程序教程007:数据绑定

文章目录 数据绑定1、数据绑定原则2、在data中定义页面数据3、Mustache语法的格式4、Mustache应用场景5、绑定属性6、三元运算8、算数运算数据绑定 1、数据绑定原则 在data中定义数据在WXML中使用数据2、在data中定义页面数据 在页面对应的.js文件中,把数据定义到data对象中…...

Git -- git stash 暂存

使用 git 或多或少都会了解到 git stash 命令&#xff0c;但是可能未曾经常使用&#xff0c;下面简单介绍两种使用场景。 场景一&#xff1a;分支A开发&#xff0c;分支B解决bug 我们遇到最常见的例子就是&#xff0c;在当前分支 A 上开发写需求&#xff0c;但是 B 分支上有…...

基于YOLO的植物病害识别系统:从训练到部署全攻略

基于深度学习的植物叶片病害识别系统&#xff08;UI界面YOLOv8/v7/v6/v5代码训练数据集&#xff09; 1. 引言 在农业生产中&#xff0c;植物叶片病害是影响作物产量和质量的主要因素之一。传统的病害检测方法依赖于人工识别&#xff0c;效率低且易受主观因素影响。随着深度学…...

数据库开发:MySQL基础(二)

MySQL基础&#xff08;二&#xff09; 一、表的关联关系 在关系型数据库中&#xff0c;表之间可以通过关联关系进行连接和查询。关联关系是指两个或多个表之间的关系&#xff0c;通过共享相同的列或键来建立连接。常见的关联关系有三种类型&#xff1a;一对多关系&#xff0c;…...

实现物理数据库迁移到云上

实现物理数据库迁移到云上 以下是一个PHP脚本&#xff0c;用于实现物理数据库迁移到云上的步骤&#xff1a; <?php// 评估和规划 $databaseSize "100GB"; $performanceRequirements "high"; $dataComplexity "medium";$cloudProvider &…...

[Spring] MyBatis操作数据库(进阶)

&#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与…...

【Websim.ai】一句话让AI帮你生成一个网页

【Websim.ai】一句话让AI帮你生成一个网页 网站链接 websim.ai 简介 websim.ai接入了Claude Sonnet 3.5&#xff0c;GPT-4o等常用的LLM&#xff0c;只需要在websim.ai的官网指令栏中编写相关指令&#xff0c;有点类似大模型的Prompt&#xff0c;指令的好坏决定了网页生成的…...

云计算实训16——关于web,http协议,https协议,apache,nginx的学习与认知

一、web基本概念和常识 1.Web Web 服务是动态的、可交互的、跨平台的和图形化的为⽤户提供的⼀种在互联⽹上浏览信息的服务。 2.web服务器&#xff08;web server&#xff09; 也称HTTP服务器&#xff08;HTTP server&#xff09;&#xff0c;主要有 Nginx、Apache、Tomcat 等。…...

2024年必备技能:小红书笔记评论自动采集,零基础也能学会的方法

摘要&#xff1a; 面对信息爆炸的2024年&#xff0c;小红书作为热门社交平台&#xff0c;其笔记评论成为市场洞察的金矿。本文将手把手教你&#xff0c;即便编程零基础&#xff0c;也能轻松学会利用Python自动化采集小红书笔记评论&#xff0c;解锁营销新策略&#xff0c;提升…...

【Gitlab】SSH配置和克隆仓库

生成SSH Key ssh-keygen -t rsa -b 4096 私钥文件: id_rsa 公钥文件:id_rsa.pub 复制生成的ssh公钥到此处 克隆仓库 git clone repo-address 需要进行推送和同步来更新本地和服务器的文件 推送更新内容 git push <remote><branch> 拉取更新内容 git pull &…...

[Day 35] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的分布式存儲技術 區塊鏈技術自2008年比特幣白皮書發表以來&#xff0c;已經成為一種革命性的技術&#xff0c;帶來了許多創新。區塊鏈本質上是一個去中心化的分布式賬本&#xff0c;每個節點都持有賬本的副本&#xff0c;並參與記錄和驗證交易。分布式存儲是區塊鏈的重…...

Vue 3 中使用 inMap.js 实现蜂窝热力图的可视化

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Vue 3 中使用 inMap.js 实现蜂窝热力图的可视化 应用场景介绍 蜂窝热力图是一种可视化技术&#xff0c;用于在地图上显示数据的分布情况。它将数据点划分为六边形单元格&#xff0c;并根据单元格内数据的密度…...

nginx隐藏server及版本号

1、背景 为了提高nginx服务器的安全性&#xff0c;降低被攻击的风险&#xff0c;需要隐藏nginx的server和版本号。 2、隐藏nginx版本号 在 http {—}里加上 server_tokens off; 如&#xff1a; http {……省略sendfile on;tcp_nopush on;keepalive_timeout 60;tcp_nodelay o…...

Oracle DBMS_XPLAN包

DBMS_XPLAN 包的解释和关键点 DBMS_XPLAN 包是 Oracle 数据库中一个重要的工具&#xff0c;它允许数据库管理员和开发人员以各种方式显示 SQL 语句的执行计划&#xff0c;这对于 SQL 优化和性能诊断至关重要。以下是主要函数及其描述&#xff1a; 用于显示执行计划的主要函数…...

【ffmpeg命令入门】分离音视频流

文章目录 前言音视频交错存储概念为什么要进行音视频交错存储&#xff1a;为什么要分离音视频流&#xff1a; 去除音频去除视频 总结 前言 FFmpeg 是一款强大的多媒体处理工具&#xff0c;广泛应用于音视频的录制、转换和流媒体处理等领域。它支持几乎所有的音频和视频格式&am…...

小红书笔记评论采集全攻略:三种高效方法教你批量导出

摘要&#xff1a; 本文将深入探讨如何利用Python高效采集小红书平台上的笔记评论&#xff0c;通过三种实战策略&#xff0c;手把手教你实现批量数据导出。无论是市场分析、竞品监测还是用户反馈收集&#xff0c;这些技巧都将为你解锁新效率。 一、引言&#xff1a;小红书数据…...

实战:ZooKeeper 操作命令和集群部署

ZooKeeper 操作命令 ZooKeeper的操作命令主要用于对ZooKeeper服务中的节点进行创建、查看、修改和删除等操作。以下是一些常用的ZooKeeper操作命令及其说明&#xff1a; 一、启动与连接 启动ZooKeeper服务器&#xff1a; ./zkServer.sh start这个命令用于启动ZooKeeper服务器…...

linux运维一天一个shell命令之 top详解

概念&#xff1a; top 命令是 Unix 和类 Unix 操作系统&#xff08;如 Linux、macOS&#xff09;中一个常用的系统监控工具&#xff0c;它提供了一个动态的实时视图&#xff0c;显示系统的整体性能信息&#xff0c;如 CPU 使用率、内存使用情况、进程列表等。 基本用法 root…...

大模型微调:参数高效微调(PEFT)方法总结

PEFT (Parameter-Efficient Fine-Tuning) 参数高效微调是一种针对大模型微调的技术&#xff0c;旨在减少微调过程中需要调整的参数量&#xff0c;同时保持或提高模型的性能。 以LORA、Adapter Tuning 和 Prompt Tuning 为主的PEFT方法总结如下 LORA 论文题目&#xff1a;LORA:…...

Spark+实例解读

第一部分 Spark入门 学习教程&#xff1a;Spark 教程 | Spark 教程 Spark 集成了许多大数据工具&#xff0c;例如 Spark 可以处理任何 Hadoop 数据源&#xff0c;也能在 Hadoop 集群上执行。大数据业内有个共识认为&#xff0c;Spark 只是Hadoop MapReduce 的扩展&#xff08…...

WPF多语言国际化,中英文切换

通过切换资源文件的形式实现中英文一键切换 在项目中新建Language文件夹&#xff0c;添加资源字典&#xff08;xaml文件&#xff09;&#xff0c;中文英文各一个。 在资源字典中写上想中英文切换的字符串&#xff0c;需要注意&#xff0c;必须指定key值&#xff0c;并且中英文…...

Halcon深度学习分类模型

1.Halcon20之后深度学习支持CPU训练模型&#xff0c;没有money买显卡的小伙伴有福了。但是缺点也很明显&#xff0c;就是训练速度超级慢&#xff0c;推理效果也没有GPU好&#xff0c;不过学习用足够。 2.分类模型是Halcon深度学习最简单的模型&#xff0c;可以用在物品分类&…...

洗地机哪种牌子好?洗地机排行榜前十名公布

洗地机市场上品牌琳琅满目&#xff0c;每个品牌都有其独特的魅力和优势。消费者在选择时&#xff0c;往往会根据自己的实际需求、预算以及对产品性能的期望来做出决策。因此&#xff0c;无论是哪个品牌的洗地机&#xff0c;只要能够满足用户的清洁需求&#xff0c;提供便捷的操…...

C++中的虚函数与多态机制如何工作?

在C中&#xff0c;虚函数和多态机制是实现面向对象编程的重要概念。 虚函数是在基类中声明的函数&#xff0c;可以在派生类中进行重写。当基类的指针或引用指向派生类的对象时&#xff0c;通过调用虚函数可以实现动态绑定&#xff0c;即在运行时确定要调用的函数。 多态是指通…...

《LeetCode热题100》---<哈希三道>

本篇博客讲解 LeetCode热题100道中的哈希篇中的三道题。分别是 1.第一道&#xff1a;两数之和&#xff08;简单&#xff09; 2.第二道&#xff1a;字母异位词分组&#xff08;中等&#xff09; 3.第三道&#xff1a;最长连续序列&#xff08;中等&#xff09; 第一道&#xff1…...

秒懂C++之string类(下)

目录 一.接口说明 1.1 erase 1.2 replace&#xff08;最好别用&#xff09; 1.3 find 1.4 substr 1.5 rfind 1.6 find_first_of 1.7 find_last_of 二.string类的模拟实现 2.1 构造 2.2 无参构造 2.3 析构 2.4.【】运算符 2.5 迭代器 2.6 打印 2.7 reserve扩容 …...

github简单地操作

1.调节字体大小 选择options 选择text 选择select 选择你需要的参数就可以了。 2.配置用户名和邮箱 桌面右键&#xff0c;选择git Bash Here git config --global user.name 用户名 git config --global user.email 邮箱名 3.用git实现代码管理的过程 下载别人的项目 git …...

模型改进-损失函数合集

模版 第一步在哪些地方做出修改&#xff1a; 228行 self.use_wiseiouTrue 230行 self.wiou_loss WiseIouLoss(ltypeMPDIoU, monotonousFalse, inner_iouTrue, focaler_iouFalse) 238行 wiou self.wiou_loss(pred_bboxes[fg_mask], target_bboxes[fg_mask], ret_iouFalse…...

C++模板(初阶)

1.引入 在之前的笔记中有提到&#xff1a;函数重载&#xff08;特别是交换函数&#xff08;Swap&#xff09;的实现&#xff09; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {do…...

下面关于Date类的描述错误的一项是?

下面关于Date类的描述错误的一项是&#xff1f; A. java.util.Date类下有三个子类&#xff1a;java.sql.Date、java.sql.Timestamp、java.sql.Time&#xff1b; B. 利用SimpleDateFormat类可以对java.util.Date类进行格式化显示&#xff1b; C. 直接输出Date类对象就可以取得日…...

【Python面试题收录】Python编程基础练习题①(数据类型+函数+文件操作)

本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题&#xff08;str&#xff09; 请编写一个Python程序&#xff0c;完成以下任务&#xff1a; 去除字符串开头和结尾的空格。使用逗号&#xff08;","&#…...

C# Nmodbus,EasyModbusTCP读写操作

Nmodbus读写 两个Button控件分别为 读取和写入 分别使用控件的点击方法 ①引用第三方《NModbus4》2.1.0版本 全局 public SerialPort port new SerialPort("COM2", 9600, Parity.None, 8, (StopBits)1); ModbusSerialMaster master; public Form1() port.Open();…...

spark常用参数调优

目录 1.set spark.grouping.sets.reference.hivetrue;2.set spark.locality.wait.rack0s3.set spark.locality.wait0s;4.set spark.executor.memoryOverhead 2G;5.set spark.sql.shuffle.partitions 1000;6.set spark.shuffle.file.buffer 256k7. set spark.reducer.maxSizeInF…...

C#/WinFrom TCP通信+ 网线插拔检测+客服端异常掉线检测

Winfor Tcp通信(服务端) 今天给大家讲一下C# 关于Tcp 通信部分&#xff0c;这一块的教程网上一大堆&#xff0c;不过关于掉网&#xff0c;异常断开连接的这部分到是到是没有多少说明&#xff0c;有方法 不过基本上最多的两种方式&#xff08;1.设置一个超时时间&#xff0c;2.…...

一篇文章掌握Python爬虫的80%

转载&#xff1a;一篇文章掌握Python爬虫的80% Python爬虫 Python 爬虫技术在数据采集和信息获取中有着广泛的应用。本文将带你掌握Python爬虫的核心知识&#xff0c;帮助你迅速成为一名爬虫高手。以下内容将涵盖爬虫的基本概念、常用库、核心技术和实战案例。 一、Python 爬虫…...

【用户会话信息在异步事件/线程池的传递】

用户会话信息在异步事件/线程池的传递 author:shengfq date:2024-07-29 version:1.0 背景: 同事写的一个代码功能,是在一个主线程中通过如下代码进行异步任务的执行,结果遇到了问题. 1.ThreadPool.execute(Runnable)启动一个子线程执行异步任务 2.applicationContext.publis…...

Java8: BigDecimal

Java8:BigDecimal 转两位小数的百分数-CSDN博客 BigDecimal 先做除法 然后取绝对值 在Java 8中&#xff0c;如果你想要对一个BigDecimal值进行除法操作&#xff0c;并随后取其绝对值&#xff0c;你可以通过组合divide方法和abs方法来实现这一目的。不过&#xff0c;需要注意的…...

苹果推送iOS 18.1带来Apple Intelligence预览

&#x1f989; AI新闻 &#x1f680; 苹果推送iOS 18.1带来Apple Intelligence预览 摘要&#xff1a;苹果向iPhone和iPad用户推送iOS 18.1和iPadOS 18.1开发者预览版Beta更新&#xff0c;带来“Apple Intelligence”预览。目前仅支持M1芯片或更高版本的设备。Apple Intellige…...

testRigor-基于人工智能驱动的无代码自动化测试平台

1、testRigor介绍 简单来说&#xff0c;testRigor是一款基于人工智能驱动的无代码自动化测试平台&#xff0c;它能够通过分析应用的行为模式&#xff0c;智能地生成测试用例&#xff0c;并自动执行这些测试&#xff0c;无需人工编写测试脚本。可以用于Web、移动、API和本机桌面…...

hadoop学习(一)

一.hadoop概述 1.1hadoop优势 1&#xff09;高可靠性&#xff1a;Hadoop底层维护多个数据副本&#xff0c;即使Hadoop某个计算元素或存储出现故障&#xff0c;也不会导致数据的丢失。 2&#xff09;高扩展性&#xff1a;在集群间分配任务数据&#xff0c;可方便扩展数以千计…...

Linux性能监控:sar的可视化方案

在当今的IT环境中&#xff0c;系统性能监控是确保应用程序稳定运行和快速响应问题的关键。Linux作为一种广泛使用的操作系统&#xff0c;拥有多种性能监控工具&#xff0c;其中sar&#xff08;System Activity Reporter&#xff09;因其全面性和灵活性被广泛采用。然而&#xf…...

如何录制电脑屏幕视频,5招让您成为电脑录制高手

在今天&#xff0c;屏幕录制成为每个电脑使用者都应掌握的基础技能。不论是教学分享、会议记录还是游戏直播&#xff0c;屏幕录制都能帮你捕捉那些重要的瞬间&#xff0c;将无形的信息转化为有形的视频。那么&#xff0c;如何录制电脑屏幕视频呢&#xff1f;今天&#xff0c;我…...

AI届的新宠:小语言模型(SLM)?

大语言模型&#xff08;LLM&#xff09;在过去几年产生了巨大影响&#xff0c;特别是随着OpenAI的ChatGPT的出现&#xff0c;各种大语言模型如雨后春笋般出现&#xff0c;国内如KimiChat、通义千问、文心一言和智谱清言等。 然而&#xff0c;大语言模型通常拥有庞大的参数&…...