git回退到指定的版本

我的开发分支合并了 develop ,发现代码有问题,现在需要回滚到合并之前的版本。

使用 git log 查看下最近的提交,如果有如下的提交

G1 - G2 - G3 - B1 - B2 - B3
G1 - G2 - G3 - B1 - B2 - B3
                       -- HEAD
                    ------ HEAD~1
                 ---------- HEAD~2
              -------------- HEAD~3

这里分两种情况,这里要回退 B1 ~ B3

  • 没有提交到服务器

可以使用如下中的一种挨个回滚

git reset --hard B1 B2 B3
git reset --hard HEAD HEAD~1 HEAD~2

注意上面的 B1 B2 B3 都是指的提交的ID

  • 已经提交到服务器

如果代码已经提交了,最好使用 revert

git revert --no-commit B1 B2 B3
git revert --no-commit HEAD HEAD~1 HEAD~2
git revert --no-commit HEAD~2^..HEAD

这里 –no-commit 告诉 git 执行还原,但是不要自动提交

<rev1>..<rev2> 两个点 .. 表示范围

我这里的由于是要回退一个 merge过的提交,需要指定 -m 参数,可以使用 man git-revert 查看具体的使用方法。

man git-revert
git revert --no-commit -m 1 具体的提交ID

可以参考 回退一个错误的merge(http://web.mit.edu/jhawk/mnt/spo/git/www/howto/revert-a-faulty-merge.html)

忽略git已经跟踪的文件或者目录

大家都知道, 在git项目下想要忽略某个文件,只需要在gitignore文件中添加此文件,但是有时候却不起作用,这是为什么呢?

因为如果第一次提交的时候,没有在gitignore文件中添加忽略文件,那么这些文件(目录也是文件)就会被git跟踪,push的时候也会被推送到远程。被跟踪的文件,gitignore都会失效,所以最好就是一开始在commit之前先添加到gitignore中。

如果文件已经被跟踪且被推送到远程,可以按照下面方法解决:

rm -rf 文件
git rm -r --cached 要忽略的文件

更新.gitignore文件,添加要忽略的文件

git add -A (添加所有)
git push origin 分支

如果同名的文件过多,如:.class 文件被提交了,那么如果这样一个一个显然效率太低,可以按照下面方法操作

find . -iname 文件名 -exec rm -rf {};
  • 重复上面的步骤,文件名替换为下一个要删除的文件名

  • 修改gitignore,添加忽略文件

git rm -r --cached 要忽略的文件
git add -A
git push origin 分支

Centos7下zabbix 3.2 升级到 zabbix 3.4

1、停止zabbix_server和zabbix_proxy

停止Zabbix服务器以确保没有新数据插入数据库。

停止server,可以用脚本也可以杀死进程

systemctl stop zabbix_server
/etc/init.d/zabbix_server stop
systemctl stop zabbix_proxy
/etc/init.d/zabbix_proxy stop

2、备份现有的Zabbix数据库

这是非常重要的一步。确保您具有数据库的备份。如果升级过程失败(缺少磁盘空间,关闭电源,出现意外问题),这将有所帮助。

mysqldump -uzabbix -p你的密码 zabbix > zabbix_back.sql

3、备份配置文件,PHP文件和Zabbix二进制文件

制作Zabbix二进制文件的备份副本,配置文件和PHP文件目录。

备份zabbix server配置信息主要备份etc下面的配置信息

/bin/cp -fr zabbix_server zabbix_server_3.2_back

备份web目录,这是你的zabbix文件目录

/bin/cp -fr /data/www/zabbix /data/www/zabbix_3.2_back

4、安装新的服务器二进制文件

编译安装zabbix

下载zabbix-3.4.0.tar.gz可以去官方下载

官方下载地址: https://www.zabbix.com/download

未分类

tar xv zabbix-3.4.0.tar.gz
cd zabbix-3.4.0/
./configure --prefix=/app/zabbix/zabbix-server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl
make
make install

未分类

恢复配置文件,拷贝zabbix_server_3.2_back/etc下面文件到新的目录下面

因为我下面有很多脚本,所以我需要把脚本目录也拷贝过去

/bin/cp -fr zabbix-server_2.3_back/etc/* /app/zabbix/zabbix-server/etc/
/bin/cp -fr zabbix-server_2.3_back/script /app/zabbix/zabbix-server/

5、启动新的Zabbix二进制文件

启动新的二进制文件。检查日志文件以查看二进制文件是否已成功启动。

Zabbix服务器将自动升级数据库。启动时,Zabbix服务器报告当前(强制和可选)和所需的数据库版本。如果当前的强制版本比所需版本更早,Zabbix服务器会自动执行所需的数据库升级补丁。数据库升级的开始和进度级别(百分比)将写入Zabbix服务器日志文件。升级完成后,会将一个“数据库升级完全完成”消息写入日志文件。如果任何升级补丁失败,Zabbix服务器将无法启动。如果当前的强制数据库版本比所需服务器更新,Zabbix服务器也将不会启动。如果当前强制数据库版本对应于必需的必需版本,Zabbix服务器将仅启动。

8673:20161117:104750.259当前数据库版本(强制/可选):03040000/03040000
8673:20161117:104750.259必需的版本:03040000

启动服务器之前:

确保数据库用户具有足够的权限(创建表,删除表,创建索引,删除索引)

确保您有足够的可用磁盘空间。

启动zabbix_server

/etc/init.d/zabbix_server start

启动后可以查看日志,可以看到数据库会自动升级到最新版版

未分类

6、安装新的Zabbix Web界面

最低要求的PHP版本为5.4.0。如果需要更新,并遵循安装说明。

复制新的php文件到你的web目录下,复制后注意权限问题

/bin/cp -fr frontends/php/* /data/www/zabbix

完成后我们就能看到最新的zabbix 3.4.0了

大功告成!

UI界面

未分类

未分类

使用Selenium抓取zabbix性能监控图

概要

老样子先来个概要,因为公司一直都子使用企业微信,前两天刚刚将所有zabbix的告警信息接到微信上,总感觉还差那么一点,就想着就高等级的告警加上一个性能监控图,这样只看告警信息大概就清楚问题了,不用在登录到zabbix再去查找信息,就因为这个想法让我掉坑里呆了一整天,蓦然回首还是自己太菜啊,下面先贴出来使用Python登录zabbix并且获取到对应告警项监控图的代码,之后完整代码会贴到github中,链接放到简书上~

实现抓取

以下几点基础:

  • 告警信息的发送message里,可以发送zabbix的宏变量Item ID信息

  • 根据Item ID,可以直接使用特殊URL携带Item ID信息获取对应监控截图

以下为获取截图完整代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# name image.py
from selenium import webdriver
import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def get_item_graph(itemid,flag,eventid):
    temp_name = "/tmp/"+eventid+".png"
        #save_screenshot仅能保存png格式图片,所以文件名定义需要以png结尾
    driver = webdriver.PhantomJS("/usr/local/zabbix-agent-ops/phantomjs-2.1.1/bin/phantomjs",service_log_path=os.path.devnull)
        #使用PhantomJS可以模拟浏览器进行访问
    driver.get("http://127.0.0.1/zabbix/")
    driver.set_window_size(640,480)
    driver.find_element_by_id("name").send_keys("armo")
    driver.find_element_by_id("password").send_keys("123456")
    driver.find_element_by_id("enter").click()
        #模拟访问url,在对应的元素element处输入用户名密码后click登陆
    if flag:
        driver.get("http://127.0.0.1/zabbix/history.php?action=showgraph&fullscreen=1&itemids[]="+itemid)
    else:
        driver.get("http://127.0.0.1/zabbix/history.php?action=showvalues&fullscreen=1&itemids[]="+itemid)
        #flag如果是1,则对应Item有对应的graph获取;如果是0,则获取最新一段时间的值
        driver.save_screenshot(temp_name)
        #将网页内容保存为png图片
    driver.close()
    driver.quit()

if __name__ == "__main__":
    if len(sys.argv) > 1:
        itemid = sys.argv[1]           #脚本传递的第一个参数 Item ID
        flag = sys.argv[2]             #脚本传递的第二个参数 Flag,从zabbix数据库item和graph的对应表查询item是否具有对应的graph,如果有则传递1到脚本,无传递0
        eventid = sys.argv[3]          #脚本传递的第三个参数 告警信息的Event ID,用来命名png图片
    get_item_graph(itemid,flag,eventid)
        #以上三个参数为前置调用脚本分析zabbix的发送信息后得到,之后会更新在后续文章中

遇到的问题

  • 第一个session和cookies的保存问题,如果登录之后不携带cookies是无法访问对应监控页面的,刚开始选择requests模块,感觉相对较难,对于刚入门的我来说还是selenium比较合适,不用考虑session和cookies的问题

  • 脚本在测试环境运行非常好,截图信息也很准确,但是到线上服务器就出了问题,上俩个图:

很明显线上环境返回的图,前面一段居然是乱码。检查了所有环境,最后才发现问题出在线上服务器没有安装和zabbix适配的字体问题上,很是无奈啊,居然还要考虑字体的问题,阿里云的服务器也是真够能偷懒的。

未分类
正常

未分类
不正常

  • 安装字体

为了确保万无一失,直接安装zabbix调用的字体到系统中

[root@zabbix ~]# cp /var/www/html/zabbix/fonts/DejaVuSans.ttf /usr/share/fonts/
[root@zabbix ~]# mkfontscale
[root@zabbix ~]# mkfontdir
[root@zabbix ~]# fc-list :lang=zh
Fangsong ti:style=Regular
AR PL ShanHeiSun Uni:style=Regular
[root@zabbix ~]#

安装成功之后再次运行脚本后,截图一切正常了~~~~终于可以安心睡觉了。

Zabbix 3.0.4 安装部署&常见错误解决

源码搭建LNMP环境后,可以开始安装Zabbix了。

ZABBIX安装

1. 下载zabbix软件包

链接:http://pan.baidu.com/s/1slcXw41 密码:k8jm

yum -y install lrzsz

利用linux自带的上传命令上传软件包到服务器目录上

2. 安装依赖包,不然配置zabbix的时候会报错

yum -y install mysql-devel net-snmp-devel

3. 源码安装zabbix

tar -zxvf zabbix-3.0.4.tar.gz
cd zabbix-3.0.4
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2
make -j 4 && make install

4. 创建zabbix用户

groupadd zabbix
useradd zabbix -s /sbin/nologin -M -g zabbix

导入SQL文件之前需要创建ZABBIX数据库

mysql> create database zabbix default charset utf8;
mysql> grant all privileges on zabbix.* to zabbix@'localhost' identified by 'zabbix';
mysql> flush privileges;
mysql> show databases;
mysql> quit

5. 导入sql文件

mysql -uroot -pyinzhengjie zabbix < database/mysql/schema.sql
mysql -uroot -pyinzhengjie zabbix < database/mysql/images.sql
mysql -uroot -pyinzhengjie zabbix < database/mysql/data.sql

6. 创建zabbix项目目录便于管理

mkdir -p data/zabbix/web
mkdir -p data/zabbix/log
mkdir -pv /usr/local/nginx/conf/zabbix
cd /usr/local/nginx/conf/zabbix/
cp -rp /usr/local/zabbix-3.0.4/frontends/php/* /data/zabbix/web/
cp /yinzhengjie/zabbix-3.0.4/misc/init.d/tru64/zabbix_* /etc/init.d/
chmod +x /etc/init.d/zabbix_*
vim /etc/init.d/zabbix_server
DAEMON=/usr/local/zabbix/sbin/zabbix_server (切记要修改这个变量的path,因为咱们是源码安装的,路径不正确,下面的脚本调用就会出错的!)
vim /etc/init.d/zabbix_agentd
DAEMON=/usr/local/zabbix/sbin/zabbix_agentd(原理同上)

7. 编辑zabbix访问web的配置文件

(配置文件处理要写明端口外,还有启用fastcgi,因为nginx本身是不支持php的,如果不开启这个功能的话就无法支持zabbix的php界面了哟)

mkdir -pv  /usr/local/nginx/conf/zabbix && cd /usr/local/nginx/conf/zabbix
vim zabbix.conf
server {
listen 8027;
server_name web;
access_log /data/zabbix/log/zabbix.access.log main;
index index.html index.php index.html;
root /yinzhengjie/data/zabbix/web;
location /{
try_files $uri $uri/ /index.php?$args;
}
location ~ ^(.+.php)(.*)$ {
fastcgi_split_path_info ^(.+.php)(.*)$;
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}

8. 编辑zabbix的配置文件

(修改一下参数,账号密码要记住哟,不然网页安装会出问题的~)

cat /usr/local/zabbix/etc/zabbix_server.conf | grep -v ^# | grep -v "^$"LogFile=/tmp/zabbix_server.log
PidFile=/tmp/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

9. 编辑nginx的配置文件

(基本上是架空了nginx配置文件,而是用include模块已经写好的调用配置文件)

cd /usr/local/nginx/conf/
vim nginx.conf
user nginx;
worker_processes 1;
#error_log logs/error.log warning;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
include zabbix/*.conf;
}
#防火墙策略
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 8027 -j ACCEPT
#启动zabbix服务和代理
service zabbix_server start
service zabbix_agentd start

好了,以上就是zabbix服务器已经部署完毕了,下面我们要开始页面安装zabbix了

ZABBIX安装以及常见错误解决方案

1. 首先登陆服务器地址

(服务器地址+nginx监听zabbix的端口号,listen 8027;)

未分类

2. 输入账号密码

这个是在zabbix配置文件中定义的

未分类

3. 直接下一步

未分类

4. 点击下一步

未分类

5. 需要下载文件到服务器

未分类

点击蓝色按钮下载,然后上传到服务器

未分类

[root@bogon yinzhengjie]# cd /yinzhengjie/data/zabbix/web/conf/
[root@bogon conf]# ll
total 8
-rw-r--r--. 1 1000 1000 1036 Jul 22 08:06 maintenance.inc.php
-rw-r--r--. 1 1000 1000 411 Jul 22 08:06 zabbix.conf.php.example
[root@bogon conf]# cp /yinzhengjie/zabbix.conf.php ./

修改权限

[root@bogon conf]# chown -R 1000:1000 zabbix.conf.php

好的,来带web界面点击右键刷新

未分类

6. 输入账号密码

未分类

故障排错:时区错误

未分类

解决方案:

编辑你的php配置文件,修改成正确的时区就好!正确的应该写PRC

未分类

[root@bogon yinzhengjie]# find / -name php.ini
/usr/local/product/php-5.5.35/etc/php.ini
[root@bogon yinzhengjie]# vim /usr/local/product/php-5.5.35/etc/php.ini

找到对应时区的字段,修改成东八区的时区,修改后重启PHP

未分类

重启后,来到登陆界面,奇迹发生了~

后记:最近有的朋友向我反馈一个问题,就是把zabbix的界面调试到中文模式的时候,在看图像会出现乱码的情况~如下图:

未分类

怎么处理这个问题呢?其实很简单,我们可以把windows系统自带的字体放到服务器上替换一下就好使了

  • 找到windows楷体的字体文件:

未分类

  • 更换zabbix服务器字体文件
[root@bogon yinzhengjie]# cd /yinzhengjie/data/zabbix/web/fonts
[root@bogon fonts]# mv DejaVuSans.ttf /yinzhengjie/

用Linux自带的rz命令上传刚刚的文件即可~

[root@bogon fonts]# ll
总用量 11512
-rw-r--r--. 1 root root 11785184 7月 17 06:28 simkai.ttf
[root@bogon fonts]# 
  • 修改配置文件
[root@bogon yinzhengjie]# vim /yinzhengjie/data/zabbix/web/include/defines.inc.php

define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans'); // font file name
define('ZBX_GRAPH_FONT_NAME', 'simsun'); // font file name        ==>此行为新增行;

define('ZBX_FONT_NAME', 'DejaVuSans');
define('ZBX_FONT_NAME', 'simsun');       ==>此行为新增行;

之后切换到末行模式:执行 %s/DejaVuSans/simkai

未分类

  • 重启zabbix服务
[root@bogon yinzhengjie]# /etc/init.d/zabbix_server restart
Zabbix server terminated.
Zabbix server started.
[root@bogon yinzhengjie]# 
  • 验证你的服务器是否都是正常的字体了

未分类

Zabbix-3.0.3监控系统的短信报警设置

前面已分别介绍了zabbix的邮件、微信报警设置,这些都是手机在有网络时才能收到报警信息,那如果手机没有网的情况下怎么办,这就需要考虑使用短信接口报警了。当服务出现故障达到预警级别是通过发送短信的形式告诉运维人员,以便及时处理。公司的短信接口是从短信服务器购买的,并经过公司开发大神调整后使用的。废话不多赘述,下面直接记录配置过程:

一、zabbix服务端的脚本路径设置

[root@zabbix ~]# cat /data/zabbix/etc/zabbix_server.conf|grep alertscripts
AlertScriptsPath=/data/zabbix/alertscripts

二、短信脚本

--------------------------------------------------------------------------------------------------------
下面是开发大神对短信服务器提供的接口进行调试之后给运维部分使用的短信接口
curl -H "Content-type: application/json" -X POST 192.168.1.10:8080/sms/send/batch -d '
{
  "phones": [
    "13611789029",
    "12310703369",
    "13314466149"
  ],
  "callOrgCode": "YW1001",
  "callOrgName": "运维部门",
  "callAppCode": "WANG_OPS",
  "key": "R13-G294595Y32M24TAD60JK",
  "templateId": 6,
  "valueMap": {
   "msg": "test001服务器出现问题!请尽快修复!"
  }
} '

可以在命令行里手动执行上面的接口进行发信测试,在目标手机查看是否收到短信。
--------------------------------------------------------------------------------------------------------

结合上面的短信接口,zabbix短信报警脚本如下:

[root@zabbix alertscripts]# cat zabbixsend_sms.sh
#!/bin/bash
export LANG=en_US.UTF-8

PHONE=$(echo $1|sed 's/,/",n"/g')                         #第一个变量($1)。由于多个号码要换行,并且每行要加双引号,故要做匹配转换设置
#Message=$(echo $3|sed 's/:/": "/g'|sed 's/,/",n"/g')
#Message=$(echo $3|sed 's/: /": "/g'|sed 's/,/",n"/g')
Message=$3                                                 #第三个变量

curl -H "Content-type: application/json" -X POST 192.168.1.10:8080/sms/send/batch -d """          #公司的短信接口地址,这里采用post方式
{
  "phones": [
    "$PHONE"
  ],
  "callOrgCode":"YW1001",                       
  "callOrgName": "运维部门",
  "callAppCode": "WANG_OPS",
  "key": "R13-G294595Y32M24TAD60JK",
  "templateId": "6",
  "valueMap": {
   "msg": "$Message"
  }
} """                                         #前后三个引号表示引号里的内容输入什么就是什么,变量参数不会被影响。

time=`date '+%F %T'`
echo "${time}  ${PHONE} $Message" >> /data/log/sendsms_`date +%Y-%m`.log

[root@zabbix alertscripts]# chmod 755 zabbixsend_sms.sh

可以先手动执行脚本进行发信测试:
$1是发信的手机号码
$2是发信的主题,这个一般短信报警信息里不显示,如下测试是"报警测试"。上面脚本中没有配置$2的变量
$3是发信的内容。
三个变量使用空格隔开
[root@zabbix alertscripts]# ./zabbixsend_sms.sh 13633767819 报警测试 backup01服务器宕机了!
{"totalCnt":1,"successCnt":1,"failCnt":0,"failPhones":[],"failMsg":null,"msgContent":"backup01服务器宕机了!"}

未分类

三、zabbix的web界面里的报警设置

1、报警媒介类型设置

未分类

2、用户的报警媒介设置

未分类

未分类

3、”动作”设置

未分类

未分类

未分类

未分类

未分类

上面的报警主题如下,这个其实在短信报警信息中没有体现,随便定义即可。

故障{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}

手机短信报警截图如下:

未分类

发信后,可以查看zabbix的web界面里的”报表”->“动作日志”

未分类

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

使用docker安装apache环境部署wordpress

环境:centos7

首先在DaoCloud注册

#安装、启动docker
curl -sSL https://get.daocloud.io/docker | sh
systemctl docker start
#拉取所需镜像(nginx-proxy、wordpress、mysql)
dao pull daocloud.io/daocloud/nginx-proxy:latest
dao pull daocloud.io/daocloud/dao-wordpress:latest
dao pull daocloud.io/library/mysql:latest
#mysql
docker run  --restart="always" -d 
  -v /data/docker/msqyl:/etc/mysql/conf.d 
  -p 0.0.0.0:3306:3306 --name mysql 
  -e MYSQL_ROOT_PASSWORD=root mysql:latest
默认账号密码:root/rot
#nginx-proxy
docker run --restart="always" -d -p 80:80 -v   
      /var/run/docker.sock:/tmp/docker.sock:ro 
      daocloud.io/daocloud/nginx-proxy

详细的使用方法查看nginx-proxy 使用

#wordpress
docker run --restart="always" --name wordpress --link mysql:mysql -e VIRTUAL_HOST=www.domain.com -v /data/wordpress:/var/www/html -d -p 8080:80 daocloud.io/daocloud/dao-wordpress:latest

www.domain.com 替换成你自己需要绑定的域名,方便nginx-proxy 自动发现

启动后发现没有办法正常访问

apache2配置

进入wordpress容器进行配置

docker exec -it wordpress /bin/bash

写入域名

echo "ServerName www.domain.com" >> /etc/apache2/httpd.conf

重启

/etc/init.d/apache2 restart

最后输入域名或者localhost:8080 进行访问

Wireshark过滤数据包教程

介绍

数据包过滤可让你专注于你感兴趣的确定数据集。如你所见,Wireshark 默认会抓取所有数据包。这可能会妨碍你寻找具体的数据。 Wireshark 提供了两个功能强大的过滤工​​具,让你简单而无痛地获得精确的数据。

Wireshark 可以通过两种方式过滤数据包。它可以通过只收集某些数据包来过滤,或者在抓取数据包后进行过滤。当然,这些可以彼此结合使用,并且它们各自的用处取决于收集的数据和信息的多少。

布尔表达式和比较运算符

Wireshark 有很多很棒的内置过滤器。当开始输入任何一个过滤器字段时,你将看到它们会自动补完。这些过滤器大多数对应于用户对数据包的常见分组方式,比如仅过滤 HTTP 请求就是一个很好的例子。

对于其他的,Wireshark 使用布尔表达式和/或比较运算符。如果你曾经做过任何编程,你应该熟悉布尔表达式。他们是使用 and、or、not 来验证声明或表达式的真假。比较运算符要简单得多,它们只是确定两件或更多件事情是否彼此相等、大于或小于。

过滤抓包

在深入自定义抓包过滤器之前,请先查看 Wireshark 已经内置的内容。单击顶部菜单上的 “Capture” 选项卡,然后点击 “Options”。可用接口下面是可以编写抓包过滤器的行。直接移到左边一个标有 “Capture Filter” 的按钮上。点击它,你将看到一个新的对话框,其中包含内置的抓包过滤器列表。看看里面有些什么。

未分类

在对话框的底部,有一个用于创建并保存抓包过滤器的表单。按左边的 “New” 按钮。它将创建一个填充有默认数据的新的抓包过滤器。要保存新的过滤器,只需将实际需要的名称和表达式替换原来的默认值,然后单击“Ok”。过滤器将被保存并应用。使用此工具,你可以编写并保存多个不同的过滤器,以便它们将来可以再次使用。

抓包有自己的过滤语法。对于比较,它不使用等于号,并使用 > 和 < 来用于大于或小于。对于布尔值来说,它使用 and、or 和 not。

例如,如果你只想监听 80 端口的流量,你可以使用这样的表达式:port 80。如果你只想从特定的 IP 监听端口 80,你可以使用 port 80 and host 192.168.1.20。如你所见,抓包过滤器有特定的关键字。这些关键字用于告诉 Wireshark 如何监控数据包以及哪一个数据是要找的。例如,host 用于查看来自 IP 的所有流量。src 用于查看源自该 IP 的流量。与之相反,dst 只监听目标到这个 IP 的流量。要查看一组 IP 或网络上的流量,请使用 net。

过滤结果

界面的底部菜单栏是专门用于过滤结果的菜单栏。此过滤器不会更改 Wireshark 收集的数据,它只允许你更轻松地对其进行排序。有一个文本字段用于输入新的过滤器表达式,并带有一个下拉箭头以查看以前输入的过滤器。旁边是一个标为 “Expression” 的按钮,另外还有一些用于清除和保存当前表达式的按钮。

点击 “Expression” 按钮。你将看到一个小窗口,其中包含多个选项。左边一栏有大量的条目,每个都有附加的折叠子列表。你可以用这些来过滤所有不同的协议、字段和信息。你不可能看完所有,所以最好是大概看下。你应该注意到了一些熟悉的选项,如 HTTP、SSL 和 TCP。

未分类

子列表包含可以过滤的不同部分和请求方法。你可以看到通过 GET 和 POST 请求过滤 HTTP 请求。

你还可以在中间看到运算符列表。通过从每列中选择条目,你可以使用此窗口创建过滤器,而不用记住 Wireshark 可以过滤的每个条目。对于过滤结果,比较运算符使用一组特定的符号。 == 用于确定是否相等。> 用于确定一件东西是否大于另一个东西,< 找出是否小一些。 >= 和 <= 分别用于大于等于和小于等于。它们可用于确定数据包是否包含正确的值或按大小过滤。使用 == 仅过滤 HTTP GET 请求的示例如下:http.request.method == “GET”。

布尔运算符基于多个条件将小的表达式串到一起。不像是抓包所使用的单词,它使用三个基本的符号来做到这一点。&& 代表 “与”。当使用时,&& 两边的两个语句都必须为真值才行,以便 Wireshark 来过滤这些包。|| 表示 “或”。只要两个表达式任何一个为真值,它就会被过滤。如果你正在查找所有的 GET 和 POST 请求,你可以这样使用 ||:(http.request.method == “GET”) || (http.request.method == “POST”)。! 是 “非” 运算符。它会寻找除了指定的东西之外的所有东西。例如,!http 将展示除了 HTTP 请求之外的所有东西。

总结思考

过滤 Wireshark 可以让你有效监控网络流量。熟悉可以使用的选项并习惯你可以创建过滤器的强大表达式需要一些时间。然而一旦你学会了,你将能够快速收集和查找你要的网络数据,而无需梳理长长的数据包或进行大量的工作。

Varnish后端主机的健康状态检查

配置后端主机的Health Check

环境

Varnish      192.168.198.139
图片服务端    192.168.198.120
程序服务端    192.168.198.128

程序服务器

[root@danran ~]# vim /var/www/html/.healthchk.html
ok

图片服务器

[root@centos6 ~]# vim /data/web/image2/.healthchk.html
oK
[root@centos6 ~]# vim /data/web/images/.healthchk.html
ok

Vernish

[root@danran ~]# vim /etc/varnish/default.vcl
    导入directors模块
    import directors;

    定义健康检查的机制,自定义为healthchk
    probe healthchk {
        .url = "/.healthchk.html";\检查的url为.healthchk.html
        .timeout = 2s;  \超时时间为2s
        .interval = 2s;\检查间隔时间
        .window = 8; \基于最近8次的检查判断
        .threshold = 5; \检查最近8次若有5次成功即为健康状态
    }

    定义一个app程序后端服务器
    backend appsrv1 {
        .host = "192.168.198.128";
        .port = "80";
        .probe = healthchk; \调用健康检查的机制
    }

    定义两个图片服务端
    backend imgsrv1 {
        .host = "192.168.198.120";
        .port = "80";
        .probe = healthchk; \调用健康检查的机制
    }
    backend imgsrv2 {
        .host = "192.168.198.120";
        .port = "8080";
        .probe = healthchk; \调用健康检查的机制
    }

    定义一个图片服务器组imgsrvs,并将imgsrv1和imgsrv2两个后端图片服务器添加进imgsrvs组中
    sub vcl_init {
        new imgsrvs =  directors.round_robin();  \指定调度算法为轮询
        imgsrvs.add_backend(imgsrv1);
        imgsrvs.add_backend(imgsrv2);
    }

    sub vcl_recv {
        if (req.url ~ "(?i).(jpg|jpeg|png|gif|svg|txt)$") {
            set req.backend_hint = imgsrvs.backend();
        } else {
            set req.backend_hint = appsrv1;
        }
    }
[root@danran ~]# varnish_reload_vcl    \重新加载/etc/varnish/default.vcl参数文件

Varnish查看后端主机的健康状态

[root@danran ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 
backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8 \Healthy为健康状态,检测了8次,8次成功
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

图片服务端故障了一台服务器

添加一条防火墙规则,禁止8080端口的连接,即等同于imgsrv2服务器的故障
[root@centos6 ~]# iptables -A INPUT -p tcp --dport 8080 -j REJECT  

Varnish查看后端主机的健康状态

[root@danran ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 
backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Sick 0/8  \检查80次,0次成功,即imgsrv2服务端故障,从而imgsrv2不可用

修复使imgsrv2上线后,imgsrv2恢复正常状态 
[root@danran ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 
backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Sick 4/8  \Sick为失败状态
backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 5/8 \当检查次数大于等于5次时,即表示该服务端可以正常使用

Varnish手动使某后台服务端下线,即修改服务器健康状态为sick

[root@Varnish ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
backend.set_health imgsrv1 sick
200 \将imgsrv1服务器的状态手动修改为sick故障状态      

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      sick       Healthy 8/8 \imgsrv1状态为sick故障状态
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

将手动修改为sick状态的后台服务器端上线,即将状态修改为health

[root@Varnish ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

backend.set_health imgsrv1 healthy
200 \将imgsrv1服务器的状态手动修改为healthy健康状态,即不管物理后台服务器端是否正常,varnish检测结果都为正常

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      sick       Healthy 8/8 \imgsrv1状态为sick故障状态
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      healthy    Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8
imgsrv1后台服务器端故障,不能正常使用

[root@imgsrv1 ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT 

Varnish检测后端服务器的健康状态

[root@Varnish ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      healthy    Sick 0/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

将手动修改为sick状态的后台服务器端上线,即将状态修改为health

[root@Varnish ~]# varnishadm -S /etc/varnish/secret -T

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      sick       Healthy 8/8 \imgsrv1状态为sick故障状态
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

backend.set_health imgsrv1 auto
200        

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8  

imgsrv1后台服务器端故障,不能正常使用

[root@imgsrv1 ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT 

Varnish检测后端服务器的健康状态

[root@Varnish ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Sick 0/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

修复imgsrv1,使imgsrv1上线1

[root@Varnish ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

在Tomcat 8上部署Jenkins

软件安装包

  • JDK: jdk-8u131-linux-x64.tar.gz
  • Tomcat: apache-tomcat-8.5.14.tar.gz

  • Jenkins版本: Jenkins ver. 2.60.2

1、配置jdk

tar xvf jdk-8u131-linux-x64.tar.gz -C /usr/local
cd /usr/local
mv jdk-8u131-linux-x64.tar.gz jdk
su - tomcat
vim .bash_profile
    JAVA_HOME=/usr/local/jdk
    PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
    export PATH JAVA_HOME
source .bash_profile

2、安装Tomcat8

tar xvf apache-tomcat-8.5.14.tar.gz /usr/local
cd /usr/local
mv apache-tomcat-8.5.14 tomcat
#更改cacheMaxSize
vim /usr/local/tomcat/conf/context.xml 
    <Context>
        <Resources cachingAllowed="true" cacheMaxSize="100000" />
    </Context>
#更改Tomcat内存
vim /usr/local/tomcat/bin/catalina.sh
    JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx2048m -XX:MaxNewSize=256m"

3、部署Jenkins

cp jenkis.war /usr/local/tomcat/webapps

4、启动Tomcat

/usr/local/tomcat/bin/startup.sh