zoukankan      html  css  js  c++  java
  • zabbix功能应用

    一、zabbix简介

    1、zabbix概述

    • zabbix:是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,能够监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
    • 本文中安装使用的是 version版本使用3.0,应用环境是centos7.0系统,实际应用中要使用长期维护版本LTS;

    2、特性:

    • 数据采样支持协议:SNMP,agent,ipmi,jmx;
    • 报警机制:步进升级通知不同的管理人员
    • 数据存储:使用mysql/pgsql
    • 展示:php程序
      实时绘图:graph,screen,slide show,map
    • 支持监控模板
    • 网络自动发现
    • 分布式监控
    • API:支持二次开发

    3、zabbix架构

    监控方式有两种:

    • 主动方式:被监控端主动发送状态信息
    • 被动方式:被监控端监听一个端口,监控端发送监控请求,被监控端发送状态信息

    实际应用中,被监控的主机,可以根据功能编成一个组便于监控管理

     
    zabbix程序组件

    4、zabbix程序组件

    zabbix_server服务器端守护进程
    zabbix_agentd :agent守护进程
    zabbix_proxy:代理服务器,可选
    zabbix_database:存储系统 MySQl、pgsql
    zabbix_web: web gui 网页接口
    zabbix_get:命令行工具,测试向agent端发起数据数据采集请求
    zabbix_sender: 命令行工具,测试向server端发送数据
    zabbix_java_gatway:java网关

     
    zabbix逻辑组件

    zabbix逻辑组件:
    主机组(host groups)
    主机 (hosts)
    应用(application)
    监控器(items)
    触发器(triggers)
    事件(events)
    动作(actions):条件(conditions)和操作(operations)
    媒介(media):发送通知的通道
    通知(notifications)
    远程命令(remote command)
    报警升级(escalation)
    模板(template)
    图形(graph)
    屏幕(screens)
    幻灯(slideshow)

    二、 zabbix的安装

    通常在生产环境中zabbix的服务应该分开安装在各个服务器中;

    1、环境准备

    第一步、安装数据库mariadb
     [root@zabbix-12 ~]# yum -y install mariadb-server -y
     [root@zabbix-12 ~]# vim /etc/my.cnf
    [mysqld]
    skip_name_resolve = ON
    innodb_file_per_table = ON
    [root@zabbix-12 ~]# systemctl start mariadb.service
    [root@zabbix-12 ~]# systemctl enable mariadb.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
    [root@zabbix-12 ~]# ss -tnl
    State      Recv-Q Send-Q       Local Address:Port                      Peer Address:Port              
    LISTEN     0      128                      *:22                                   *:*                  
    LISTEN     0      100              127.0.0.1:25                                   *:*                  
    LISTEN     0      50                       *:3306                                 *:*         
    
    如果出现,登录mysql错误代码1045
    [root@zabbix-12 ~]# vim /etc/my.cnf
    [mysqld]
    skip-grant-tables   #执行完安全设定把它删掉
    执行mysql的安全设定
    [root@zabbix-12 ~] mysql_secure_installation
    
     [root@zabbix-12 ~]# mysql -uroot -p
    Enter password:
    MariaDB [(none)]> CREATE DATABASE zabbix CHARSET 'utf8';
    Query OK, 1 row affected (0.00 sec)#创建zabbix数据库
    MariaDB [(none)]> GRANT ALL ON zabbix.* TO 'zbxuser'@'192.168.%.%' IDENTIFIED BY 'zbxpass';
    Query OK, 0 rows affected (0.00 sec)#远程用户授权
    MariaDB [(none)]> GRANT ALL ON zabbix.* TO 'zbxuser'@'127.0.0.1' IDENTIFIED BY 'zbxpass';
    Query OK, 0 rows affected (0.00 sec)#本地用户授权
    MariaDB [(none)]> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)#刷新同步
    
    第二步、server服务器端安装
    • server端的源码安装:
    [root
    • server端的yum安装:
    #安装zabbix仓库源
    [root@zabbix-12 ~]#  yum install http://120.52.51.14/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm -y
    [root@zabbix-12 ~]#   yum clean all
    [root@zabbix-12 ~]# wget http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-server-mysql-3.0.2-1.el7.x86_64.rpm#下载
    [root@zabbix-12 ~]# wget http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.2-1.el7.x86_64.rpm#下载
    [root@zabbix-12 ~]#yum install zabbix-server-mysql-3.0.2-1.el7.x86_64.rpm zabbix-agent-3.0.2-1.el7.x86_64.rpm
    

    第三步、导入数据库结构

    [root@zabbix-12 ~]# cd /usr/share/doc/zabbix-server-mysql-3.0.2/
    [root@zabbix-12 zabbix-server-mysql-3.0.2]# ls
    AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README
    [root@zabbix-12 zabbix-server-mysql-3.0.2]# gzip -d create.sql.gz解压缩
    [root@zabbix-12 ~]# mysql -uzbxuser -h127.0.0.1 -pzbxpass zabbix  < /usr/share/doc/zabbix-server-mysql-3.0.2/create.sql #导入数据库结构
    [root@zabbix-12 ~]# mysql -uzbxuser -h127.0.0.1 -pzbxpass
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 8
    Server version: 5.5.60-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> use zabbix;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [zabbix]> SHOW TABLES;   查询导入的表
    +----------------------------+
    | Tables_in_zabbix           |
    +----------------------------+
    | acknowledges               |
    | actions                    |
    | alerts                     |
    | application_discovery      |
    | application_prototype      |
    | application_template       |
    | applications               |
    | auditlog                   |
    

    注意:zabbix2*版本的sql要按顺序导入三个

    第四步、配置文件

    • 程序环境:
      配置文件: /etc/zabbix/zabbix_server.conf
      unit file: zabbix-server.service
    [root@zabbix-12 ~]# cd /etc/zabbix/
    [root@zabbix-12 zabbix]# ls
    zabbix_server.conf
    [root@zabbix-12 zabbix]# cp zabbix_server.conf{,.bak}   备份配置文件
    [root@zabbix-12 zabbix]# ls
    zabbix_server.conf  zabbix_server.conf.bak
    [root@zabbix-12 zabbix]# grep "^####" zabbix_server.conf   查找配置文件配置段
    
    ############ GENERAL PARAMETERS #################  通用参数
    ############ ADVANCED PARAMETERS ################ 高级参数
    ####### LOADABLE MODULES #######                  可装载模块
    ####### TLS-RELATED PARAMETERS #######              通信相关,可设置ssl加密
    
    通用配置参数:
    ListenPort=10051  监听端口
    SourceIP=        源ip,允许那个ip监听
    LogType=file      日志类型,默认存到文件
    LogFile=/var/log/zabbix/zabbix_server.log  日志存储目录
    LogFileSize=0      禁止滚动存储
    DebugLevel=3     日志详细级别 默认为3正常级别
    
    DBHost=192.168.1.12  授权数据库主机
    DBName=zabbix    授权数据库名字
    DBUser=zbxuser   授权数据库用户
    DBPassword=zbxpass  授权用户密码
    DBPort=3306        数据库默认端口
    DBSocket=/var/lib/mysql/mysql.sock  程序接口位置
    
     
    mysql程序接口位置
     
    注意版本问题
    [root@zabbix-12 zabbix]# systemctl restart zabbix-server.service #启动zabbix服务
    

    第五步、zabbix web安装

    搭建一个lamp环境

    1)[root@zabbix-12 ~]# yum install httpd php php-mysql php-mbsting php-gd php-bcmath php-ldap php-xml -y
    
    (2)下载安装包
    
    [root@zabbix-12 ~]# wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-web-mysql-3.0.2-1.el7.noarch.rpm
    
    [root@zabbix-12 ~]# wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-web-3.0.2-1.el7.noarch.rpm
    
    (3)安装web gui
    
    [root@zabbix-12 ~]# yum -y install zabbix-web-mysql-3.0.2-1.el7.noarch.rpm zabbix-web-3.0.2-1.el7.noarch.rpm
    
    (4)配置php时区参数
    
      方法一:编辑php.ini
    
      方法二:[root@zabbix-12 ~]# vim /etc/httpd/conf.d/zabbix.conf
    
    ....................
    
     php_value date.timezone Asia/shanghai
    
    ....................
    
     (5)启动web
    
    [root@zabbix-12 ~]# systemctl start httpd
    
    [root@zabbix-12 ~]# ss -tnl
    
    State Recv-Q Send-Q Local Address:Port Peer Address:Port             
    
    LISTEN 0 128 *:22 *:*                 
    
    LISTEN 0 100       127.0.0.1:25 *:*                 
    
    LISTEN 0 50 *:3306 *:*                 
    
    LISTEN 0 128 :::80                         :::*
    
     
    测试浏览
     
    数据库相关信息
     
    可选操作
     
    生成的配置文件

    安装后生成的配置文件:/etc/zabbix/web/zabbix.conf.php

    登录管理员:

    admin/zabbix(建议修改,不用默认)

     
    主界面

    (6)主菜单

    Monitoring监控
    Inventory主机列表
    Reports报告
    Configuration 设置
    Administration 管理

    第六步、zabbix配置被监控主机

    1、下载安装
     [root@zabbix-12 ~]# wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.2-1.el7.x86_64.rpm 
    [root@zabbix-12 ~]# wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-sender-3.0.2-1.el7.x86_64.rpm 
    [root@zabbix-12 ~]# yum -y install zabbix-sender-3.0.2-1.el7.x86_64.rpm zabbix-agent-3.0.2-1.el7.x86_64.rpm
    2、程序环境
    配置文件:/etc/zabbix/zabbix_agentd.conf
    unit file: zabbix-agent.service
    3、配置
    [root@httpd1-73 zabbix]# grep -i "^####" zabbix_agentd.conf 
    ############ GENERAL PARAMETERS #################
    ##### Passive checks related  被动监控相关配置
    ##### Active checks related   主动监控相关配置
    ############ ADVANCED PARAMETERS #################
    ####### USER-DEFINED MONITORED PARAMETERS ####### 用户自定义的监控参数,使用UserParamter
    ####### LOADABLE MODULES #######
    ####### TLS-RELATED PARAMETERS #######
    其中:
    ##### Passive checks related  被动监控相关配置
    
    server=IP1,IP2,.....  允许那台主机采样
    ListenPort=10050   监听端口
    ListenIP=0.0.0.0     监听本机所有可用地址
    StartAgents=3       响应预先发送的进程数量
    
    ##### Active checks related   主动监控相关配置
    ServerActive=IP1,IP2  主动报告到主机的ip
    Hostname=Zabbix server   被监控主机名
    [root@httpd1-73 zabbix]# systemctl start zabbix-agent #启动代理服务
    [root@httpd1-73 zabbix]# ss -tnl
    State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port                        
    LISTEN     0      128                         :::10050                          
    

    三、监控项配置

    1、监控项配置流程

    • 先添加host主机组--》host主机---》applications应用--》item监控项-->trggers(evens)触发(事件)-->action(condtions,operations)动作(状况、操作)
    • 其中oprerations操作:remote通知、 command传递命令、alert报警

    2、展示图表定义:

    item监控项,可以定义一个simple graph图表(里面只有一个监控项形成的图表)
    多个items监控项可以定义一个graph图表(里面有多个监控项形成的图表)
    多个graphs可以定义一个screen屏幕(里面有多个图表形成的一个集合屏幕)
    多个screens可以定义一个slide show幻灯片(周期性播放多个屏幕)

    3、快速配置一个监控项

    先用命令测试监控项

    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.cpu.switches"
    509479   #获取被监控主机cpu上下文
    
    • (1)、添加主机组和主机
     
    创建主机组
     
    设置
     
    添加完成
    • (2)、添加监控项
      监控数据类型:监控原数据、监控变化数据、监控变化数据速率
     
    选择被监控主机
     
    点击创建监控项
     
    设置监控项
     
    在监控菜单中查看此监控项的最新数据

    4、item key

    • 功能:代替监控主机在被监控主机执行命令
    • item key 有两类:zabbix內建 key 的和自定义 key
    • 监控模式有:
      • zabbix_agent 被动监控模式
      • zabbix_agent activ 主动监控模式
    (1)zabbix內建的key
     
    zabbix內建的key里面 带中括号可以传递参数,可选的;带尖括号的是必选的
     
    示例

    对应key手动测试

    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "net.if.in[ens33,packets]"
    3569  #获取被监控主机网卡流入报文数量
    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "net.if.in[ens33,bytes]"
    297837  #获取被监控主机网卡流入字节数
    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "net.if.out[ens33,bytes]"
    294036 #获取被监控主机网卡流出字节数
    
     
    克隆方式创建item
     
    克隆方式的item,方便快捷
    (2)用户自定义key(UserParamter)

    采集到的数据类型
    数值:整数浮点数
    字符型:字符串、text、log
    储存值:
    AS is:不对数据做任何处理,存储采集到的数据本身;
    Delta(simple change): 本次采样的数据减去前一次采样的数据;
    Delta(speed per second):本次采样的数据减去前一次采样的数据,再除以经过的时长;速率数据;

    5、定义触发器Triggers

    状态转换:

    正常ok----》问题-problem
    问题-problem--》正常ok

    逻辑表达式,阈值,通常用于定义数据的不合理区间;条件满足时,true,表示problem状态,反之,则ok状态
    基本触发器表达式格式:
    {<server>:<key>.<functon>(<prrameter>)}<operator><constant>
    触发器之间的依赖关系

     
    创建触发器
     
    选择被监控主机
     
    定义参数和阈值
     
    触发器生成对应语句,seventy是报告等级左边最低
     
    当前状态

    6、媒介类型(Media Types)

    媒介是报警信息的传递方式:

    • 类型:
      email:邮件,需要定义发件人邮箱地址和SMTP服务
      script:自定义脚本,此脚本有发送信息至相关用户的功能
      SMS,JABBER,EZ TEXTING 只有北美由此服务

    • 接受通知信息者为zabbix的用户:需要用户定义对应各种媒介通道的接收方式:localmail本地邮件、script脚本


       
      邮件媒介设置
     
    设置邮件收件箱

    7、定义动作action

    • conditions:触发此动作的条件,一般通过“事件”触发
    • operations:触发条件满足时要采用的动作
    • send message:发报警信息给关联的用户;
      (1) 可传递方式: email邮件方式和script 报警脚本方式
      (2)script 报警脚本位于server主机的AlerScriptPath参数定义的目录下,默认为/usr/lib/zabbix/alertscripts
      zabbix 调用脚本时会向其传递参数,3.0之前的版本通过
                     $1:消息接收人
                     $2:消息主题
                     $3:消息主体
       3.x之后的版本,此三个参数默认不再传递,需自行定义;
                      {ALTET.SENDTO}
                      {ALTET.SUBJECT}
                      {ALERT.MESSAGE}
      

    注意:每个信息接收人相对于此媒介来说,得配置相应的接收地址;

    [root@zabbix-12 ~]# vim /usr/lib/zabbix/alertscripts/sendmail.sh  #定义一个邮件脚本
    
    #!/bin/bash
    #
    contact=$1     #收件人
    subject="$2"    #消息主题
    body="$3"  #消息主体
    
    echo "$body" | mail -s "$subject" "$contact"
    [root@zabbix-12 ~]# systemctl restart zabbix-server
    
     
    使用邮件脚本
     
    设置收件地址
     
    添加媒介
     
    此用户有两个接收邮件途径

    remote command远程命令

    功能:无人工介入处理
    在agent所在的主机上运行用户指定的命令或脚本来尝试着恢复故障:例如重启服务,任何用户自定义的脚本

    类型ipmi
    custom script
    ssh
    Telnet
    global script

    其中custom script实现的前提:
    (1)在agent端配置:

    编辑/etc/sudoers文件,添加
            zabbix ALL=(ALL)NOPASSWD:ALL
    注释如下行:Defaults requiretty
    

    (2)agent进程要允许执行远程命令,编辑/etc/zabbix-agentd.conf文件,设置EnableRemoteCommands=1
    (3)重启zabbix-agent生效

     
    创建动作
     
    添加一个触发器
     
    选择ssh方式执行命令
     
    设置第二步执行重启命令
     
    设置第三步发送邮件到本地用户邮箱

    示例:定义监听web服务器80端口,当80端口监控不到时,重启被监控主机的httpd服务

     
    选择主机并设置监控项,设置监控端口
     
    创建触发器
     
    添加监控项
     
    设置触发值
     
    定义触发等级
     
    创建一个动作
     
    设置邮件格式
     
    添加触发条件
     
    第一步执行重启命令
     
    第二步发送邮件

    当被监控服务器httpd服务停止时候,启动触发器

     
    触发器被启动
     
    而后生成一个事件

    8、定义图表Graphs

     
    在主机中选择图表
     
    创建图表
     
    设置图表样式、数值类型、大小等
     
    添加一个监控项
     
    预览创建图表

    9、screen屏幕

    当创建多个graphs 就可以组建一个screen

     
    创建屏幕
     
    定义屏幕
     
    选择被监控的主机
     
    点击编辑
     
    添加图表
     
    生成一个屏幕

    10、幻灯片slideshow

     
    创建幻灯片
     
    设置每屏轮换时间并添加屏幕
     
    生成幻灯片

    四、配置模板

    • 模板:主机配置模板,可连接至主机,从而实现主机的快速监控配置
    • 模板特性:可继承、在模板之上link其他模板即可使用。

    1、创建自定义模板

     
    创建自定义模板
     
    定义模板
     
    生成一个test模板
     
    分别设置应用、事件等

    2、模板的使用

    (1)添加主机host

     
    添加主机host

    (2)选择模板

     
    选择模板

    模板的导入和导出

     
    生成监控

    (3)模板的继承

     
    模板的继承
     
    模板被继承

    (4)从主机上删除模板
    UNlink:反连接
    UNlink and clear:反链接并清除数据

     
    模板的删除

    (5)模板可以导出,也可以从指定的文件导入

    五、宏:MACRO

    功能:预设的文本替换模式;

    1、宏的级别:
    • 全局宏;Administraton-->General-->Macros
    • 模板宏;Configuration-->Templates-->Template-->Macros
    • 主机宏;先被查找,优先级最高Configuration-->Hosts--->HOST--->Macros


       
      全局宏使用

       
      模板宏使用
     
    主机宏使用
     
    宏在item中的使用

    2、宏的类型:

    內建:{MACRO_NAME}
    自定义:{MACRO_NAME }要加
    命名方式:大写字母、数字和下划线

    六、网络发现

    功能:zabbix server扫描指定网络范围内的主机
    1、发现方式;ip地址范围
    2、可用服务探测(ftp、ssh、http)
    zabbix_agentd的响应对某个key的请求;
    snmp_agent响应;
    一旦发现某主机,就不会产生发现事件
    3、事件有8类: 分别是 host、service的up、down、discovered、lost的组合;例如:hostup、hostdown
    4、发现操作分两步:

    discover发现阶段
    actions:动作阶段
    conditions条件:发现主机
    operations操作:添加主机
    可采取的动作:
    send message发送邮件,remote command传送命令
    add/remove host 添加或删除主机
    enable/disable host 使用或不使用主机
    link template to host 对主机使用模板

     
    创建网络发现
     
    设置网络发现规则
     
    生成网络发现
     
    选择网络发现,创建一个动作
     
    定义发现主机
     
    添加监控模板
     
    生成一个网络发现动作
     
    测试
     
    测试

    七、zabbix的自定义key

    自定义key:在zabbix agent端的配置文件中由用户通过UserParameter指令
    定义用户自定义参数;

    格式 UserParamter=<key>,<command>
         UserParamter=<key>,<*>, <command>$1......$9
    注意:类似awk命令自带$1...$9,需要改写为$$1.$$2.......$$9:
    

    1、获取被监控主机内存空闲值示例

    在被监控主机上

    [root@httpd1-73 ~]# vim /etc/zabbix/zabbix_agentd.conf
    ### Option: UserParameter
    UserParameter=system.memory.free,awk '/^MemFree/{print $2}' /proc/meminfo获取内存空闲值
    [root@httpd1-73 ~]# systemctl restart zabbix-agent.service
    
    在监控主机上测试
    [root@zabbix-12 ~]# systemctl start httpd
     [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.free"
    742672
    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.free"
    742704
    
     
    image.png
     
    image.png

    2、获取被监控主机内存数值示例

    在被监控主机上
    [root@httpd1-73 ~]# vim /etc/zabbix/zabbix_agentd.conf
    ### Option: UserParameter
    UserParameter=system.memory.usage[*],awk '/^$1/{print $$2}' /proc/meminfo传递内存数值[root@httpd1-73 ~]# systemctl restart zabbix-agent.service
    
    在监控主机上测试
    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.usage[MemFree]"  #空闲内存空间
    741408
    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.usage[MemTotal]" #内存总量
    999696
    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "system.memory.usage[MemAvailable]"#可用内存空间
    728700
    
    还可以传递其他参数。
    

    3、读取被监控主机nginx状态示例

    被监控主机上
    安装nginx
    编辑配置文件
    [root@httpd1-73]# vim /etc/ nginx/nginx.conf
    server {
    .................
    location /ngxstatus {
                 stub_status;
              }  #编辑状态信息
    ...................
    [root@httpd1-73 ~]# systemctl start nginx  #启动nginx
    [root@httpd1-73 ~]# curl 192.168.1.73/ngxstatus #获取状态信息
    Active connections: 1 
    server accepts handled requests
     7 7 4 
    Reading: 0 Writing: 1 Waiting: 0
    [root@httpd1-73 ~]# vim /etc/zabbix/zabbix_agentd.conf
    UserParameter=nginx.status.active,curl http://localhost/ngxstatus | awk '/^Active/{print $3}' #自定义获取active的key
    [root@httpd1-73 ~]# systemctl restatt zabbix-agent
    
    
    在监控主机上测试
    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "nginx.status.active"
    1
    

    4、编写监控nginx状态的key脚本示例

    在被监控主机上:
    [root@httpd1-73 ~]# vim /usr/bin/ngxstatus.sh编写脚本
    #!/bin/bash
    #
    host='127.0.0.1'
    port='80'
    statusurl='/ngxstatus'
    active() {
             curl -s http://${host}:${port}${statusurl} | awk '/^Active/{print $3}'
            }
    accepts() {
             curl -s http://${host}:${port}${statusurl} | awk 'NR==3{print $1}'
    }
    handled() {
             curl -s http://${host}:${port}${statusurl} | awk 'NR==3{print $2}'
    }
    requests() {
             curl -s http://${host}:${port}${statusurl} | awk 'NR==3{print $3}'
    }
    reading() {
             curl -s http://${host}:${port}${statusurl} | awk 'NR==4{print $2}'
    }
    
    writing() {
             curl -s http://${host}:${port}${statusurl} | awk 'NR==4{print $4}'
    }
    
    waiting() {
             curl -s http://${host}:${port}${statusurl} | awk 'NR==4{print $6}'
    }
    
    $1
    [root@httpd1-73 ~]# ngxstatus.sh accepts   #bash测试
    139
    [root@httpd1-73 ~]# ngxstatus.sh active
    1
    [root@httpd1-73 ~]# ngxstatus.sh waiting
    0
    [root@httpd1-73 ~]# ngxstatus.sh reading
    0
    [root@httpd1-73 ~]# ngxstatus.sh handled
    145
    [root@httpd1-73 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑
    .................
    UserParameter=nginx.status[*],/usr/bin/ngxstatus.sh $1  #[*]接受多个参数
    在监控主机上测试:
    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "nginx.status[active]"
    1
    [root@zabbix-12 ~]# zabbix_get -s 192.168.1.73 -k "nginx.status[accepts]"
    170
    
     
    创建对应脚本的监控项
     
    生成监控项
     
    生成图表

    5、编写监控PHP状态的key脚本示例

    安装php-fpm
    编辑配置文件

    [root@httpd1-73 ~]# vim /etc/php-fpm.d/www.conf
    pm.status_path = /fpmstatus
    ping.path = /ping
    ping.response = pong
    [root@httpd1-73 ~]# systemctl start php-fpm  #启动php
    
    因为php是fastCGI协议,监控获取信息必须由nginx反代即可
    所以编辑nginx配置文件:
    [root@httpd1-73 ~]# vim /etc/nginx/nginx.conf
    server {
    .............
            location ~* ^/(fpmstatus|ping)/?$ {      #如果客户请求fpmstatus则传递参数
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param  SCRIPT_FILENAME  $fastcgi_script_name;
                include   fastcgi_params;
              }
    .............
    [root@httpd1-73 ~]# nginx -t
    [root@httpd1-73 ~]# nginx -s reload
    [root@httpd1-73 ~]# curl http://127.0.0.1/fpmstatus
    pool:                 www
    process manager:      dynamic
    start time:           31/Aug/2018:10:46:07 +0800
    start since:          2604
    accepted conn:        1
    listen queue:         0
    max listen queue:     0
    listen queue len:     128
    idle processes:       4
    active processes:     1
    total processes:      5
    max active processes: 1
    max children reached: 0
    slow requests:        0
    

    八、主动和被动监测

    • 被动监控:被监控主机agent监听一个指定端口,由监控主机zabbixserver发来item请求清单,被监控主机返回清单中的数据。
    • 主动监控:被监控主机agent监听一个指定端口,周期性的主动向监控主机zabbixserver发送item中的数据。
      serverActive的设置
      hostname的设置

    1、基于snmp监控

    简单网络管理协议,是udp协议
    snmp版本有v1、v2、v3,其中v3是最安全的
    工作模式:读(get,getnext)端口161/udp
    写(set)端口162/udp
    陷阱(trap)
    snmp获取命令snmpget,snmpgetnext,
    snmpwalk一次获取多个信息
    snmptrap 捕获命令
    OID对象标识符:Object ID
    MIB:Management Information Base

    2、使Linux主机支持snmp

    [root@httpd2-74 ~]# yum install net-snmp net-snmp-utils -y  #安装snmp
    [root@httpd2-74 ~]# vim /etc/snmp/snmpd.conf            #编辑snmp配置文件
    
     
    [root@httpd2-74 ~]# systemctl start snmpd.service启动
    [root@httpd2-74 ~]# ss -unl
    State       Recv-Q Send-Q                          Local Address:Port                                         Peer Address:Port              
    UNCONN      0      0                                           *:161                                                     *:*
    [root@httpd2-74 ~]# snmpwalk -c public -v 2c 192.168.1.74 .1.3.6.1.2.1.1.1  #-c使用public密码-v使用2c版本读取.1.3.6.1.2.1.1.1级别的信息
    SNMPv2-MIB::sysDescr.0 = STRING: Linux httpd2-74 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
    [root@httpd2-74 ~]# snmpwalk -c public -v 2c 192.168.1.74 sysName   #使用字段获取信息
    SNMPv2-MIB::sysName.0 = STRING: httpd2-74
    
     
    snmp配置文件
     
    监控主机上,添加被监控主机的snmp接口
     
    添加基于snmp监控模板

    九、zabbix的分布式监控

    1、架构

    Zabbix proxy是在大规模分布式监控场景中,采用的一种用以分担server端压力的分层结构,Proxy只负责一定区域内的数据采集工作,然后定期将数据一次性发送给server,极大的减轻了server的负载压力,使得可以支持更大规模的监控需求.

     
    zabbix-proxy模式

    2、代理服务器

    (1)安装数据库
    [root@zabbix-proxy21 ~]# yum -y install mariadb-servera#安装数据库
    [root@zabbix-proxy21 ~]# vim /etc/my.cnf
    [mysqld]
    .........
    innodb_file_per_table = ON
    skip_name_resolve = ON
    ..........
    [root@zabbix-proxy21 ~]# systemctl start mariadb启动
    
    (2)安装代理安装包
    wget https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/{zabbix-get-3.0.2-1.el7.x86_64.rpm,zabbix-proxy-mysql-3.0.2-1.el7.x86_64.rpm,zabbix-agent-3.0.2-1.el7.x86_64.rpm}  #下载安装包
    
    [root@zabbix-proxy21 ~]# yum -y install *.rpm   #安装程序包
    [root@zabbix-proxy21 ~]# grep "^####" /etc/zabbix/zabbix_proxy.conf   #查询配置文件
    ############ GENERAL PARAMETERS #################
    ######### PROXY SPECIFIC PARAMETERS #############
    ############ ADVANCED PARAMETERS ################
    ####### LOADABLE MODULES #######
    ####### TLS-RELATED PARAMETERS #######
    

    (3)配置

    [root@zabbix-proxy21 ~]# rpm -ql zabbix-proxy-mysql
    .....
    /usr/share/doc/zabbix-proxy-mysql-3.0.2/schema.sql.gz  #数据库生成脚本
    ......
    [root@zabbix-proxy21 ~]# cp /usr/share/doc/zabbix-proxy-mysql-3.0.2/schema.sql.gz  /root
     [root@zabbix-proxy21 ~]# gzip -d schema.sql.gz  #解压缩脚本
    [root@zabbix-proxy21 ~]# mysql #连接数据库
    MariaDB [(none)]> CREATE DATABASE zabbix_proxy CHARSET 'utf8';  #生成数据库
    MariaDB [(none)]> GRANT ALL ON zabbix_proxy.* TO 'zbxproxy'@'192.168.%.%' IDENTIFIED BY 'zbxpass';  #数据库远程授权
    MariaDB [(none)]> GRANT ALL ON zabbix_proxy.* TO 'zbxproxy'@'127.0.0.1' IDENTIFIED BY 'zbxpass'; #数据库本地授权
    MariaDB [(none)]> FLUSH PRIVILEGES;#刷新
    
    [root@zabbix-proxy21 ~]# mysql -uzbxproxy -h192.168.1.21 -pzbxpass zabbix_proxy  < schema.sql  #执行导入脚本
    [root@zabbix-proxy21 ~]# mysql -uzbxproxy -h192.168.1.21 -pzbxpass #查看生成相关表
    MariaDB [zabbix_proxy]> SHOW TABLES;
    
    [root@zabbix-proxy21 ~]# vim /etc/zabbix/zabbix_proxy.conf #编辑配置文件
    Server=192.168.1.12监控主机ip地址,不是本机地址
    Hostname=zabbix-proxy21主机名
    
    DBHost=192.168.1.21数据库地址(本机ip)
    DBName=zabbix_proxy数据库名
    DBUser=zbxproxy数据库用户名
    DBPassword=zbxpass数据库密码
    
    HeartbeatFrequency=60心跳检测间隔时间
    ConfigFrequency=3600配置推送间隔时间
    DataSenderFrequency=1发送数据到主监控服务器时间间隔,默认1秒
    
    [root@zabbix-proxy21 ~]# systemctl start zabbix-proxy  #启动
    [root@zabbix-proxy21 ~]# ss -tnl
    State       Recv-Q Send-Q Local Address:Port               Peer Address:Port                     
    LISTEN      0      128       *:10051                 *:*    
    
    (4)在server端添加此proxy
    Administrator----> proxles
    
     
    创建代理服务器

    工作模式:
    Active:Proxy主动向server发起配置信息同步请求;
    Passive: 由server端向Proxy发送配置信息;

    (5)添加hosts时,选择使用指定的proxy进行监控;
     
    添加新被监控主机
     
    选择连接代理监控服务器
     
    生成监控

    注意:

    (1)在server添加的proxy的名称,要与proxy的配置文件中的Hostname的值保存一致。
    (2)通过proxy监控的主机,agent要授权proxy有监控权限;
       server=Proxy_Server_IP
    

    十、zabbix的优化

      zabbix performance tuning
    nvps:New Value Per Second
      100w/m     15000/s
    

    1、zabbix服务器进程数量调整

    配置文件中:StartPollers=5
    alerter报警进程
    discover 网络发现进程
    escalator报警升级进程
    http poller web监控进程
    housekeeper 管理历史数据清理
    poller 监控数据进程,实际应用中要调整大一些
    trapper 被动模式下,要调整大一些
    configration syncer 配置同步,一般不用调整
    ipmi poller

    2、进程数量调整

    StartPollers=50
    StartPingers=10
    StartDBSyncers=2
    

    3、数据库优化:

    分表:history_历史相关和表需要分表
    trend
     趋势相关的表需要分表
    events*事件相关的表需要分表

    4、监控建议

    • Database :历史数据不要保存太长时间;尽量让数据缓存数据库服务器内存中
    • 触发器的表达式:减少使用min()、max()、avg();尽量使用last(),nodata();
    • 数据收集:polling较慢时,减少使用snmp/agentless/agent,尽量使用trapping方式,即agent(active);
    • 数据类型:文本型数据处理速度较慢,尽量少收集类型为text或string或log型的数据,多使用numeric型数据;
  • 相关阅读:
    会话管理?
    为什么要用 Dubbo?
    abstract class和interface有什么区别?
    接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的main方法?
    用最有效率的方法算出2乘以8等於几?
    如何把一段逗号分割的字符串转换成一个数组?
    查看文件内容有哪些命令可以使用?
    使用哪一个命令可以查看自己文件系统的磁盘空间配额 呢?
    Spring框架中的单例bean是线程安全的吗?
    你更倾向用那种事务管理类型?
  • 原文地址:https://www.cnblogs.com/daofaziran/p/12180267.html
Copyright © 2011-2022 走看看