【Prometheus】mysqld_exporter采集+Grafana出图+AlertManager预警

news2025/2/1 4:19:59

前提环境:已经安装和配置好prometheus server

所有组件对应的版本:
prometheus-2.44.0
mysqld_exporter-0.14.0
grafana-enterprise-9.1.2-1.x86_64.rpm
alertmanager-0.25.0
prometheus-webhook-dingtalk-2.1.0

简介

mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的,mysql_exporter需要连接到数据库并有相关权限。既可以用二进制安装部署,也可以通过容器形式部署,但为了数据收集的准确性,推荐二进制安装。

一,下载安装包并解压

安装包下载地址: https://github.com/prometheus/mysqld_exporter/releases

同样物理机上下载,然后上传到服务器,本次安装使用的版本为:mysqld_exporter-0.14.0.linux-amd64

根据服务器情况选择安装目录,上传安装包。

[root@jd-mysql mysqld_exporter]# mkdir /mysqld_exporter
[root@jd-mysql mysqld_exporter]# cd /mysqld_exporter/

[root@jd-mysql mysqld_exporter]# ls
mysqld_exporter-0.14.0.linux-amd64.tar.gz
[root@jd-mysql mysqld_exporter]# tar -xvzf mysqld_exporter-0.14.0.linux-amd64.tar.gz
[root@jd-mysql mysqld_exporter]# cp mysqld_exporter-0.14.0.linux-amd64/* .
[root@jd-mysql mysqld_exporter]# rm -rf mysqld_exporter-0.14.0.linux-amd64
[root@jd-mysql mysqld_exporter]# ls
LICENSE  mysqld_exporter  mysqld_exporter-0.14.0.linux-amd64.tar.gz  NOTICE

在这里插入图片描述

二,创建配置文件

  • 创建配置文件.my.cnf ,填入如下内容后保存
[root@jd-mysql mysqld_exporter]# cat .my.cnf 
[client]
user = exporter
password = Jd123456
host = 192.168.1.150
port = 3306
  • mysql创建用户并授权
[root@jd-mysql mysqld_exporter]# mysql -uroot -pJiangda123#

root@(none) 11:06  mysql>create user 'exporter'@'%' identified by 'Jd123456';
Query OK, 0 rows affected (1.02 sec)

root@(none) 11:07  mysql>GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%'  WITH MAX_USER_CONNECTIONS 3;
Query OK, 0 rows affected, 1 warning (0.00 sec)

root@(none) 11:07  mysql>flush privileges;
Query OK, 0 rows affected (0.00 sec)

root@(none) 11:07  mysql>exit
Bye


三,进行系统service编写

  • 创建mysqld_exporter.service配置文件
vim /usr/lib/systemd/system/mysqld_exporter.service
  • mysqld_exporter.service 文件填入如下内容后保存:wq
[Unit]
Description=https://prometheus.io

[Service]
Restart=on-failure
ExecStart=/mysqld_exporter/mysqld_exporter --config.my-cnf=/mysqld_exporter/.my.cnf --web.listen-address=:9104

[Install]
WantedBy=multi-user.target

  • 刷新服务配置并启动服务
systemctl daemon-reload
systemctl start mysqld_exporter.service

  • 查看服务运行状态
systemctl status mysqld_exporter.service

在这里插入图片描述

  • 设置开机自启动
systemctl enable mysqld_exporter.service

  • 测试服务返回
curl localhost:9104/metrics

在这里插入图片描述

四,对接prometheus

  • 打开prometheus.yml添加以下内容,并执行:wq,点击回车保存
   
 - job_name: "mysql"
   static_configs:
     - targets: ["192.168.1.150:9104"]
       labels:
         instance: mysqld-exporter

在这里插入图片描述

  • 执行prometheus配置刷新
systemctl restart prometheus
curl -XPOST localhost:9090/-/reload
  • 打开prometheus,搜索mysql,可以看到出现了很多的参数指标
    在这里插入图片描述

  • 打开targets,可以看到节点状态已经UP
    在这里插入图片描述

  • 至此mysqld-exporter插件安装完毕

五,用Grafana出图

根据服务器情况选择安装目录,上传安装包。

[root@nfs yum.repos.d]# mkdir /grafana
[root@nfs yum.repos.d]# cd /grafana/
[root@nfs grafana]# ls
grafana-enterprise-9.1.2-1.x86_64.rpm
[root@nfs grafana]# yum install grafana-enterprise-9.1.2-1.x86_64.rpm -y

安装好后,

[root@nfs grafana]# service grafana-server start
Starting grafana-server (via systemctl):                   [  确定  ]
[root@nfs grafana]# systemctl enable grafana-server  
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
[root@nfs grafana]# netstat -anplut|grep grafana
tcp        0      0 192.168.1.130:56948     34.120.177.193:443      ESTABLISHED 8775/grafana-server 
tcp        0      0 192.168.1.130:48842     185.199.110.133:443     ESTABLISHED 8775/grafana-server 
tcp6       0      0 :::3000                 :::*                    LISTEN      8775/grafana-server 

访问http://192.168.1.130:3000/
在这里插入图片描述
默认的用户名和密码是
用户名admin
密码admin

配置数据源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
成功效果:
在这里插入图片描述

六,AlertManager预警(重难点)

1、服务端口规划:

服务端口
Prometheus9090
Node_exporter8090
Mysqld_exporter9194
Alertanager9093
Webhook-dingtalk8060

2.架构图:
在这里插入图片描述
3、钉钉创建机器人保存Webhook地址:
用电脑版钉钉,打开设置,点击机器人,再点击添加机器人,进来之后选择最后一个“自定义”,再添加,再输入相关信息,
在这里插入图片描述
总共需要保存两项,我们后续会用到:(注意每个机器人不是一样的,看自己的)

webhook地址

https://oapi.dingtalk.com/robot/send?access_token=4e70f2f1a85822394c15671281605fd22f4c0ee9fb80e122297d7b332704a03b

加签后的秘钥

SECc9dc9daf3dcd865b522587455eb076693368bdcbb443478d9542d640f896d2e8

4.顺便校准一下所有机器的时间(不清楚到底是不是影响结果的因素,顺便校准吧)

1. Alertmanager安装启动

根据服务器情况选择安装目录,上传安装包。

[root@nfs prometheus]# mkdir /prom_alert
[root@nfs prometheus]# cd /prom_alert/
[root@nfs prom_alert]# ls
alertmanager-0.25.0.linux-amd64.tar.gz
[root@nfs prom_alert]# tar xf alertmanager-0.25.0.linux-amd64.tar.gz 
[root@nfs prom_alert]# ls
alertmanager-0.25.0.linux-amd64  alertmanager-0.25.0.linux-amd64.tar.gz
[root@nfs prom_alert]# mv alertmanager-0.25.0.linux-amd64 alertmanager
[root@nfs prom_alert]# cd alertmanager
[root@nfs alertmanager]# ls
alertmanager  alertmanager.yml  amtool  LICENSE  NOTICE
[root@nfs alertmanager]# cp alertmanager.yml alertmanager.yml.bak
[root@nfs alertmanager]# vim alertmanager.yml
[root@nfs alertmanager]# pwd
/prom_alert/alertmanager

使用systemd管理,启动 && 开机自启

[root@nfs system]# vim /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager
Documentation=https://prometheus.io/
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
#User=prometheus
ExecStart=/prom_alert/alertmanager/alertmanager --storage.path=/prom_alert/alertmanager/data --config.file=/prom_alert/alertmanager/alertmanager.yml --web.external-url=http://192.168.*.*
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target


[root@nfs system]# systemctl daemon-reload
[root@nfs system]# systemctl start alertmanager
[root@nfs system]# systemctl enable alertmanager
[root@nfs system]# systemctl status alertmanager

查看端口9093

[root@nfs system]# netstat -anplut|grep alert
tcp6       0      0 :::9093                 :::*                    LISTEN      13175/alertmanager  
tcp6       0      0 :::9094                 :::*                    LISTEN      13175/alertmanager  
udp6       0      0 :::9094                 :::*                                13175/alertmanager  

验证 浏览器访问alertmanager管理页面
浏览器访问 http://IP:9093,显示下图表示无误~
在这里插入图片描述

2. Webhook-dingtalk安装启动

根据服务器情况选择安装目录,上传安装包。

[root@nfs prom_alert]# ls
alertmanager                            prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
alertmanager-0.25.0.linux-amd64.tar.gz
[root@nfs prom_alert]# tar xf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz 
[root@nfs prom_alert]# mv prometheus-webhook-dingtalk-2.1.0.linux-amd64 prometheus-webhook-dingtalk
[root@nfs prom_alert]# cd prometheus-webhook-dingtalk
[root@nfs webhook-dingtalk]# ls
config.example.yml  contrib  LICENSE  prometheus-webhook-dingtalk
[root@nfs webhook-dingtalk]# cp config.example.yml config.yml
[root@nfs alertmanager]# pwd
/prom_alert/alertmanager

使用systemd管理,启动 && 开机自启

[root@nfs prometheus-webhook-dingtalk]# vim /usr/lib/systemd/system/dingtalk.service 
[Unit]
Description=dingtalk
Documentation=https://github.com/timonwong/prometheus-webhook-dingtalk/
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/prom_alert/prometheus-webhook-dingtalk
ExecStart=/prom_alert/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk --config.file=/prom_alert/prometheus-webhook-dingtalk/config.yml

[Install]
WantedBy=multi-user.target
[root@nfs prometheus-webhook-dingtalk]# systemctl daemon-reload
[root@nfs prometheus-webhook-dingtalk]# systemctl start dingtalk
[root@nfs prometheus-webhook-dingtalk]# systemctl enable dingtalk
[root@nfs prometheus-webhook-dingtalk]# systemctl status dingtalk

查看端口8060

[root@nfs prometheus-webhook-dingtalk]# netstat -anplut|grep 8060
tcp6       0      0 :::8060                 :::*                    LISTEN      14291/prometheus-we 

3. 配置及测试

3.1 Webhook-dingtalk配置钉钉webhook地址

1、 只改以下三处即可,如下图:
加签秘钥、webhook地址是咱们在钉钉创建机器人时获取的!

vim /prom_alert/prometheus-webhook-dingtalk/config.yml 

在这里插入图片描述
2、添加钉钉报警模板(注意复制完整,别少这少那,多这多那!因为我就没注意犯了错,浪费了一些时间!)

[root@nfs prometheus-webhook-dingtalk]# vim template.tmpl
{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}
 
 
{{ define "__alert_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
 
**告警主题**: {{ .Annotations.summary }}

**告警类型**: {{ .Labels.alertname }}
 
**告警级别**: {{ .Labels.severity }} 
 
**告警主机**: {{ .Labels.instance }} 
 
**告警信息**: {{ index .Annotations "description" }}
 
**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}
 
{{ define "__resolved_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}

**告警主题**: {{ .Annotations.summary }}

**告警类型**: {{ .Labels.alertname }} 
 
**告警级别**: {{ .Labels.severity }}
 
**告警主机**: {{ .Labels.instance }}
 
**告警信息**: {{ index .Annotations "description" }}
 
**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
 
**恢复时间**: {{ dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}
 
 
{{ define "default.title" }}
{{ template "__subject" . }}
{{ end }}
 
{{ define "default.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**====侦测到{{ .Alerts.Firing | len  }}个故障====**
{{ template "__alert_list" .Alerts.Firing }}
---
{{ end }}
 
{{ if gt (len .Alerts.Resolved) 0 }}
**====恢复{{ .Alerts.Resolved | len  }}个故障====**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}
 
 
{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
{{ template "default.title" . }}
{{ template "default.content" . }}

3、刷新服务

systemctl restart dingtalk
systemctl status dingtalk

3.2 Alertmanager配置钉钉告警

1、修改配置

[root@nfs prometheus-webhook-dingtalk]# vim /prom_alert/alertmanager/alertmanager.yml

route:
  group_by: ['dingding']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'dingding.webhook1'
  routes:
  - receiver: 'dingding.webhook1'
    match_re:
      alertname: ".*"
receivers:
  - name: 'dingding.webhook1'
    webhook_configs:
    - url: 'http://localhost:8060/dingtalk/webhook1/send'
      send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

在这里插入图片描述2、重启

systemctl restart alertmanager
systemctl status alertmanager

3.3 Prometheus集成Alertmanager及告警规则配置

1、修改prometheus配置

[root@nfs alertmanager]# vim /prom/prometheus/prometheus.yml

在这里插入图片描述
2、添加node_exporter告警规则

[root@nfs prom_alert]# mkdir rule
[root@nfs prom_alert]# cd rule/
[root@nfs rule]# vim node_exporter.yml 

groups:
- name: 服务器资源监控
  rules:
  - alert: 内存使用率过高
    expr: 100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 80
    for: 3m 
    labels:
      severity: 严重告警
    annotations:
      summary: "{{ $labels.instance }} 内存使用率过高, 请尽快处理!"
      description: "{{ $labels.instance }}内存使用率超过80%,当前使用率{{ $value }}%."
          
  - alert: 服务器宕机
    expr: up == 0
    for: 1s
    labels:
      severity: 严重告警
    annotations:
      summary: "{{$labels.instance}} 服务器宕机, 请尽快处理!"
      description: "{{$labels.instance}} 服务器延时超过3分钟,当前状态{{ $value }}. "
 
  - alert: CPU高负荷
    expr: 100 - (avg by (instance,job)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
    for: 5m
    labels:
      severity: 严重告警
    annotations:
      summary: "{{$labels.instance}} CPU使用率过高,请尽快处理!"
      description: "{{$labels.instance}} CPU使用大于90%,当前使用率{{ $value }}%. "
      
  - alert: 磁盘IO性能
    expr: avg(irate(node_disk_io_time_seconds_total[1m])) by(instance,job)* 100 > 90
    for: 5m
    labels:
      severity: 严重告警
    annotations:
      summary: "{{$labels.instance}} 流入磁盘IO使用率过高,请尽快处理!"
      description: "{{$labels.instance}} 流入磁盘IO大于90%,当前使用率{{ $value }}%."
 
 
  - alert: 网络流入
    expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance,job)) / 100) > 102400
    for: 5m
    labels:
      severity: 严重告警
    annotations:
      summary: "{{$labels.instance}} 流入网络带宽过高,请尽快处理!"
      description: "{{$labels.instance}} 流入网络带宽持续5分钟高于100M. RX带宽使用量{{$value}}."
 
  - alert: 网络流出
    expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance,job)) / 100) > 102400
    for: 5m
    labels:
      severity: 严重告警
    annotations:
      summary: "{{$labels.instance}} 流出网络带宽过高,请尽快处理!"
      description: "{{$labels.instance}} 流出网络带宽持续5分钟高于100M. RX带宽使用量{$value}}."
  
  - alert: TCP连接数
    expr: node_netstat_Tcp_CurrEstab > 10000
    for: 2m
    labels:
      severity: 严重告警
    annotations:
      summary: " TCP_ESTABLISHED过高!"
      description: "{{$labels.instance}} TCP_ESTABLISHED大于100%,当前使用率{{ $value }}%."
 
  - alert: 磁盘容量
    expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 90
    for: 1m
    labels:
      severity: 严重告警
    annotations:
      summary: "{{$labels.mountpoint}} 磁盘分区使用率过高,请尽快处理!"
      description: "{{$labels.instance}} 磁盘分区使用大于90%,当前使用率{{ $value }}%."

3、检查Prometheus的配置文件并重启
检查配置文件很有必要,减少一些不必要的麻烦:promtool check config prometheus.yml

[root@nfs prom_alert]# cd /prom/prometheus
[root@nfs prom_alert]# ./promtool check config  prometheus.yml
Checking prometheus.yml
  SUCCESS: 1 rule files found
 SUCCESS: prometheus.yml is valid prometheus config file syntax

Checking /prom_alert/rule/node_exporter.yml
  SUCCESS: 8 rules found

[root@nfs prom_alert]# systemctl restart prometheus
[root@nfs prom_alert]# systemctl status prometheus

4、访问Prometheus Web页面可以查看到添加的规则,如下图:
在这里插入图片描述

4. 测试告警

1、故意将exporter机器关机,模拟服务器宕机
过了一会儿
2、Prometheus 管理页面可以看到告警信息如下图:
在这里插入图片描述
3、Prometheus会将告警信息发送给Alertmanager,所以说Alertmanager页面可以看到告警信息如下图:
在这里插入图片描述
4、此时会发送到钉钉机器人告警,如下图所示:
在这里插入图片描述

七,大功告成

多回顾,捋清楚那些复制粘贴的内容都是为什么这么做的

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

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

相关文章

spring 事务超时

Transactional(timeout 10) 表示设置事务的超时时间为10秒 表示超过10秒如果该事务中所有的DML语句还没有执行完毕的话,最终结果会选择回滚 默认值-1,表示没有时间限制。 如果最后一条DML语句后面还有很多业务逻辑,这些业务代码执行的时间不…

setState详解

this. setState( [partialState], [callback]) 1.[partialState] :支持部分状态更改 this, setState({ x:100 //不论总共有多少状态,我们只修改了x,其余的状态不动 });callback :在状态更改/视图更新完毕后触发执行,也可以说只要执行了setS…

lightGBM的介绍

一、lightGBM的介绍 1.lightGBM的演进过程 2.AdaBoost算法 AdaBoost(Adaptive Boosting)是一种集成学习算法,通过组合多个弱分类器来构建一个强分类器。它是由Freund和Schapire在1996年提出的,是集成学习中最早被广泛应用的算法…

JDK8-1-Lambda表达式(5)-复合 Lambda 表达式

JDK8-1-Lambda表达式(5)-复合 Lambda 表达式 JDK8 在 java.util.function 包下定义了一些默认的 函数式接口 ,如 Predicate、Consumer、Function、 Comparator (在 java.util.包下) ,这些接口提供了一些复…

运营-21.常见的内容生产方式

常见的 内容生产方式 PGC(Professionally-generated Content)专业生产内容 传统的门户网站内容生产方式,内容多由官方工作人员身或者专业的内容创造者(比如新闻记者等)创造。 UGC(User Generated Content&a…

【好书精读】网络是怎样连接的 浏览器生成消息

如果只是讲解 TCP/IP 、 以太网这些单独的技 术 , 读者就无法理解网络这个系统的全貌 ; 如果无法理解网络的全貌 , 也 就无法理解每一种网络技术背后的本质意义 ; 而如果无法理解其本质意义 , 就只能停留在死记硬背的…

MMDetection代码实战

title: mmdet代码实战 date: 2023-06-10 17:01:45 tags: [detection,pytorch] MMDetection代码实战 这一届主要讲解了,如何构建cfg,如何在目标检测上设置自己的配置文件。主要的思维导图如下 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下…

第3章“程序的机器级表示”:对齐(alignment)

许多计算机系统对基本数据类型的可允许地址做出了一些限制,要求某种类型的对象的地址必须是某个值 k k k (通常是2、4 或 8)的倍数。这种 对齐限制 简化了处理器和存储器系统之间接口的硬件设计。例如,假设一个处理器总是从存储器…

pikachu靶场-File Inclusion

文件包含漏洞概述 在web后台开发中&#xff0c;程序员往往为了提高效率以及让代码看起来更加简介&#xff0c;会使用”包含“函数功能。比如把一系列功能函数都写进function.php中&#xff0c;之后当某个文件需要调用的时候就直接在文件头上写上一句<?php include functio…

多叉树的构建,条件查询,修改删除节点

多叉树的构建查询&#xff0c;新增&#xff0c;修改&#xff0c;删除 文章目录 多叉树的构建查询&#xff0c;新增&#xff0c;修改&#xff0c;删除一&#xff0c;数据库表设计二、新增相对应数据库表的实体类三、新建多叉树树工具类四、多叉树树的条件查询五、多叉树的节点新…

关于【Git】push失败与使用小乌龟(TortoiseGit)时的一些报错解决方案

1.报错:No supported authentication methods available (server sent: publickey) 原因.小乌龟没有设置git路径&#xff0c;解决如下 将红框标注的地址改为自己的git安装地址即可。 2.使用git推送到远程仓库的时候报错Failed to connect to 127.0.0.1 port 7890: 拒绝连接 …

C# 让程序代码在固定的线程里运行

一、概述 在平时我们的开发中&#xff0c;多线程也是经常用到的&#xff0c;尤其是我们做上位机行业的&#xff0c;平时更是必不可少&#xff0c;在以前我做 Unity3d 开发时&#xff0c;其实并不用关心线程的问题&#xff0c;在 Unity 的开发中&#xff0c;所有代码基本都是单…

点云综述(整理自网络资源)

目录 一、什么是点云 二、如何获取点云 1、三维激光扫描仪 2、双目相机 双目测距基本原理 视差图 双目测距的优点与难点 3、RGB-D相机 RGB-D什么意思 RGB-D相机的分类 RGBD相机的缺点&#xff1a; RGBD相机的优点 三、点云有哪些研究方向 1、基于点云的分类 2、基于…

华为OD机试真题 JavaScript 实现【IPv4地址转换成整数】【2023 B卷 100分】

一、题目描述 存在一种虚拟 IPv4 地址&#xff0c;由4小节组成&#xff0c;每节的范围为0~255&#xff0c;以#号间隔&#xff0c; 虚拟 IPv4 地址可以转换为一个32位的整数&#xff0c;例如&#xff1a; 128#0#255#255&#xff0c;转换为32位整数的结果为2147549183&#xff0…

【深入理解函数栈帧:探索函数调用的内部机制】

本章我们要介绍的不是数学中的函数&#xff0c;而是C语言中的函数哟&#xff01; 本章重点 了解汇编指令深刻理解函数调用过程 样例代码&#xff1a; #include <stdio.h> int MyAdd(int a, int b) {int c 0;c a b;return c; }int main() {int x 0xA;int y 0xB;int…

SpringCloud第二篇:Feign远程调用

思考&#xff1a;为啥要学Feign呢&#xff1f; 先来看我们以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http://userservice/user/" order.getUserId(); User user restTemplate.getFor0bject(url,User.class);这里就有几个问题&#xff1a…

首届“设计·无尽谈”论坛完满收官 持续打造当代设计共同体

首届“设计无尽谈”论坛在京举行 5月16日&#xff0c;首届“设计无尽谈”论坛在北京举行&#xff0c;本次论坛以“漫谈当代空间精神”为主题&#xff0c;12位来自顶尖建筑设计领域的嘉宾和设计师到场&#xff0c;论坛以茶话会的形式进行&#xff0c;不受严格的议程和时间限制的…

计算机网络之网络层

四.网络层&#xff1a;数据平面 4.1 网络层概述 网络层被分解为两个相互作用的部分&#xff0c;即数据平面和控制平面。 数据平面决定到达路由器输入链路之一的数据报如何转发到该路由器的输出链路之一&#xff0c;转发方式有&#xff1a; 传统的IP转发&#xff1a;转发基于…

Nginx(一)介绍Nginx、正向代理和实现反向代理的两个实例

文章目录 一、Nginx介绍二、正向代理三、反向代理四、实例演示1、反向代理实例一&#xff08;反向代理&#xff0c;访问www.123.com&#xff09;2、反向代理实例二&#xff08;使用 nginx 反向代理&#xff0c;根据访问的路径跳转到不同端口的服务中&#xff09; 五、nginx之lo…

文件操作之文件下载(32)

下载和读取是差不多的情况 区分 文件被解析&#xff0c;我们称为文件包含漏洞 显示文件的源代码&#xff0c;我们称为文件读取漏洞 提示文件下载&#xff0c;我们称为文件下载漏洞 #文件下载 文件下载出现的原因&#xff0c;在任意代码里面出现下载性的功能性函数所导致的…