zabbix设置邮件报警

方法一:说明此方法,会产生中文乱码问题

第一步:首先安装mailx组件并配置好能够通过三方邮箱发送邮件

yum -y install mailx

然后编辑mailx的配置文件

vi /etc/mail.rc

在最末尾添加如下信息

set from=xxxxxx@qq.com smtp=smtp.qq.com

set smtp-auth-user=xxxxxx@qq.com smtp-auth-password=xxxxxx

set smtp-auth=login

保存退出后测试邮件是否能够正常发送出去

echo"zabbix test mail" |mail -s "zabbix" xxxxxx@qq.com

第二步:配置Zabbix服务端邮件报警

1、打开Zabbix

管理-示警媒介类型-创建媒体类型

名称:Sendmail

类型:脚本

脚本名称:sendmail.sh

已启用:勾选

存档

2、设置Zabbix用户报警邮箱地址

管理-用户-Admin (Zabbix Administrator)

切换到示警媒介-添加

类型:Sendmail

收件人:xxx@163.com

其他默认即可,也可

以根据需要设置

状态:已启用

存档

3、设置Zabbix触发报警的动作

配置-动作-创建动作

形式一:

名称:Action-Email

默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

默认信息:

告警主机:  {HOSTNAME1}

告警时间:  {EVENT.DATE} {EVENT.TIME}

告警等级:  {TRIGGER.SEVERITY}

告警信息:  {TRIGGER.NAME}

告警项目:  {TRIGGER.KEY1}

问题详情:  {ITEM.NAME}:{ITEM.VALUE}

当前状态:  {TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:  {EVENT.ID}

恢复信息:打钩

恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

恢复信息:

告警主机:  {HOSTNAME1}

告警时间:  {EVENT.DATE} {EVENT.TIME}

告警等级:  {TRIGGER.SEVERITY}

告警信息:  {TRIGGER.NAME}

告警项目:  {TRIGGER.KEY1}

问题详情:  {ITEM.NAME}:{ITEM.VALUE}

当前状态:  {TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:  {EVENT.ID}

已启用:打钩

形式二:

名称:Action-Email

默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

注意如果这里默认标题在发送到邮件中出现中文乱码可以改成下面这样的就不会有乱码了

默认标题:{TRIGGER.STATUS}, : {HOSTNAME1} : {TRIGGER.NAME}

默认信息:

AlarmHost:{HOSTNAME1}

AlarmTime:{EVENT.DATE} {EVENT.TIME}

AlarmLevel:{TRIGGER.SEVERITY}

AlarmMessige: {TRIGGER.NAME}

AlarmItem:{TRIGGER.KEY1}

AlarmDetil:{ITEM.NAME}:{ITEM.VALUE}

Status:{TRIGGER.STATUS}:{ITEM.VALUE1}

EventID:{EVENT.ID}

恢复信息:打钩

恢复标题:恢复{TRIGGER.STATUS},服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

注意如果这里默认标题在发送到邮件中出现中文乱码可以改成下面这样的就不会有乱码了

默认标题:{TRIGGER.STATUS}, : {HOSTNAME1} : {TRIGGER.NAME}

恢复信息:

AlarmHost:{HOSTNAME1}

AlarmTime:{EVENT.DATE} {EVENT.TIME}

AlarmLevel:{TRIGGER.SEVERITY}

AlarmMessige: {TRIGGER.NAME}

AlarmItem:{TRIGGER.KEY1}

AlarmDetil:{ITEM.NAME}:{ITEM.VALUE}

Status:{TRIGGER.STATUS}:{ITEM.VALUE1}

EventID:{EVENT.ID}

已启用:打钩

切换到操作选项

新的

操作类型:送出信息

送到用户:添加

默认信息:打钩

选择用户:Admin

选择

仅送到:Sendmail

存档

4、添加Zabbix服务端邮件发送脚本

zabbix 2.2之前版本脚本如下:

cd/usr/local/zabbix-2.4.4/scripts #进入脚本存放目录

vi sendmail.sh #编辑,添加以下代码

#!/bin/bash

#export LANG=zh_CN.UTF-8         //解决发送的中文变成了乱码的问题

echo "$3" | mail -s "$2"$1

:wq! #保存退出

zabbix 2.4版本脚本如下:

# yum -y install dos2unix

#cat /usr/local/zabbix/scripts/sendmail.sh

#!/bin/bash

#export LANG=zh_CN.UTF-8

FILE=/usr/local/zabbix/scripts/log

echo "$3" >$FILE

/usr/bin/dos2unix -k $FILE

/bin/mail -s "$2" $1 < $FILE

chmod +x /usr/local/zabbix-2.4.4/scripts/sendmail.sh

#设置脚本执行权限

touch /usr/local/zabbix-2.4.4/scripts/log

chmod 755 /usr/local/zabbix-2.4.4/scripts/log

chown -R zabbix.zabbix /usr/local/zabbix-2.4.4

5、设置zabbix_server服务调用脚本的目录

vim/usr/local/zabbix-2.4.4/etc/zabbix_server.conf

#进入zabbix_server配置文件

AlertScriptsPath=/usr/local/zabbix-2.4.4/scripts

找到上面这一行,将脚本存放目录写到此处

保存并重启zabbix_server服务

第三步:测试Zabbix报警

关闭Zabbix客户端服务

service zabbix_agentd stop

查看xxx@163.com邮箱,会收到报警邮件

再开启Zabbix客户端服务

service zabbix_agentd start

查看xxx@163.com邮箱,会收到恢复邮件

使用外部邮箱账号发送报警邮件设置完成。

至此,Zabbix邮件报警设置完成。

1、设置zabbix_server.conf文件

AlterScript = /usr/local/zabbix/share/zabbix/alterscript

2、建立告警脚本

cd /usr/local/zabbix/share/zabbix/alterscript/

sudo vim sendEmail.sh#!/usr/bin/env python

#coding:utf-8

import time

import smtplib

import logging

from email.mime.text import MIMEText

import sys

LOG_FILENAME="/var/log/email_python.log"

mail_host = 'mstp.163.com'

mail_user = 'xxxx@xxxx.com'

mail_pass = 'xxxxx'

mail_postfix = 'xxxxx'

def send_mail(to_list,subject,content,format='html'):

try:

me=mail_user+""

msg=MIMEText(content,format,'utf-8')

msg["Accept-Language"]="zh-CN"

msg["Accept-Charset"]="ISO-8859-1,utf-8"

msg['Subject']=subject

msg['From']=me

msg['to']=to_list

s=smtplib.SMTP()

s.connect(mail_host,"25")

s.login(mail_user,mail_pass)

s.sendmail(me,to_list,msg.as_string())

s.close()

except Exception,e:

logging.basicConfig(filename = LOG_FILENAME, level = logging.DEBUG)

logging.error(time.strftime('%Y-%m-%d %H:%I:%M',time.localtime(time.time()))+e)

if __name__ == "__main__":

send_mail(sys.argv[1],sys.argv[2],sys.argv[3])

3、设置告警脚本的权限

chmod zabbix:zabbix sendEmail.sh

chown 755 sendEmail.sh

4、最后按照方法一只需要在zabbix前端进行相应的配置即可。

需要注意配置Zabbix触发报警的动作要按照下面方法:

配置-动作-创建动作

名称:Action-Email

默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

默认信息:

告警主机:{HOSTNAME1}

告警时间:{EVENT.DATE} {EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

恢复信息:打钩

恢复标题:恢复{TRIGGER.STATUS},服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

告警主机:{HOSTNAME1}

告警时间:{EVENT.DATE} {EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

已启用:打钩

操作这边按照下面操作

新的

操作类型:送出信息

送到用户:添加

默认信息:打钩

选择用户:Admin

选择

仅送到:Sendmail

存档

Zabbix 常用Key值

1、监控端口的:net.tcp.port[,3306]

/usr/local/zabbix/bin/ -s192.168.8.120 -knet.tcp.port[,3306] 返回1为192.168.8.120的端口3306存在,0为不存在

2、监控进程的:proc.num[mysqld]

/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -kproc.num[mysqld] 返回值为192.168.8.120中mysqld的进程数量

/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -kproc.num[] 返回值为192.168.8.120中所有的进程数量

3、查看CPU核数的:system.cpu.num 返回值为服务器CPU的核数

4、查看系统的系统启动时间和当前时间:system.boottime、system.localtime 返回值为系统启动时间和当前时间,为时间戳格式

5、查看系统的简单信息:system.uname 返回值为192.168.8.120的系统信息,类似于linux系统的uname -a命令

6、查看windowns系统当前网卡的进出流量:net.if.out[{HOST.NAME},bytes]、net.if.in[{HOST.NAME},bytes]和linux系统的key:net.if.out[eth0,bytes]、net.if.in[eth0,bytes]一样

/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -knet.if.in[192.168.8.120,bytes] 返回值为IP为192.168.8.120的进流量,此值为计数值,单位为bytes,减去上次取得值,除以时间间隔为此段时间内的平均流量

/usr/local/zabbix/bin/zabbix_get -s192.168.8.120 -knet.if.out[192.168.8.120,bytes] 返回值为IP为192.168.8.120的出流量,此值为计数值,单位为bytes,减去上次取得值,除以时间间隔为此段时间内的平均流量

7、查看系统内存大小:vm.memory.size[total],返回值单位bytes

8、查看文件的大小: vfs.file.size[file] 如: vfs.file.size[/var/log/syslog] 返回的是/var/log/syslog的大小,单位是:bytes

9、查看文件是否存在:vfs.file.exists[file] 文件如果存在返回0,不存在返回1

10、查看文件的MD5:vfs.file.md5sum[file]查看小文件的MD5,返回为MD5值(好像只有2.0以上的版本有这个key)

11、自动发现网卡并监控流量和自动发现分区及分区挂载情况的两个key:net.if.discovery,vfs.fs.discovery,windows和linux监控模板中都有这模板(2.0以上版本),应用即可

以上是常用的key,其实监控服务器无非就是内存、硬盘占用、CPU负载、流量、服务器和端口等情况。如果要监控其他的可以自定义key来实现,写个脚本来返回,得到自己想要的监控结果,zabbix在这块做的非常好,扩展性很强,支持各种脚本来实现自定义的key。

要启用自定义key,需要在客户端的配置文件中启用UnsafeUserParameters=1参数,然后在配置文件的最下面来定义key,如:

UserParameter=free.disk,/usr/local/zabbix/bin/disk.py

free.disk为key的名字,/usr/local/zabbix/bin/disk.py为服务器端调用free.disk这个key时执行的脚本,其结果就是free.disk的返回值。脚本可以是任何可以运行的脚本语言。注意:脚本要用绝对路径,注意脚本的权限,写的脚本返回值要尽量简单,这样方便设置报警值。

zabbix触发器表达式详解

我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下:

{:.()}

{主机:key.函数(参数)}常数

Functions函数

触发器functions可以引用检索到的值,当前时间或者其他元素。

触发器表达式支持的function完整列表请点击官网地址 supported functions

大多数数值functions可以使用秒来作为参数。你可以使用前缀“#”来表示它有不同的含义

last函数使用不同的参数将会得到不同的值,#2表示倒数第二新的数据。

例入从老到最新值为1,2,3,4,5,6,7,8,9,10,last(#2)得到的值为9,last(#9)得到的值为2。last函数必须包含参数。

AVG,count,last,min和max函数还支持额外的参数,以秒为单位的参数time_shift(时间偏移量)。

例如avg(1h,1d),那么将会获取到昨天的1小时内的平均数据。

注意:触发器表达式需要使用history历史数据来计算,如果history不可用(time_shift时间偏移量参数无法使用),因此history记录一定要保留长久一点,至少要保留需要用的记录。触发器表达式可以使用单位符号来替代大数字,例如5m替代300,或者1d替代86400,1k替代1024字节等等。

操作符

触发器示例

三分钟取不到agent.ping的值,那也就是说agent宕了或者服务器挂了{test-01:agent.ping.nodata(3m)}=1

触发器名称:Processor load is too high on www.zabbix.com{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5

www.zabbix.com:host名称

system.cpu.load[all,avg1]:item值,一分内cpu平均负载值

last(0):最新值

>5:最新值大于5

触发器名称:/etc/passwd has been changed

使用函数 diff():{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0

/etc/passwd最新的checksum与上一次获取到的checksum不同,表达式返回true.触发器状态改变为“problem”了。

我们可以使用同样的方法监控系统重要的配置文件,例如/etc/passwd,/etc/inetd.conf等等。这些zabbix一般都会自带,没带的你自己加上吧。

触发器名称:Someone is downloading a large file from the Internet

使用函数 min:{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K

当前主机网卡eth0最后5分钟内接收到的流量超过100KB那么触发器表达式将会返回true,触发器状态变为problem

触发器名称:Both nodes of clustered SMTP server are down{smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0

当smtp1.zabbix.com和smtp2.zabbix.com两台主机上的SMTP服务器都离线,表达式将会返回true.

触发器名称:Zabbix agent needs to be upgraded

使用函数str():{zabbix.zabbix.com:agent.version.str("beta8")}=1

如果当前zabbix agent版本包含beta8(假设当前版本为1.0beta8),这个表达式会返回true.

触发器名称:Server is unreachable{zabbix.zabbix.com:icmpping.count(30m,0)}>5

表示最近30分钟zabbix.zabbix.com这个主机超过5次不可到达。

触发器名称:No heartbeats within last 3 minutes

使用函数 nodata():{zabbix.zabbix.com:tick.nodata(3m)}=1

tick为Zabbix trapper类型,

首先我们要定义一个类型为Zabbix trapper,key为tick的item。我们使用zabbix_sender定期发送数据给tick,

如果在3分钟内还未收到zabbix_sender发送来的数据,那么表达式返回一个true,与此同时触发器的值变为“PROBLEM”。

触发器名称:CPU activity at night time

使用函数 time():{zabbix:system.cpu.load[all,avg1].min(5m)}>2&{zabbix:system.cpu.load[all,avg1].time(0)}>000000&{zabbix:system.cpu.load[all,avg1].time(0)}<060000

只有在凌晨0点到6点整,最近5分钟内cpu负载大于2,表达式返回true,触发器的状态变更为“problem”

触发器名称:Check if client local time is in sync with Zabbix server time

使用函数 fuzzytime():{MySQL_DB:system.localtime.fuzzytime(10)}=0

主机MySQL_DB当前服务器时间如果与zabbix server之间的时间相差10秒以上,表达式返回true,触发器状态改变为“problem”

触发器名称:Comparing average load today with average load of the same time yesterday

(使用 time_shift 时间偏移量参数).{server:system.cpu.load.avg(1h)}/{server:system.cpu.load.avg(1h,1d)}>2

Hysteresis(迟滞,滞后)

触发器状态转变为problem需要一个条件,从problem转变回来还需要一个条件才行。一般触发器只需要不满足触发器为problem条件即可恢复。

有时候触发器需要使用不同的条件来表示不同的状态,举个官网很有趣的例子:机房温度正常稳定为15-20°,当温度超过20°,触发器值为problem,当问题到了15°与20°之间,异常会解除。

为了达到这个效果,我们需要使用如下触发器表达式:

触发器名称:Temperature in server room is too high({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)|

({TRIGGER.VALUE}=1&{server:temp.last(0)}>15)

如上有两个小括号,前面一个表示触发异常的条件,后面一个表达式表示解除异常的条件。

注意:宏变量 {TRIGGER.VALUE}将会返回当前触发器的值

触发器名称:Free disk space is too low

Problem: 最近5分钟剩余磁盘空间小于10GB。(异常)

Recovery: 最近10分钟磁盘空间大于40GB。(恢复)

简单说就是一旦剩余空间小于10G就触发异常,然后接下来剩余空间必须大于40G才能解除这个异常,就算你剩余空间达到了39G(不在报警条件里)那也不算恢复了,还是处于problem状态({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) |

({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)

三分钟CPU使用率持续在80%以上触发报警

TRIGGER.VALUE对应的为Trigger状态,0代表OK, 1代表Problem

分解下需求:

正常情况下连续三分钟CPU使用率超过80%,看起来表达式是:{TRIGGER.VALUE}=0&{test-01:system.cpu.util[,idle].max(3m)}<20

故障时连续三分钟CPU使用率低于50%恢复正常,即故障时刻CPU使用率持续三分钟高于50%依然为故障,表达式是这个样子的:{TRIGGER.VALUE}=1&{test-01:system.cpu.util[,idle].min(3m)}<50

整合下表达式,就成了下边这个样子:({TRIGGER.VALUE}=0&{test-01:system.cpu.util[,idle].max(3m)}<20) | ({TRIGGER.VALUE}=1&{test-01:system.cpu.util[,idle].min(3m)}<50)

zabbix制作自己的模板

一、如何制作模板

1、创建模板

选择“配置”-“模板”-“创建模板”

然后在“模板名称”那块输入我们想要的名字,我这里为check_service_number

组也选择好,然后存档

2、创建应用集

模板已经创建完成,现在继续创建应用集

选择“check_service_number”模板右侧“应用集”,然后选择“创建应用集”

然后输入你设置的名字

3、创建项目

选择“check_service_number”模板右侧“项目”,然后选择“创建项目”

上面是我的信息,此项目是检测apache进程数量

下面是检测zabbix进程数量

4、创建触发器

选择“check_service_number”模板右侧“触发器”,然后选择“创建触发器”

然后设置好相应的信息

这个是检测apache的最新进程数量如果为0,就触发“严重“类型报警

下面这个是检测zabbix的最新进程数量如果为0,就触发“严重“类型报警

5、创建图形

为了监控方便,“创建图形”来查看

选择“check_service_number”模板右侧“图形”,然后选择“创建图形”

下面是我监控apache的图形配置

下面是我监控zabbix的图片配置

完成后进入“检测中”-“图形”

选择相应的图形即可看到结果

上面是apache的图形结果

下面是zabbix的图形结果

为了测试触发报警,我把agent机器的apache服务给关闭,查看“事件”与邮件是否能收到报警(注意一定要能实现邮件报警,否则邮件发送不了)

现在先关闭apache服务,在等3分钟开启apache服务

可以看到apache的监控情况

下面在看看“事件”内容

在查看一下邮件报警情况

收到了邮件报警,内容为apache的进程数为0

过一会有收到了一封邮件

恢复正常通知,现在apache的进程数为6

pyzabbix 删除触发器_zabbix设置邮件报警, Zabbix常用Key值, zabbix触发器表达式详解, zabbix制作自己模板...相关推荐

  1. Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)

    首先,谢谢原作者:(此文为转载的文章,现将原地址贴出如下:以下文章来源于yMatrix,作者MatrixDB团队Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)) 更多精彩Zab ...

  2. Zabbix 4.2.5 安装部署实践详解

    一.安装 1.安装CentOS操作系统,并配置网络 2.安装Zabbix官方源 rpm -ivh http://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zab ...

  3. vue动态设置文字布局方式_详解Vue动态添加模板的几种方法

    动态添加模板需要收集原始数据的页面,这个时候我们需要很多原始数据收集模板,下面给大家详解Vue 动态添加模板的几种方法,希望对你学习这方面知识有所帮助. 通常我们会在组件里的 template 属性定 ...

  4. zabbix设置邮件报警

    五.邮件报警 5.1环境准备 服务器设置脚本sendmail.sh,web端配置Sendmail调用脚本sendmail.sh,用户调用Sendmail,,配置动作,条件,触发器并传给用户 servi ...

  5. zabbix触发器表达式详解

    概述 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<server>:<key>.<function>(<para ...

  6. 6 rethad 自定义硬盘_图文详解zabbix配置自定义监控项过程

    概述 今天主要介绍一下zabbix如何去配置自定义监控模板,下面一起来看看吧! 一.模板 1.概念 模板(template):可以应用到主机上的实体(包括监控项.触发器.数据图.图表.监控分类.低级的 ...

  7. 详解zabbix安装部署(Server端篇)

    Linux下常用的系统监控软件有Nagios.Cacti.Zabbix.Monit等,这些开源的软件,可以帮助我们更好的管理机器,在第一时间内发现,并警告系统维护人员. 今天开始研究下Zabbix,使 ...

  8. plupload怎么设置属性_jquery上传插件:plupload事件参数说明详解

    jquery上传插件:plupload事件参数说明详解 2018-12-01 本篇重点说明一下plupload的事件参数.并用2个例子说明一下绑定事件. 1.plupload参数说明: Browse_ ...

  9. zabbix-server-mysql安装_详解zabbix安装部署(Server端篇)

    分类: 网络与安全 Linux下常用的系统监控软件有Nagios.Cacti.Zabbix.Monit等,这些开源的软件,可以帮助我们更好的管理机器,在第一时间内发现,并警告系统维护人员. 今天开始研 ...

最新文章

  1. 【Ubuntu日常技巧】【解决】Ubuntu 16 右上角的音量调节通知框不停地闪烁问题
  2. 75. CPU 100%运行实战案例分析
  3. 关于App开发:模拟服务器数据接口 - MockApi
  4. NameNode 启动失败 - There appears to be a gap in the edit log. We expected txid xxx, but got tx
  5. js 刷新页面window.location.reload();
  6. Maven学习总结(39)——Maven私服的搭建及使用deploy命令部署构建问题汇总
  7. iOS·Charts·集成步骤
  8. UVa 10673 Play with Floor and Ceil
  9. Linux四剑客详解——sed
  10. Ubuntu20装Nvidia驱动--中文显示乱码问题
  11. silverlight自定义安装客户端插件
  12. win10文件夹加密_如何使用电脑(win10)局域网共享文件给nPlayer(SMB)
  13. 原生拦截WebView页面下载链接跳转空白页问题
  14. 明通智能:EA交易外汇ea能稳定盈利吗?
  15. selenium 自动化测试 Chrome 大于 63 版本 不能重定向问题解决办法
  16. 百度地图实现定位图标随手机方向变化而变化,即运用方向传感器
  17. [PCB]PCB光板生产过程中板子弯曲或翘起原因分析
  18. Java 日期的各种操作
  19. StringBuffer类,StringBuffer类和String的区别、String,StringBuffer,StringBuilder之间的区别
  20. 涨知识!阿里P7级别面试经验总结,附超全教程文档

热门文章

  1. Echarts数据可视化series-map地图,开发全解+完美注释
  2. 串的复制——串传送指令MOVSB和方向标志位DF和CLD和REP
  3. 有关8086必须记住的几个数(持续更新)
  4. CrackMe011
  5. Ajax Post请求实例
  6. 带lazy标记的线段树
  7. 在 Visual Studio 2013 中使用 JavaScript 的 IntelliSense
  8. QT生成在Windows下有图标的exe文件(IDE=QT Creator)
  9. 甲骨文将关闭Sun开源软件项目托管网站
  10. 健康窈窕美女第一课 减肥vs早餐四个关键问题。