部署ELK日志分析系统——超详细

news2024/11/14 20:04:03

ELK日志分析系统

文章目录

  • ELK日志分析系统
    • 资源列表
    • 基础环境
    • 一、环境准备
    • 二、部署Elasticsearch软件
      • 2.1、安装Elasticsearch软件
      • 2.2、加载系统服务
      • 2.3、更改Elasticsearch主配置文件
      • 2.4、创建数据存放路径并授权
      • 2.5、启动Elasticsearch
      • 2.6、查看节点信息
    • 三、安装Elasticsearch-head插件
      • 3.1、编译安装node
      • 3.2、安装phantomjs
      • 3.3、安装Elasticsearch-head
      • 3.4、修改Elasticsearch主配置文件
      • 3.5、启动服务
      • 3.6、通过Elasticsearch-head查看Elasticsearch信息
      • 3.7、插入索引
    • 四、Logstash安装及使用方法
      • 4.1、在node1上安装Logstash
      • 4.2、测试Logstash
      • 4.3、Logstash配置文件
    • 五、安装Kibana
      • 5.1、在node1节点安装Kibana
      • 5.2、设置Kibana的主配置文件
      • 5.3、启动Kibana服务
      • 5.4、验证Kibana
    • 六、收集Apache日志
      • 6.1、安装httpd
      • 6.2、安装Apache节点Logstash
      • 6.3、编写Logstash配置文件

资源列表

操作系统配置主机名IP所需软件
CentOS 7.94C6Gnode1192.168.93.101Elasticsearch、Kibana
CentOS 7.94C6Gnode2192.168.93.102Elasticsearch
CentOS 7.92C2Gapache192.168.93.103Logstash

基础环境

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

一、环境准备

  • 在两个ELK节点上配置域名解析,通过本地/etc/hosts文件实现
# node1上的配置如下
[root@node1 ~]# cat >> /etc/hosts << EOF
192.168.93.101 node1
192.168.93.102 node2
192.168.93.103 apache
EOF


# node2上的配置如下
[root@node2 ~]# cat >> /etc/hosts << EOF
192.168.93.101 node1
192.168.93.102 node2
192.168.93.103 apache
EOF


# apache上的配置如下
[root@apache ~]# cat >> /etc/hosts << EOF
192.168.93.101 node1
192.168.93.102 node2
192.168.93.103 apache
EOF


# 执行以下命令查看node1、node2、apache主机上的Java环境
[root@node1 ~]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)

[root@node2 ~]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)

[root@apache ~]# java -version
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)

二、部署Elasticsearch软件

  • node1和node2节点上都需要部署Elasticsearch软件,下面以node1节点为例进行讲解,node2节点的配置与node2节点相同

2.1、安装Elasticsearch软件

  • Elasticsearch软件可以通过RPM安装、YUM安装或者源码包安装。本次实验采用RPM进行安装
# 上传RPM软件包
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm 

2.2、加载系统服务

[root@node1 ~]# systemctl daemon-reload 
[root@node1 ~]# systemctl enable elasticsearch.service 

2.3、更改Elasticsearch主配置文件

# 下面内容配置文件当中都有,只需要进行搜索进行相应的更改即可
[root@node1 ~]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml 
# 群集名字
cluster.name: my-elk-cluster
# 节点名字
node.name: node1
# 数据存放路径
path.data: /data/elk_data
# 日志存放路径
path.logs: /var/log/elasticsearch/
# 在启动的时候不锁定内存
bootstrap.memory_lock: false
# 提供服务绑定的IP地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
# 侦听端口为9200
http.port: 9200
# 群集发现通过单播实验
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

2.4、创建数据存放路径并授权

# node1节点操作
[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown -R elasticsearch:elasticsearch /data/elk_data/


# node2节点操作
[root@node2 ~]# mkdir -p /data/elk_data
[root@node2 ~]# chown -R elasticsearch:elasticsearch /data/elk_data/

2.5、启动Elasticsearch

  • 启动之后监听端口,如果监听不到,就等待一会再进行监听
[root@node1 ~]# systemctl start elasticsearch.service 
[root@node1 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      8496/java  



# curl访问
curl http://192.168.93.101:9200
curl -XGET 'http://192.168.93.101:9200/_cluster/health?pretty'

2.6、查看节点信息

  • 打开浏览器访问http://192.168.93.101:9200、http://192.168.93.102:9200,可以查看到节点node1、node2的信息
    在这里插入图片描述
    在这里插入图片描述

  • 通过在浏览器中输入http://192.168.93.101:9200/_cluster/health?pretty查看群集的健康情况,status值为green,表示节点健康运行
    在这里插入图片描述

  • 通过在浏览器中输入http://192.168.93.101:9200/_cluster/state?pretty查看群集的状态信息
    在这里插入图片描述

三、安装Elasticsearch-head插件

  • Elasticasearch在5.0版本后,Elasticsearch-head插件需要作为独立服务进行安装,需要npm命令。安装Elasticsearch-head需要提前安装node和phantomjs。其中,前者是一个基于Chrome V8引擎的JavaScript运行环境,而phantomjs是一个基于webkit的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于webkit浏览器做的事情,它都可以做到。

3.1、编译安装node

  • 编译安装node耗时较长,大约40分钟,根据机器的配置可能会所有不同,耐心等待即可
[root@node1 ~]# yum -y install gcc gcc-c++ make
[root@node1 ~]# tar -zxvf node-v8.2.1.tar.gz 
[root@node1 ~]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 ~]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# make && make install

3.2、安装phantomjs

[root@node1 ~]# yum -y install bzip2
[root@node1 ~]# tar -xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
[root@node1 ~]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/

3.3、安装Elasticsearch-head

[root@node1 ~]# tar -zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 ~]# cd /usr/local/src/elasticsearch-head/
# 使用npm安装依赖包
[root@node1 elasticsearch-head]# npm install

3.4、修改Elasticsearch主配置文件

# 末尾添加即可
[root@node1 ~]# cat >> /etc/elasticsearch/elasticsearch.yml << EOF
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# 跨域访问运行的域名地址
http.cors.allow-origin: "*"
EOF


# 重启服务
[root@node1 ~]# systemctl restart elasticsearch.service 

3.5、启动服务

  • 必须在解压后的elasticsearch-head目录下启动服务,进行会读取该目录下的gruntfile.js文件,否则可能启动失败。elasticsearch-head监听的端口是9100,通过该端口是否监听来判断是否正常开启
[root@node1 ~]# cd /usr/local/src/elasticsearch-head/
# 后台启动服务,不然一旦关闭中断,服务也将随之关闭
[root@node1 elasticsearch-head]# npm run start &
[1] 54123
[root@node1 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
# 回车一下
[root@node1 elasticsearch-head]# 
[root@node1 elasticsearch-head]# netstat -anpt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      54133/grunt   
[root@node1 elasticsearch-head]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      54421/java 

3.6、通过Elasticsearch-head查看Elasticsearch信息

  • 通过浏览器访问http://192.168.93.101:9100地址并连接群集。可以看到群集很健康,健康值为green绿色。单击**“数据浏览”**,可以查看索引信息,此时索引为空
    在这里插入图片描述

在这里插入图片描述

3.7、插入索引

  • 通过命令插入一个测试索引,通过输出信息可以看到索引为index.demo,类型为test
[root@node1 ~]# curl -XPUT '192.168.93.101:9200/index.demo/test/1?pretty&pretty' -H 'Content-Type:application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index.demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}

  • 刷新浏览器,可以看到创建成功的索引
    在这里插入图片描述

  • 选择**“概览”**选项卡,还可以看到索引默认被分片成5个,且存在一个副本
    在这里插入图片描述

四、Logstash安装及使用方法

  • Logstash一般部署在需要监控其日志的服务器。本案例中,Logstash部署在Apache服务器上,用于收集Apache服务器的日志信息并发送到Elasticsearch。在正式部署之前,现在node1上部署Logstash,以熟悉Logstash的使用方法。Logstash也需要Java环境,

4.1、在node1上安装Logstash

[root@node1 ~]# rpm -ivh logstash-5.5.1.rpm 
[root@node1 ~]# systemctl start logstash.service 
[root@node1 ~]# systemctl enable logstash.service 
[root@node1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

4.2、测试Logstash

# Logstash命令行中常用的命令选项如下所示
-f:通过这个选项可以指定Logstash的配置文件,根据配置文件配置Logstash
-e:后面跟着字符串,该字符串可以被当作Logstash的配置(如果是”“,则默认使用stdin作为输入,stdout作为输出)
-t:测试配置文件是否正确,然后退出

# Logstash命令的使用方法如下所示:
## 输入采用标准输入,输出采用标准输出
[root@node1 ~]# logstash -e 'input { stdin{} } output { stdout{} }'
The stdin plugin is now waiting for input:
09:32:00.864 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com	# 键入内容(标准输入)
2024-05-20T01:32:26.170Z node1 www.baidu.com  # 输出结果(标准输出)
www.sina.com    # 键入内容(标准输入)
2024-05-20T01:32:32.318Z node1 www.sina.com    # 输出结果(标准输出)

## Ctrl+c退出



# 使用rubydebug显示详细输出,codec为一种编解码器
[root@node1 ~]# logstash -e 'input { stdin{} } output { stdout { codec=>rubydebug }}'
The stdin plugin is now waiting for input:
09:35:45.796 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
09:35:45.859 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com	# 键入内容(标准输入)
{				# 输出结果(处理后的结果)
    "@timestamp" => 2024-05-20T01:36:04.322Z,
      "@version" => "1",
          "host" => "node1",
       "message" => "www.baidu.com"
}
## Ctrl+c退出



# 使用Logstash将信息写入Elasticsearch中
[root@node1 ~]# logstash -e 'input { stdin{} } output { elasticsearch {hosts=>["192.168.93.101:9200"] }}'
The stdin plugin is now waiting for input:
09:38:24.838 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
09:38:24.873 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com	# 键入内容(标准输入)	
www.sina.com.cn # 键入内容(标准输入)
www.google.com  # 键入内容(标准输入)
# 结果不在标准输出显示,而是发送至Elasticaearch中
## Ctrl+c退出
  • 在Elasticsearch中查看Logstash新增加的索引
    在这里插入图片描述
  • 查看索引对应的内容
    在这里插入图片描述

4.3、Logstash配置文件

  • Logstash配置文件基本由三部分组成input、output以及filter(根据需要)。因此标准的配置文件格式如下所示
input {...}
filter {....}
output {...}
  • 在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下所示
input {
file { path =>"/var/log/messages" type =>"syslog"}
file { path =>"/var/log/apache/access.log" type =>"apache"}
}
  • 下面通过修改Logstash配置文件,让其收集系统日志/var/log/messages,并将其输出到elasticsearch中
# 给其他人读取权限
[root@node1 ~]# chmod o+r /var/log/messages
[root@node1 ~]# ls -hl /var/log/messages
-rw----r-- 1 root root 402K 520 09:44 /var/log/messages
[root@node1 ~]# vim /etc/logstash/conf.d/system.conf
input {
          file {
                 path => "/var/log/messages"
                 type => "system"
                 start_position => "beginning"
                 }
               }

           output {
                    elasticsearch {
                    hosts => ["192.168.93.101:9200"]
                    index => "system-%{+YYYY.MM.dd}"
                    }
                  }
# 重启logstash服务
[root@node1 ~]# systemctl restart logstash.service 



## 查询索引信息
[root@apache ~]# curl 192.168.93.101:9200/_cat/indices
green open system-2024.05.23 oAskjLkvQh63QScJttokdA 5 1 12081 0 7.2mb 3.6mb


详细解释
"green":表示该索引是正常状态
"open":表示该索引的状态是打开的。
"logstash-2023.10.07":这是索引的名称。
"JyiDRPHkSWetazfcr9Vusg":这是索引的UUID,用于唯一标识一个索引。
"5":这是该索引的副本数量。
"1":这是该索引的主分片数量。
"1":这是该索引的副本分片数量。
"0":这是该索引的优化分片数量。
"9.7kb":这是该索引的大小。
"4.8kb":这是该索引的压缩大小。

  • 完成后,通过浏览器查看Elasticsearch的信息
    在这里插入图片描述

  • 查看索引下的日志信息
    在这里插入图片描述

五、安装Kibana

5.1、在node1节点安装Kibana

[root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm 
[root@node1 ~]# systemctl enable kibana.service 

5.2、设置Kibana的主配置文件

# 下面内容配置文件当中都有,只需要进行搜索进行相应的更改即可
[root@node1 ~]# grep -v "#" /etc/kibana/kibana.yml | grep -v "^?" | grep -v "^$"
# Kibana打开的端口
server.port: 5601
# Kibana侦听的地址
server.host: "0.0.0.0"
# 和Elasticsearch建立连接
elasticsearch.url: "http://192.168.93.101:9200"
# 在Elasticsearch中添加.kibana索引
kibana.index: ".kibana"

5.3、启动Kibana服务

[root@node1 ~]# systemctl start kibana.service 
[root@node1 ~]# netstat -anpt | grep 5601
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      65563/node   

5.4、验证Kibana

  • 通过浏览器访问http://192.168.93.101:5601,第一次登录需要添加一个Elasticsearch索引,添加前面创建的索引system-2024.5.20
    在这里插入图片描述

  • 查看索引的默认字段
    在这里插入图片描述

  • 点击”Discover“按钮查看图表信息及日志信息
    在这里插入图片描述

  • 数据展示可以分类显示,使用鼠标指针悬停在**”Available Fields“中的“host”,然后单击”add“按钮,可以看到按照”host“**筛选后的结果
    在这里插入图片描述

在这里插入图片描述

六、收集Apache日志

6.1、安装httpd

[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
[root@apache ~]# systemctl enable httpd
# 访问几次,使apache的访问日志有日志数据
[root@apache ~]# curl 192.168.93.103
[root@apache ~]# curl 192.168.93.103
[root@apache ~]# curl 192.168.93.103

6.2、安装Apache节点Logstash

[root@apache ~]# rpm -ivh logstash-5.5.1.rpm 
[root@apache ~]# systemctl daemon-reload 
[root@apache ~]# systemctl start logstash.service
[root@apache ~]# systemctl enable logstash.service 
[root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

6.3、编写Logstash配置文件

  • 编写Logstash配置文件,apache_log.conf
[root@apache ~]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim apache_log.conf
input {
	file {
	    # 收集Apache访问日志
		path => "/var/log/httpd/access_log"
		# 类型指定为access
		type => "access"
		# 从开始处收集
		start_position => "beginning"
	}
	file {
	    # 收集Apache错误日志
		path => "/var/log/httpd/error_log"
		# 类型指定为error
		type => "error"
		# 从开始处收集
		start_position => "beginning"
	}
}
output{
    # 如果类型为access,即Apache访问日志
	if [type] == "access" {
	    # 输出到elasticsearch
		elasticsearch {
		    # elasticsearch监听地址及端口
			hosts => ["192.168.93.101:9200"]
			# 指定索引格式
			index => "apache_access-%{+YYYY.MM.dd}"
			}
		}
    # 如果类型为error,即Apache错误日志
	if [type] == "error" {
	     # 输出到elasticsearch
		elasticsearch {
		    # elasticsearch监听地址及端口
			hosts => ["192.168.93.101:9200"]
			# 指定索引格式
			index => "apache_error-%{+YYYY.MM.dd}"
			}
		}
}
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf 
## 回显是前台运行的,输出玩之后ctrl+c终止即可
  • 通过浏览器访问http://192.168.93.101:9100查看索引是否创建
    在这里插入图片描述

  • 登录Kibana,单击**”Create Index Pattern“**按钮添加索引
    在这里插入图片描述
    在这里插入图片描述

  • 在索引名中输入之前配置的Output前缀**”apache_access“,并单击”Create“**按钮
    在这里插入图片描述

  • 用相同的方法添加apache_error-*索引
    在这里插入图片描述

  • 选择**”Discover“**选项卡,在中间下拉列表中选择刚添加的apache_access-*索引,可以查看相应的图表及日志信息,还可以根据Fields进行归类显示
    在这里插入图片描述

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

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

相关文章

如何使用GPT-4o?

GPT-4o的时代已经到来&#xff01;昨天分享群有小伙伴询问怎么使用GPT-4o&#xff1f; 在接下来的几周&#xff0c;OpenAI将陆续向所有用户开放GPT-4o的访问权限。无论是ChatGPT Free、Plus还是Team的用户&#xff0c;都能享受到GPT-4o带来的创新体验&#xff08;企业版也已经…

Go语言之GORM框架(二) ——GORM的单表操作

前言 在上一篇文章中&#xff0c;我们对Gorm进行了介绍&#xff0c;而在这一篇文章中我们主要介绍GORM的单表查询与Hook函数,在进行今天的内容之前我们先事先说明一下&#xff0c;下面我们对单表进行操作的表结构如下&#xff1a; type Student struct {ID uint gorm:&qu…

贪心-AcWing 1522. 排成最小的数字-XMUOJ石板序列

题目 思路 getline() 是 C 标准库中的一个函数&#xff0c;用于从输入流中读取一行文本&#xff0c;并将其存储为字符串。它可以从标准输入、文件流、字符串流等不同类型的输入流中读取数据。C中istringstream、ostringstream、stringstream详细介绍和使用_c istringstream-CS…

智能合约语言(eDSL)—— 并行化方案 2

这个并行算法最初其实是在aptos上实现的&#xff0c;aptos上使用的是move虚拟机&#xff0c;后来我把它移植到我们链上了&#xff0c;但是wasm虚拟机。还是费了不少事情。 目前evm并行也比较火&#xff0c;像monad&#xff0c;sei等。经过调研发现&#xff0c;其实evm的并行&am…

代码随想录|Day42|动态规划 part07|● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 322. 零钱兑换 class Solution: def climbStairs(self, n: int) -> int: if n < 1: return n dp [0] * (n 1) dp[0] 0 dp[1] 1 dp[2] 2 for i in range(3, n 1): dp[i] dp[i - 1] dp[i - 2] return dp[n] 279.完全平方数…

spring状态机实战

一、什么是状态机 状态机是有限状态自动机的简称&#xff0c;是现实事物运行规则抽象而成的一个数学模型&#xff0c;是一种概念性机器&#xff0c;它能采取某种操作来响应一个外部事件。这种操作不仅能取决于接收到的事件&#xff0c;还能取决于各个事件的相对发生顺序。状态…

Mybase长久破解

1、软件下载好之后&#xff0c;找到文件mybase8.ini文件 2、使用记事本打开&#xff0c;通过 Ctrl F 输入快速找到属性设置FirstUseOn.UserLic.App&#xff0c;将等号后面的数值删掉保存即可 3、使用防护中心–>自定义防护&#xff08;记得开启&#xff09; 4、添加规则…

深入JVM元空间以及弹性伸缩机制

个人博客 深入JVM元空间以及弹性伸缩机制 | iwts’s blog JVM内存模型中元空间所在位置 即在JVM运行时的内存模型。总体上有这样的图&#xff1a; 元空间 上面的图其实有点不太准。方法区本质上只是JVM的一个标准&#xff0c;不同JVM在不同版本下都可能有不同的实现&#x…

Java进阶学习笔记28——StringJoiner

Java中&#xff0c;有没有即能高效&#xff0c;又能实现更方便的拼接呢&#xff1f; StringJoiner&#xff1a; JDK8才开始的&#xff0c;跟StringBuilder一样&#xff0c;也是用来操作字符串的&#xff0c;也可以看成是一个容器&#xff0c;创建之后里面的内容是可变的。 好…

动态路由实验—OSPF

动态路由协议实验-------OSPF 链路状态路由选择协议又被称为最短路径优先协议&#xff0c;它基SPF&#xff08;shortest path first &#xff09;算法 实验要求&#xff1a;各个PC之间能够互通 1.四台PC配置如下 PC1 PC2 PC3 PC4 2.配置各个交换机的口子的IP R1 <HUAWE…

文件批量重命名利器:一键轻松替换文本间内容,高效管理文件不再是难题!

在信息爆炸的时代&#xff0c;我们的电脑中堆积了无数的文件。这些文件可能包含重要的工作资料、珍贵的个人回忆或是各种学习资料。然而&#xff0c;随着文件的不断增多&#xff0c;如何高效地管理和查找这些文件成为了一个头疼的问题。 文件批量改名高手是一款专业的文件管理…

轮廓系数(Average silhouette) | 最佳聚类数的判定

1.最佳分类个数 # 辅助确定最佳聚类数 4.7*2.6 factoextra::fviz_nbclust( t(DPAU_2), kmeans, method "silhouette")在2有下降拐点&#xff0c;但是样本较多时分成2类一般意义不大。 在7时也有下降拐点。 2.查看每个分类的轮廓系数 (1) pam k5 library(cluste…

基于地理坐标的高阶几何编辑工具算法(7)——矩形绘制

文章目录 工具步骤应用场景示意图算法原理工具步骤 点击矩形绘制工具,点击三个点完成矩形绘制。 应用场景 用于在地图上快速绘制任意方向的矩形。 示意图 算法原理 点第一个点确定矩形的一个角点P1,也作为平移后的坐标原点,生成平移矩阵。点第二个点P2,确定矩形的一条边…

大学高校智能制造技术实验室,工业物联数字孪生系统,三维可视化平台

上午院方领导老师现场观摩项目验收前成果展示&#xff0c;深入了解工作情况。随后召开技术交流会&#xff0c;对我司研发团队打破常规敢先试&#xff0c;精益求精给予肯定&#xff0c;并提出指导意见。在智能制造数字孪生系统平台开发调试、数据采集过程中&#xff0c;我司成功…

ollama 使用,以及指定模型下载地址

ollama windows 使用 官网&#xff1a; https://ollama.com/ windows 指定 models 下载地址 默认会下载在C盘 &#xff0c;占用空间 在Windows系统中&#xff0c;可以通过设置环境变量OLLAMA_MODELS来指定模型文件的下载和存储路径。具体操作步骤如下&#xff1a; 1.打开系统…

JVM堆分配中TLAB分配方案

个人博客 JVM堆分配中TLAB分配方案 | iwts’s blog Java对象的内存分配过程如何保证线程安全 对象的内存分配过程中&#xff0c;主要流程是将对象的引用指向一个具体的内存区域&#xff0c;然后进行初始化操作。 但是&#xff0c;因为堆是全局共享的&#xff0c;因此在同一…

图像处理ASIC设计方法 笔记24 等价表和标记代换

(一)等价表的整理与压缩 1.1 等价关系的识别与追踪 在初步标记过程完成后,等价表的整理和压缩变得至关重要。这一阶段的首要任务是从等价表的地址1开始,对等价表进行逐个扫描。在扫描过程中,系统将检查每个临时标记是否存在等价关系。若发现等价关系,系统将执行追踪过程,…

9.js函数

函数是js复杂数据类型的一种---可以理解为存放代码的盒子 用来帮助我们封装、复用、扩展以及调用代码的工具 函数的两个阶段 &#xff08;1&#xff09;声明函数&#xff08;理解为创造&#xff09; ——声明式声明 语法&#xff1a;function 函数名(参数){...代码} ——赋值时…

for循环里如果std::pair的类型写不对,可能会造成性能损失

第一版 std::map<int, int> t;t.emplace(1, 1);for (const std::pair<int,int>& data : t){int i 0;std::ignore i;}中间留一些空格&#xff0c;是因为ms在调试的时候&#xff0c;尤其是模板比较多的时候&#xff0c;经常断点的行号有问题。比如第5行的断点&…

Linux服务的简介与分类

服务的简介与分类 服务的分类 查询已安装的服务和区分服务 #列出所有rpm包默认安装服务的自启动状态 [rootlocalhost ~]# chkconfig --list atd atd 0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭 [rootlocalhost ~]# chkconfig --list sshd sshd …