ELK-日志服务【filebeat-安装使用】

news2024/11/26 17:41:09

目录

【1】安装Filebeat

【2】配置-测试

【3】配置使用Filebeat 

【4】filebeat-收集系统文件日志

【5】配置filebeat,将/var/log/all.log日志采集到es集群中

【6】定制索引名称

【7】收集多个web节点的日志,输出到相同的索引中

【8】filebeat-收集nginx日志

【9】修改nginx的日志格式

【10】图形化展示

【11】filebeat-收集nginx的访问日志+错误日志

【12】filebeat收集nginx多虚拟主机日志

【13】收集tomcat日志

【14】filebeat-收集tomcat错误日志


【1】安装Filebeat

[root@filebeat ~]# rpm -ivh filebeat-7.4.0-x86_64.rpm 
warning: filebeat-7.4.0-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:filebeat-7.4.0-1                 ################################# [100%]

【2】配置-测试

  • 配置filebeat从终端读入,从终端输出
[root@filebeat ~]# vim /etc/filebeat/test.yml
filebeat.inputs:
- type: stdin
  enabled: true
output.console:
  pretty: true
  enable: true

## 测试
[root@filebeat ~]# filebeat -e -c test.yml

【3】配置使用Filebeat 

[root@filebeat ~]# cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml_bak
[root@filebeat ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/messages

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true

## 测试
[root@filebeat ~]# systemctl restart filebeat.service

  • 使用kibana读取filebeat索引中的数据

 

 

 

 

  • 日志中写入新的数据,刷新验证是否能被命中
[root@filebeat ~]# echo "test" >> /var/log/messages

【4】filebeat-收集系统文件日志

系统日志包含messages、secure、cron、dmesg、ssh、boot等

如果挨个配置会变得很麻烦,我们可以将这些日志进行统一几种管理,使用rsyslog将本地所有类型的日志都写入到/var/log/all.log文件中,然后使用filebeat对该文件进行收集

[root@filebeat ~]# yum -y install rsyslog
....
$ModLoad imudp
$UDPServerRun 514
....
*.* /var/log/all.log
....

## 重启测试
[root@filebeat ~]# systemctl restart rsyslog.service    
[root@filebeat ~]# logger "rsyslog test from all"
[root@filebeat ~]# grep "all" /var/log/all.log 
Jul 11 05:25:47 filebeat root: rsyslog test from all

【5】配置filebeat,将/var/log/all.log日志采集到es集群中

  • 先删除es中的索引和kibana中匹配的索引,重启后生成新的索引

[root@filebeat ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/all.log
  include_lines: ['^ERR', '^WARN', 'sshd']

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true

[root@filebeat ~]# systemctl restart filebeat.service

【6】定制索引名称

[root@filebeat ~]# vim /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/all.log
  include_lines: ['^ERR', '^WARN', 'sshd']

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true
  index: "system-%{[agent.version]}-%{+yyyy.MM.dd}"
setup.ilm.enabled: false             # 索引的生命周期。默认开启,开启后索引名称只能是filebeat
setup.template.name: "system"        # 定义模板名称
setup.template.pattern: "system-*"   # 定义模板匹配索引的名称

## 索引分片,方式一
setup.template.settings:
  index.number_of_shards: 3
  index.number_of_replicas: 1

## 索引分片,方式二
1、修改system模板,添加分片和副本数量
2、删除模板关联的索引
3、重启filebeat
4、产生新的日志验证

  • 我们需要删除syste模板和索引,因为模板默认分片就是1,要不然分片永远不会生效

## 重启
[root@filebeat ~]# systemctl restart filebeat.service

## 产生新的日志,验证

 

 

 第二种方式

【7】收集多个web节点的日志,输出到相同的索引中

  • web-01配置filebeat
[root@filebeat ~]# vim /etc/rsyslog.conf
.....
$ModLoad imudp
$UDPServerRun 514
.....
*.* /var/log/all.log
.....

[root@filebeat ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/all.log
  include_lines: ['^ERR', '^WARN', 'sshd']

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true
  index: "system-%{[agent.version]}-%{+yyyy.MM.dd}"

setup.ilm.enabled: false
setup.template.name: "system"
setup.template.pattern: "system-*"
setup.template.settings:
  index.number_of_shards: 3
  index.number_of_replicas: 1

[root@filebeat ~]# systemctl restart rsyslog.service
[root@filebeat ~]# systemctl restart filebeat.service
  • web-02配置filebeat
[root@filebeat ~]# vim /etc/rsyslog.conf
.....
$ModLoad imudp
$UDPServerRun 514
.....
*.* /var/log/all.log
.....

[root@filebeat-02 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/all.log
  include_lines: ['^ERR', '^WARN', 'sshd']

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true
  index: "system-%{[agent.version]}-%{+yyyy.MM.dd}"

setup.ilm.enabled: false
setup.template.name: "system"
setup.template.pattern: "system-*"
setup.template.settings:
  index.number_of_shards: 3
  index.number_of_replicas: 1

[root@filebeat-02 ~]# systemctl restart rsyslog.service
[root@filebeat-02 ~]# systemctl restart filebeat.service

 

【8】filebeat-收集nginx日志

  • 获取用户细信息:来源IP、地域、网站PV、UV、状态码、访问时间等

lb-server

10.0.0.27

web-01

10.0.0.25

web-02

10.0.0.26

  • lb-server
[root@lb-server-01 ~]# vim /etc/nginx/conf.d/filebeat-test.conf
upstream file {
  server 10.0.0.25;
  server 10.0.0.26;
}
server {
  listen 80;
  server_name www.filebeat-test.org;
  location / {
    proxy_pass http://file;
    include proxy_params;
  }
}

[root@lb-server-01 ~]# vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_connect_timeout 60s;      # nginx连接后端的超时时间
proxy_read_timeout 60s;         # 响应头部超时时间
proxy_send_timeout 60s;         # 响应数据主体的超时时间
proxy_buffering on;             # 开启缓冲区
proxy_buffer_size 8k;           # 缓冲区Header大小
proxy_buffers 4 64k;            # 缓冲区数量 * 大小 = 最大接收

[root@lb-server-01 ~]# systemctl reload nginx
  • web-01和web-02配置相同
[root@filebeat conf.d]# vim /etc/nginx/conf.d/filebeat-test.conf
server {
  listen 80;
  server_name www.filebeat-test.org;
    root /code/filebeat;
  location / {
    index index.html;
  }
}

[root@filebeat conf.d]# mkdir -p /code/filebeat
[root@filebeat conf.d]# echo "filebeat-test-web-01" >> /code/filebeat/index.html
[root@filebeat-02 conf.d]# echo "filebeat-test-web-02" >> /code/filebeat/index.html
[root@filebeat conf.d]# systemctl reload nginx.service

  • web-01、web-02 配置filebeat
[root@filebeat conf.d]# vim /etc/filebeat/nginx-filebeat-access.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true
  index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}"

setup.ilm.enabled: false
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"

[root@filebeat conf.d]# filebeat -e -c /etc/filebeat/nginx-filebeat-access.yml &>/dev/null &
[1] 13738
  • 验证

 

 

  • 我们看到在message字段中,记录的信息非常的多,不适合我们之后的统计,那么怎么做呢

方式一、修改nginx的日志格式 json 方式二、filebeat —> logstash

【9】修改nginx的日志格式

[root@filebeat ~]# vim /etc/nginx/nginx.conf
............
............
    log_format json '{ "time_local": "$time_local", '
                                '"remote_addr": "$remote_addr", '
                                '"referer": "$http_referer", '
                                '"request": "$request", '
                                '"status": $status, '
                                '"bytes": $body_bytes_sent, '
                                '"agent": "$http_user_agent", '
                                '"x_forwarded": "$http_x_forwarded_for", '
                                '"up_addr": "$upstream_addr", '
                                '"up_host": "$upstream_http_host", '
                                '"upstream_time": "$upstream_response_time", '
                                '"request_time": "$request_time"'
    '}'
...........
    access_log  /var/log/nginx/access-json.log  json;

[root@filebeat ~]# systemctl reload nginx.service
[root@filebeat ~]# tailf /var/log/nginx/access-json.log 
{ "time_local": "11/Jul/2023:08:44:55 -0400", "remote_addr": "10.0.0.27", "referer": "-", "request": "GET / HTTP/1.1", "status": 200, "bytes": 21, "agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36", "x_forwarded": "10.0.0.1", "up_addr": "-", "up_host": "-", "upstream_time": "-", "request_time": "0.000"}access_log/var/log/nginx/access.logmain

## 收集日志改为access-json.log
[root@filebeat ~]# vim /etc/filebeat/nginx-filebeat-access.yml 
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access-json.log
  json_keys_under_root: true    # false表示将json解析的内容存储在message字段,true表示不存储在message字段中
  json.overwrite_keys: true     # 覆盖message字段,使用自定义json的key


output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true
  index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}"

setup.ilm.enabled: false
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"

[root@filebeat ~]# kill 13738
[root@filebeat ~]# filebeat -e -c /etc/filebeat/nginx-filebeat-access.yml &>/dev/null &

 

【10】图形化展示

 

【11】filebeat-收集nginx的访问日志+错误日志

[root@filebeat ~]# vim /etc/filebeat/nginx-filebeat-access-error.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access-json.log
  json_keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-access"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["nginx-error"]

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true
  indices:
    - index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-access"
    - index: "nginx-error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-error"

setup.ilm.enabled: false
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"

[root@filebeat ~]# filebeat -e -c /etc/filebeat/nginx-filebeat-access-error.yml &>/dev/null &

 

【12】filebeat收集nginx多虚拟主机日志

[root@filebeat filebeat]# vim /etc/nginx/conf.d/filebeat-test-01.conf 
server {
  listen 80;
  server_name www.filebeat-test-01.org;
    root /code/filebeat-01;
    access_log /var/log/nginx/access-test-01.log json;
  location / {
    index index.html;
  }
}

[root@filebeat ~]# vim /etc/nginx/conf.d/filebeat-test-02.conf
server {
  listen 80;
  server_name www.filebeat-test-02.org;
    root /code/filebeat-02;
    access_log /var/log/nginx/access-test-02.log json;
  location / {
    index index.html;
  }
}

[root@filebeat filebeat]# mkdir /code/filebeat-01
[root@filebeat filebeat]# echo "www.filebeat-01-web01" >> /code/filebeat-01/index.html

[root@filebeat ~]# mkdir /code/filebeat-02
[root@filebeat ~]# echo "www.filebeat-02-web01" >> /code/filebeat-02/index.html
[root@filebeat ~]# systemctl reload nginx.service
  • 配置filebeat
[root@filebeat ~]# cat /etc/filebeat/filebeat.yml 
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access-test-01.log
  json_keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-web01"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/access-test-02.log
  json_keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-web02"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["nginx-error"]

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true
  indices:
    - index: "nginx-web01-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-web01"
    - index: "nginx-web02-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-web02"
    - index: "nginx-error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-error"

setup.ilm.enabled: false
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"

[root@filebeat filebeat]# systemctl restart filebeat.service

 

【13】收集tomcat日志

  • 修改tomcat的日志格式
  <Host name="www.file-tomcat.org"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="file-tomcat_access_log." suffix=".txt"
           pattern="{&quot;clientip&quot;:&quot;%h&quot;,ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;parner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}" />
  </Host>
  • 启动tomcat,验证日志格式
[root@filebeat soft]# systemctl restart tomcat.service
[root@filebeat soft]# tailf /soft/tomcat/logs/file-tomcat_access_log..2023-07-12.txt
{"clientip":"10.0.0.1",ClientUser":"-","authenticated":"-","AccessTime":"[12/Jul/2023:03:26:54 -0400]","method":"GET / HTTP/1.1","status":"200","SendBytes":"11156","Query?string":"","parner":"-","AgentVersion":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"}
  • 配置filebeat
[root@filebeat filebeat]# vim filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /soft/tomcat/logs/file-tomcat_access_log.*.txt
  json_keys_under_root: true
  json.overwrite_keys: true
  tags: ["tomcat-access"]

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true
  indices:
    - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "tomcat-access"

setup.ilm.enabled: false
setup.template.name: "tomcat"
setup.template.pattern: "tomcat-*"

[root@filebeat filebeat]# systemctl restart filebeat.service
  •  验证

【14】filebeat-收集tomcat错误日志

[root@filebeat filebeat]# vim filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /soft/tomcat/logs/file-tomcat_access_log.*.txt
  json_keys_under_root: true
  json.overwrite_keys: true
  tags: ["tomcat-access"]

- type: log
  enabled: true
  paths:
    - /soft/tomcat/logs/catalina.out
  multiline.pattern: '^\d{2}'
  multiline.negate: true
  multiline.match: after
  multiline.max_lines: 1000
  tags: ["tomcat-error"]

output.elasticsearch:
  hosts: ["10.0.0.21:9200","10.0.0.22:9200","10.0.0.23:9200"]
  enable: true
  indices:
    - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "tomcat-access"
    - index: "tomcat-error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "tomcat-error"

setup.ilm.enabled: false
setup.template.name: "tomcat"
setup.template.pattern: "tomcat-*"

[root@filebeat filebeat]# systemctl restart filebeat.service
  • 验证

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

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

相关文章

【并查集+组合计数】ABC226 E

E - Just one (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 首先有个条件&#xff1a;每个点只有一个出边 如果没有直接看出结论&#xff0c;可以画几个链和树等特殊的图&#xff0c;可以发现&#xff0c;树是不满足条件的&#xff0c;环是满足条件的&#xff0c;因此可…

管理类联考——数学——记忆篇——数字编码

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &#x1f495;兴趣爱好&#xff1a;b站天天刷&…

Javaweb开发环境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程

Javaweb开发环境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程 javaweb开发环境的配置也是比较繁琐的一件事情&#xff0c;虽然理论上使用记事本&#xff0c;完全可以写出一个Javaweb工程&#xff0c; 但是在团队大型开发的Javaweb过程中&#xff0c;你必须配置好Eclipse、SV…

【算法集训之线性表篇】Day 08

文章目录 题目基本设计思想思路一思路二 代码实现效果 题目 已知一个整数数列A{a0,a1,a2,…,an-1}&#xff0c;其中0<ai<n(0<i<n)。若存在ap1ap2ap3…apmx且m>n/2(0<pk<n,1<k<m)&#xff0c;则成x为A的主元素。例如A{0,5,5,3,5,7,5,5}&#xff0c;…

Python模拟MQTT v3.1.1服务器

示例代码 import logging import asyncio from hbmqtt.broker import Broker# 设置日志级别为DEBUG logging.basicConfig(levellogging.DEBUG)# 创建MQTT服务器 broker Broker()# 启动MQTT服务器 async def start_broker():await broker.start()# 停止MQTT服务器 async def s…

好用到哭!后悔没有早点看到这个微信多账号管理工具!

作为一款及时通讯软件&#xff0c;微信是许多企业进行客户运营的选择工具。企业的员工利用微信与客户进行沟通&#xff0c;并且许多客单也都在微信上如数完成。然而&#xff0c;微信本身并不具备运营需要的很多功能&#xff0c;所以需要借助第三方工具来实现。 安全吗&#xf…

day20 数组指针

int main(void) {char *name[5] {"hello","china","beijing","project","Competer"};int i;for(i0;i<5;i){printf("%s\n",name[i]);//结果打印五个字符串}return 0; }数组指针&#xff0c;存了5个指针&#x…

串行FLASH文件系统FatFs-实际应用

目录 串行FLASH文件系统FatFs-实际应用 功能展示 程序代码 程序过程分析 串行FLASH文件系统FatFs-实际应用 功能展示 实验主要使用我们移植好的FatFs的FLASH文件系统实现三个功能&#xff1a;设备信息获取、文件定位写入功能测试和文件信息获取测试功能。 最终串口输出结…

4.带你入门matlab排序最值标准差标差(matlab程序)

%% 学习目标&#xff1a;排序&#xff0c;最值&#xff0c;标准差&#xff0c;方差 代码及结果 %% 排序 clear all; X[1 3 4;8 3 5;2 7 4] y1sort(X) %按列由小到大排序 y2sort(X,2) %按行由小到大排序 y3sort(X,1,descend) %按列由大…

自定义程序包不存在的解决方法

方案一&#xff1a; 在pom文件中加入以下代码 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.4.2</version><configuration><skipTests>true</sk…

数据驱动的决策优化,半导体CMS系统在企业管理中的应用

在当今信息时代&#xff0c;数据的重要性在企业管理中愈发凸显。半导体制造业作为一个高度自动化和数据密集的行业&#xff0c;利用数据进行决策优化对于企业的成功至关重要。在这方面&#xff0c;PreMaint CMS系统扮演着关键的角色&#xff0c;为企业管理提供了数据驱动的决策…

Git Commit的规范及高级使用方法

git commit是日常工作中使用率极高的一个命令&#xff0c;但是根据我从业5年的经验来看&#xff0c;大多数人在用git commit命令时都很粗糙&#xff0c;比如git commit -m 后跟的message是五花八门&#xff0c;有用中文的&#xff0c;有用英文的&#xff0c;甚至还有直接跟111的…

小程序搭建教程

小程序搭建流程 随着移动互联网的发展&#xff0c;小程序成为了营销和服务的重要渠道之一。在本文中&#xff0c;我们将介绍如何搭建一个小程序的详细流程&#xff0c;包括公众号申请、支付微信认证费、复用资质申请小程序、开通微信支付、绑定第三方开发平台、添加商品服务内…

基于SpringBoot的企业人力资源管理系统设计与实现

1.引言 随着经济改革开放的发展&#xff0c;企业之间的竞争也越来越激烈&#xff0c;在这样的大环境下&#xff0c;企业要想立于不败之地&#xff0c;不仅要有好的商品&#xff0c;更要有一支强有力的团队&#xff0c;其本质就是人才。企业对人才的需求不断的增加&#xff0c;…

视频剪辑素材网站,免费可商用,赶紧马住~

推荐几个高质量视频素材网站&#xff0c;免费可商用&#xff0c;建议收藏&#xff01; 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库虽然是一个设计网站&#xff0c;但它还有非常丰富的视频和音频素材&#xff0c;视频素材全部都是高清无水印&#xff…

485远传水表抄表系统

485远传水表抄表系统是一种基于RS-485通信协议的远程抄表系统&#xff0c;它利用现代通信技术&#xff0c;实现了对水表数据的远程采集、传输和处理&#xff0c;是智慧城市建设的重要组成部分。本文将从以下几个方面对485远传水表抄表系统进行全面介绍&#xff1a; 一、系统组成…

【Spring Boot】Spring Boot的系统配置 — 系统配置文件

系统配置文件 Spring Boot的系统配置文件&#xff0c;包括application.properties和application.yml配置文件的使用以及YML和Properties配置文件有什么区别&#xff0c;最后介绍如何更改Spring Boot的启动图案。 1.application.properties Spring Boot支持两种不同格式的配置…

pyqt结合深度学习框架做系统

时隔将近两个月&#xff0c;我胡汉三又回来啦&#xff01;&#xff01;&#xff01;将近两个月玩了一个月&#xff0c;半个月面试&#xff0c;半个月吃土沉淀&#xff08;有收获&#xff09;也投出去一篇论文&#xff08;外审中&#xff0c;关于深度学习神经网络改进的一篇病害…

如何将代理IP集成到自动化测试框架中?

自动化测试框架是现代软件工程中不可或缺的一部分。它们提供了许多好处&#xff0c;包括&#xff1a;更快的测试速度&#xff0c;更高的可靠性和更广泛的测试覆盖范围。然而&#xff0c;在测试过程中&#xff0c;有些网站可能需要使用代理IP&#xff0c;这是因为一些网站会限制…

踩坑记录:xorm的sql()函数后无法使用FindAndCount()

一、起因 懒省事想用 sql 写个有连表操作的分页查询语句&#xff0c;看到 xorm 中 sql 要和代码紧密纠缠在一起就不爽&#xff0c;所有就想用 xorm 中的 session.SQL(sql).Limit(size, offset).FindAndCount() 方法解决。不曾想。。。 sql: expected 15 destination argument…