zabbix 监控过程详解
监控过程详解
1、修改密码及中文版
按如上操作即可,选择中文以后,点击下面的update即可更新成功
- 为了安全起见修改密码
修改完成后同样点击更新即可。
2、创建主机及主机群组
1、定义一个主机群组
2、添加主机
- 当然,上面有很多选择卡,有一个加密:
- 设置完成后,点击添加。添加的主机已经出现在列表中
- 同样的把node2节点添加进来:
3、监控项 (items)
1、 介绍
点击 node1 的监控项,即可创建监控项,首先,创建三个应用集:
应用集一般配合监控项使用,是多个同类型的监控项的分类目录
定义监控项
任何一个被监控项,如果想要能够被监控,一定要在 zabbix-server 端定义了能够连接至 zabbix-agent 端,并且能够通过命令获取信息。或者在 agent 端定义了能够让server 端获取命令。一般都是内建的命令,都对应的有其名字,被我们称之为 key。
- 关于key值,可以直接在网页上设置(服务器自动执行),也可以使用命令行命令(手动执行)来获取:
[root@qfedu.com ~]# zabbix_get -s 192.168.37.122 -p 10050 -k "system.cpu.intr"
- 在 agent 端,也可以使用命令来查看 intr 的速率变化:
继续配置监控项:
2、定义一个不带参数的监控项
设置完以后,点击更新,即可加入,并会自动跳转至如下页面
定义完成,回到所有主机,等待5秒,可以看到,node1节点后面的选项已经变成绿色:
回到仪表盘,可以看到,监控项有一个处于启用状态:
点击最新数据,选择要查看主机,应用一下,就可以看到数据状态:
可以看到,还有一个图形页面,点进去则可以看图形的分布:
事实上,需要关注的指标有很多种,一一添加进来即可。
以上定义的监控项是很简单的,指定一个
key
即可,但是有些监控项是带有参数的,这样一来,监控项就有更多的灵活性。接下来,简单说明需要带参数的监控项:
3、定义一个带参数的监控项
[] 就是需要参数的意思,里面的值即为参数
<> 为不可省略的。
我们就以这个例子来说明:
if 表示是接口名;
表示是那种模式,包括但不限于:packets(包)、bytes(字节)、errors(错误)、dropped(丢包)、overuns等等(上述内容通过 ifconfig 查看)
设置一个监控值:
- 通过命令行来查看:
[root@qfedu.com~]# zabbix_get -s 192.168.37.122 -p 10050 -k "net.if.in[ens33,packets]"
- 查看网页的显示情况:检测中 —> 最新数据 —> Network Interface Stats(图形)
中文乱码解决方法
- Zabbix监控页面中文显示异常,具体为显示为方块,如图所示。
1、查找zabbix安装目找到字体具体位置。
#查找zabbix安装位置
[root@qfedu.com~]# whereis zabbix
zabbix: /usr/lib/zabbix /etc/zabbix /usr/share/zabbix
[root@qfedu.com~]# ls /usr/share/zabbix/
actionconf.php app charts.php hostinventories.php items.php report2.php styles
adm.gui.php applications.php conf host_prototypes.php js report4.php sysmap.php
adm.housekeeper.php audio conf.import.php host_screen.php jsLoader.php robots.txt sysmaps.php
adm.iconmapping.php auditacts.php correlation.php hosts.php jsrpc.php screenconf.php templates.php
adm.images.php auditlogs.php discoveryconf.php httpconf.php latest.php screenedit.php toptriggers.php
adm.macros.php browserwarning.php disc_prototypes.php httpdetails.php local screen.import.php tr_events.php
adm.other.php chart2.php favicon.ico image.php locale screens.php trigger_prototypes.php
adm.regexps.php chart3.php fonts images maintenance.php search.php triggers.php
adm.triggerdisplayoptions.php chart4.php graphs.php img map.import.php services.php usergrps.php
adm.triggerseverities.php chart5.php history.php imgstore.php map.php setup.php users.php
adm.valuemapping.php chart6.php host_discovery.php include overview.php slideconf.php zabbix.php
adm.workingtime.php chart7.php hostgroups.php index_http.php profile.php slides.php
api_jsonrpc.php chart.php hostinventoriesoverview.php index.php queue.php srv_status.php
#字体文件位置
[root@qfedu.com~]# ls /usr/share/zabbix/fonts/
graphfont.ttf
[root@qfedu.com~]# cd /usr/share/zabbix/fonts/
[root@server fonts]# pwd
/usr/share/zabbix/fonts
[root@server fonts]# ls -l
总用量 0
lrwxrwxrwx. 1 root root 33 3月 25 15:24 graphfont.ttf -> /etc/alternatives/zabbix-web-font
采用 winscp/xftp等工具将 Windows 中文字体上传到 /usr/share/zabbix/fonts/ 文件夹。本文中文字体为宋体。字体权限修改后截图如下所示:
切换至/etc/alternatives 目录查看软链接。
- 删除旧软链接并新建。也可以修改为其他中文字体,例如仿宋或者微软雅黑。
# 删除旧软链接
[root@quedu.com fonts]# rm -f /etc/alternatives/zabbix-web-font
# 新建软链接
[root@quedu.com fonts]# ln -s /usr/share/zabbix/fonts/simsun.ttc /etc/alternatives/zabbix-web-font
- 刷新浏览器页面即可,如果显示异常,请重新启动 zabbix-server 服务。
[root@quedu.com fonts]# systemctl restart zabbix-server
正常显示字体如图所示。
4、快速定义类似指标
要定义一个类似的指标,直接选择克隆,然后简单的修改参数即可。
就以定义的 net.if.in[ens33,packets] 为例,如果我们想要在定义一个
out
的进行如下操作即可:
如果要以字节为单位需要定义的话,进行同样的操作:
如果有需要的话也可以把 byte 再克隆成out。
可以看一下,已经定义的指标:
进入检测中 —> 最新数据,可以看到,我们定义的监控项都已经有值了:
5、删除监控项
- 如果有一个监控项,用不上了,就可以删除掉。但是如果你直接删除的话,默认数据是会留下的,所以要先清除数据,然后再删除,具体操作步骤如下:
6、监控项存储的值
对于监控项存储的值,老一点的版本只有以下三种方式:
As is: 不对数据做任何处理(存储的为原始值)
Delta:(simple change)(变化),本次采样减去前一次采样的值的结果
Delta:(speed per second)(速率),本次采样减去前一次采样的值,再除以经过的时长;
在3.4版本以后有了更多的表现形式:
4、触发器(trigger)
1、简介
当采集的值定义完了以后,就可以来定义触发器了。触发器的定义是:**界定某特定的item采集到的数据的非合理区间或非合理状态。通常为逻辑表达式。**逻辑表达式(阈值):通常用于定义数据的不合理区间,其结果如下:
OK (不符合条件):正常状态 --> 较老的zabbix版本,其为FALSE;
PROBLEM(符合条件):非正常状态 --> 较老的zabbix版本,其为TRUE;
评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果;这个最后N次通常有两种定义方式:
最近N分钟所得结果的平均值
最近N次所得结果的平均值
触发器存在可调用的函数:
nodata() #是否采集到数据,采集不到则为异常
last() #最近几次
date() #时间,返回当前的时间,格式YYYYMMDD
time() #返回当前的时间,HHMMSS格式的当前时间。
now() #返回距离Epoch(1970年1月1日00:00:00UTC)时间的秒数
dayofmonth() #返回当前是本月的第几天
注:能用数值保存的就不要使用字符串
2、触发器表达式
基本的触发器表达式格式如下所示
{<server>:<key>.<function>(<parameter>)}<operator><constant>
- server:主机名称;
- key:主机上关系的相应监控项的key;
- function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采取的数据、当前时间及其它因素进行;
- 目前触发器所支持的函数有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等
- parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#”做为前缀,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;
- 此外,avg、count、last、min和max还支持使用第二个参数,用于完 成时间限定;例如,max(1h,7d)将返回一周之前的最大值;
- 表达式所支持的运算符及其功能如下图所示:
3、定义一个触发器
查看一下 rate of packets(in) 的值,并以其为标准确定我们的非正常的值:
图中最大值为74,最小值为4,平均值为24。这样的话,可以定义50以上的都是非正常的值。
定义一个触发器:进入:配置 —> 主机 —> node1 —> 触发器 —> 创建触发器
表达式可以直接点击右侧的添加,然后定义自己所需的内容,即可自动生成:
生成完毕后,我们就点击页面下方的添加,即成功定义了一个触发器,同时页面自动跳转:
查看定义了触发器的监控项:
- 看到里面就有了一根线,就是定义的值,超过线的即为异常状态,看起来非常直观。现在即使超过了这根线,也仅仅会产生一个触发器事件而不会做其他任何事。因此,需要去定义一个动作(action)。
4、触发器的依赖关系
触发器彼此之间可能会存在依赖关系的,一旦某一个触发器被触发了,那么依赖这个触发器的其余触发器都不需要再报警。
多台主机是通过交换机的网络连接线来实现被监控的。如果交换机出了故障,我们的主机自然也无法继续被监控,如果此时,所有主机统统报警……想想也是一件很可怕的事情。要解决这样的问题,就是定义触发器之间的依赖关系,当交换机挂掉,只有自己报警就可以了,其余的主机就不需要在报警了。这样,也更易于我们判断真正故障所在。
注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义。
定义一个依赖关系:打开任意一个触发器,上面就有依赖关系,我们进行定义即可:
由于当前只定义了一个触发器,就不演示了,过程就是这样~添加以后点击更新即可。触发器可以有多级依赖关系,比如我们看下面的例子:
5、定义动作(action)
1、 简介
需要去基于一个对应的事件为条件来指明该做什么事,一般就是执行远程命令或者发警报。
有一个告警升级的机制,所以,当发现问题的时候,一般是先执行一个远程操作命令,如果能够解决问题,就会发一个恢复操作的讯息给接收人,如果问题依然存在,则会执行发警报的操作,一般默认的警报接收人是当前系统中有的 zabbix 用户,所以当有人需要收到警报操作的话,我们则需要把它加入我们的定义之中。
每一个用户也应该有一个接收告警信息的方式,即媒介,就像我们接收短信是需要有手机号的一样。
每一个监控主机,能够传播告警信息的媒介有很多种,就算我们的每一种大的媒介,能够定义出来的实施媒介也有很多种。而对于一个媒介来说,每一个用户都有一个统一的或者不同的接收告警信息的端点,我们称之为目标地或者目的地。
综上为了能够发告警信息,
第一,我们要事先定义一个媒介,
第二,还要定义这个媒介上用户接收消息的端点(当然,在用户上,我们也称之为用户的媒介)。
系统内建的媒介类型:
这只是基本的媒介类型,里面还有更多的细分,以 Email为例:
注意:同一个类型也可以定义多个,以 Email 为例,可以定义一个腾讯的服务器,一个网易的服务器,一个阿里的服务器等等。
2、定义一个媒介(media)
以 Email 为例定义一个媒介:
定义后更新就可以
媒介定义好了,怎么才能够让用户接收到邮件呢?比如让Admin用户接收邮件,应该怎么操作呢?具体步骤如下
进入 管理 —> 用户 —> Admin —> 报警媒介
添加一条进来:
添加过后是这样的
- 更新就可以
注意: 一个用户可以添加多个接收的媒介类型。 请使用163/qq邮箱测试
3、定义一个动作(action)
动作是在某些特定条件下触发的,比如,某个触发器被触发了,就会触发动作。现在基于redis来定义一个动作。
- 在 agent 端使用 yum 安装一下 redis:
[root@node1 ~]# yum install redis -y
- 修改配置文件:
[root@node1 ~]# vim /etc/redis.conf
bind 0.0.0.0 #不做任何认证操作
- 启动服务检查端口:
[root@node1 ~]# systemctl start redis
[root@node1 ~]# ss -nutlp | grep redis
tcp LISTEN 0 128 *:6379 *:* users:(("redis-server",pid=5250,fd=4))
1、定义监控项
- 进入 配置 —> 主机 —> node1 —> 监控项(items)—> 创建监控项
填写完毕以后点击下方的添加
- 该监控项已成功添加。
- 查看值:检测中 —> 最新数据
2、定义触发器
定义好了监控项以后,定义一个触发器,当服务有问题的时候,才能及时知道:
进入 配置 —> 主机 —> node1 —> 触发器(trigger)—> 创建触发器
填写完毕以后点击下方的添加。
该触发器已成功添加
查看:监测中 —> 最新数据
- 手动关闭 redis 服务来检测一下:
[root@node1 ~]# systemctl stop redis.service
- 进入 监测中 —> 问题
- 看到已经显示的是问题了。并且有持续的时间,当服务被打开,会转为已解决状态:
[root@node1 ~]# systemctl start redis.service
3、定义动作(action)
- 进入 配置 —> 动作 —> 创建动作(注意选择事件源为触发器)
操作添加:
需要在虚拟机上进行两项操作,
修改 sudo 配置文件使 zabbix 用户能够临时拥有管理员权限;
修改 zabbix 配置文件使其允许接收远程命令。
进行如下操作:
[root@node1 ~]# visudo # 相当于“vim /etc/sudoers”## Allow root to run any commands anywhereroot ALL=(ALL) ALLzabbix ALL=(ALL) NOPASSWD: ALL # 添加的一行,表示不需要输入密码[root@node1 ~]# vim /etc/zabbix/zabbix_agentd.confEnableRemoteCommands=1 # 允许接收远程命令LogRemoteCommands=1 # 把接收的远程命令记入日志[root@node1 ~]# systemctl restart zabbix-agent.service
- 添加了第一步需要做的事情,重启服务,如果重启不成功怎么办呢?就需要来添加第二步
添加完成以后
操作添加完了,如果服务自动恢复了,可以发送消息来提示:
动作设置完毕,可以点击添加了,添加完成会自动跳转至如下页面:
- 可以手动停止服务来进行测试:
[root@node1 ~]# systemctl stop redis.service
- 到问题页面来查看,发现确实有问题,并且已经解决:
server 端查看是否收到邮件
agent 端查看端口是否开启
- 端口正常开启,动作触发已经完成。
补充:可以使用脚本来发送警报,脚本存放路径在配置文件中可以找到,定义为:AlterScriptsPath=/usr/lib/zabbix/alertscripts
- 手动修改一下redis服务的监听端口,这样就不能通过重启服务恢复了:
[root@node1 ~]# vim /etc/redis.conf#port 6379port 6380 #注释掉原来的端口,更换为新的端口[root@node1 ~]# systemctl restart redis
- 网页查看状态:进入 监测中 —> 问题,可以看到是报错的:
经过了重启服务以后还是没能把解决问题,就会发邮件告警
把服务端口改回来,然后重启服务。这样,等到问题自动解决了以后,会再次收到邮件:
- 动作设定已经全部测试完成。
6、zabbix可视化
1、 简介
数据日积月累,想要更直观的了解到各项数据的情况,图形无疑是最佳选择。zabbix 提供了众多的可视化工具直观展示,如 graph、screen 及 map 等。前面也看到过一些简单的图形展示。如果想要把多个相关的数据定义在同一张图上去查看,就需要去自定义图形
2、自定义图形(Graphs)
自定义图形中可以集中展示多个时间序列的数据流。支持四种不同形式的图形
线状图(normal)
堆叠面积图(stacked)、
饼图(pie)”
分离型饼图(exploded)
设置过程如下:进入 配置 —> 主机 —> node1 —> 图形,选择右上角创建图形:
- 看一看四种状态:
主机都可以自定义,一般线型是看的最清晰的,通常会使用这个。克隆一个 packets 来更改为 bytes 用同样的,如果想添加别的内容,也都可以添加的。
这里添加了三个图形,我们可以在 监测中 —> 图形 来查看
3、聚合图形(Screens)
- 创建的自定义图形也可以放在一个聚合图里显示,具体的设置方法: 进入 监测中 —> 聚合图形 —> 选择右上角创建聚合图形
可以选择分享:
定义好了添加即可
定义完成以后,需要编辑一下,来指定保存哪些图:
依次添加即可,添加完成之后:
- 因为只有三张图,所以添加的有重复的。
4、幻灯片演示(Slide shows)
如果有多个聚合图形想要按顺序展示的话,我们就可以定义一个幻灯片。
具体步骤:进入 监测中 —> 聚合图形 —> 右上角选择幻灯片演示 —> 创建幻灯片
- 打开以后显示的是图片1,5s以后会自动切换为图片2。这样就可以实现幻灯片演示,就不需要去手动切换了。
5、 定义拓扑图(Maps)
在拓扑图中,可以定义成一个复杂的网络连接图,可以使用一台主机来连接另一台主机,这样的话,就可以查看出到底是哪个链接出了问题。
进入 监测中 —> 拓扑图 —> 所有地图 —> Local network(默认就有的)
通过 Ping 和 Traceroute 就可以实验我们上述的功能。
7、模板
1、创建模板
每一个主机的监控项都很多,一个一个的添加实在是太头疼了,更何况,可能不止一个主机。可以把一个 redis 的监控项添加进一个模板里,这样更方便于我们以后的添加。
具体操作:进入 配置 —> 模板 —> 选择右上角创建模板
填写完以后,点击下方的添加即可。
基于组过滤,就能看到定义的模板:
可以向里面添加应用集、监控项、触发器、图形等等,添加完成以后,后期再有主机需要添加就直接套用模板即可。
需要注意的一点是,现在添加的是模板,所以不会立即采用数据,只有链接到主机上以后,才会真正生效。
2、模板的导入与导出
可以直接导入一个模板,在互联网上可以找到很多,导入的步骤如下:
创建好的模板也可以导出为文件:
任意选中一个准备好的模板,然后页面的最下方就有导出按钮:
就可以非常方便的进行应用了
3、模板的应用
进入 配置 —> 主机 —> node1 —> 模板,选择要添加的模板了:
点击更新了。成功链接至模板,主机数据就会更新了:
注意:一个主机可以链接多个模板,但尽量不要让一个指标被采样两次。
如果有多个主机,同时这些主机也在一个主机组里,这样的话,只需要在这个主机组里添加模板,就能够让在主机组里的所有主机进行监控
4、移除模板链接
当一个主机的模板不想要用了,可以移除模板链接,
具体操作步骤:进入 配置 —> 主机 —> node1 —> 模板,可以把不需要的模板移除:
删除试试看,移除并清理以后,点击更新。就会自动跳转至如下界面:模板已经被移除
8、宏(macro)
1、简介
宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换。类似地,zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本。
zabbix有许多内置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等。
详细信息请参考官方文档
2、级别
宏一共有三种级别,分别是全局宏、模板宏、主机宏。不同级别的宏的适用范围也不一样。
全局宏也可以作用于所有的模板宏和主机宏,优先级最低。
模板宏则可以作用于所有使用该模板的主机,优先级排在中间。
主机宏则只对单个主机有效,优先级最高。
3、类型
宏的类型分为系统内建的宏和用户自定义的宏。
为了更强的灵活性,zabbix还支持在全局、模板或主机级别使用用户自定义宏(user macro)。
系统内建的宏在使用的时候需要
{MACRO}
的语法格式,用户自定义宏要使用{$MACRO}
这种特殊的语法格式。宏可以应用在item keys和descriptions、trigger名称和表达式、主机接口IP/DNS及端口、discovery机制的SNMP协议的相关信息中……
宏的名称只能使用大写字母、数字及下划线。
进一步信息请参考官方文档。
4、定义一个宏
如果想要在监控项(items)上使用宏,就要先去定义一个宏,然后去创建监控项,直接引用定义好的宏即可。具体操作步骤:
1、定义全局宏
- 进入 管理 —> 一般 —> 右上角选择宏
- 全局宏就添加好了
2、定义监控项,调用宏
- 进入 配置 —> 主机 —> 所有主机 —> 监控项 —> 右上角创建监控项
填写完成以后,点击添加。看到这个调用宏的监控项已经添加成功:
查看监控项现在的状态:进入 监测中 —> 最新数据 - 把服务停掉。就会变成 down 的状态
[root@node1 ~]# systemctl stop redis
- 发现监控项是可以正常使用的。
3、修改宏
如果把 node1 节点上的 redis 服务监听端口手动改掉,定义的监控项就不能正常使用了,这样的话,就需要去修改宏。因为只是个例,所以我们不需要去修改全局宏,只用修改模板宏或者主机宏就可以了。
模板宏和主机宏的不同修改操作:
模板宏:模板宏的修改,配置 —> 模板 —> redis stats(相应的模板) —> 宏
点击添加就可以了。
主机宏:主机宏的修改,配置 —> 主机 —> 所有主机 —> node1 —> 宏
点击添加就可以了。
zabbix 监控过程详解相关推荐
- Zabbix监控服务详解+实战
目录 一.监控体系概述 1. 为什么需要监控 2. 监控目标与流程 (1)监控的目标 (2) 监控的流程 3. 监控的对象 (1)CPU监控 (2)磁盘监控 (3)内存监控 (4)网络监控 (5) 系 ...
- Zabbix监控理论详解
Zabbix 是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. 一.监控介绍 你用过哪些监控软件? 1.Cacti Cacti 是一套基于 PHP.MySQL.SNMP ...
- Zabbix监控配置详解
文章目录 一.Zabbix简介 1.Zabbix架构 1.1.server-client架构 1.2.server-proxy-client架构 2.Zabbix的优缺点 3.Zabbix组件 4.Z ...
- Zabbix监控系统详解及配置
前言 作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态.利用一个优秀的监控软件,我们可以: 通过一个友好的界面进行浏览整个网站所 ...
- Zabbix监控系统详解
一.监控软件选型 1.Cacti Cacti是一套基于PHP,mysql,snmp,RRD tools开发的检测图形分析工具.Cacti是使用轮询的方式由 主服务器向设备发送数据请求来获取设备上转台数 ...
- Zabbix监控Jenkins过程详解
这篇文章主要介绍了基于zabbix实现监控Jenkins的过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 一.监控架构图 二.实现思路 在 Jenkins 上安装 ...
- hadoop作业初始化过程详解(源码分析第三篇)
(一)概述 我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程.在作业到达JobTracker之后初始化之前,JobTracker会通过submit ...
- zabbix安装配置详解(一)
zabbix安装配置详解(一) 一.nginx安装 1.必要软件准备: 为了支持rewrite功能,我们需要安装pcre: #yum install pcre-* 需要ssl的支持,如果不需要ssl支 ...
- Zabbix5.0监控系统安装详解
Zabbix5.0监控系统安装详解 一.Zabbix介绍 二.Zbbix的LAMP环境安装 1.防火墙和SElinux配置 2.安装LAMP环境 三.安装Zabbix软件 四.Zabbix的Mysql ...
最新文章
- vue 圆形百分比进度条_vue实用组件——圆环百分比进度条
- STL源代码分析(ch 1)概述
- 英语答题测试的软件叫什么,英语做题软件哪个好 有答案解析的英语做题软件分享...
- 邮件退订_如何方便地退订邮件列表
- Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)
- 做人做事,就两个字!
- 项目进度规划-甘特图
- 惠普T5325 惠普T5565 惠普T5400 瘦客机评测
- Matlab R2017的下载与安装详细教程以及软件的学习资源
- 【苹果群发iMessage推送位置推】软件安装将会按照 Developer Program License Agreement
- 国际电脑使用执照(ICDL)考试
- 记录一次修复知网学位论文目录下载油猴脚本的过程
- 电脑编程从哪里开始学习_我想学习编程,但我不知道从哪里开始
- lua对接bmob数据库
- vue项目使用域名部署(一个域名多个项目)
- Linux shell:脚本判断进程是否正在运行
- 你知道吗?什么是 Responsive JavaScript ?
- U盘启动安装Windows7 系统
- 服务器与pycharm的连接
- 好问题:为什么有些大公司技术弱爆了?