Zabbix在性能、稳定性测试中的应用

一、概述

Zabbix是一款企业级运维监控系统,在运维领域已有广泛的应用。而本文,将主要考虑将其引入测试工作当中,对系统的整体及各服务进程的资源消耗进行实时监控,以期能够为性能测试分析、问题定位提供有效的数据支撑。当然,zabbix可以做的远不止这些,此处仅以测试领域为主场景进行介绍。
Zabbix架构由zabbix-server、数据库、web组件、zabbix-agent 四部分组成。其中zabbix-agent需要安装在被监控端,将数据采集后传给zabbix-server。Zabbix-server再将信息处理存储于数据库(一般是mysql)。web组件将数据展示给用户。

二、Zabbix服务端docker化部署

Zabbix服务端主要由zabbix-server、数据库、web组件三部分组成。为简化安装步骤,采用docker化部署。
docker官方仓库已有zabbix的相关镜像,如果环境可以连接互联网,那么直接执行以下命令即可,依次启动容器即可:

docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix" \
      -e MYSQL_ROOT_PASSWORD="zabbix" \
      -d mysql:5.7  \
--character-set-server=utf8 --collation-server=utf8_bin


docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix" \
      -e MYSQL_ROOT_PASSWORD="zabbix" \
      --link mysql-server:mysql \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest

docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix" \
      -e MYSQL_ROOT_PASSWORD="zabbix" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest

如果环境在内网,则可先将下载好的docker镜像导入内网环境,后续步骤同上。
参考上传docker镜像至内网服务器命令如下:

docker image load -i xxx.tar

至此,zabbix服务端就已安装好了。可以通过登录web页面 http://xx.xx.xx.xx
用户名密码:Admin/zabbix (xx.xx.xx.xx为你的虚拟机ip)

三、Zabbix agent 批量分发部署

Zabbix服务端只有一个,但zabbix-agent、及采集脚本需要下发至各个被监控节点。此处使用ansible来实现批量部署、配置agent。
自动部署相关文件git下载地址:
https://github.com/ZengHongfu/zabbix
将以上文件下载至zabbix-server所在虚拟机,如下图:

编辑hosts文件,配置好待监控的主机信息,如下:

[vm]
10.113.43.140   name=acmp_140   zabbix_server=10.113.14.243  ansible_ssh_pass=Admin
10.113.43.152   name=acmp_152   zabbix_server=10.113.14.243  ansible_ssh_pass=Admin

解释如下:
第一列:待监控的主机ip
第二列:待监控的主机名字
第三列:zabbix-server所在虚拟机IP
第四列:待监控的主机的后台密码
然后执行以下命令进行批量部署配置:

echo '' > /root/.ssh/known_hosts
ansible-playbook -i hosts send_zabbix_agent.yml

解释如下:
通过ansible-playbook执行编排好的任务,编排内容详情见send_zabbix_agent.yml文件,内容如下:

---
- hosts: vm
  remote_user: root
  tasks:
    - name: Create data directory
      file: path=/root/zabbix state=directory owner=root group=root

    - name: cp zabbix_ageent_rpm to host
      copy: src=./zabbix-agent-4.2.1-1.el7.x86_64.rpm dest=/root/zabbix/ owner=root group=root mode=0555

    - name: install zabbix-agent
      yum: name=/root/zabbix/zabbix-agent-4.2.1-1.el7.x86_64.rpm state=present

    - name: cp zabbix_base_script to host
      copy: src=./cloud.conf dest=/etc/zabbix/zabbix_agentd.d/ owner=root group=root mode=0644

    - name: cp zabbix_scripts to host
      copy: src=./scripts dest=/root/zabbix/ owner=root group=root mode=0555

    - name: midify_agent_config -->Server
      shell: sed -n '/^Server=/p' /etc/zabbix/zabbix_agentd.conf | xargs -i sed -i 's/^{}/Server={{zabbix_server}}/g' /etc/zabbix/zabbix_agentd.conf
    - name: midify_agent_config -->ServerActive
      shell: sed -n '/^ServerActive=/p' /etc/zabbix/zabbix_agentd.conf | xargs -i sed -i 's/^{}/ServerActive={{zabbix_server}}/g' /etc/zabbix/zabbix_agentd.conf
    - name: midify_agent_config -->Hostname
      shell: sed -n '/^Hostname=/p' /etc/zabbix/zabbix_agentd.conf | xargs -i sed -i 's/^{}/Hostname={{name}}/g' /etc/zabbix/zabbix_agentd.conf

    - name: open port 10050
      shell: iptables -A INPUT -p tcp --dport 10050 -j ACCEPT

    - name: restart zabbix-agent
      service: name=zabbix-agent state=restarted

    - name: set zabbix-agent start when boot
      shell: chkconfig zabbix-agent on

至此,zabbix-agent以及scripts目录下的脚本都已部署配置到了所有被监控主机。剩下的事就是在web页面使用zabbix了。

四、Zabbix使用指南

4.1 zabbix常用基本概念

我们用到的常见概念主要有模板、监控项、主机、触发器、聚合图形。此处仅对这几项进行简单介绍,想了解更多的内容,请移步官方文档:https://www.zabbix.com/documentation/4.0/zh/manual

4.1.1 zabbix模板

模板内包含多个监控项、触发器、应用(相当于监控项的分组)。通俗一点来讲,就是模板定义了它要去监控什么数据,以及对监控结果的响应措施。
当一个模版链接到一个主机后,主机会继承这个模版中的所有对象。简单而言,一组预先定义好的检查会被快速应用到主机上。
创建一个模板:
配置---->模板---->创建模板


在模板内创建一个应用集:
配置---->模板---->进入已有的模板的详情页---->应用集---->创建应用集

在模板内创建一个监控项:
配置---->模板---->进入已有的模板的详情页---->监控项---->创建监控项

4.1.2 zabbix监控项

最为核心的就是监控项,它定义了我们想要监控什么数据。
进入添加监控项页面,如下图:


设置完成,点击添加即可,如下图监控项已成功添加 :

4.1.3 zabbix触发器

Zabbix触发器也是非常重要的,作用就是定义告警条件,并检查监控项采集的数据,一旦满足条件,就触发告警(告警方式多样化:可zabbix检测页面告警,邮件告警,自定义方式告警等等)
现已上一节创建的监控项为例,假设当用户进程的CPU占用超过10%时,就触发告警。
在模板内创建一个触发器:
配置---->模板---->进入已有的模板的详情页---->触发器---->创建触发器
做如下配置即可:

4.1.4 主机

主机就是被监控对象。添加步骤如下:
配置---->主机---->创建主机
做如下配置即可:


接下来为主机关联模板

4.1.5聚合图形
我们使用聚合图形主要是将几个有关联的数据放在一起进行对比观察。如下步骤添加:
监测---->聚合图形---->创建聚合图形


点击新建的聚合图形的构造函数进行配置:


点击‘更改’在对应位置添加图形:

相同方式,共添加3个监控项如下:

至此,聚合图形添加完成,就可以通过聚合图形观察数据走势。
之后查看聚合图形:
监测---->聚合图形---->所有聚合图形列表---->点击查看某个聚合图形
效果如下:

4.2 zabbix扩展监控项的开发

Zabbix自带了许多常用(通用的,基础的)的监控项,但结合我们自己的平台,可能需要更多定制的监控项。所以需要扩展监控项。为了扩展脚本规范化,便于后期维护。可以将我们扩展的监控项的key统一为这样的格式:cloud.info[script-name,arg1,arg2,...]
例如:cloud.info[get_top,cpu,"/usr/bin/mongod"]
它是这样工作的:在zabbix agent端,存在如下配置:/etc/zabbix/zabbix_agentd.d/cloud.conf,内容如下:

UserParameter=cloud.info[*],/root/zabbix/scripts/cloud_zabbix.sh "$1" "$2" "$3" "$4"

也就是说,我们扩展的监控项(cloud.info)是在agent端调用脚本/root/zabbix/scripts/cloud_zabbix.sh来获取数据的,而脚本/root/zabbix/scripts/cloud_zabbix.sh再根据传入的参数(script-name)来调用其它脚本。 cloud_zabbix.sh内容如下:

#!/bin/bash

filepath=$(dirname "$0")

if [ $# -lt 2 ];then 
    echo "Invalid parameter! $*"
    exit 1
fi

filename=$1

if [ -f "${filepath}/${filename}.sh" ];then
    file="${filepath}/${filename}.sh"
elif [ -f "${filepath}/${filename}.py" ];then
    file="${filepath}/${filename}.py"
else
    exit 1
fi

shift

ps -aux | grep "$file $*" | grep -v "grep" >/dev/null 2>&1
if [ $? = 1 ]; then
    $file $*
else
    echo "The same command running!"
fi

现在以添加监控服务器的swap分区使用量为例,简述扩展监控项的开发步骤如下。
a、编写脚本get_free.sh,可通过传参获取到free的相关数据,下发至被监控端,如下:

#!/bin/bash
if [ "$1" == "Mem" ];then
    if [ "$2" == "used" ]; then
        res=$( free | awk 'NR==2{print $3/1024}' )
    else
        echo "Parameter error !"
    fi
elif [ "$1" == "Swap" ];then
    if [ "$2" == "used" ]; then
        res=$( free | awk 'NR==3{print $3/1024}' )
    else
        echo "Parameter error !"
    fi
else
    echo "Parameter error !"
fi
if [ $res ];then
    echo $res
fi

效果如下:


b、在zabbix上添加监控项 Swap used

4.3 其他注意事项

附:修改时区方法如下
在容器zabbix-web-nginx-mysql 内,
编辑 /etc/php7/conf.d/99-zabbix.ini 将 data.timezone=Asia/Shanghai

#cat /etc/php7/conf.d/99-zabbix.ini
max_execution_time=600
memory_limit=128M
post_max_size=16M
upload_max_filesize=2M
max_input_time=300
; always_populate_raw_post_data=-1
max_input_vars=10000
; date.timezone=Europe/Riga
date.timezone=Asia/Shanghai    //修改此处的
; session.save_path=/var/lib/php7

由于修改此配置重启容器之后,修改的内容会被还原,所以直接使用kill 了php-fpm7的进程杀掉
由于容器中有supervisord管理php-fpm kill掉fpm主进程很快也会被重启此时发现zabbix的页面时间已经和系统时间一致

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容