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

zabbix监控警告

监控概述

  • 对服务的管理,不能仅限于可用性。

  • 还需要服务可以安全、稳定、高效地运行。

  • 监控的目的:早发现、早治疗。

  • 被监控的资源类型:

    • 公开数据:对外开放的,不需要认证即可获取的数据

    • 私有数据:对外不开放,需要认证、权限才能获得的数据

uptime可以查看系统已经运行了多久。最后的3个数字分别是CPU最近1分钟、5分钟、15分钟的平均负载。平均负载的值,不应该大于总核心数。

[root@myhost ~]# uptime

09:28:25 up 53 days, 27 min, 0 users, load average: 0.09, 0.08, 0.03

free -h 主要用于查看内存

total 总内存 available 可用内存

swapon -s # 查看swap空间

df -h # 查看硬盘使用情况

ping -c2 www.baidu.com # 发2个包,测试网络

zabbix

实施监控的几个方面:

数据采集:使用agent(可安装软件的系统上)、SNMP(简单网络管理协议,用于网络设备的数据采集)

数据存储:使用mysql数据库

数据展示:通过web页面

zabbix通过在远程主机上安装agent进行数据采集,存储到mysql数据库,通过web页面进行展示。

安装zabbix 6.0 安装说明:https://www.zabbix.com/download?zabbix=6.0&os_distribution=rocky_linux&os_version=8&components=server_frontend_agent&db=mysql&ws=nginx 中文手册:https://www.zabbix.com/documentation/6.0/zh

在zabbix上创建连接数据库的用户

[root@zabbixserver ~]# mysql mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin; # 在binlog日志开启的情况下,打开函数生成器 mysql> set global log_bin_trust_function_creators = 1; mysql> create user zabbix@localhost identified by 'zabbix'; mysql> grant all privileges on zabbix.* to zabbix@localhost; mysql> quit; 验证数据库配置,如果登陆不到数据库表示上一步配置不正确 [root@zabbixserver ~]# mysql -uzabbix -pzabbix -hlocalhost zabbix # 9. 在数据库中创建表并导入数据 [root@zabbixserver ~]# cp /usr/share/zabbix-sql-scripts/mysql/server.sql.gz . [root@zabbixserver ~]# gzip -d server.sql.gz [root@zabbixserver ~]# mysql -uzabbix -pzabbix zabbix < server.sql # 10. 配置zabbix_server [root@zabbixserver ~]# vim +129 /etc/zabbix/zabbix_server.conf DBPassword=zabbix # 11. 配置zabbix_agent [root@zabbixserver ~]# vim /etc/zabbix/zabbix_agentd.conf 182 Hostname=zabbixserver # 12. 配置nginx展示zabbix [root@zabbixserver ~]# vim /etc/nginx/conf.d/zabbix.conf # 打开第2、3行的注释,结果如下所示: server {       listen          8080;       server_name     example.com; ...以下省略... 启动相关服务 [root@pubserver zabbix]# vim 04-start-zabbix.yml --- - name: config zabbix hosts: zabbix tasks:    - name: start service    # 循环启动多个服务      service:       name: "{{item}}"       state: started       enabled: yes     loop:        - zabbix-server        - zabbix-agent        - nginx        - php-fpm ansible-playbook 04-start-zabbix.yml

虚拟主机分类 基于IP或基于端口号或基于名称

空闲值 最小值 平均值 最大值

访问zabbixserver的8080端口,进行初始化:

这里的用户名Admin,A是大写的!密码是小写的zabbix

此时zabbix已经开始在监控自己了,查看默认监控配置

1.配置zabbix监控web1服务器

安装agent

  1. [root@pubserver zabbix]# vim 05-inst-agent.yml

---

- name: install agent

hosts: webservers

tasks:

   - name: install agent    # 安装agent

    yum:

      name: zabbix-agent

      state: present

[root@pubserver zabbix]# ansible-playbook 05-inst-agent.yml

2. 修改web1配置文件

[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.conf

117 Server=127.0.0.1,192.168.88.5

182 Hostname=web1

3. 起动服务

[root@pubserver zabbix]# vim 06-start-agent.yml

---

- name: config agent

hosts: web1

tasks:

   - name: start agent      # 启动服务

     service:

      name: zabbix-agent

      state: started

      enabled: yes

[root@pubserver zabbix]# ansible-playbook 06-start-agent.yml

在web页面中添加对web1的监控

主机:安装了agent,被监控的主机

主机组:根据需求,将多台主机加入到一个主机组中,方便管理。系统默认已经创建了一些主机组。

模板:是监控项的集合。将模板应用到主机,主机就可以直接拥有模板中的所有监控项。系统中默认已经创建了一些模板。

常用监控指标
  • Space utilization:以百分比显示的磁盘利用率

  • Used space:已用磁盘空间

  • Available memory:可用内存

  • CPU idle time:CPU空闲时间。不宜过低。

  • Load average (1m avg)、Load average (5m avg)、Load average (15m avg):CPU1分钟、5分钟、15分钟的平均负载。这个值不应长期大于核心数。

  • Interface eth0: Bits received:网卡接收到的数据量 数据需要除以8 换算成比特而不是字节

  • Interface eth0: Bits sent:网卡发送的数据量

  • Number of processes:系统运行的进程数

  • Number of logged in users:已登陆的用户数

未启用爆红错误的话 检查服务是否开启 是否10050端口存在

也有可能存在权限问题 查看主机IP地址是否错误 配置文件错误

vim /etc/zabbix/zabbix_agentd.conf 117行写错

自定义监控项

实现监控web1用户数量的监控项

在被控端创建key。被控端被监控的内容叫作key,可以理解为它就是一个变量名,具体的名字自己决定。

在web页面中创建监控项。监控项对应key值。

包含 》对应》 模板》 监控项 》 key

在被控端创建key

创建key的语法

UserParameter=自定义key值,命令

命令的执行结果,是key的value

创建自定义配置文件。文件名自定义。

[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/usercnt.conf

UserParameter=usercnt,sed -n '$=' /etc/passwd

[root@web1 ~]# systemctl restart zabbix-agent.service

验证自定义监控项

1. 安装zabbix-get

[root@zabbixserver ~]# yum install -y zabbix-get

[root@web1 ~]# yum install -y zabbix-get

2. 获取监控项的值

[root@web1 ~]# zabbix_get -s 127.0.0.1 -k usercnt

[root@zabbixserver ~]# zabbix_get -s 192.168.88.100 -k usercnt

创建模板

你都知道有哪些命令可以监控服务器的各种状态?

参考答案(注意:有些命令需要额外安装):

可以使用以下命令监控服务器的各种状态:

top:查看系统整体的 CPU、内存、进程等信息。

htop:类似于 top,但是界面更加美观,而且支持鼠标操作。

free:查看内存的使用情况。

df:查看磁盘的使用情况。

du:查看指定目录的磁盘使用情况。

iostat:查看磁盘 I/O 的情况。

vmstat:查看虚拟内存的情况。

sar:查看 CPU、内存、磁盘、网络等信息,可以设置输出时间间隔。

netstat:查看网络连接情况。

ss:查看网络连接情况,比 netstat 更快速、更详细。

iftop:查看网络流量情况。

tcpdump:抓包工具,可以查看网络数据包的内容。

ping:测试网络连通性。

traceroute:追踪数据包在网络中的路径。

telnet:测试端口是否开放。

curl:测试 Web 服务是否正常。

wget:下载文件,测试网络带宽。

nload:查看网络流量情况,类似于 iftop。

iptraf:查看网络流量情况,支持多种协议。

nethogs:查看进程的网络流量情况。

iftop:查看网络流量情况。

tcpdump:抓包工具,可以查看网络数据包的内容。

ping:测试网络连通性。

traceroute:追踪数据包在网络中的路径。

telnet:测试端口是否开放。

curl:测试 Web 服务是否正常。

简要说明一下如何在Rocky 8系统上安装zabbix 6.0?

参考答案:

系统yum没有提供zabbix安装包,需要先准备zabbix的yum源

安装软件包,包括:zabbix-server-mysql、zabbix-web-mysql、zabbix-nginx-conf、zabbix-sql-scripts、zabbix-selinux-policy、zabbix-agent、mysql-server

启动mysqld服务

在mysql服务器上创建数据库以及访问数据库的用户

导入zabbix提供的sql文件到上一步建立的数据中

配置zabbix server端(改配置文件)

配置zabbix agent端(改配置文件)

配置nginx展示zabbix(改配置文件)

启动相关服务,包括:zabbix-server、zabbix-agent、nginx、php-fpm

访问zabbixserver的8080端口,进行初始化

zabbix常用的监控指标有哪些?

CPU 使用率:监控服务器的 CPU 利用率,以评估服务器的负载和性能。

内存使用率:监控服务器的内存使用情况,包括物理内存、交换内存和缓存的使用情况。

磁盘空间使用率:监控服务器和存储设备的磁盘空间使用情况,以避免磁盘空间不足的问题。

网络带宽使用情况:监控网络接口的网络带宽使用情况,包括入带宽和出带宽的使用情况。

网络设备状态和流量:监控网络设备的状态和流量,包括交换机、路由器等设备的状态和流量。

数据库性能:监控数据库的性能指标,包括查询吞吐量、查询执行性能、连接情况等。

Web 应用程序响应时间和错误率:监控 Web 应用程序的响应时间和错误率,以提高应用程序的性能和可用性。

日志文件变化和错误:监控日志文件的变化和错误,以获取应用程序和系统的运行信息和故障排除信息。

操作系统进程和服务状态:监控操作系统的进程和服务状态,以确保系统的稳定性和可用性。

系统日志和告警事件:监控系统日志和告警事件,以获取系统和应用程序的运行信息和故障排除信息。

电力设备状态:监控电力设备的电压、电流和温度等状态,以确保设备的稳定运行。

安全设备状态:监控安全设备的防火墙日志、攻击检测等状态,以提高系统的安全性。

如何在zabbix被控端创建自定义key?

UserParameter=自定义key值,命令 # 命令的执行结果,是key的value

自定义key创建后需要重启zabbix-agent服务:

systemctl restart zabbix-agent.service

创建的key可以通过zabbix_get查询:

zabbix_get -s 主机地址 -k 自定义key

配置zabbix监控服务器

本实验需要使用课上的zabbix server,如没有可用服务器,请参照课上文档部署服务器

准备一台名为db1的虚拟机

在虚拟机安装zabbix agent,并

配置yum

安装配置agentyum install -y zabbix-agent

# 修改配置文件

[root@db1 ~]# vim /etc/zabbix/zabbix_agentd.conf

117 Server=127.0.0.1,192.168.88.5

182 Hostname=db1

# 启动服务

[root@db1 ~]# systemctl enable zabbix-agent.service --now

自定义监控项

在db1创建名为grpcnt的key,用于监控用户组的数量

在zabbixserver的web页面上显示该key

[root@db1 ~]# vim /etc/zabbix/zabbix_agentd.d/grpcnt.conf

UserParameter=grpcnt,sed -n '$=' /etc/group

重启服务

[root@db1 ~]# systemctl restart zabbix-agent.service

安装zabbix-get

[root@db1 ~]# yum install -y zabbix-get

获取key值

[root@db1 ~]# zabbix_get -s 127.0.0.1 -k grpcnt

相关文章:

zabbix监控警告

监控概述 对服务的管理&#xff0c;不能仅限于可用性。 还需要服务可以安全、稳定、高效地运行。 监控的目的&#xff1a;早发现、早治疗。 被监控的资源类型&#xff1a; 公开数据&#xff1a;对外开放的&#xff0c;不需要认证即可获取的数据 私有数据&#xff1a;对外不…...

YOLOv9架构图分享

YOLOv9是YOLO (You Only Look Once)系列实时目标检测系统的最新迭代。它建立在以前的版本之上&#xff0c;结合了深度学习技术和架构设计的进步&#xff0c;以在目标检测任务中实现卓越的性能。通过将可编程梯度信息(PGI)概念与广义ELAN (GELAN)架构相结合&#xff0c;YOLOv9在…...

全自动封箱机的工作原理:科技与效率的完美结合

随着科技的不断发展&#xff0c;越来越多的自动化设备走进了我们的日常生活和工业生产中。其中&#xff0c;全自动封箱机作为物流包装领域的重要一环&#xff0c;凭借其高效、精准的工作性能&#xff0c;正逐渐成为提升生产效率、降低劳动成本的得力助手。星派就来与大家深入探…...

【管理咨询宝藏48】AA银行信息科技提升分析报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏48】AA银行信息科技提升分析报告 【格式】PPT版本&#xff0c;可编辑 【关键词】战略规划、商业分析、管理咨询 【强烈推荐】这是一套市面上非常…...

循序表实战——基于循序表的通讯录

前言&#xff1a;本篇文章主要是利用顺序表作为底层&#xff0c; 实现一个通讯录。偏向于应用&#xff0c; 对于已经学习过c的友友们可能没有难度了已经。没有学习过c的友友&#xff0c; 如果顺序表不会写&#xff0c; 或者说没有自己实现过&#xff0c; 请移步学习顺序表相关内…...

Java编程规范及最佳实践

文章目录 一、命名规范二、代码风格规范三、注释规范四、推荐的编程实践五、类和接口六、异常处理七、可见性八、并发九、代码复用十、代码组织和模块化十一、Java集合框架十二、输入验证十三、资源管理十四、文档和注释十五、测试和代码质量十六、代码可读性十七、性能优化十八…...

90天玩转Python—07—基础知识篇:Python中运算符详解

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…...

C语言 位域

C 语言的位域&#xff08;bit-field&#xff09;是一种特殊的结构体成员&#xff0c;允许我们按位对成员进行定义&#xff0c;指定其占用的位数。 如果程序的结构中包含多个开关的变量&#xff0c;即变量值为 TRUE/FALSE&#xff0c;如下&#xff1a; struct {unsigned int w…...

【LeetCode热题100】【技巧】颜色分类

题目链接&#xff1a;75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 只需排序三种&#xff0c;可以记录0和1的个数&#xff0c;然后直接原地赋值 class Solution { public:void sortColors(vector<int> &nums) {int zero 0, one 0;for (auto &num: n…...

笔记本电脑win7 Wireless-AC 7265连不上wifi6

1.背景介绍 旧路由器连接人数有限&#xff0c;老旧&#xff0c;信号不稳定更换了新路由器&#xff0c;如 TL-XDR5430易展版用户电脑连不上新的WIFI网络了&#xff0c;比较着急 核心问题&#xff1a;有效解决笔记本连接wifi上网问题&#xff0c;方法不限 2.环境信息 Windows…...

Linux gcc day5粘滞位

粘滞位 背景&#xff1a;一定时在一个公共目录&#xff08;root创建&#xff09;下。进行临时文件的操作 Linux系统中有很多人&#xff0c;我们需要在一个公共目录下&#xff0c;进行临时文件的操作&#xff08;增删查改&#xff09; 创建一个根目录下的dir&#xff08;mytmp…...

单片机按键消抖常用的软硬件方法

一&#xff1a;什么是开关抖动&#xff1f; 当我们按下按钮或拨动开关或微动开关时&#xff0c;两个金属部件会接触以短路电源。但它们不会立即连接&#xff0c;而是金属部件在实际稳定连接之前连接和断开几次。释放按钮时也会发生同样的事情。这会导致误触发或多次触发&#…...

钉钉自建应用-下载excel(h5)

由于不同手机对于文件下载有不同的支持&#xff0c;而且文件路径也不一样&#xff0c;找起来十分的麻烦。所以&#xff0c;最好是找到一个都支持的方法。还好&#xff0c;钉钉官网提供了网盘&#xff0c;我们可把文件保存到钉钉自带的网盘&#xff0c;这样方便查找。 这里需要…...

用二八定律分析零售数据,不就更直观了吗?

20%的商品贡献了80%的销售金额&#xff0c;你会不会想知道这些商品的销售金额、毛利、销售金额累计占比、毛利累计占比&#xff0c;会不会想知道这些商品在各个门店的销售表现&#xff1f;看是否能进一步提高销售金额&#xff0c;提高毛利。这样的报表该怎么做&#xff1f;奥威…...

NetSuite Saved Search-当前库存快照查询报表(二)

之前第一篇文章我们说明了&#xff0c;如何利用Saved Search来制作一个能够显示批次物料与非批次物料的Lot信息以及On Hand在手数量的“当前库存快照查询报表”&#xff0c;但是当用户提出“我们能否再加上批次物料的效期”需求时&#xff0c;我们原有的Saved Search并不能达到…...

【JavaSE】接口 详解(上)

前言 本篇会讲到Java中接口内容&#xff0c;概念和注意点可能比较多&#xff0c;需要耐心多看几遍&#xff0c;我尽可能的使用经典的例子帮助大家理解~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 接口 语法…...

嵌入式C基础——循环队列 ringbuffer 讲解

本期主题&#xff1a; 讲解ARRAY_SIZE的作用以及定义&#xff0c;还有一个踩坑分析 往期链接&#xff1a; 数据结构系列——先进先出队列queue数据结构系列——栈 stackLinux内核链表零长度数组的使用inline的作用嵌入式C基础——ARRAY_SIZE使用以及踩坑分析 目录 1. Ringbuff…...

【动态规划-状态压缩dp】【蓝桥杯备考训练】:毕业旅行问题、蒙德里安的梦想、最短Hamilton路径、国际象棋、小国王【已更新完成】

目录 1、毕业旅行问题&#xff08;今日头条2019笔试题&#xff09; 2、蒙德里安的梦想&#xff08;算法竞赛进阶指南&#xff09; 3、最短Hamilton路径&#xff08;《算法竞赛进阶指南》&模板&#xff09; 4、国际象棋&#xff08;第十二届蓝桥杯省赛第二场C A组/B组&#…...

全坚固笔记本丨工业笔记本丨三防笔记本相较于普通笔记本有哪些优势?

三防笔记本和普通笔记本在设计和性能方面存在显著差异&#xff0c;三防笔记本相较于普通笔记本具备以下优势&#xff1a; 三防笔记本通常采用耐磨、耐摔的材料&#xff0c;并具有坚固的外壳设计&#xff0c;能够承受恶劣环境和意外碰撞&#xff0c;有效保护内部组件不受损坏。相…...

机房搬迁方案

一、项目背景 随着XX公司业务的不断扩展&#xff0c;现有的机房设备已经无法满足日益增长的数据处理需求。同时&#xff0c;考虑到现有机房的设施老化及潜在的安全隐患&#xff0c;XX公司决定进行机房搬迁。本次搬迁旨在确保业务连续性、数据安全性以及新机房的高效运营。 二…...

推动科技创新润德生物邀您到场参观2024第13届生物发酵展

参展企业介绍 山东润德生物科技有限公司成立于2014年10月17日&#xff0c;是一家围绕生物制品的研发、生产、营销、国际贸易、技术服务为核心业务的国家高新技术企业&#xff0c;近年来荣获国家制造业单项冠军示范企业、国家级绿色工厂、国家知识产权优势企业、国家工业产品绿…...

如何在JavaScript中提高性能

在JavaScript中提高性能是一个涉及多个方面的任务&#xff0c;包括代码优化、数据结构选择、异步编程、避免全局查找、内存管理等。以下是一些关键的策略和技巧&#xff0c;可以帮助你提高JavaScript代码的性能&#xff1a; 1. 优化循环 使用for循环代替forEach&#xff0c;特…...

外观模式(面子模式)

外观模式 文章目录 外观模式什么是外观模式示例 什么是外观模式 外观模式(Facade),为子系统中的一组接口提供一个一致的界面&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用 Facade 外观类 知道哪些子系统类负责处理请求&#xff0c;将客…...

蓝桥杯考前复习三

1.约数个数 由乘法原理可以得出&#xff1a; import java.util.*; public class Main{static int mod (int)1e9 7;public static void main(String[] args){Map<Integer,Integer> map new HashMap<>(); //创建一个哈希表Scanner scan new Scanner(System.in);i…...

极客时间: 用 Word2Vec, LangChain, Gemma 模拟全本地检索增强生成(RAG)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

VBA操作Word

检查word中的字体情况 Sub ListAllFontsInDocument()Dim doc As DocumentDim rng As RangeDim char As RangeDim fontName As StringDim uniqueFonts As Collection 初始化集合用于存储唯一字体名称Set uniqueFonts New Collection 获取当前活动文档Set doc ActiveDocument …...

Linux文件IO(4):目录操作和文件属性获取

目录 1. 前言 2. 函数介绍 2.1 访问目录 – opendir 2.2 访问目录 – readdir 2.3 访问目录 – closedir 2.4 修改文件访问权限 – chmod/fchmod 2.5 获取文件属性 – stat/lstat/fstat 2.5.1 文件属性 – struct stat 2.6 文件类型 – st_mode 3. 代码练习 3.1 要求 3.2 代…...

【C语言】_文件类型,结束判定与文件缓冲区

目录 1. 文本文件和二进制文件 2. 文件读取结束的判定 3. 文件缓冲区 1. 文本文件和二进制文件 根据数据的组织形式&#xff0c;数据文件被称为文本文件或二进制文件&#xff1b; 数据在内存中以二进制的形式存储&#xff0c;如果不加转换地输出到外存&#xff0c;就是二进…...

YOLOV8注意力改进方法:DoubleAttention(附代码)

原论文地址&#xff1a;原论文地址 DoubleAttention网络结构的优点在于&#xff0c;它能够有效地捕获图像中不同位置和不同特征的重要性&#xff0c;从而提高了图像识别和分割的性能。 论文相关内容介绍&#xff1a; 论文摘要&#xff1a;学习捕捉远程关系是图像/视频识别的…...

每日一题 --- 前 K 个高频元素[力扣][Go]

前 K 个高频元素 题目&#xff1a;347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: …...

wordpress积分下载插件/太原百度seo

参考&#xff1a;https://blog.csdn.net/uotail/article/details/90341260 直接用爱占的端口扫码更好&#xff1a;http://tool.chinaz.com/port...

做网站上面图片的软件/网络营销的八种方式

搜索 bioskey 转载于:https://www.cnblogs.com/yangyh/archive/2010/03/26/1696777.html...

个人网站的设计与实现毕业论文参考文献/淘宝店铺怎么免费推广

转载于:https://www.cnblogs.com/zeng-qh/p/9310519.html...

wordpress数据库备份到本地/网络营销策划书封面

全局返回码说明 公众号每次调用接口时&#xff0c;可能获得正确或错误的返回码&#xff0c;开发者可以根据返回码信息调试接口&#xff0c;排查错误。 全局返回码说明如下&#xff1a;&#xff08;更新时间&#xff1a;2018年8月6日&#xff09; -1系统繁忙&#xff0c;此时…...

网站建设教程小说简介/网站维护中

题目 $noip$ 欢乐赛真是欢乐&#xff0c;除了不欢乐的方面以外我都很欢乐。 T1 鸡汤题目&#xff0c;故意输对后面的胜率又没有影响&#xff0c;为什么要故意输呢&#xff1f; 所以第二个决策是凑字用的&#xff0c;这题就是朴素递推概率&#xff0c;最后乘结果权值计算期望。 …...

搜索引擎优化涉及到内容/网站及搜索引擎优化建议

&#xfeff;// 普通抽奖&#xff1a; // ctx.drawImage(img, px, py); // 级别“翻转”帆布 ctx.translate(canvas_width, 0); ctx.scale(-1, 1); // 下面的图片是画水平翻转 ctx.drawImage(img, canvas_width - img.width - px, py); // 帆布恢复正常 ctx.translate(canvas_w…...