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

ELK(Elasticsearch + logstash + kibana + Filebeat + Kafka + Zookeeper)日志分析系统

文章目录

  • 前言
    • 架构
    • 软件包下载
  • 一、准备工作
    • 1. Linux 网络设置
    • 2. 配置hosts文件
    • 3. 配置免密登录
    • 4. 设置 NTP 时钟同步
    • 5. 关闭防火墙
    • 6. 关闭交换分区
    • 7. 调整内存映射区域数限制
    • 8. 调整文件、进程、内存资源限制
  • 二、JDK 安装
    • 1. 解压软件
    • 2. 配置环境变量
    • 3. 验证软件
  • 三、安装 ElasticSearch 集群
    • 1. 下载 elasticsearch 安装包
    • 2. 创建用户
    • 3. 创建日志文件夹
    • 4. 解压并重命名
    • 5. 创建ca证书
    • 6. 设置节点 HTTP 证书
    • 7. 修改配置文件
    • 8. 启动 es 集群
    • 9. 验证
      • 查询节点状态
      • 查看 ES 集群状态
      • 查看 ES 中有哪些用户
  • 四、安装 Kibana
    • 1. 下载 Kibana 安装包
    • 2. 解压并重命名
    • 3. 给kibana 生成证书
    • 4. ES为kibana创建用户
    • 5. 修改配置文件
    • 6. 启动 Kibana
    • 7. 浏览器访问
  • 五、安装 zookeeper 集群
    • 1. 下载 zookeeper 安装包
    • 2. 解压并重命名
    • 3. 修改配置文件
    • 4. 创建文件夹并指定myid文件
    • 5. 拷贝文件到其他服务器
    • 6. 启动 zookeeper
    • 7. 配置 zookeeper 启动脚本
  • 六、安装 kafka 集群
    • 1. 下载安装包
    • 2. 解压并重命名
    • 3. 修改配置文件
    • 4. 拷贝配置文件到其他服务器
    • 5. 启动 kafka 集群
    • 6. 验证
    • 7. 配置 kafka 启动脚本
  • 七、安装 Logstash
    • 1. 下载 logstash 安装包
    • 2. 解压并重命名
    • 3. 新建日志文件夹
    • 3. 修改配置文件
    • 4. 启动 logstash
    • 5. 验证
  • 八、安装Filebeat
    • 1. 下载 Filebeat 安装包
    • 2. 解压并重命名
    • 3. 修改配置文件
    • 4. 启动 filebeat
    • 5. 启动脚本
    • 6. 验证
  • 补充知识
    • 1. docker 安装


前言

架构

主机名IP软件
elk1192.168.75.130elasticsearch、zookeeper、kafka、filebeat
elk2192.168.75.131elasticsearch、zookeeper、kafka、filebeat
elk3192.168.75.132elasticsearch、zookeeper、kafka、filebeat
elk4192.168.75.133logstash、kibana

整体流程:各个服务日志.log --> filebeat --> kafka --> logstash --> zokeeper --> kibana


每层实现的功能和含义分别介绍如下:

  • 数据采集层:数据采集层位于最左边的业务服务器集群上,在每个业务服务器上面安装了fiebeat做日志收集,然后把采集到的原始日志发送到 Kafka+zookeeper 集群上。
  • 消息队列层:原始日志发送到 Kafka+zookeeper 集群上后,会进行集中存储此时,filbeat 是消息的生产者,存储的消息可以随时被消费。
  • 数据分析层:Logstash作为消费者,会去 Kafka+zookeeper 集群节点实时拉取原始日志然后将获取到的原始日志根据规则进行分析、清洗、过滤,最后将清洗好的日志转发至Elasticsearch焦群,
  • 数据持久化存储:Elasticsearch焦群在接收到logstash发送过来的数据后,执行写磁盘,建索引库等操作,最后将结构化的数据存储到 Elasticsearch 集群。
  • 数据查询、展示层:Kibana是一个可视化的数据展示平台,当有数据检索请求时,它从Elasticsearch集群上读取数据,然后进行可视化出图和多维度分析。

软件包下载

ES 官网:https://www.elastic.co

zookeeper官网:https://archive.apache.org/dist/zookeeper/

kafka 官网:https://kafka.apache.org/downloads.html

下载的软件上传到服务器的 /opt/software文件夹下。

一、准备工作

1. Linux 网络设置

查看 ip 命令:ip addr

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=static    #修改
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=78085897-65c9-472d-831b-ebc34fb54667
DEVICE=ens33
ONBOOT=yes    #修改
IPADDR=192.168.1.22    #修改
NETMASK=255.255.255.0    #修改
GATEWAY=192.168.1.1    #修改
DNS1=8.8.8.8    #修改[root@localhost ~]# cat /etc/resolv.conf 
search localdomain
nameserver 127.0.0.1
nameserver 8.8.8.8
nameserver 114.114.114.114# 重启网络
service network restart

centos7 -bash: ifconfig: 未找到命令

执行命令:sudo yum install net-tools

在centos7中使用yum命令时候报错

Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"

问题原因

出现这个错误是因为使用的 CentOS 7 仓库已经被归档,当前的镜像地址无法找到所需的文件。CentOS 7 的官方支持已经结束,部分仓库已被移至归档库。这导致了你的 yum 命令无法找到所需的元数据文件。CentOS 7 的官方仓库在 2024 年 6 月 30 日之后已经停止维护。因此,使用最新的 CentOS 7 官方仓库可能会遇到问题。

解决方法

进入/etc/yum.repos.d目录下找到 CentOS-Base.repo
进入目录:cd /etc/yum.repos.d

cp  CentOS-Base.repo   CentOS-Base.repo.backup
vi CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#released updates 
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#$baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
sudo yum clean all
sudo yum makecache

参考:https://www.cnblogs.com/kohler21/p/18331060

2. 配置hosts文件

# 修改主机名称
vi/etc/hostname# 设置域名
vi /etc/hosts# 配置内容
190.168.75.130 elk1
190.168.75.131 elk2
190.168.75.132 elk3
190.168.75.133 elk4

3. 配置免密登录

# 生成密钥对
[root@elk1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:HN6G18wMYBmiGHqpablW7Hy4wyVx2u6wpSJEgLhV3Fs root@elk1
The key's randomart image is:
+---[RSA 2048]----+
|o .o... +o       |
|+..+...oE.       |
|oo+ .  o. .      |
|.=o. ..o + *     |
|+o o=   S + =    |
|..=o.o   o       |
|.o.=+o           |
|o. oB.           |
|. .+o.           |
+----[SHA256]-----+# 发送公钥
ssh-copy-id -i /root/.ssh/id_rsa.pub root@elk2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@elk3

scp:用于将文件或者目录从一个Linux系统拷贝到另一个Linux系统下。scp传输数据用的是SSH协议,保证了数据传输的安全。

scp 本地Linux系统文件路径 远程用户名@IP地址:远程系统文件绝对路径名举例:
scp -r /opt/module/ root@192.168.75.131:/opt/

注意:这里的 .ssh 不是一个文件。

scp适用于简单的小规模文件传输;rsync适用于高效的文件同步和增量备份

# scp、 拷贝完全相同
scp -r /opt/software/ root@elk2:/opt/
# rsync、拷贝有差异的文件
rsync -rvl /opt/software/a.txt  root@elk2:/opt/software/a.txt

4. 设置 NTP 时钟同步

# 安装ntpdate
yum -y install ntpdate# 同步时钟
ntpdate ntp.aliyun.com# 配置时钟同步定时任务
echo "*/5 * * * * ntpdate ntp.aliyun.com > /dev/null 2>&1" > /var/spool/cron/root

5. 关闭防火墙

# 查看虚拟机防火墙状态
systemctl status firewalld# 如何关闭防火墙
systemctl stop firewalld# 禁止firewall开机启动
systemctl disable firewalld.service# 将SELinux设置为宽容模式
setenforce 0

6. 关闭交换分区

# 临时生效
swapoff -a# 永久生效
vi /etc/fstab
# swap 相关的行

7. 调整内存映射区域数限制

rm -rf /etc/sysctl.d/99-sysctl.confvi /etc/sysctl.conf# 在文件中增加下面内容:
# 一个进程可以拥有的 VMA(虚拟内存区域)的数量,默认值为 65536
vm.max_map_count=262144# 重新加载
sysctl -p

8. 调整文件、进程、内存资源限制

vi /etc/security/limits.conf# 文件最后添加以下内容:
* soft nofile 65535
* hard nofile 65535
* soft nproc 10240
* hard nproc 10240
* soft memlock unlimited
* hard memlock unlimited# 注: * 带表 Linux 所有用户名称

二、JDK 安装

官网下载地址:https://www.oracle.com/java/technologies/downloads/archive/

# 查看系统版本
[root@hadoop1 yum.repos.d]# uname -a
Linux hadoop1 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# 查询系统位数(32位或64位)
[root@hadoop1 yum.repos.d]# getconf LONG_BIT
64

说明:要判断Cent0S系统是x64还是ARM架构,可以使用命令行工具lscpu1、uname-m或arch_linux2、或者直接输入命令uname-a34。如果lscpu命令的"Architecture”字段的值为”x86_64”,则表示系统是x64架构;如果值为"armv7l"、“aarch64"或类似的ARM架构标识,则表示系统是ARM架构1。如果uname-m或arch_linux命令的输出是”x86 64”,则表示系统是x64架构;如果输出是"armv7l"或以"arm"开头的其他值,则表示系统是ARM架构23。如果uname-a命令的输出中包含关键词“x86_64",则表示系统是x64架构;如果显示的是“aarch64,则表示系统是ARM架构34。

1. 解压软件

tar -zxvf jdk-8u421-linux-x64.tar -C /usr/java/

2. 配置环境变量

vi /etc/profile# 文件尾部编辑,添加下面内容
# 配置jdk的按照目录JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_421
# 配置CLASSPATH环境变量(可以不配置)
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 配置环境变量PATH
export PATH=$JAVA_HOME/bin:$PATH

3. 验证软件

# 执行以下命令使修改生效
source /etc/profile# 验证安装
[root@elk3 ~]# java -version
java version "1.8.0_421"
Java(TM) SE Runtime Environment (build 1.8.0_421-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.421-b09, mixed mode)

三、安装 ElasticSearch 集群

需要在 elk1、elk2、elk3 三台机器都装 ES。

1. 下载 elasticsearch 安装包

cd /opt/software
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.0-linux-x86_64.tar.gz

2. 创建用户

# 创建用户
useradd elastic# 为用户设置密码(elastic)
passwd elastic

3. 创建日志文件夹

# 创建目录并授权
mkdir -p /data/elasticsearch
mkdir -p /logs/elasticsearchchown -R elastic:elastic /data/elasticsearch
chown -R elastic:elastic /logs/elasticsearch

4. 解压并重命名

mkdir -p /opt/moduletar -zxvf elasticsearch-8.14.0-linux-x86_64.tar.gz -C /opt/module/cd /opt/module/mv elasticsearch-8.14.0/ elasticsearch# 文件夹所有者
chown -R elastic:elastic /opt/module/elasticsearchsu - elastic

5. 创建ca证书

注意

  • 这里的证书只需要在 elk1 节点上生成,剩下的机器将文件拷贝过去即可。
  • 这里我们没有设置ca的密码,如果设置了后面在配置文件需要加上。
  • 一定要在 elastic 用户下执行创建证书命令。
cd /opt/module/elasticsearch/# 签发 ca 证书,过程中需按两次回车键
./bin/elasticsearch-certutil ca
# 用 ca 证书签发节点证书,过程中需按三次回车键
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12# 将生成的文件移动到 config/certs 中
mkdir /opt/module/elasticsearch/config/certs
mv elastic-certificates.p12 elastic-stack-ca.p12 ./config/certs/

6. 设置节点 HTTP 证书

[elastic@elk1 elasticsearch]$ ./bin/elasticsearch-certutil http
warning: ignoring JAVA_HOME=/usr/java/jdk1.8.0_421; using bundled JDK## Elasticsearch HTTP Certificate UtilityThe 'http' command guides you through the process of generating certificates
for use on the HTTP (Rest) interface for Elasticsearch.This tool will ask you a number of questions in order to generate the right
set of files for your needs.## Do you wish to generate a Certificate Signing Request (CSR)?A CSR is used when you want your certificate to be created by an existing
Certificate Authority (CA) that you do not control (that is, you don't have
access to the keys for that CA). If you are in a corporate environment with a central security team, then you
may have an existing Corporate CA that can generate your certificate for you.
Infrastructure within your organisation may already be configured to trust this
CA, so it may be easier for clients to connect to Elasticsearch if you use a
CSR and send that request to the team that controls your CA.If you choose not to generate a CSR, this tool will generate a new certificate
for you. That certificate will be signed by a CA under your control. This is a
quick and easy way to secure your cluster with TLS, but you will need to
configure all your clients to trust that custom CA.# 当询问你是否要生成 CSR 时,输入 n。
Generate a CSR? [y/N]n## Do you have an existing Certificate Authority (CA) key-pair that you wish to use to sign your certificate?If you have an existing CA certificate and key, then you can use that CA to
sign your new http certificate. This allows you to use the same CA across
multiple Elasticsearch clusters which can make it easier to configure clients,
and may be easier for you to manage.If you do not have an existing CA, one will be generated for you.# 当询问你是否要使用现有 CA 时,输入 y。
Use an existing CA? [y/N]y## What is the path to your CA?Please enter the full pathname to the Certificate Authority that you wish to
use for signing your new http certificate. This can be in PKCS#12 (.p12), JKS
(.jks) or PEM (.crt, .key, .pem) format.
# 输入新 CA 证书的绝对路径,例如 ca.crt 文件的路径。
CA Path: certs/elastic-stack-ca.p12
Reading a PKCS12 keystore requires a password.
It is possible for the keystore's password to be blank,
in which case you can simply press <ENTER> at the prompt
# 设置证书密码
Password for elastic-stack-ca.p12:## How long should your certificates be valid?Every certificate has an expiry date. When the expiry date is reached clients
will stop trusting your certificate and TLS connections will fail.Best practice suggests that you should either:
(a) set this to a short duration (90 - 120 days) and have automatic processes
to generate a new certificate before the old one expires, or
(b) set it to a longer duration (3 - 5 years) and then perform a manual update
a few months before it expires.You may enter the validity period in years (e.g. 3Y), months (e.g. 18M), or days (e.g. 90D)# 输入证书的到期值。你可以输入年、月或日的有效期。例如,输入 5y 表示一年。
For how long should your certificate be valid? [5y] 5y## Do you wish to generate one certificate per node?If you have multiple nodes in your cluster, then you may choose to generate a
separate certificate for each of these nodes. Each certificate will have its
own private key, and will be issued for a specific hostname or IP address.Alternatively, you may wish to generate a single certificate that is valid
across all the hostnames or addresses in your cluster.If all of your nodes will be accessed through a single domain
(e.g. node01.es.example.com, node02.es.example.com, etc) then you may find it
simpler to generate one certificate with a wildcard hostname (*.es.example.com)
and use that across all of your nodes.However, if you do not have a common domain name, and you expect to add
additional nodes to your cluster in the future, then you should generate a
certificate per node so that you can more easily generate new certificates when
you provision new nodes.# 当询问你是否要为每个节点生成一个证书时,输入 n。
Generate a certificate per node? [y/N]n## Which hostnames will be used to connect to your nodes?
# 每个证书都有自己的私钥,并针对特定的主机名或IP 地址颁发。These hostnames will be added as "DNS" names in the "Subject Alternative Name"
(SAN) field in your certificate.You should list every hostname and variant that people will use to connect to
your cluster over http.
Do not list IP addresses here, you will be asked to enter them later.If you wish to use a wildcard certificate (for example *.es.example.com) you
can enter that here.Enter all the hostnames that you need, one per line.
When you are done, press <ENTER> once more to move on to the next step.# 出现提示时,输入集群中第一个节点的名称。使用与 elasticsearch.yml 文件中 node.name 参数的值相同的节点名称。
elk1
elk2
elk3You entered the following hostnames.- elk1- elk2- elk3Is this correct [Y/n]y## Which IP addresses will be used to connect to your nodes?If your clients will ever connect to your nodes by numeric IP address, then you
can list these as valid IP "Subject Alternative Name" (SAN) fields in your
certificate.If you do not have fixed IP addresses, or not wish to support direct IP access
to your cluster then you can just press <ENTER> to skip this step.Enter all the IP addresses that you need, one per line.
When you are done, press <ENTER> once more to move on to the next step.# 输入用于连接到你的第一个节点的所有主机名。这些主机名将作为 DNS 名称添加到证书的主题备用名称 (SAN) 字段中。
192.168.75.130
192.168.75.131
192.168.75.132You entered the following IP addresses.- 192.168.75.130- 192.168.75.131- 192.168.75.132Is this correct [Y/n]y## Other certificate optionsThe generated certificate will have the following additional configuration
values. These values have been selected based on a combination of the
information you have provided above and secure defaults. You should not need to
change these values unless you have specific requirements.Key Name: elk1
Subject DN: CN=elk1
Key Size: 2048# 您想更改这些选项中的任何一个吗
Do you wish to change any of these options? [y/N]n## What password do you want for your private key(s)?Your private key(s) will be stored in a PKCS#12 keystore file named "http.p12".
This type of keystore is always password protected, but it is possible to use a
blank password.If you wish to use a blank password, simply press <enter> at the prompt below.
# 设置http证书密码
Provide a password for the "http.p12" file:  [<ENTER> for none]## Where should we save the generated files?A number of files will be generated including your private key(s),
public certificate(s), and sample configuration options for Elastic Stack products.These files will be included in a single zip archive.# 输出zip文件应该使用什么文件名?
What filename should be used for the output zip file? [/opt/module/elasticsearch/elasticsearch-ssl-http.zip] Zip file written to /opt/module/elasticsearch/elasticsearch-ssl-http.zi
# 安装 unzip 软件
sudo yum install unzip# 解压刚刚生成的zip包
unzip elasticsearch-ssl-http.zip
# 将解压后的证书文件移动到config/certs 目录中
mv elasticsearch/http.p12 kibana/elasticsearch-ca.pem config/certs

7. 修改配置文件

# 虚拟机占用大小
vi jvm.options# 修改内容,默认是4g
-Xms2g
-Xmx2g
cd /opt/module/elasticsearch/config
cp elasticsearch.yml elasticsearch.yml.bak
vi elasticsearch.yml
  • 修改内容如下:
# 集群名称
cluster.name: elk-elasticsearch# 节点名称(每个节点需唯一)
node.name: elk1  # 其他节点分别命名为 elk2、elk3# 数据和日志路径
path.data: /data/elasticsearch
path.logs: /logs/elasticsearch# 锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高
bootstrap.memory_lock: true# 网络设置
network.host: 192.168.75.130 # 配置为当前elasticsearch节点主机的ip# 端口
http.port: 9200# head 插件需要这打开这两个配置(新增)
transport.port: 9300
http.cors.enabled: true
http.cors.allow-origin: /.*/# 集群节点发现(9300为默认的集群通信端口)
discovery.seed_hosts: ["192.168.75.130:9300", "192.168.75.131:9300", "192.168.75.132:9300"]# 初始主节点(第一次启动指定)
cluster.initial_master_nodes: ["elk1"]# SSL权限认证(新增)
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /opt/module/elasticsearch/config/certs/elastic-certificates.p12
#xpack.security.transport.ssl.keystore.password: your-password
xpack.security.transport.ssl.truststore.path: /opt/module/elasticsearch/config/certs/elastic-certificates.p12
#xpack.security.transport.ssl.truststore.password: your-password# https方式访问 ES(新增)
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: /opt/module/elasticsearch/config/certs/http.p12
#xpack.security.http.ssl.keystore.password: your-password
xpack.security.http.ssl.truststore.path: /opt/module/elasticsearch/config/certs/http.p12
#xpack.security.http.ssl.truststore.password: your-passwordhttp.host: [_local_, _site_]
ingest.geoip.downloader.enabled: false
# 客户端证书验证,默认就是none
xpack.security.http.ssl.client_authentication: none

注意:修改每个配置文件的 节点名称、ip 地址。节点名称为集群节点的唯一标识,不能重复,可以不配置,elasticsearch也可以自动生成;

# 这里是我们不设置https协议时执行的命令
# 这里需要为4个用户分别设置密码,elastic, kibana, logstash_system,beats_system。(interactive 手动设置, auto 自动生成密码)
# ./bin/elasticsearch-setup-passwords interactive# 如果执行上面命令报错,需要删除.security-7索引文件
# curl -XDELETE 127.0.0.1:9200/.security-7

8. 启动 es 集群

cd /opt/module/elasticsearch
# 启动
./bin/elasticsearch
# 后台启动
./bin/elasticsearch -d
  • 查看日志显示用户名和密码
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 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`):xpMY4LD2-xbhm5yKb3WS
# 解释: 系统为 elastic 用户生成了一个随机密码。你可以使用这个密码进行登录和管理。
# 如果需要重置密码,可以使用 `bin/elasticsearch-reset-password -u elastic` 命令。❌ Unable to generate an enrollment token for Kibana instances, try invoking `bin/elasticsearch-create-enrollment-token -s kibana`.
# 解释: 使用命令 `bin/elasticsearch-create-enrollment-token -s node` 创建一个节点注册令牌。❌ An enrollment token to enroll new nodes wasn't generated. To add nodes and enroll them into this cluster:
• On this node:⁃ Create an enrollment token with `bin/elasticsearch-create-enrollment-token -s node`.⁃ Restart Elasticsearch.
• On other nodes:⁃ Start Elasticsearch with `bin/elasticsearch --enrollment-token <token>`, using the enrollment token that you generated.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

9. 验证

# 查看是否启动
netstat -tnulp | grep 9200  # 根据端口查看# 查看集群内部通信
netstat -anpl | grep 9300

查询节点状态

浏览器中输入地址:https://192.168.75.130:9200/

查看 ES 集群状态

浏览器中输入地址:https://192.168.75.130:9200/_cat/nodes

查看 ES 中有哪些用户

浏览器中输入地址:https://192.168.75.130:9200/_security/user

启动报错

ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
ERROR: Elasticsearch did not exit normally - check the logs at /logs/elasticsearch/ycyh-elasticsearch.log

解决方案参考:https://blog.csdn.net/qq_21348527/article/details/114822914

四、安装 Kibana

只需要在 elk4 机器上装。

1. 下载 Kibana 安装包

cd /opt/software
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.14.0-linux-x86_64.tar.gz

2. 解压并重命名

tar -zxvf kibana-8.14.0-linux-x86_64.tar.gz -C /opt/module/
cd /opt/module/
mv kibana-8.14.0/ kibana
chown -R elastic:elastic /opt/module/kibana/
# 创建日志文件夹
mkdir -p /logs/kibana/
chown -R elastic:elastic /logs/kibana/
# 切换用户
su - elastic

3. 给kibana 生成证书

# 在 es 服务器生成证书,输入回车即可
cd /opt/module/zookeeper
./bin/elasticsearch-certutil csr -name kibana -dns elk1# 解压文件
unzip csr-bundle.zip# 将解压后的文件移动到 kibana 的config 目录下
cd kibana
mv kibana.csr kibana.key /opt/module/kibana/config/# 生成crt文件
cd /opt/module/kibana/config/
openssl x509 -req -in kibana.csr -signkey kibana.key -out kibana.crt

4. ES为kibana创建用户

cd /opt/module/zookeeper/
./bin/elasticsearch-reset-password -i -u kibana_system
#输入y 回车

5. 修改配置文件

cp kibana.yml kibana.yml.bakvi kibana.yml
  • 修改内容如下:
# Kibana 后端服务器使用的端口。默认为 5601
server.port: 5601# Kibana 服务器绑定的地址
server.host: "elk4"# Kibana 服务器的名称,用于显示
server.name: "elk4"# Elasticsearch 服务器的 URL 列表
elasticsearch.hosts: ["https://192.168.75.130:9200","https://192.168.75.131:9200","https://192.168.75.132:9200"]# Elasticsearch 基本认证的用户名和密码
elasticsearch.username: "kibana_system"
elasticsearch.password: "1qaz2wsx"# 启用 SSL 并指定证书和密钥路径
server.ssl.enabled: true
server.ssl.certificate: /opt/module/kibana/config/kibana.crt
server.ssl.key: /opt/module/kibana/config/kibana.key# Elasticsearch 实例的 CA 证书路径
elasticsearch.ssl.certificateAuthorities: [ "/opt/module/elasticsearch/config/certs/elasticsearch-ca.pem" ]# SSL 证书验证模式
elasticsearch.ssl.verificationMode: none# Kibana 的语言环境设置
i18n.locale: "zh-CN"

其他参数说明参考官网:https://www.elastic.co/guide/cn/kibana/current/settings.html

6. 启动 Kibana

注意:Kibana不建议使用root用户直接运行,如使用root,需加上–allow-root。建议新建普通用户,使用普通用户运行。

cd /opt/module/kibana
# 启动
./bin/kibana
# 后台启动
nohup ./bin/kibana &# 停止kibana
netstat -tunlp|grep 5601
kill -9 111235

启动报错官网说明
在这里插入图片描述

从 7.17.13 开始,Kibana 已将其运行时环境 Node.js 从版本 16 升级到版本 18,并将 OpenSSL 的底层版本升级到版本 3。被 OpenSSL 3 视为遗留的算法已重新启用,以避免在 Kibana 的次要版本中发生潜在的重大更改。如果为 Kibana 配置的 SSL 证书未使用 OpenSSL 旧版提供程序文档中提到的任何旧版算法,我们建议通过删除 node.options 配置文件中的 --openssl-legacy-provider 来禁用此设置。

7. 浏览器访问

https://192.168.75.130:5601 登录 Kibana,单击“Create Index Pattern ”按钮添加名称 “elk-collect-logs”,索引“collect-logs-*”,单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
在这里插入图片描述

五、安装 zookeeper 集群

需要在 elk1、elk2、elk3 三台机器都装 ES。

1. 下载 zookeeper 安装包

cd /opt/software
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz

2. 解压并重命名

tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/
mv apache-zookeeper-3.5.7-bin/ zookeeper
chown -R elastic:elastic /opt/module/zookeeper/

3. 修改配置文件

su - elastic
cd /opt/module/zookeeper/conf
cp zoo_sample.cfg zoo.cfgvim zoo.cfg
  • 修改内容
tickTime=2000   #通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
initLimit=10    #Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量),这里表示为10*2s
syncLimit=5     #Leader和Follower之间同步通信的超时时间,这里表示如果超过5*2s,Leader认为Follwer死掉,并从服务器列表中删除Follwer
dataDir=/opt/module/zookeeper/data		#修改,指定保存Zookeeper中的数据的目录,目录需要单独创建
dataLogDir=/opt/module/zookeeper/logs		#添加,指定存放日志的目录,目录需要单独创建
clientPort=2181   #客户端连接端口#添加集群信息
server.1=192.168.75.130:3188:3288
server.2=192.168.75.131:3188:3288
server.3=192.168.75.132:3188:3288

server.A=B:C:D 说明:

  • A是一个数字,表示这个是第几号服务器。集群模式下需要在zoo.cfg中dataDir指定的目录下创建一个文件myid,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
  • B是这个服务器的地址。
  • C是这个服务器Follower与集群中的Leader服务器交换信息的端口。
  • D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

4. 创建文件夹并指定myid文件

# 在每个节点上创建数据目录和日志目录
mkdir /opt/module/zookeeper/data
mkdir /opt/module/zookeeper/logs

分别在每台机器的 dataDir 指定的目录下创建一个 myid 的文件

[root@elk1 ~]# echo 1 > /opt/module/zookeeper/data/myid[root@elk2 ~]# echo 2 > /opt/module/zookeeper/data/myid[root@elk3 ~]# echo 3 > /opt/module/zookeeper/data/myid

5. 拷贝文件到其他服务器

scp -r /opt/module/zookeeper/conf/zoo.cfg root@192.168.75.131:/opt/module/zookeeper/conf/zoo.cfg
scp -r /opt/module/zookeeper/conf/zoo.cfg root@192.168.75.132:/opt/module/zookeeper/conf/zoo.cfg

6. 启动 zookeeper

cd /opt/module/zookeeper
# 启动
./bin/zkServer.sh start# 停止
./bin/zkServer.sh stop# 查看服务状态
./bin/zkServer.sh status# 后台启动
nohup ./zkServer.sh start >> /logs/zookeeper.file 2>&1 &# 连接zk服务端
./bin/zkCli.sh

7. 配置 zookeeper 启动脚本

cd /usr/local/bin# 创建文件
vi zookeeper.sh# 添加执行权限
chmod 777 zookeeper.sh
#!/bin/shcase $1 in
"start"){for i in elk1 elk2 elk3doecho "********$i --> zkServer.sh start **********"ssh $i 'source /etc/profile; /opt/module/zookeeper/bin/zkServer.sh start;exit'done
};;
"stop"){for i in elk1 elk2 elk3doecho "********$i --> zkServer.sh stop **********"ssh $i 'source /etc/profile;  /opt/module/zookeeper/bin/zkServer.sh stop;exit'done
};;
"status"){for i in elk1 elk2 elk3doecho "********$i --> zkServer.sh status **********"ssh $i 'source /etc/profile; /opt/module/zookeeper/bin/zkServer.sh status;exit'done
};;
"restart"){for i in elk1 elk2 elk3doecho "********$i --> zkServer.sh restart **********"ssh $i 'source /etc/profile; /opt/module/zookeeper/bin/zkServer.sh restart;exit'done
};;
esac
# 可在任何位置执行该脚本
zookeeper.sh start# 查看启动状态
zookeeper.sh status

六、安装 kafka 集群

需要在 elk1、elk2、elk3 三台机器都装 ES。

1. 下载安装包

cd /opt/software
wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.1/kafka_2.13-2.7.1.tgz

2. 解压并重命名

tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/
cd /opt/module
mv kafka_2.12-3.0.0/ kafka/
mkdir /opt/module/kafka/logs
chown -R elastic:elastic /opt/module/kafka/

3. 修改配置文件

su - elastic
cd /opt/module/kafka/config
cp server.properties server.properties.bak
vi server.properties
  • 修改内容如下:
# 21行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置 broker.id=1、broker.id=2 ------修改
broker.id=1
# 31行,指定监听的IP和端口,如果修改每个broker的IP需区分开来,也可保持默认配置不用修改
listeners=PLAINTEXT://192.168.75.130:9092
# 42行,broker 处理网络请求的线程数量,一般情况下不需要去修改
num.network.threads=3
# 45行,用来处理磁盘IO的线程数量,数值应该大于硬盘数
num.io.threads=8
# 48行,发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
# 51行,接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
# 54行,请求套接字的缓冲区大小
socket.request.max.bytes=104857600
# 60行,kafka运行日志存放的路径,也是数据存放的路径 ------修改
log.dirs=/opt/module/kafka/logs
# 65行,topic在当前broker上的默认分区个数,会被topic创建时的指定参数覆盖
num.partitions=1
# 69行,用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
# 103行,segment文件(数据文件)保留的最长时间,单位为小时,默认为7天,超时将被删除
log.retention.hours=168
# 110行,一个segment文件最大的大小,默认为 1G,超出将新建一个新的segment文件
log.segment.bytes=1073741824
# 123行,配置连接Zookeeper集群地址 ------修改
zookeeper.connect=192.168.75.130:2181,192.168.75.131:2181,192.168.75.132:2181
# 连接zookeeper超时时间
zookeeper.connection.timeout.ms=1800

4. 拷贝配置文件到其他服务器

scp server.properties root@elk2:`pwd`
scp server.properties root@elk3:`pwd`

注意:要修改配置文件中 broker.id 参数不相同。

5. 启动 kafka 集群

cd /opt/module/kafka
nohup ./bin/kafka-server-start.sh ./ config/server.properties > kafka.log 2>&1 &

特别注意:一定要先启动 ZooKeeper 再启动Kafka 顺序不可以改变。 先关闭kafka ,再关闭zookeeper。

6. 验证

jps# 查看 ZK 中是否注册成功
cd /opt/module/zookeeper/bin/
./zkCli.sh -server elk1:2181
ls /brokers
ls /brokers/ids
get ls /brokers/ids/1# 创建topic
cd /opt/module/kafka/
./bin/kafka-topics.sh --create --bootstrap-server 192.168.75.130:9092,192.168.75.131:9092,192.168.75.132:9092 --replication-factor 1 --partitions 1 --topic test
# 查看所有topic
./bin/kafka-topics.sh --list --bootstrap-server 192.168.75.130:9092,192.168.75.131:9092,192.168.75.132:9092

7. 配置 kafka 启动脚本

cd /usr/local/bin# 创建文件
vi kafka.sh# 添加执行权限
chmod 777 kafka.sh
#!/bin/shcase $1 in
"start"){for i in elk1 elk2 elk3doecho "******** $i --> kafka-server-start.sh **********"ssh $i 'source /etc/profile; /opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties'done
};;
"stop"){for i in elk1 elk2 elk3doecho "******** $i --> kafka-server-stop.sh **********"ssh $i 'source /etc/profile; /opt/module/kafka/bin/kafka-server-stop.sh /opt/module/kafka/config/server.properties;exit'done
};;
esac
# 可在任何位置执行该脚本
kafka.sh start# 停止kafka
kafka.sh stop

七、安装 Logstash

只需要在 elk4 机器上装。

官网输入插件:https://www.elastic.co/guide/en/logstash/current/input-plugins.html

1. 下载 logstash 安装包

cd /opt/software
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.24-linux-x86_64.tar.gz

2. 解压并重命名

tar -zxvf logstash-8.14.0-linux-x86_64.tar.gz -C /opt/module/
cd /opt/module/
mv logstash-8.14.0/ logstash
chown -R elastic:elastic /opt/module/logstash/

3. 新建日志文件夹

mkdir /logs/logstash
mkdir /data/logstash
chown -R elastic:elastic /logs/logstash
chown -R elastic:elastic /data/logstash

3. 修改配置文件

su - elastic
cd /opt/module/logstash/config
cp logstash.yml logstash.yml.bakvi logstash.yml
  • 修改内容如下
# 节点名称,在进群中具备唯一性
node.name: elk4
# logstash及其插件所使用的数据路径
path.data: /data/logstash
# 管道id
#pipeline.id: main
# 输入、输出及过滤器的总工作数量
pipeline.workers: 4
# 使用分层表单来设置管道的批处理大小
pipeline.batch.size: 125
# 管道的批处理延迟
pipeline.batch.delay: 50
# 设置为true时,在强制关机logstash期间,即使内存还有事件,也会强制关闭导致数据丢失,默认为false,在强制关闭logstash期间,将拒绝退出,直到所有在管道的事件被安全输出再关闭
#pipeline.unsafe_shutdown: false
# 设置为true时,将完全编译的配置显示为调试日志消息
#config.debug: true
# 度量标准rest端点的绑定地址
api.http.host: 192.168.75.132
# 端口
api.http.port: 9600-9700
# 用于事件缓冲的内部队列模式,可以指定内存memory或磁盘persisted,默认是内存
queue.type: persisted
# 启用持久队列时将存储数据文件的目录
path.queue: /data/logstash/queue
# 启用持久队列时使用的页面数据文件大小
queue.page_capacity: 128mb
# 队列的总容量
queue.max_bytes:1024mb
# 日志级别
log.level: info
# 日志目录位置
path.logs: /logs/logstash

配置文件详细说明:https://blog.51cto.com/u_16213667/9785165

  • 新建文件 logstash.conf
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.input {kafka {id => "input_kafka_node1"bootstrap_servers => ["192.168.75.130:9092,192.168.75.131:9092,192.168.75.132:9092"]topics => ["collect-logs"]# 拉取kafka指定topiccodec => json {charset => "UTF-8"}# 解析json格式的日志数据decorate_events => true# 传递给es的数据额外增加kafka的属性数据auto_offset_reset => "latest"# 拉取最近数据,earliest为从头开始拉取}
}output {stdout {codec => rubydebug}elasticsearch {hosts => ["https://192.168.75.130:9200","https://192.168.75.131:9200","https://192.168.75.132:9200"]index => "collect-logs-%{+YYYY.MM.dd}"user => "elastic"password => "xpMY4LD2-xbhm5yKb3WS"}
}

参数说明:https://blog.csdn.net/wangnan9279/article/details/79287820

4. 启动 logstash

# 简单测试启动
./logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'# 启动
cd /opt/module/logstash
nohup ./bin/logstash -f ./config/logstash.conf &

5. 验证

jps

八、安装Filebeat

需要在 elk1、elk2、elk3 三台机器都装 ES。

1. 下载 Filebeat 安装包

cd /opt/software
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.14.0-linux-x86_64.tar.gz

2. 解压并重命名

tar -zxvf filebeat-8.14.0-linux-x86_64.tar.gz -C /opt/module/
cd /opt/module
mv filebeat-8.14.0-linux-x86_64/ filebeat

3. 修改配置文件

cd /opt/module/filebeat
cp filebeat.yml filebeat.yml.bakvi filebeat.yml
  • 修改内容如下:
filebeat.inputs:
- type: logid: elk1enabled: truepaths:- /opt/module/zookeeper/logs/zookeeper-root-server-elk1.out- /opt/module/kafka/logs/server.logtype: filestreamfilebeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: falsesetup.template.setttings:index.number_of_shards: 1# 将  Elasticsearch Output 下的注释掉,因为我们连接的是kafka# 并添加下面代码
# ---------------------------- Elasticsearch Output ----------------------------
output.kafka:enabled: truehosts: ["192.168.75.130:9092","192.168.75.131:9092","192.168.75.132:9092"]topic: collect-logspartition.round_robin:reachable_only: falserequired_acks: 1compression: gzipmax_message_bytes: 1000000

4. 启动 filebeat

cd /opt/module/filebeat
nohup ./filebeat -e -c filebeat.yml &

5. 启动脚本

  • startup.sh
#!/bin/bash
echo "start filebeat......"
nohup /opt/module/filebeat/filebeat -e -c /opt/module/filebeat/filebeat.yml > /dev/null 2>&1 &sleep 2ps -ef | grep filebeat | grep -v grep
  • shutdown.sh
#!/bin/bash
echo "shutdown filebeat......"
ps -ef | grep -v grep | grep filebeat | awk '{print $2}' | xargs kill -9

6. 验证

cd /opt/module/kafka/
# 查看所有topic
./bin/kafka-topics.sh --list --bootstrap-server 192.168.75.130:9092,192.168.75.131:9092,192.168.75.132:9092
# 消费 topic
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.75.130:9092,192.168.75.131:9092,192.168.75.132:9092 --topic collect-logs --from-beginning

补充知识

1. docker 安装

参考地址:https://blog.csdn.net/weixin_43755251/article/details/127512751

  • 查看服务器内核版本
uname -r

注意:Docker要求CentOS系统的内核版本高于3.10

  • 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
  • 设置阿里云docker-ce镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装docker
yum install -y docker-ce
  • 启动并设置开机自启动
#启动docker命令
systemctl start docker
#设置开机自启命令
systemctl enable docker
#查看docker版本命令
docker version
  • 配置阿里云加速器
#创建docker配置文件目录
mkdir -p /etc/docker#添加配置内容
tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://docker.1panelproxy.com","https://2m11665s.mirror.aliyuncs.com","https://registry.docker-cn.com","https://dockerhub.azk8s.cn","https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com","https://k8s.gcr.io","https://github-releases.githubusercontent.com","https://vsxcs7sq.mirror.aliyuncs.com","https://ustc-edu-cn.mirror.aliyuncs.com"]
}
EOF#重启docker
systemctl restart docker
  • docker查用命令
# 搜索仓库镜像
docker search --镜像名
# 拉取镜像
docker pull --镜像名
# 查看目前正在运行的所有容器 (-a 显示包括已经停止的容器)
docker ps
# 删除镜像
docker rmi image_id/image_name
# 使用Dockerfile创建镜像
docker build
# 运行容器
docker run
# 进入容器中执行命令 (例如:docker exec -it  container_id/container_name /bin/bash)
docker exec
# 查看容器日志(例如:docker logs -f -t --tail 10 container_id )
docker logs  container_id/container_name
# 启动容器
docker start  container_id/container_name
# 重启容器
docker restart  container_id/container_name
# 停止容器
docker stop container_id/container_name
# 删除容器(只能删除已停止的容器)
docker rm container_id/container_name# 更多的命令可以通过docker help命令来查看。

以上是文章的全部内容。
如果有收获!希望老铁们来个三连,点赞、收藏、转发。
可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客。

相关文章:

ELK(Elasticsearch + logstash + kibana + Filebeat + Kafka + Zookeeper)日志分析系统

文章目录 前言架构软件包下载 一、准备工作1. Linux 网络设置2. 配置hosts文件3. 配置免密登录4. 设置 NTP 时钟同步5. 关闭防火墙6. 关闭交换分区7. 调整内存映射区域数限制8. 调整文件、进程、内存资源限制 二、JDK 安装1. 解压软件2. 配置环境变量3. 验证软件 三、安装 Elas…...

SpringBoot中忽略实体类中的某个属性不返回给前端的方法

使用Jackson的方式&#xff1a; //第一种方式&#xff0c;使用JsonIgnore注解标注在属性上&#xff0c;忽略指定属性 public class PropertyDTO {JsonProperty("disable")private Integer disable;JsonProperty("placeholder")private String placeholde…...

Flink中普通API的使用

本篇文章从Source、Transformation&#xff08;转换因子&#xff09;、sink这三个地方进行讲解 Source&#xff1a; 创建DataStream本地文件SocketKafka Transformation&#xff08;转换因子&#xff09;&#xff1a; mapFlatMapFilterKeyByReduceUnion和connectSide Outpu…...

【人工智能】从零构建一个文本分类器:用Python和TF-IDF实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 文本分类是自然语言处理(NLP)领域的基础任务之一,广泛应用于垃圾邮件检测、情感分析和新闻分类等场景。本篇文章从零开始,通过详细讲解 TF-IDF 特征提取方法,以及如何将其与机器学习算法结合,实现一…...

原型模式

功能&#xff1a;复制一个运行时的对象&#xff0c;包括对象各个成员当前的值。并且能够通过父类的指针来克隆出子类的对象 主要解决&#xff1a;在运行期建立原型 优点&#xff1a;性能提高、避免了构造函数的约束 步骤&#xff1a; 1、定义抽象原型&#xff0c;声明纯虚接…...

基于FPGA的FM调制(载波频率、频偏、峰值、DAC输出)-带仿真文件-上板验证正确

基于FPGA的FM调制-带仿真文件-上板验证正确 前言一、FM调制储备知识载波频率频偏峰值个人理解 二、代码分析1.模块分析2.波形分析 总结 前言 FM、AM等调制是学习FPGA信号处理一个比较好的小项目&#xff0c;通过学习FM调制过程熟悉信号处理的一个简单流程&#xff0c;进而熟悉…...

open-instruct - 训练开放式指令跟随语言模型

文章目录 关于 open-instruct设置训练微调偏好调整RLVR 污染检查开发中仓库结构 致谢 关于 open-instruct github : https://github.com/allenai/open-instruct 这个仓库是我们对在公共数据集上对流行的预训练语言模型进行指令微调的开放努力。我们发布这个仓库&#xff0c;并…...

Java爬虫:获取1688商品详情接口的技术实现与代码示例

引言 1688作为中国领先的B2B电子商务平台&#xff0c;拥有海量的商品信息。对于商家和市场研究人员来说&#xff0c;能够从1688获取商品详情信息&#xff0c;对于市场分析、竞品研究等具有重要价值。本文将介绍如何使用Java编写爬虫&#xff0c;以合法、高效的方式获取1688商品…...

详解Rust泛型用法

文章目录 基础语法泛型与结构体泛型约束泛型与生命周期泛型与枚举泛型和Vec静态泛型(const 泛型)类型别名默认类型参数Sized Trait与泛型常量函数与泛型泛型的性能 Rust是一种系统编程语言&#xff0c;它拥有强大的泛型支持&#xff0c;泛型是Rust中用于实现代码复用和类型安全…...

Spring Boot拦截器(Interceptor)详解

拦截器Interceptor 拦截器我们主要分为三个方面进行讲解&#xff1a; 介绍下什么是拦截器&#xff0c;并通过快速入门程序上手拦截器拦截器的使用细节通过拦截器Interceptor完成登录校验功能 1. 快速入门 什么是拦截器&#xff1f; 是一种动态拦截方法调用的机制&#xff…...

STM32-- 看门狗--介绍、使用场景、失效场景

STM32 中的看门狗&#xff08;Watchdog Timer&#xff0c;简称 WDG&#xff09;有两种主要类型&#xff1a;独立看门狗&#xff08;IWDG&#xff09; 和 窗口看门狗&#xff08;WWDG&#xff09;。它们的喂狗机制各有特点&#xff0c;主要区别如下&#xff1a; 1. 独立看门狗&a…...

Perplexica - AI 驱动的搜索引擎

更多AI开源软件&#xff1a; AI开源 - 小众AIhttps://www.aiinn.cn/sources Perplexica 是一个开源的 AI 驱动的搜索工具或 AI 驱动的搜索引擎&#xff0c;可以深入互联网寻找答案。受 Perplexity AI 的启发&#xff0c;它是一个开源选项&#xff0c;不仅可以搜索网络&#xf…...

Linux笔记--基于OCRmyPDF将扫描件PDF转换为可搜索的PDF

1--官方仓库 https://github.com/ocrmypdf/OCRmyPDF 2--基本步骤 # 安装ocrmypdf库 sudo apt install ocrmypdf# 安装简体中文库 sudo apt-get install tesseract-ocr-chi-sim# 转换 # -l 表示使用的语言 # --force-ocr 防止出现以下错误&#xff1a;ERROR - PriorOcrFoundE…...

MySQL聚合查询分组查询联合查询

#对应代码练习 -- 创建考试成绩表 DROP TABLE IF EXISTS exam; CREATE TABLE exam ( id bigint, name VARCHAR(20), chinese DECIMAL(3,1), math DECIMAL(3,1), english DECIMAL(3,1) ); -- 插入测试数据 INSERT INTO exam (id,name, chinese, math, engli…...

ffmpeg 预设的值 加速

centos 安装ffmpeg 编译安装 官网获取最新的linux ffmpeg 代码 https://ffmpeg.org//releases/ mkdir -p /data/app/ffmpeg cd /data/app/ffmpeg wget http://www.ffmpeg.org/releases/ffmpeg-7.1.tar.gz tar -zxvf ffmpeg-7.1.tar.gz#安装所需的编译环境 yum install -y \…...

Spring Boot 与 Spring Cloud Alibaba 版本兼容对照

版本选择要点 Spring Boot 3.x 与 Spring Cloud Alibaba 2022.0.x Spring Boot 3.x 基于 Jakarta EE&#xff0c;javax.* 更换为 jakarta.*。 需要使用 Spring Cloud 2022.0.x 和 Spring Cloud Alibaba 2022.0.x。 Alibaba 2022.0.x 对 Spring Boot 3.x 的支持在其发行说明中…...

解决爬虫ConnectionResetError出现的问题

提问 使用python进行网络爬虫出现ConnectionResetError如何解决&#xff1f; 解答 遇到ConnectionResetError错误时&#xff0c;通常是因为远程服务器端主动重置了连接。常见原因包括请求频率过高、网络问题或触发了防爬虫机制。为解决该问题&#xff0c;可以采取以下方法&a…...

Rust学习笔记_03——元组

Rust学习笔记_01——基础 Rust学习笔记_02——数组 Rust学习笔记_03——元组 文章目录 Rust学习笔记_03——元组元组1. 定义元祖2. 访问元组中的元素3. 元组的解构4. 元组不可遍历和切片5. 元组作为函数返回值6. 单元元组7. 代码演示 元组 在Rust编程语言中&#xff0c;元组&a…...

win10安装MySQL8.0.40,含踩坑记录

这里写自定义目录标题 win10安装MySQL8下载安装包配置环境变量初始化MySQL创建data文件夹初始化配置文件安装MySQL服务初始化创建root用户启动服务设置root用户密码登录验证 踩坑&#xff1a;MySQL 服务正在启动 ...MySQL 服务无法启动。服务没有报告任何错误。请键入 NET HELP…...

python+django自动化平台(一键执行sql) 前端vue-element展示

一、开发环境搭建和配置 pip install mysql-connector-pythonpip install PyMySQL二、django模块目录 dbOperations ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-313.pyc │ ├── admin.cpython-313.pyc │ ├── apps.cpython-313.pyc │ …...

【计算机网络】核心部分复习

目录 交换机 v.s. 路由器OSI七层更实用的TCP/IP四层TCPUDP 交换机 v.s. 路由器 交换机-MAC地址 链接设备和设备 路由器- IP地址 链接局域网和局域网 OSI七层 物理层&#xff1a;传输设备。原始电信号比特流。数据链路层&#xff1a;代表是交换机。物理地址寻址&#xff0c;交…...

urllib3只支持OpenSSL1.1.1

1 现象 urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ssl module is compiled with OpenSSL 1.1.0j 20 Nov 2018.2 解决方法 降低urllib3的版本。 从pycharm中&#xff0c;先卸载原有的urllib3版本。 菜单“File|Settings|Project:python|Project Interprete…...

简单web项目自定义部署Dockerfile

本意就是弄清楚如何做web自定义项目的镜像。 基础镜像是java:8u261-jdk&#xff0c;其中java路径为/opt/java webdemo1.0.0.1-SNAPSHOT.jar文件里面已经包含了lib文件。 可以设置PATH也可以不设置&#xff0c;但是建议设置JAVA_HOME FROM swr.cn-north-4.myhuaweicloud.com…...

apache实现绑定多个虚拟主机访问服务

1个网卡绑定多个ip的命令 ip address add 192.168.45.140/24 dev ens33 ip address add 192.168.45.141/24 dev ens33 在linux服务器上&#xff0c;添加多个站点资料&#xff0c;递归创建三个文件目录 分别在三个文件夹下&#xff0c;建立测试页面 修改apache的配置文件http.…...

svn 崩溃、 cleanup失败 怎么办

在使用svn的过程中&#xff0c;可能出现整个svn崩溃&#xff0c; 例如cleanup 失败的情况&#xff0c;类似于 这时可以下载本贴资源文件并解压。 或者直接访问网站 SQLite Download Page 进行下载 解压后得到 sqlite3.exe 放到发生问题的svn根目录的.svn路径下 右键呼出pow…...

深度学习—BP算法梯度下降及优化方法Day37

梯度下降 1.公式 w i j n e w w i j o l d − α ∂ E ∂ w i j w_{ij}^{new} w_{ij}^{old} - \alpha \frac{\partial E}{\partial w_{ij}} wijnew​wijold​−α∂wij​∂E​ α为学习率 当α过小时&#xff0c;训练时间过久增加算力成本&#xff0c;α过大则容易造成越过最…...

python常见问题-pycharm无法导入三方库

1.运行环境 python版本&#xff1a;Python 3.9.6 需导入的greenlet版本&#xff1a;greenlet 3.1.1 2.当前的问题 由于需要使用到greenlet三方库&#xff0c;所以进行了导入&#xff0c;以下是我个人导入时的全过程 ①首先尝试了第1种导入方式&#xff1a;使用pycharm进行…...

虚幻引擎---目录结构篇

一、引擎目录 成功安装引擎后&#xff0c;在安装路径下的Epic Games目录中可以找到与引擎版本对应的文件夹&#xff0c;其中的内容如下&#xff1a; Engine&#xff1a;包含构成引擎的所有源代码、内容等。 Binaries&#xff1a;包含可执行文件或编译期间创建的其他文件。Bui…...

OpenCV相机标定与3D重建(6)将3D物体点投影到2D图像平面上函数projectPoints()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::fisheye::projectPoints 是 OpenCV 库中用于鱼眼镜头模型的函数&#xff0c;它将3D物体点投影到2D图像平面上。这个函数对于模拟或者理解鱼眼…...

QINQ技术

定义 QINQ即802.1q in 802.1q&#xff0c;因为IEEE802.1Q中定义的Vlan Tag域只有12个比特&#xff0c;仅能表示4096个Vlan&#xff0c;随网络发展被用尽&#xff0c;于是在原有带vlan的数据上再携带一层vlan标签用于扩展vlan数目。一般来说外层vlan是公网&#xff0c;内层是私…...

COMSOL工作站:配置指南与性能优化

COMSOL Multiphysics 求解的问题类型相当广泛&#xff0c;提供了仿真单一物理场以及灵活耦合多个物理场的功能&#xff0c;供工程师和科研人员来精确分析各个工程领域的设备、工艺和流程。 软件内置的#模型开发器#包含完整的建模工作流程&#xff0c;可实现从几何建模、材料参数…...

一键生成唯美动漫图:ComfyUI-tPonynai详细搭建教程

tPonynai 是在 C 站上开源的动漫风格扩散模型&#xff0c;与其他基础大模型一样&#xff0c;只需要输入适当的正面和负面提示词就能够实现动漫图片的生成。截至目前已经有 12.9k 的下载量&#xff0c;生成效果也非常不错。本文将介绍ComfyUI-tPonynai在算家云搭建以及本地部署的…...

Python 3 教程第22篇(数据结构)

Python3 数据结构 本章节我们主要结合前面所学的知识点来介绍Python数据结构。 列表 Python中列表是可变的&#xff0c;这是它区别于字符串和元组的最重要的特点&#xff0c;一句话概括即&#xff1a;列表可以修改&#xff0c;而字符串和元组不能。 以下是 Python 中列表的方…...

Oracle RAC的DB未随集群自动启动

RDBMS 19.25 参考文档&#xff1a; Oracle Database 12c (12.1 and 12.2) How does one modify the database resource parameter AUTO_START How to Disable Auto Start of ASM From Cluster Resource (Doc ID 2016160.1) 实际操作&#xff1a; [rootnode19c01 ~]# crsc…...

深度学习-49-AI应用实战之基于HyperLPR的车牌识别

文章目录 1 车牌识别系统1.1 识别原理1.1.1 车牌定位1.1.2 字符识别2 实例应用2.1 安装hyperlpr32.2 识别结果2.3 可视化显示2.4 结合streamlit3 附录3.1 PIL.Image转换成OpenCV格式3.2 OpenCV转换成PIL.Image格式3.3 st.image嵌入图像内容3.4 参考附录1 车牌识别系统 车牌识别…...

Chrome插件(扩展)开发中对表单元素赋值操作

最近在写chrome插件时候&#xff0c;需要对vue开发登录界面中的表单进行赋值&#xff0c;最开始简单的以为&#xff0c;找到对应的元素&#xff0c;直接value"XXXX" document.querySelector(input).value"admin" 结果一运行&#xff0c;发现输入框的值确…...

详解MVC架构与三层架构以及DO、VO、DTO、BO、PO | SpringBoot基础概念

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 今天毛毛张分享的是SpeingBoot框架学习中的一些基础概念性的东西&#xff1a;MVC结构、三层架构、POJO、Entity、PO、VO、DO、BO、DTO、DAO 文章目录 1.架构1.1 基本…...

QML学习 —— 30、图片翻转效果(附源码)

效果 说明 Flipable是一种可以在正面和背面之间明显“翻转”的物品,就像卡片一样。它可以与“旋转”、“状态”和“过渡”类型一起使用,以产生翻转效果。正面和背面属性用于固定分别显示在可翻转物品正面和背面的物品。 代码 import QtQuick 2.12 import QtQuick.Window 2.1…...

rk3588交叉编译opencv

基于forlinx开发板Linux5.10.66Qt5.15.2的环境 交叉编译工具链&#xff1a;aarch64-buildroot-linux-gnu-gcc、aarch64-buildroot-linux-gnu-g opencv版本&#xff1a;3.4.15 创建toolchain.cmake # 工具链路径 set(CMAKE_C_COMPILER /home/forlinx/aarch64-buildroot-linux…...

Kubernetes 之 Ingress 和 Service 的异同点

1. 概念与作用 1.1 Ingress Ingress 是什么&#xff1f; Ingress主要负责七层负载&#xff0c;将外部 HTTP/HTTPS 请求路由到集群内部的服务。它可以基于域名和路径定义规则&#xff0c;从而将外部请求分配到不同的服务。 ingress作用 提供 基于 HTTP/HTTPS 的路由。 支持 …...

Java 反射(Reflection)

Java 反射&#xff08;Reflection&#xff09; Java 反射&#xff08;Reflection&#xff09;是一个强大的特性&#xff0c;它允许程序在运行时查询、访问和修改类、接口、字段和方法的信息。反射提供了一种动态地操作类的能力&#xff0c;这在很多框架和库中被广泛使用&#…...

C语言刷题笔记3(7)

7.1 数组处理斐波那契数列 题目描述:用数组来处理Fibonacci数列并输出。 输入:一个不超过40且大于2的整数n&#xff0c;表示需要处理并输出的Fibonacci数个数。 输出:输出前n个Fibonacci数&#xff0c;每行输出5个值&#xff0c;按每12位向右对齐的方式输出。请注意不要在第…...

【新人系列】Python 入门(十四):文件操作

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…...

学成在线day06

上传视屏 断点续传 通常视频文件都比较大&#xff0c;所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大小没有限制&#xff0c;但是客户的网络环境质量、电脑硬件环境等参差不齐&#xff0c;如果一个大文件快上传完了网断了没有上传完成&…...

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?

目录 一、HTTP 二、RPC 介绍 工作原理 核心功能 如何服务寻址 如何进行序列化和反序列化 如何网络传输 基于 TCP 协议的 RPC 调用 基于 HTTP 协议的 RPC 调用 实现方式 优点和缺点 使用场景 常见框架 示例 三、问题 问题一&#xff1a;是先有HTTP还是先有RPC&…...

ffmpeg 各版本号对应表格

想看看ffmpeg各个版本对应表&#xff0c; #! /bin/bashFF_PATH$1 CURRENTpwd RESULT"$CURRENT/test_version.txt"cd $FF_PATHif [ -f $RESULT ]; thenrm $RESULT fifor i in git branch -a | grep remotes/origin/release/ | grep -v HEAD | grep -v master; dogit…...

cesium 3Dtiles变量

原本有一个变亮的属性luminanceAtZenith&#xff0c;但是新版本的cesium没有这个属性了。于是 let lightColor 3.0result._customShader new this.ffCesium.Cesium.CustomShader({fragmentShaderText:void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial mate…...

如何分析Windows防火墙日志

Windows防火墙&#xff0c;也被称为Windows Defender Firewall&#xff0c;是一种内置的安全功能&#xff0c;可以主动监控和分析运行Windows操作系统的计算机上通过Windows防火墙的网络流量&#xff0c;主要目的是作为计算机和互联网或其他网络之间的屏障&#xff0c;使管理员…...

Linux下 history 命令输出时间

在 Linux 中&#xff0c;查看每条命令的执行时间。 文章目录 [toc]**1. 配置 Shell 以记录命令执行时间****1.1 Bash Shell****步骤&#xff1a;****注意事项&#xff1a;** **1.2 Zsh Shell****步骤&#xff1a;****注意事项&#xff1a;** 1. 配置 Shell 以记录命令执行时间 …...

ChatGPT/AI辅助网络安全运营之-数据解压缩

在网络安全的世界中&#xff0c;经常会遇到各种压缩的数据&#xff0c;比如zip压缩&#xff0c;比如bzip2压缩&#xff0c;gzip压缩&#xff0c;xz压缩&#xff0c;7z压缩等。网络安全运营中需要对这些不同的压缩数据进行解压缩&#xff0c;解读其本意&#xff0c;本文将探索一…...