基于docker安装部署Zabbix及使用,自动发现、日志监控报警及参照官方文档遇到的问题(图文)
目录
- 一、相关原理
- (1)概述
- (2)Zabbix 功能
- (3)Zabbix 概述
- (4)zabbix监控架构详解
- 二、主要步骤
- (一)工具/环境准备
- (二)docker安装及测试
- (三)docker环境下的zabbix安装部署(参照官方文档)
- (四)zabbix对服务器硬件的监控
- (五)zabbix日志监控;
- (六)zabbix自动发现;
- (七)自定义监控、报警
- (八)遇到的问题
- 总结
一、相关原理
(1)概述
- Zabbix 由 Alexei Vladishev 创建,目前由其成立的公司—— Zabbix SIA 积极的持续开发更新维护,并为用户提供技术支持服务。
- Zabbix 是一个企业级分布式开源监控解决方案。
- Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix基于存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。
- Zabbix 支持主动轮询(polling)和被动捕获(trapping)。Zabbix所有的报表、统计数据和配置参数都可以通过基于Web 的前端页面进行访问。基于 Web 的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。适当的配置后,Zabbix可以在监控 IT 基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。
- Zabbix 是免费的。Zabbix 是根据 GPL 通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用。
(2)Zabbix 功能
数据采集
- 灵活的阈值定义
- 高度可配置化的告警
- 实时图形
- Web 监控功能
- 丰富的可视化选项
- 历史数据存储
- 配置简单
- 使用模板
- 网络发现
- 快捷的 Web 界面
- Zabbix API
- 权限管理系统
- 功能强大且易于扩展的 Zabbix Agent
- 二进制守护进程
- 适应更复杂的环境
(3)Zabbix 概述
Server
- Zabbix server 是 Zabbix软件的核心组件,agent向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。
数据库
- 所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中。
Web 界面
- 为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
Proxy
- Zabbix proxy 可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。
Agent
- Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
数据流
- 另外,回过头来整体的了解下 Zabbix内部的数据流对Zabbix的使用也很重要。首先,为了创建一个采集数据的监控项,您就必须先创建主机。其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。因此,如果您想要收到类似“X个server上CPU负载过高”这样的告警,您必须首先为 //Server X // 创建一个主机条目,其次创建一个用于监控其 CPU的监控项,最后创建一个触发器,用来触发CPU负载过高这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得Zabbix 的配置变得更加灵活易用。
(4)zabbix监控架构详解
zabbix监控采用lamp架构平台,由于监控只有运维几个人看,并不需要高并发,apache更加稳定且配置简单,因此采用lamp平台,架构不一样要高性能要合适才行。
zabbix架构流程首先在zabbix-web前端页面上添加主机并添加监控项,存放到数据库后,zabbix-server会定期每隔60s同步数据库,获取最新监控项、监控指标,获取后与安装了zabbix-agent的客户端进行监控,zabbix-agent将监控的指标推送给zabbix-server,zabbix-server进行分析指标数据,与运维设置的指标进行对比,如果达到了一定指标则将数据入库,最后在zabbix-web前端页面进行展示。
二、主要步骤
(一)工具/环境准备
使用工具/系统说明
工具/系统说明 | 版本型号 | 其他说明 |
---|---|---|
测试机 | Windows10本地主机 | |
服务器 | CentOS7 | IP:192.168.111.211网络连接方式:NAT |
客户端 | CentOS7 | IP:192.168.111.212网络连接方式:NAT |
VMware | 16.1.2 build-17966106 | 虚拟网络设置网段:192.168.111.0网关:192.168.111.2 |
测试浏览器Chrome | 102.0.5005.63(正式版本) | 安装在本地测试机上 |
(二)docker安装及测试
在查询官方文档的时候发现Zabbix可以使用容器的方式进行安装,又因为docker比较新,想使用docker容器的方式完成,所以我们需要在虚拟环境CentOS7上安装docker,具体步骤如下。
使用命令sudo yum update
将安装的软件都更新一遍,避免遇到一些不兼容的问题。
在执行这条命令的时候,遇到了一个问题,报错内容如下图所示
产生的原因就是我再修改网卡的配置文件的时候,没有配置DNS,这里只需要在网卡配置文件里加上就好了。
更新完成后,我们使用命令yum install docker
来安装docker环境,在跳出来的提示内容输入y
就可以了。
在安装完成后,我们输入命令 systemctl enable docker
,将docker容器设置为开机自启,然后使用命令docker run hello-world
,进行测试验证docker是否安装成功(这里建议先进入超管角色在进行执行,避免报错,进入方法,输入su
,然后输入密码就可以进入超管角色了),验证结果如下图则表示安装成功了:
(三)docker环境下的zabbix安装部署(参照官方文档)
官方文档是运行 MySQL 数据库支持、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java gateway进行部署,那么我们首先启动mysql实例,密码我设置成1230,具体命令如下:
docker run --name mysql-server -it \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="1230" \-e MYSQL_ROOT_PASSWORD="1230" \-d mysql:8.0 \--character-set-server=utf8 --collation-server=utf8_bin
安装完成后我们进行测试,输入命令docker exec -it mysql-server /bin/bash
进入到刚才的mysql-server,输入命令进行登录,命令如下:
mysql -uzabbix -p1230
输入show databases
查看数据库,可以看到zabbix这张,即如图所示则配置成功。
按下Ctrl+D
退出docker环境。
接下来启动 Zabbix Java gateway 实例,命令如下所示:
docker run --name zabbix-java-gateway -itd \-d zabbix/zabbix-java-gateway:latest
然后,启动 Zabbix server 实例,并将其关联到已创建的 MySQL server 实例,这里的数据库,用户名以及密码都要和上面的mysql-server容器相符合,端口使用10051/TCP,命令如下所示:
docker run --name zabbix-server-mysql -it \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="1230" \-e MYSQL_ROOT_PASSWORD="1230" \-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \--link mysql-server:mysql \--link zabbix-java-gateway:zabbix-java-gateway \-p 10051:10051 \-d zabbix/zabbix-server-mysql:latest
最后,启动 Zabbix Web 界面,并将其关联到已创建的 MySQL server 和 Zabbix server 实例,同样用户名密码和容器名称一定要一致,端口使用80/TCP,这里要注意,在容器中nginx的端口为8080,所以下面写的时候要注意,这被官方文档害惨了,官网文档默认nginx在容器中的监听端口为80,具体在后面的内容中体现。命令如下图所示:
docker run --name zabbix-web-nginx-mysql -it \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="1230" \-e MYSQL_ROOT_PASSWORD="1230" \--link mysql-server:mysql \--link zabbix-server-mysql:zabbix-server \-p 80:8080 \-d zabbix/zabbix-web-nginx-mysql:latest
命令执行完后我们得到如下图所示情况,则为安装成功成功:
这里可以看到有一个报错,不用管,这是我在安装的时候遇到的报错,是之前安装mysql容器时版本选了5.7,然后不兼容的问题,我上面的代码已经改过了,所以不用太在意,具体问题内容我写在最下面。
我们在测试机中输入地址192.168.111.211:80,应该会进入zabbix的首页,表示安装成功,如下图所示:
(四)zabbix对服务器硬件的监控
输入用户名 Admin 以及密码 zabbix 以作为 zabbix超级用户登陆。能够进入主界面并出现如下图所示界面表示正确登录:
这里我们可以看到有条Problems提示,提示为Zabbix anent is not available
。其实就是没有安装zabbix_agent,起初我以为是java防火墙的问题,找了半天,后面在晚上睡觉的时候想到这个事情,在官方的文档里,到上面安装完zabbix_web_server_mysql的步骤就结束了,但是这个zabbix_agent就没有安装过,我一直以为是server容器内部自带的代理。换了个思路,去网上找了一下zabbix_agent的安装。至于为什么没想到这个,是因为前一天从博客找资料也好,官网找资料也好,都是到安装完zabbix_web_server_mysql容器就结束了,其他的都没多说,真是无语。
首先,在服务器中下载zabbix_agent,执行命令如下:
拉取安装文件
rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm #拉取二进制文件
安装文件拉取完成后进行安装
yum install zabbix-agent -y
安装完成后,我们使用命令,查看我们的zabbix-server-mysql容器的ip地址和网关,将其记下来,在下面的配置中需要填写,命令如下:
docker inspect zabbix-server-mysql | grep IPAddress
docker inspect zabbix-server-mysql | grep Gateway
可以得到如下图所示的内容
上图可以看到我们的服务地址为`172.17.0.4`,网关为`172.17.0.1`,这里理论上是连通的,如果不放心可以ping以下这个服务的地址,我就不演示了。
进行下一步配置。zabbix-agent端配置
vim /etc/zabbix/zabbix_agentd.conf
这里我们键入?
然后输入我们要查找的字符进行修改就行,地址就是上面查询出来的172.17.0.4,也就是zabbix服务的地址。要修改的内容如下:
Server=172.17.0.4 #zabbix server的地址
ServerActive=172.17.0.4 #同样是zabbix_server的地址
Hostname=Zabbix server #本机主机名,在zabbix-web端配置主机时需要填写,默认的就是Zabbix server,你们视情况更改。
ListenPort=10050 #监听端口
保存退出就行,启动zabbix_agent,设置开机自启,命令如下:
systemctl start zabbix-agent.service #开启zabbix-agent服务
systemctl enable zabbix-agent.service #设置zabbix-agent开机自启
然后我们打开网址,输入我们服务地址,打开zabbix页面,左侧导航栏【configuration】->【Hosts】->点击服务名称【Zabbix server】,我是修改正确了才写的博客,所以下面我的是绿标正确的,不用太在意。如下图所示:
在弹出的配置窗口中,输入我们刚才查询到的网关,然后按下回车就行。如下所示:
配置完后,我们的标志就会变绿,就表示配置正确。
我们在【Monitoring】->【Hosts】->找到我们的主机记录->点击【Graphs】就可以看到我们监控的主机内容,图表呈现。
如上图所示,我们可以筛选监控的时间段,我为了展示的更加直观,选择了最近15分钟的内容进行展示。接下来的几张图片进行展示内存,硬盘,网络的监控。
zabbix监控内存
zabbix监控网络进程
zabbix监控硬盘
(五)zabbix日志监控;
按照顺序,【configuration】->【Hosts】->找到要监控的记录点击【Items】->点击右上角的【Create item】,在弹出的界面中进行填写,Key:log[/var/log/messages,192.168.111.1]
。意思是监控系统日志中是否出现192.168.111.1,有则报警。Log time format:MMpddphh:mm:ss
就对应日志中的时间格式,具体如下图所示:
为了获取到信息,需要让被读取的文件,也就是/var/log/messages
文件要让zabbix有可读权限,我这里在命令行使用chmod 777 /var/log/messages
命令给了最高权限(需要配置的可以百度找一下命令)。
左侧导航栏选中【Monitoring】->【Latest data】->在记录中找到我们刚才创建的监控记录
可以看见,我们已经能够成功监控到日志记录了。点击记录名称【System Logs Item】->选中【Values】点击,然后我们可以在弹出窗口中看到更多的信息。如下图所示:
至此,日志监控配置完成。
(六)zabbix自动发现;
首先选中【Configuration】->【Discovery】->选中右上角的【Create discovery rules】进行添加,如下图所示:
这里要带星号的都要输入,【IP range】就是你要检查的IP范围,和服务器同一网段的范围是【192.168.111.1-254】,所以我填的是这个,你们注意更改。然后检查规则Checks中点击Add,然后我们【Check Type】选择【Zabbix_agent】,【Port range】输入【10050】(因为zabbix_agnet默认监听端口为10050,可以视情况而定),【Key】输入【system.uname】,【Update time】最好是设置成1m,方便直观的款到自动发现主机并添加,我这里默认1h忘改了,dont‘t care。具体如下图所示:
其余可以默认,然后点击添加。因为这里系统创建时默认有一个,我就直接拿来用了,添加完应该时下图所示这样的。
选中【Configuration】->【Action】->点击【Discovery action】,然后点击右上角的【Create action】,在弹出的窗口中进行自动发现动作添加,如下所示内容的填写:
设置完成后,点击添加,这里就是自动根据规则发现主机,将他添加到zabbix-web中然后根据你的Operation规则,对新加进来的主机进行操作。这里也同样有一个默认的规则,我就进行修改之后开启,结果如下:
开启之后,新启动一个虚拟机,安装好zabbix-agent服务,配置好配置文件的IP后重启一下zabbix-agent.service,IP要设置成zabbix-server-mysql安装的这台主机的地址,我另一台主机的IP为192.168.111.212,然后关闭防火墙和selinux,我们等待刷新,就可以看到在主机列表中,新添加了一条主机记录
(七)自定义监控、报警
首先我们打开监控项,找到zabbix-agent的配置文件进行如下修改:
UnsafeUserParameters=1
UserParameter=check_process[*],/bin/bash /scripts/check_process.sh $1
然后重启zabbix-agnet服务
systemctl restart zabbix-agent.service
创建目录编写脚本
cd /etc/zabbix
mikdir scripts
cd scripts
vim check_process.sh
填写如下内容:
#!/bin/bash
process_status=$(ps -ef|grep -Ev "grep|$0"|grep -c $1)if[$process_status -eq 0 ];thenecho '1'elseecho '0'
fi
赋予权限
chmod +x check_process.sh
然后我们在监控端页面上配置【configuration】->【Hosts】->选中主机的Item点击,然后右上角创建,创建内容如图所示:
然后点击上方的Triggers,创建报警,报警规则为高创建内容如图所示:
这里不知道为什么,报警弹不出来,显示的时Unknown,花了太多时间做这个了,这部分就不加以验证了。
(八)遇到的问题
问题1
都安装完成后发现zabbix-server-mysql服务开启失败,docker ps -a
命令可以看到服务没开启。
使用命令docker logs zabbix-server-mysql
查看日志发现如下报错:
Unable to start Zabbix server due to unsupported MySQL database server version (5.07.38)
Must be at least (8.00.0)
这里说我使用的mysql版本太低了,确实,官方给出的教程安装的就是5.07,所以就没考虑版本,这里只要把原来的mysql容器删掉,然后使用如下命令就可以:
docker rm -f mysql-server
#把mysql-server删除了
拉取的时候标明版本号8.0
docker run --name mysql-server -t \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="1230" \-e MYSQL_ROOT_PASSWORD="1230" \-d mysql:8.0 \--character-set-server=utf8 --collation-server=utf8_bin
将刚才上面两个zabbix-server-mysql和zabbix-web-nginx-mysql两个容器删除重新创建就可以了。
问题2
所有容器都配置完成后,没法打开,无法映射到端口上。但是明明在创建的时候都配置了,找了半天找不到,想想会不会是nginx代理的问题,然后进入到zabbix-web-nginx-mysql这个容器里面,使用命令
docker exec -it zabbix-web-nginx-mysql /bin/bash
然后使用命令cat /etc/zabbix/nginx.conf
命令查看nginx代理监听的端口,发现在容器中nginx监控的端口为8080,如下所示,真无语,官方的文档还会有这种错误。
然后就好办了,删除创建的zabbix-web-nginx-mysql容器,创建一个新的容器,端口以-p 80:8080 (指定端口映射,格式为:主机(宿主)端口:容器端口) 下就行,如下所示:
docker run --name zabbix-web-nginx-mysql -it \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="1230" \-e MYSQL_ROOT_PASSWORD="1230" \--link mysql-server:mysql \--link zabbix-server-mysql:zabbix-server \-p 80:8080 \-d zabbix/zabbix-web-nginx-mysql:latest
然后打开浏览器输入地址就可以正确打开了
问题3
安装好了使用Admin账号进去后,发现主机的数据是监控不到的,服务没用,提示Zabbix anent is not available
,看了以下问题,出现如下提示:
这里就是提示代理监控不到,这里在官网的步骤里,就只到了安装完容器结束,但是关于zabbix_agent的安装没怎么说,要监控到主机就要安装zabbx_agent代理服务,然后才能进行监控,步骤如下:
拉取安装文件
rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm
安装文件拉取完成后进行安装
yum install zabbix-agent -y
安装完成后,我们使用命令,查看我们的zabbix-server-mysql容器的ip地址和网关,将其记下来,在下面的配置中需要填写,命令如下:
[root@localhost yby]# docker inspect zabbix-server-mysql | grep IPAddress"SecondaryIPAddresses": null,"IPAddress": "172.17.0.4","IPAddress": "172.17.0.4",
[root@localhost yby]# docker inspect zabbix-server-mysql | grep Gateway"Gateway": "172.17.0.1","IPv6Gateway": "","Gateway": "172.17.0.1","IPv6Gateway": "",
这里我们得到的服务的地址和防火墙为172.17.0.4,172.17.0.1,我们可以主机尝试ping以下172.17.0.4这个地址,查看能否ping通,按理是能得。
然后记住,进行下一步配置。
zabbix-agent端配置
vi /etc/zabbix/zabbix_agentd.conf
这里我们键入?然后输入我们要查找的字符进行修改就行,地址就是上面查询出来的172.17.0.4,也就是zabbix服务的地址。
Server=172.17.0.4 #zabbix server的地址
ServerActive=172.17.0.4 #同样是zabbix_server的地址
Hostname=Zabbix server #本机主机名,在zabbix-web端配置主机时需要填写,默认的就是Zabbix server,你们视情况更改。
ListenPort=10050 #监听端口
保存退出就行,启动zabbix_agent,设置开机自启
systemctl start zabbix-agent.service
systemctl enable zabbix-agent.service
然后我们打开网址,输入我们服务地址,打开zabbix页面,左侧导航栏【configuration】->【Hosts】->点击服务名称【Zabbix server】
在弹出的配置窗口中,输入我们刚才查询到的网关,然后按下回车就行。如下所示:
然后我们就能监控到服务器的硬件信息了。
问题4
电脑突然没电自动关机了,然后重启电脑的时候,连接不上容器了,检查过防火墙都是关着的,然后就决定将容器全部删除之后重新创建一遍,但是遇到了如下提示:
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint zabbix-server-mysql (9fde47cfaee4766cfbbfe477a371edfc56aeebbd4759f1a5e83ffb7e1e9f08e4): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 10051 -j DNAT --to-destination 172.17.0.4:10051 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
解决办法:
将docker容器重启后再创建一遍
systemctl restart docker
docker restart zabbix-server-mysql
问题5
日志监控时配置完成后提示
zabbix Accessible only as active check
这里需要设置为主动模式,要选择Zabbix_agent(Active)。
如果设置完还是提示报错,要把监控的日志文件权限给出来,我这里直接设置了chmod 777 文件路径,因为图方便,就先这样设置权限,之后就能够看到日志信息了。
总结
做的时候遇到不少问题,耐着性子解决吧,如果博客内容有什么问题可以私信,希望有用。
基于docker安装部署Zabbix及使用,自动发现、日志监控报警及参照官方文档遇到的问题(图文)相关推荐
- 基于Docker快速部署Zabbix
1.Zabbix基础监控架构图: 2.Zabbix的架构信息: 1. zabbix-server zabbix 的server 端,负责接收agent发送过来的监控数据,并且提供zabbix的所有核心 ...
- ansible一键部署zabbix并配置自动发现
环境centos7 IP 192.168.81.132 首先安装epel源和ansible配置主机清单 配置免密登录 测试能否ping通 安装zabbix-server端和上传Aliyun的yum源和 ...
- 基于openstack安装部署私有云详细图文教程
本文主要分享的是云计算.openstack的使用.私有云平台建设.云服务器云硬盘的构建和使用.从基本概念入手到私有云建设,信息量非常大.对于openstack的安装部署都是从官方文档中一步步的介绍,内 ...
- 基于openstack安装部署私有云详细
本文主要分享的是云计算.openstack的使用.私有云平台建设.云服务器云硬盘的构建和使用.从基本概念入手到私有云建设,信息量非常大.对于openstack的安装部署都是从官方文档中一步步的介绍,内 ...
- 使用docker安装部署kibana
项目场景: 项目场景:使用docker安装部署kibana 前提:已成功部署安装elasticsearch 可参考文章链接: <使用docker安装部署elaticsearch>. 1 ...
- 最新Elasticsearch8.4.3 + Kibana8.4.3在云服务器Centos7.9安装部署(参考官方文档)
一.前言 最近笔者学习Elasticsearch,官方最新稳定版为 Elasticsearch-8.4.3,想在云服务器上Centos7.9搭建.搭建之路坑多路少啊(指网上的博文教程五花八门,基本 ...
- MySQL8.0.28安装教程全程参考MySQL官方文档
MySQL8.0.28详细安装教程.提供了Windows10下安装MariaDB与MySQL8.0同时共存的方法,以及Linux发行版Redhat7系列安装MySQL8.0详细教程.Windows10 ...
- linux3.10.53编译,根据官方文档在Linux下编译安装Apache
根据官方文档在Linux下编译安装Apache 前言 永远记住官方文档才是最准确的安装手册,这篇文章仅为对官方文档的解读和补充,学习提升务必阅读官方文档: http://httpd.apache.or ...
- Windows环境下安装RabbitMQ(官方文档中文版)
安装RabbitMQ 软件提取 链接:https://pan.baidu.com/s/1bIqTqEf7b8bcGZ6_jSIccg 提取码:nnju 本文按照官方文档按步骤详细解读,废话不多说,下 ...
最新文章
- 抗生素抗性基因研究进展PPT分享
- 高分求FP-tree算法用Delphi实现
- 禁止USB存储设备。
- php目的,php umask(0)的目的是什么
- python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)
- 引用:初探Sql Server 执行计划及Sql查询优化
- 前端学习(2197):__WEBPACK_IMPORTED_MODULE_1_vuex__.a.store is not a constructor
- mysql自增字段_MySQL自增字段的常用语句
- canvas滚动 vue_vue 移动端 canvas 触摸板
- Bootstrap3 警告框插件的使用方法
- php gaufrette,php – 使用Gaufrette Stream Wrappers和AsseticBundle
- Uva - 111 - History Grading
- Python数据处理Tips数据离群值的5种常用处理方法和可视化
- 1055 集体照(JAVA)
- 超详细的CMD文件讲解(DSP28035)
- excel两列数据对比找不同_怎么在excel中对比两列数据并查找重复项?
- Redis数据结构之字符串对象
- 学编程和学机器人有什么区别
- 完全拷贝的一份,程序员阅读书单
- 支付宝小程序支付(统一收单交易创建接口)