zabbix部署实践

简单的说明

背景

在开发测试容器云环境中,常常出现节点磁盘占满,IO过高,节点连接数过多的情况,一般是节点出现里问题如故障/离线,节点使用人员采取去处理,极大影响了开发测试效率。鉴于此讨论了监控届知名的zabbix部署的可行性。

目的

  1. 每一个版本的开发迭代,需要重置虚拟机,需要部署简单快捷
  2. zabbix组件(包含依赖包)避免影响现有软件运行依赖版本,非侵占
  3. 自定义告警规则及通知方式

解决方法

  1. 现有的zabbix部署方式有三种:源码部署,package部署,容器部署。为满足目的1&2点,这里采用docker安装,极大减少了工作量及部署过程中的各种异常
  2. zabbix可以通过脚本方式自定义告警规则
  3. zabbix常见的告警媒介有:电子邮件,短信,脚本等。其中脚本方式极大提高了通知方式的灵活性,例如微信通知,webhook通知等

实施

部署

Zabbix 系统由以下各种独立的模组组成。

  • Zabbix Server:核心组件,负责获取agent数据,触发报警并发送告警给用户
  • Web Frontend:web展示
  • Database Storage:与server及web frontend交互,存储配置及监控数据
  • Zabbix Agent:部署在被监控的对象上,收集本地信息并发送到server
  • Zabbix Proxy (非必要):从一个或多个agent获取监控数据再发送消息给zabbix server,减轻了单zabbix server的工作负载

在本地监控主机数量不多的情况下,我们采用不含proxy的简易方式部署docker集群(部署方式

  1. zabbix-appliance部署链接
docker run --name some-zabbix-appliance -p 80:80 -p 10051:10051 -d zabbix/zabbix-appliance:tag

zabbix appliance内置MySQL数据库,zabbix web

  1. zabbix-agent
    使用k8s编排以daemonset部署到集群每个节点
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    daemonset: zabbix-agent
  name: zabbix-agent
spec:
  selector:
    matchLabels:
      daemonset: zabbix-agent
  template:
    metadata:
      labels:
        daemonset: zabbix-agent
    spec:
      containers:
      - name: zabbix-agent
        env:
        - name: ZBX_HOSTNAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: ZBX_SERVER_HOST
          value: "192.168.131.29"  # server地址
        image: zabbix/zabbix-agent:alpine-4.0.10
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 10050 #使用hostport方式暴露地址
          hostPort: 10050
        resources:
          limits:
            cpu: 100m
            memory: 300Mi
          requests:
            cpu: 100m
            memory: 100Mi
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      serviceAccountName: psp-privileged # serviceAccount保证pod对宿主机的有访问权限

zabbix web登陆账户/密码默认为Admin/zabbix

zabbix配置

添加告警媒介

这里我们使用里脚本类型的告警媒介,好处是自定义告警方式,脚本使用比较灵活,可以定制化自身需求。

  1. 上传脚本
    登陆zabbix server,zabbix默认会从路径(/usr/lib/zabbix/alertscripts/)读取脚本文件; 同时我们必须未该脚本赋予可执行权限
cd /usr/lib/zabbix/alertscripts/
chmod +x zabbix_webhook.py

脚本样例:

#!/usr/bin/python
import json
import urllib2
import sys
import re

# 指定alarmWebsite,供定位使用
alarmWebsite = "https://alert-system.com/alerts/1234"
webhook = “https://hooks.slack.com/services/****”

notifications = {"Not classified": ":go:",
                 "Information": ":conga_parrot:",
                 "Warning": ":doge:",
                 "Average": ":trollface:",
                 "High": ":ghost:",
                 "Disaster": ":smjy:"}

def get_data(subject, message, alarmLevle):
    data = {"username": "Zabbix %s Info" %alarmLevle,
            "text": "%s\n%s\n<%s|Click here> for details!" %(subject, message, alarmWebsite),
            "icon_emoji": notifications[alarmLevle]}
    return data

if __name__ == '__main__':
    alarmSubject = sys.argv[1] #{ALERT.SUBJECT}
    alarmMessage = sys.argv[2] #{ALERT.MESSAGE}
    pattern = re.compile(r'Severity: (.*?)\s')
    alarmLevle = pattern.findall(alarmMessage)[0].strip()  
    message = get_data(alarmSubject, alarmMessage, alarmLevle)

    req = urllib2.Request(webhook)
    req.add_header('Content-Type', 'application/json')

    response = urllib2.urlopen(req, json.dumps(message))
  1. 创建报警媒介
    在"管理"-->"报警媒介类型"-->"创建媒体类型"中,填入我们的脚本信息。目前脚本信参数支持三种
参数 描述
{ALERT.MESSAGE} 'Default message' value from action configuration.
{ALERT.SENDTO} 'Send to' value from user media configuration.
{ALERT.SUBJECT} 'Default subject' value from action configuration.

除上述三个“宏”,zabbix还支持其他“宏”参数,请查看zabbix官方在线帮助手册(zaabbix宏列表

  1. 测试脚本
    通过zabbix脚本测试功能,自动触发告警,查看脚本是否可执行


  2. 关联用户
    如果想让某个zabbix用户接收到从告警媒介发送过来的报警信息,那么需要把用户和对应的告警媒介关联起来
    在"管理"-->"用户"中,以Admin为例



    在报警媒介中添加新的报警媒介,根据需求个性化配置告警信息



    点击“添加”后,确认无误后点击“更新”。此时如果有报警发生,报警通过告警媒介发送到admin用户。
  3. 启用告警通知
    在"配置"-->"动作"中,启用默认的告警动作,或者新建动作


  4. (可选)告警内容定制
    步骤5中的告警时系统默认的,如果想定制化告警通知信息,可以编辑告警信息/告警恢复信息/告警更新信息等模版


    相关参数可以通过zaabbix宏列表获取

添加主机

通过与被监控主机上的zabbix agent建立通信,将主角纳入监控范围。

  1. 在"配置"-->"主机"中,添加主机信息


  1. 填入相关信息,群组可以使用新创建的或者使用现有系统预置分组。agent代理程序的接口就是主机IP+agent开放端口(默认10050)


  2. 添加模版,这里选择里基本的linux监控模版,也可以自定义其他监控模版


  3. 添加监控模版,最后添加主机完成


  4. 当可用性ZBX绿色时表示添加成功


讨论

自动发现

当环境中有很多主机时,配置主机自动发现代替手动添加主机,极大减轻工作量。该方式时zabbix server主动发起,定时扫描网络中指定范围的IP设备,如果某一设备上有zabbix agent服务,那么该IP设备就会加入到监控范围内

  1. 创建自动发现规则
    在"配置"-->"自动发现"中,选择Local network或创建自动发现规则。依次:
    填写监控IP地址范围,监控间隔,检查规则(这里选择zabbix,键值system.uname)


  2. 查看自动发现主机
    发现主机成功后,在"监控中"-->"自动发现"中会出现发现到的主机


一般在zabbix部署时,批量添加主机时使用主机发现功能,添加完毕后可以关闭该功能。

与prometheus区别

zabbix是一个功能丰富,开箱即用的传统监控软件。软件部署快捷,简单,但是不满足需要特殊定制化的场景。
Prometheus不能开箱即用,需要配合使用其他软件,如Alert Manager。Prometheus具有很强的灵活性和扩展性,可以满足不同场景的特殊定制需求。

Zabbix Prometheus
安装 部署简单,通过GUI配置 手动修改配置文件
软件详情 内核使用C编写,web GUI使用PHP编写,存储数据在关系型数据库中 使用go编写,自身集成非关系型数据库,由于数据库是专门为存储监控数据而设计的,因此其性能通常更快。
监控内容 缺乏实时报告及高级报告模版 支持定制化模版,通过Alert Manager实现实时监控
监控数据可视化 强大 简单,但是可以集成专业的可视化工具Grafana
性能 适合10000节点的中小型网络 大型网络中表现快速稳定
监控范围 物理主机,虚拟机,交换机等硬件设备 更适用于 Cloud, SaaS, Openstack,Container 监控

参考
Zabbix vs Prometheus
Prometheus实战

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

推荐阅读更多精彩内容

  • Zabbix简介 Zabbix官方网站Zabbix中文文档 本文系统环境是CentOS7x86_64, Zabbi...
    Zhang21阅读 7,968评论 0 37
  • 一、什么是zabbix及优缺点(对比cacti和nagios) Zabbix能监视各种网络参数,保证服务器系统的安...
    WickJohn阅读 1,762评论 0 0
  • 1. Zabbix 介绍 1.1 概述 zabbix 是 Alexei Vladishev 创建, 目前由其成立的...
    fangfc阅读 1,178评论 0 3
  • 1、搭建zabbix服务,实现监控linux和windows的内存,cpu,磁盘,网络等基础指标 zabbix部署...
    请叫我飘哥阅读 3,274评论 0 5
  • 当情花还开在校园的时候,那时我们根本不知情花为何物,但就那样在心底盛开了,让我毫无察觉。 那是一个和我同龄的女孩,...
    醉卧浮城阅读 465评论 0 1