HOME
BLOG
TIME
FRIENDS
SAY TO ME
MOOD
TRAVELING
Zabbix监控体系结构
2020/08/23 3.2k 13 分钟 点击

综合架构监控服务概念说明

  • 对系统不间断实时监控
    • 实现报警通知邮件 /微信/短信/电话–手环(学员)
  • 实时反馈系统当前状态
  • 保证服务可靠性安全性
  • 保证业务持续稳定运行
    • 掌握架构服务的运行情况
    • 用于分析公司网站运行情况

综合架构服务器监控常用命令

CPU: top,htop
监控什么:

  • us : user state 用户态信息 40%
  • sy: system state 内核态信息 40% MySQL进程
  • id: idle 空闲状态 20%

内存: top,htop,free
监控什么:

  • 内存可用率:
  • swap空间使用情况

磁盘:df,iotop(检查磁盘io消耗)
监控什么:

  • 磁盘使用情况
  • 磁盘的IO消耗

网络: if,top
监控什么:

  • 网络带宽使用情况

进程: top,htop,ps
监控什么:

  • 占用内存情况tomcat (java)—内存占满(内存溢出)–服务出现僵死(重启服务)

占用CPU情况: MySQL
负载: w,top,uptime
监控什么:

  • 10分种负载 < CPU 内核数
  • 15分钟负载

还有一个上述命令都包含的命令glances
yum install glances -y

综合架构监控服务器编写脚本(shell,python)

  • 如何监控内存使用情况:
    • 正常使用情况:内存使用率高于80%
    • 异常使用情况:内存使用率低于20%发送报警
  • 如何监控服务运行状态:
    ps -ef | grep -C [n] ginx
    netstat - lntup I grep XXX
  • PS: tomcat 服务—僵死 模拟用户方法来进行监控*

综合架构监控服务体系结构:

  • 1)硬件监控 服务器路由器交换机防火墙(SNMP)
  • 2)系统监控 CPU内存磁盘网络进程TCP(十-种状态)
  • 3)服务监控 nginx php tomcat redis memcache mysq1
  • 4)网站监控 请求时间响应时间加载时间页面监控
  • 5)日志监控 ELK(收集存储分析展示) 日志易
    access — 用户源IP地址北京1000. 上海100 深圳500
  • 6)安全监控 Firewalld(4层和4层以上) WAF ( Nginx+lua) (应用层面)安全宝牛盾 云安全狗
  • 7)网络监控 smokeping 监控宝 站长工具 奇云测 多机房
  • 8)业务监控 (数据库信息)活动产生多少流量产生多少 注册量 带来多公价值

zabbix监控服务说明

zabbix软件结构组成

  • zabbix-server : 监控服务端
  • zabbix-agent : 监控客户端
  • zabbix-web : 监控网站服务
  • php: 处理动态请求
  • mysql : 数据库存储监控数据
  • zabbix-proxy : 负责收集agent信息汇总告知zabbix-server

zabbix软件安装部署过程

软件选择:4.0 LTS(long time support)出问题以后会有补丁,长期官方维护

zabbix服务端部署软件流程:

  • 第一步:下载安装zabbix yum源文件
    LTS long time support
  • 第二步:下载安装zabbix服务端相关软件
    zabbix服务程序软件: zabbix-server-mysql
    zabbix服务web软件: zabbix-web-mysql httpd php
    数据库服务软件: mariadb-server
    yum install -y zabbix-server-mysql zabbix-web-mysql httpd php mariadb-server
    如果报错让切换镜像,修改zabbixyum源
    [zabbix]
    name=Zabbix Official Repository - $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/
    enabled=1
    gpgcheck=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
    [zabbix-non-supported]
    name=Zabbix Official Repository non-supported - $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
    gpgcheck=0

接着继续下载会出现

错误:软件包:zabbix-server-mysql-4.0.23-1.el7.x86_64 (zabbix)
          需要:libiksemel.so.3()(64bit)
 您可以尝试添加 --skip-broken 选项来解决该问题
 您可以尝试执行:rpm -Va --nofiles --nodigest

这样的报错,下载依赖包

wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//iksemel-1.4-6.sdl7.x86_64.rpm
yum install -y iksemel-1.4-6.sdl7.x86_64.rpm

接着继续下载就可以了。

  • 第三步:修改软件配置
    vim /etc/zabbix/zabbix_server.conf
    DBPassword=zabbix
    vim /etc/httpd/conf.d/zabbix.conf
    php_value date.timezone Asia/Shanghai

  • 第四步:编写配置数据库服务
    systemctl start mariadb.service
    systemctl status mariadb.service
    创建zabbix数据库–zabbix
    mysql
    create database zabbix character set utf8 collate utf8_bin;
    创建数据库管理用户
    grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix' ;
    在zabbix数据库中导入相应的表信息
    zcat /usr/share/doc/zabbix-server-mysql-4.0.23/create.sql.gz | mysql -uzabbix -pzabbix zabbix

  • 第五步:启动zabbix程序相关服务
    数据库服务zabbix服务httpd服务
    systemctl start zabbix-server.service httpd mariadb.service
    systemctl enable zabbix-server.service httpd mariadb.service
    说明:至此zabbix-server命令行操作结束

  • 第六步:登录zabbix服务端web界面,进行初始化配置
    http://192.168.1.131/zabbix/setup.php

被监控端(agent端)

  • 第一步:配置yum源
    vim /etc/yum.repos.d/zabbix.repo

    [zabbix]
    name=Zabbix Official Repository - $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/
    enabled=1
    gpgcheck=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
    [zabbix-non-supported]
    name=Zabbix Official Repository non-supported - $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
    gpgcheck=0
  • 第二步:下载安装zabbix客户端软件
    yum install -y zabbix-agent

  • 第三步:编写zabbix客户端配置文件
    vim /etc/zabbix/zabbix_agentd.conf
    Server==172.16.1.71(zabbix服务器IP)

  • 第四步:启动zabbix-agent服务
    systemctl start zabbix-agent

实现zabbix默认第一台主机的监控

  • 第一步:配置—主机—创建主机(创建要监控的主机)
  • 第二步:配置监控的主机
    主机信息中:名称主机组监控的主机地址
    模板信息中:指定需要链接的模板信息
  • 第三步:保存退出,进行监控检查
    监测主机有没有变绿

实现zabbix自定义监控—监控项作用

需求:监控nginx服务是否启动

  • 在zabbix-agent进行配置文件编写
    • 第一步:编写自定义监控命令
      ps -ef I grep -C [n]ginx
    • 第二步:编写zabbix-agent配置文件
      第一种方法:直接修改zabbix-agent配置文件参数
      UserParameter=
      第二种方法:在zabbix_ agentd.d/ 目录中编写自定义监控文件
      vim web_server.conf
      UserParameter=键(变量名) ,值(变量信息)
      UserPar ameter=web_state,ps -ef I grep -C [n]ginx
    • 第三步:重启zabbix-agent服务
      systemctl restart zabbix-agent
  • 在zabbix-server网站页面进行配置
  • 在zabbix-server命令行进行操作
    • 第一步:检测自定义监控信息是否正确
      yum install -y zabbix-get
      zabbix_get -s 172 .16.1.7 -k 'web_state'
  • 在zabbix-server网站页面进行配置
    • 第一步:进入到创建监控项页面:
      配置—主机—选择相应主机的监控项
    • 第二步:监控项页面如何配置
      名称 键值 更新间隔时间 应用集
    • 第三步:检查是否收集到监控信息

复杂的自定义监控配置(多个服务状态)

  • 在zabbix-agent端编写配置文件
    vim server_state.conf
    UserParameter=server_state[*] ,netstat -lntup I grep -c $1
  • 在zabbix-server命令测试
    zabbix get -s 172.16.1.7 -k ‘server state [22]’
    3)修改配置页面
    键值:server_state[22]

实现zabbix报警功能—触发器/动作

报警方式:

  • 01.页面提示信息报警(值班运维)
  • 02.页面声音提示报警
  • 03.邮件信息报警
  • 04.微信功能报警
  • 05.短信报警/电话报警

页面提示和声音报警实践:

  • 第一步:创建触发器
    配置—主机—选择相应监控主机触发器—创建触发器
    设置好表达式
    {web01 :server state [nginx] .last()}<=2
    {监控主机名称:键值名称.调用的表达式函数}<=2
    表达式总结:

    • last() 收集到最新信息(数值)
    • max( ) 在一定周期内,收集到的最大值
    • min( ) 在一定周期内,收集到的最小值
    • diff () 在一定时间内,判断收集的信息是否不同
    • change() 在一定时间内,判断收集的信息是否不同
    • avg() 取一段时间的平均值
  • 第二步:修改网页配置,有提升声音报警
    小人头—正在发送消息—前端信息勾选
    PS:如何修改报警铃声:

    • 找到文件所在目录(在站点目录中找)
      find /usr/ share/zabbix -type f -name "alarm_disaster.mp3 "
    • 将原有声音文件做替换
      替换成指定声音文件
    • 需要清除浏览器缓存,进行测试

邮件信息报警

  • 第一步:创建触发器
    配置—主机—选择相应监控主机触发器—创建触发器
    设置好表达式
    {web01 :server_ state [nginx] .last()}<=2
    {监控主机名称:键值名称.调用的表达式函数}<=2
  • 第二步:修改动作配置
    配置—动作—将默认动作进行开启
  • 第三步:建立和163邮箱服务关系.
    管理—报警媒介类型—创建报警媒介
  • 第四步:定义接收报警的邮件地址
    小人头–报警媒介–设置收件人信息

微信报警

  • 第一步:需要注册企业微信,并进行配置
    我的企业:
    • 获取企业id: ww32d68104ab5f51b0
    • 获取企业二维码:允许员工加入
    • 管理工具:
      • 成员加入—进行审核通过
    • 应用小程序:
      • 进行创建
      • 收集程序信息
      • AgentId: 1000006
      • Secret: RvQYpaCjWbYMCcwhnPqg1ZYcEGB9c0QCvv1kn- ft6j4
  • 第二步:编写脚本(python)
    cat /etc/zabbix/zabbix-server.conf
    AlertScriptsPath=/usr/lib/zabbirs/alertscripts —放置告警脚本
    vim /usr/lib/zabbix/alertscripts/weixin.py
    #!/usr/bin/python
    #_*_coding:utf-8 _*_
    import urllib,urllib2
    import json
    import sys
    import simplejson
    reload(sys)
    sys.setdefaultencoding('utf-8')
    def gettoken(corpid,corpsecret):
      gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
    #    print  gettoken_url
      try:
          token_file = urllib2.urlopen(gettoken_url)
      except urllib2.HTTPError as e:
          print e.code
          print e.read().decode("utf8")
          sys.exit()
      token_data = token_file.read().decode('utf-8')
      token_json = json.loads(token_data)
      token_json.keys()
      token = token_json['access_token']
      return token
    def senddata(access_token,user,subject,content):
      send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
      send_values = {
          "touser":'YangYang',    #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
          "toparty":"yangyang",    #企业号中的部门id。
          "msgtype":"text", #消息类型。
          "agentid":"1000002",    #企业号中的应用id。
          "text":{
              "content":subject + '\n' + content
             },
          "safe":"0"
          }
    #    send_data = json.dumps(send_values, ensure_ascii=False)
      send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
      print(send_data)
      send_request = urllib2.Request(send_url, send_data)
      response = json.loads(urllib2.urlopen(send_request).read())
      print str(response)
    if __name__ == '__main__':
      user = str(sys.argv[1])     #zabbix传过来的第一个参数
      subject = str(sys.argv[2])  #zabbix传过来的第二个参数
      content = str(sys.argv[3])  #zabbix传过来的第三个参数
      corpid =  'wwda75fd7a23e92a0c'   #CorpID是企业号的标识
      corpsecret = 'BqsA8WAjp8fN1ZhcDBXat86fhs8Dpu3MQiqkf3OWTdE'  #corpsecretSecret是管理组凭证密钥
      accesstoken = gettoken(corpid,corpsecret)
      senddata(accesstoken,user,subject,content)

第三个步:修改添加报警媒介—定义了发微信配置

消息内容:

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

然后添加报警媒介:

选择脚本
脚本名称填写:weixin.py
脚本参数添加3个。
报警收件人:{ALERT.SENDTO},
报警标题:{ALERT.SUBJECT},
报警内容:{ALERT.MESSAGE},
添加完报警媒介类型后勾选启用。

然后在右上角对小人头那里点击一下:

  • 第四步:配置接收微信的人员

短信和电话报警:

利用第三方短信电话报警平台

  • 利用阿里大鱼(收费)

     https://yq.aliyun.com/articles/658524?spm=a2c4e.11155472.0.0.d821153fAjrH3q 
  • 利用onealert(睿象云)发送告警

  • 第一步: 配置报警平台

    • 配置–应用–选择zabbix报警
    • 配置–通知策略
    • 配置–分派策略

实现zabbix图形配置—图形

配置–主机–图形–(监控项)

zabbix各个功能总结

  • 监控项: 可以自定义监控收集主机的信息
  • 应用集: 将多个类似的监控项进行整合 便于查看检查
  • 模板: 将多个监控项 触发器 图形都配置在模板中, 方便多个监控的主机进行调用
  • 动作: 指定将报警信息发送给谁OK/定义报警的信息ok/定义报警的类型OK(邮件 微信 短信电话)
    PS: 宏信息定义方法: 
    https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location
  • 触发器: 可以实现报警提示(条件表达式),默认页面提示报警
  • 图形: 将多个图整合成一张,便于分析数据
  • 报警媒介: 定义报警的方式

企业工作遇见告警信息处理思路步骤:

  • 第一步:看到告警提示信息,定位主机信息
  • 第二步:看到主机信息之后,定位报警原因获得监控项Key值
  • 第三步:根据key值信息,最终获得报警原因
  • 至此:已经看到提示报警
Zabbix