zoukankan      html  css  js  c++  java
  • 学习zabbix(六)

    实验环境


    实验用2到2台机器,实验所用机器系统环境如下,可以看到2台机器的主机名和IP地址

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@linux-node1 ~]# cat /etc/redhat-release
    CentOS Linux release 7.1.1503 (Core)
    [root@linux-node1 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.58.11 linux-node1 linux-node1.nmap.com
    192.168.58.12 linux-node2 linux-node2.nmap.com
    [root@linux-node1 ~]# hostname
    linux-node1.nmap.com
    [root@linux-node1 ~]#

      

    nginx自带的监控介绍


    先学习下nginx自带的的状态监控

    以下软件包是编译安装nginx需要的包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@linux-node1 ~]# yum install -y glibc gcc-c++ pcre-devel gcc openssl-devel
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.zju.edu.cn
     * epel: mirrors.tuna.tsinghua.edu.cn
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    Package glibc-2.17-157.el7_3.1.x86_64 already installed and latest version
    Package gcc-c++-4.8.5-11.el7.x86_64 already installed and latest version
    Package pcre-devel-8.32-15.el7_2.1.x86_64 already installed and latest version
    Package gcc-4.8.5-11.el7.x86_64 already installed and latest version
    Package 1:openssl-devel-1.0.1e-60.el7_3.1.x86_64 already installed and latest version
    Nothing to do
    [root@linux-node1 ~]#

      

    下载nginx稳定版并解压

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [root@linux-node1 ~]# cd /usr/local/src/
    [root@linux-node1 src]# ls
    [root@linux-node1 src]# wget http://nginx.org/download/nginx-1.10.3.tar.gz
    --2017-03-19 18:04:23--  http://nginx.org/download/nginx-1.10.3.tar.gz
    Resolving nginx.org (nginx.org)... 95.211.80.227, 206.251.255.63
    Connecting to nginx.org (nginx.org)|95.211.80.227|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 911509 (890K) [application/octet-stream]
    Saving to: ‘nginx-1.10.3.tar.gz’
     
    100%[==================================================>] 911,509      303KB/s   in 2.9s  
     
    2017-03-19 18:04:27 (303 KB/s) - ‘nginx-1.10.3.tar.gz’ saved [911509/911509]
     
    [root@linux-node1 src]# tar xfz nginx-1.10.3.tar.gz
    [root@linux-node1 src]# cd nginx-1.10.3
    [root@linux-node1 nginx-1.10.3]#

      

    新建一个用户www,用于以普通用户运行nginx   ;配置,生成Makefile文件

    1
    2
    3
    4
    5
    [root@linux-node1 nginx-1.10.3]# useradd -s /sbin/nologin -M www
    [root@linux-node1 nginx-1.10.3]# ./configure --prefix=/usr/local/nginx-1.10.3
    > --user=www --group=www
    > --with-http_ssl_module
    > --with-http_stub_status_module

     配置完毕,pcre是它默认加的,很多人编译使用--with-pcre 其实使用系统的就够了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    checking for getaddrinfo() ... found
    checking for PCRE library ... found
    checking for PCRE JIT support ... found
    checking for OpenSSL library ... found
    checking for zlib library ... found
    creating objs/Makefile
     
    Configuration summary
      + using system PCRE library
      + using system OpenSSL library
      + md5: using OpenSSL library
      + sha1: using OpenSSL library
      + using system zlib library
     
      nginx path prefix: "/usr/local/nginx-1.10.3"
      nginx binary file: "/usr/local/nginx-1.10.3/sbin/nginx"
      nginx modules path: "/usr/local/nginx-1.10.3/modules"
      nginx configuration prefix: "/usr/local/nginx-1.10.3/conf"
      nginx configuration file: "/usr/local/nginx-1.10.3/conf/nginx.conf"
      nginx pid file: "/usr/local/nginx-1.10.3/logs/nginx.pid"
      nginx error log file: "/usr/local/nginx-1.10.3/logs/error.log"
      nginx http access log file: "/usr/local/nginx-1.10.3/logs/access.log"
      nginx http client request body temporary files: "client_body_temp"
      nginx http proxy temporary files: "proxy_temp"
      nginx http fastcgi temporary files: "fastcgi_temp"
      nginx http uwsgi temporary files: "uwsgi_temp"
      nginx http scgi temporary files: "scgi_temp"
     
    [root@linux-node1 nginx-1.10.3]#

      

    编译和安装

    1
    [root@linux-node1 nginx-1.10.3]# make && make install
     
    make install 之后,其实这个目录可以拷贝到别的机器运行,但是你得保证这两台机器环境一致,必须安装的依赖包都一致

    以上安装完毕,安装结尾部分如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    cp conf/nginx.conf '/usr/local/nginx-1.10.3/conf/nginx.conf.default'
    test -d '/usr/local/nginx-1.10.3/logs'
        || mkdir -p '/usr/local/nginx-1.10.3/logs'
    test -d '/usr/local/nginx-1.10.3/logs'
        || mkdir -p '/usr/local/nginx-1.10.3/logs'
    test -d '/usr/local/nginx-1.10.3/html'
        || cp -R html '/usr/local/nginx-1.10.3'
    test -d '/usr/local/nginx-1.10.3/logs'
        || mkdir -p '/usr/local/nginx-1.10.3/logs'
    make[1]: Leaving directory `/usr/local/src/nginx-1.10.3'
    [root@linux-node1 nginx-1.10.3]# echo $?
    0
    [root@linux-node1 nginx-1.10.3]#

      

    做软链接

    1
    2
    3
    [root@linux-node1 nginx-1.10.3]# cd
    [root@linux-node1 ~]# ln -s /usr/local/nginx-1.10.3/ /usr/local/nginx
    [root@linux-node1 ~]#

    怎么监控nginx,可以搜索一些做监控的产品他们做的文档,比较好,网站上很多人写的博客其实有的有错误,监控宝这种即使出现错误也不会太大  

    搜索监控宝的nginx相关的wiki

    http://www.jiankongbao.com/search.php?q=nginx

     http://wiki.jiankongbao.com/doku.php/%E6%96%87%E6%A1%A3:%E5%AE%89%E5%85%A8%E6%8C%87%E5%BC%95#nginx_监控

     

    需要注意的是,Nginx默认安装不包含状态模块stub_status,所以,在编译Nginx的时候,需要添加以下参数:

    1
    --with-http_stub_status_module

    一旦包含stub_status模块后,我们就可以在配置文件nginx.conf中开启状态页面:  

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    http {
        server {
            listen       80;
            server_name  localhost;
     
            location / {
                root   html;
                index  index.html index.htm;
            }
     
            location /nginx-status {
                stub_status on;
                access_log  off;
            }
        }
    }

    以上配置文件中,我们实际增加的部分是:

    1
    2
    3
    4
    location /nginx-status {
              stub_status on;
              access_log  off;
          }

    同样,假如Nginx所在服务器的IP为10.0.0.1,同时指向它的域名为www.domain.com,这样一来,Nginx的状态页面便是:

    1
    http://10.0.0.1/nginx-status

    或者

    1
    http://www.domain.com/nginx-status

    同样,建议您将以上示例中的nginx-status修改为其它字符串。

    另外,Nginx的stub_status也支持授权IP的配置,您可以参考Nginx的手册,监控宝提供的服务监控点IP地址为:

    开始操作修改nginx.conf

    1
    2
    [root@linux-node1 ~]# cd /usr/local/nginx/conf/
    [root@linux-node1 conf]# vim nginx.conf

    编辑如下,顺便加上访问控制

     修改完毕,检测语法,启动,检查

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@linux-node1 conf]# vim nginx.conf
    [root@linux-node1 conf]# /usr/local/nginx/sbin/nginx -t
    nginx: the configuration file /usr/local/nginx-1.10.3/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx-1.10.3/conf/nginx.conf test is successful
    [root@linux-node1 conf]# /usr/local/nginx/sbin/nginx
    [root@linux-node1 conf]# lsof -i:80
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx   10245 root    6u  IPv4 157419      0t0  TCP *:http (LISTEN)
    nginx   10246  www    6u  IPv4 157419      0t0  TCP *:http (LISTEN)
    [root@linux-node1 conf]#

    网页上查看

    关于状态页面的解释
    Active connections: 4
    server accepts handled requests
    4 4 23
    Reading: 0 Writing: 3 Waiting: 0

    Active connections:对后端发起的活动连接数。
    Server accepts handled requests:Nginx总共处理了4个连接,成功创建4次握手(证明中间没有失败的),总共处理了23个请求。
    Reading:Nginx 读取到客户端的Header信息数。
    Writing:Nginx 返回给客户端的Header信息数。
    Waiting:开启keep-alive的情况下,这个值等于 active – (reading + writing),意思就是Nginx已经处理完成,正在等候下一次请求指令的驻留连接。

    监控要做的事,最基础的部分如下:
    采集,存储,展示,告警

    nagios和zabbix对于一些大量主机需要监控的场景时,nagios不如zabbix
    nagios监控就有瓶颈了。因为server端主动访问,1000台就有瓶颈了
    zabbix主动模式完全解决,顶多就是server端的读写压力

    安装zabbix3.0


     
    一、配置yum并安装zabbix3.0
     
    zabbix3.0 编译安装各种坑,建议yum安装

    在安装之前请确保防火墙以及selinux关闭,并做好时间同步

    1.1、yum源配置

    1
    rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

    1.2、安装相关软件

    zabbix把数据放到了库里,它支持mysql,centos7之后mysql默认是mariadb

    1
    yum install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql mariadb-server mariadb zabbix-agent  -y

    zabbix运行的web容器是apache,它默认把apache作为依赖安装上了

    安装完毕,留意下版本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [root@linux-node1 ~]# yum install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql mariadb-server mariadb zabbix-agent  -y
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.zju.edu.cn
     * epel: mirrors.tuna.tsinghua.edu.cn
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    Package zabbix-server-mysql-3.0.8-2.el7.x86_64 already installed and latest version
    Package zabbix-web-3.0.8-2.el7.noarch already installed and latest version
    Package zabbix-server-mysql-3.0.8-2.el7.x86_64 already installed and latest version
    Package zabbix-web-mysql-3.0.8-2.el7.noarch already installed and latest version
    Package 1:mariadb-server-5.5.52-1.el7.x86_64 already installed and latest version
    Package 1:mariadb-5.5.52-1.el7.x86_64 already installed and latest version
    Package zabbix-agent-3.0.8-2.el7.x86_64 already installed and latest version
    Nothing to do
    [root@linux-node1 ~]#

    1.3、修改PHP时区配置

     由于注释里带#,这里's###g'  改成's@@@g'  结构替换

    1
    sed -i 's@# php_value date.timezone Europe/Riga@php_value date.timezone Asia/Shanghai@g' /etc/httpd/conf.d/zabbix.conf

      

     替换完毕。

    二、数据库配置

    Centos7上MySQL已经变成了mariadb。

    2.1、启动数据库

    1
    systemctl start mariadb

    2.2、创建zabbix所用的数据库及用户 

    1
    2
    3
    4
    mysql
    create database zabbix character set utf8 collate utf8_bin;
    grant all on zabbix.* to zabbix@'localhost' identified by 'zabbix';
    exit

    导入数据

    zcat命令用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。

    1
    2
    3
    4
    5
    [root@linux-node1 ~]# cd /usr/share/doc/zabbix-server-mysql-3.0.8/
    [root@linux-node1 zabbix-server-mysql-3.0.8]# ls
    AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README
    [root@linux-node1 zabbix-server-mysql-3.0.8]# zcat create.sql.gz | mysql -uzabbix -pzabbix zabbix
    [root@linux-node1 zabbix-server-mysql-3.0.8]#

    2.3、修改zabbix配置

    1
    vim /etc/zabbix/zabbix_server.conf

    取消下面注释,并修改成正确值

    DBHost=localhost #数据库所在主机
    DBName=zabbix #数据库名
    DBUser=zabbix #数据库用户
    DBPassword=zabbix #数据库密码

    2.4、启动zabbix及http

    遇到问题,zabbix-server启动失败,httpd启动成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    [root@linux-node1 ~]# systemctl start zabbix-server
    Job for zabbix-server.service failed because a fatal signal was delivered to the control process. See "systemctl status zabbix-server.service" and "journalctl -xe" for details.
    [root@linux-node1 ~]# systemctl start httpd
    [root@linux-node1 ~]# getenforce
    Disabled
    [root@linux-node1 ~]# journalctl -xe
    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
    --
    -- Unit zabbix-server.service has begun starting up.
    Mar 19 19:12:59 linux-node1.nmap.com kernel: zabbix_server[11200]: segfault at 18 ip 00007fd7
    Mar 19 19:12:59 linux-node1.nmap.com systemd[1]: zabbix-server.service: control process exite
    Mar 19 19:13:01 linux-node1.nmap.com systemd[1]: Failed to start Zabbix Server.
    -- Subject: Unit zabbix-server.service has failed
    -- Defined-By: systemd
    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
    --
    -- Unit zabbix-server.service has failed.
    --
    -- The result is failed.
    Mar 19 19:13:01 linux-node1.nmap.com systemd[1]: Unit zabbix-server.service entered failed st
    Mar 19 19:13:01 linux-node1.nmap.com systemd[1]: zabbix-server.service failed.
    [root@linux-node1 ~]#

      

    升级  trousers之后,启动zabbix-server成功(系统版本centos7-1503)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@linux-node1 ~]# yum update trousers
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.zju.edu.cn
     * epel: mirror.premi.st
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    Resolving Dependencies
    --> Running transaction check
    ---> Package trousers.x86_64 0:0.3.11.2-3.el7 will be updated
    ---> Package trousers.x86_64 0:0.3.13-1.el7 will be an update

    三、通过浏览器配置zabbix-server

    浏览器里输入下面内容,通过页面安装配置

    http://192.168.58.11/zabbix

     

     一切OK

    密码也是zabbix

     

     name这里可以自定义,它出出现在登录后的右上角

     

     其实以上步骤就是配置了下面文件

    点击Finish出现登录界面,用户名和密码默认是Admin/zabbix

     

     启动zabbix-agent,它默认监听10050端口

    zabbix-server默认监听10051端口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [root@linux-node1 ~]# systemctl start zabbix-agent
    [root@linux-node1 ~]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd          
    tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1104/dnsmasq       
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      922/sshd           
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1044/master        
    tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      1793/zabbix_agentd 
    tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      1316/zabbix_server 
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1584/mysqld        
    tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd          
    tcp6       0      0 :::80                   :::*                    LISTEN      1708/httpd         
    tcp6       0      0 :::22                   :::*                    LISTEN      922/sshd           
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1044/master        
    tcp6       0      0 :::10050                :::*                    LISTEN      1793/zabbix_agentd 
    tcp6       0      0 :::10051                :::*                    LISTEN      1316/zabbix_server 
    [root@linux-node1 ~]#

      

    zabbix页面登录和介绍 


    登录成功的界面

     启用此监控

     

     它是php-gd绘制的

    zabbix-web可以单独一台机器,可以和zabbix-server分开
    share这里可以看到别人写好的模板,可以直接拿来用

     

     
    zabbix自定义监控项
     
    生产要先创建主机组

     

    练习创建3个组:web,memcached,lb

     

     

    主机组的名字建议是英文,否则二次开发的时候就知道难受了
    主机名也建议写本来的主机名,二次开发的时候能对应上,该是啥主机名就是啥,也可以使用IP地址

     zabbix也支持snmp,这台机器开启了snmp,这里我们就用snmp来监控

     

     snmp这里由于是本机监控本机可以写127.0.0.1

    其实推荐写成真实IP

    生产环境加描述,工作中建议约定好,比如时间信息等,方便自己也方便他人

     模板这里添加snmp的模板

    使用snmp的话,宏定义这里必须写,宏类似定义个变量

     宏就是下面这个值

    1
    2
    3
    [root@linux-node1 ~]# cat /etc/snmp/snmpd.conf
    rocommunity nmap 192.168.58.11
    [root@linux-node1 ~]#

     

    输入如下内容 

     

     添加完毕,看到有很多模板显示,其实括号里的都是模板的链接

     

    如果snmp没启动,需要先启动它

    1
    2
    3
    4
    5
    6
    [root@linux-node1 ~]# systemctl enable snmpd
    Created symlink from /etc/systemd/system/multi-user.target.wants/snmpd.service to /usr/lib/systemd/system/snmpd.service.
    [root@linux-node1 ~]# systemctl start snmpd
    [root@linux-node1 ~]# netstat -luntp | grep 161
    udp        0      0 0.0.0.0:161             0.0.0.0:*                           2549/snmpd         
    [root@linux-node1 ~]#

    页面里查看,snmp监控也成功了

    screen是几个图形放一起;2.4需要在configure下面创建;在3.0可以在monitor下创建

    自定义监控项
    准备使用zabbix监控nginx连接数,把之前安装的nginx配置改成8080端口
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@linux-node1 ~]# cd /usr/local/nginx/conf/
    [root@linux-node1 conf]# vim nginx.conf
    [root@linux-node1 conf]# /usr/local/nginx/sbin/nginx -t
    nginx: the configuration file /usr/local/nginx-1.10.3/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx-1.10.3/conf/nginx.conf test is successful
    [root@linux-node1 conf]# /usr/local/nginx/sbin/nginx
    [root@linux-node1 conf]# lsof -i:8080
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx   2714 root    6u  IPv4  35149      0t0  TCP *:webcache (LISTEN)
    nginx   2715  www    6u  IPv4  35149      0t0  TCP *:webcache (LISTEN)
    [root@linux-node1 conf]#

      

    先用命令方式获取活动连接数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [root@linux-node1 conf]# curl http://192.168.58.11:8080/nginx-status
    Active connections: 1
    server accepts handled requests
     4 4 4
    Reading: 0 Writing: 1 Waiting: 0
    [root@linux-node1 conf]# curl http://192.168.58.11:8080/nginx-status | grep Active
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100    97  100    97    0     0  54525      0 --:--:-- --:--:-- --:--:-- 97000
    Active connections: 1
    [root@linux-node1 conf]# curl -s http://192.168.58.11:8080/nginx-status | grep Active
    Active connections: 1
    [root@linux-node1 conf]# curl -s http://192.168.58.11:8080/nginx-status | grep Active |awk  '{print $3}'
    1
    [root@linux-node1 conf]# curl -s http://192.168.58.11:8080/nginx-status | grep Active |awk  '{print $NF}'
    1
    [root@linux-node1 conf]#

      

     vim /etc/zabbix/zabbix_agentd.conf

     默认zabbix-agent的配置文件会加载下面目录,因此可以单独新建一个文件,用于存放自定义的key

     写一个名叫nginx.conf的配置文件

    1
    2
    3
    4
    5
    [root@linux-node1 zabbix_agentd.d]# pwd
    /etc/zabbix/zabbix_agentd.d
    [root@linux-node1 zabbix_agentd.d]# cat nginx.conf
    UserParameter=nginx.active,curl -s http://192.168.58.11:8080/nginx-status | grep Active |awk  '{print $NF}'
    [root@linux-node1 zabbix_agentd.d]#

      

     优化一下,脚本里的命令使用绝对路径

    1
    2
    3
    4
    5
    6
    [root@linux-node1 zabbix_agentd.d]# which curl
    /usr/bin/curl
    [root@linux-node1 zabbix_agentd.d]# vim nginx.conf
    [root@linux-node1 zabbix_agentd.d]# cat nginx.conf
    UserParameter=nginx.active,/usr/bin/curl -s http://192.168.58.11:8080/nginx-status | grep Active |awk  '{print $NF}'
    [root@linux-node1 zabbix_agentd.d]#

      

     重启agent,安装zabbix-get工具,它是个测试工具,只有它能获取到了自定义的key的值,才能加入到zabbix-server里。

    1
    2
    [root@linux-node1 ~]# systemctl restart zabbix-agent
    [root@linux-node1 ~]# yum install -y zabbix-get

      

     get一下,发现有问题

    1
    2
    3
    [root@linux-node1 ~]# zabbix_get -s 192.168.58.11 -p 10050 -k"nginx.active"
    zabbix_get [3070]: Check access restrictions in Zabbix agent configuration
    [root@linux-node1 ~]#

    因为安装zabbix-agent的时候,Server那里写的是127.0.0.1,agent和server在一台
    Server那里要写192.168.58.11
    zabbix-get或者这里写127.0.0.1
    下面改成192.168.58.11,这里是只允许哪个server的IP访问自己,server这里也支持多Ip

    改完重启下agent

    1
    2
    3
    [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
    [root@linux-node1 ~]# systemctl restart zabbix-agent
    [root@linux-node1 ~]#

    再次获取,成功

    1
    2
    3
    [root@linux-node1 ~]# zabbix_get -s 192.168.58.11 -p 10050 -k"nginx.active"
    1
    [root@linux-node1 ~]#

    网页上这里尽量也改掉

     改成如下,否则会报连接故障

     

    总结添加自定义监控项的步骤
    1、命令行或脚本先获取成功
    2、配置文件里添加用户自定义参数
    3、重启zabbix-agent
    4、server端使用zabbix_get测试获取
    5、web界面创建item

     这里还缺最后一步,web页面添加自定义监控项

     

    application这里写个自定义的,它是一组item的集合

    创建图形

     

    找到nginx.active

     

     查看图形

     

     手动制造点连接数数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    [root@linux-node1 ~]# ab -c 10 -n 100000 http://192.168.58.11:8080/
    This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/
     
    Benchmarking 192.168.58.11 (be patient)
    Completed 10000 requests
    Completed 20000 requests
    Completed 30000 requests
    Completed 40000 requests
    Completed 50000 requests
    Completed 60000 requests
    Completed 70000 requests
    Completed 80000 requests
    Completed 90000 requests
    Completed 100000 requests
    Finished 100000 requests
     
     
    Server Software:        nginx/1.10.3
    Server Hostname:        192.168.58.11
    Server Port:            8080
     
    Document Path:          /
    Document Length:        612 bytes
     
    Concurrency Level:      10
    Time taken for tests:   8.674 seconds
    Complete requests:      100000
    Failed requests:        0
    Write errors:           0
    Total transferred:      84500000 bytes
    HTML transferred:       61200000 bytes
    Requests per second:    11529.06 [#/sec] (mean)
    Time per request:       0.867 [ms] (mean)
    Time per request:       0.087 [ms] (mean, across all concurrent requests)
    Transfer rate:          9513.73 [Kbytes/sec] received
     
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    0   0.2      0       3
    Processing:     0    1   0.2      1       8
    Waiting:        0    1   0.2      1       8
    Total:          0    1   0.2      1       8
     
    Percentage of the requests served within a certain time (ms)
      50%      1
      66%      1
      75%      1
      80%      1
      90%      1
      95%      1
      98%      1
      99%      2
     100%      8 (longest request)
    [root@linux-node1 ~]#

      

     查看图形数据

    以堆叠方式显示

     堆叠方式就是这种

    创建自定义的screen

     把nginx.active这个图形加上去

     把相关联的加到一个screen里面

     其实可以显示很多,比如文本

     

    还能显示url
    它就能把上面的url显示出来

     

    zabbix  还可以自定义map

    拓扑图,目前比较鸡肋,上百台机器没法画,太复杂

    ######################################################################################

    zabbix页面注意事项 


    1、 工作中使用zabbix常遇到的问题:生产一台机器告警了顺手关闭了,然后忘记打开了

    2、监控项这里,也尽量不禁用,而是删除。能删除就删除

     

    3、使用触发器的过程中,有时候觉得邮件太多,比较烦,其实触发器可以设置不让告警发邮件,尽量别禁用

     

     4、生产中,一定好划分好主机组,可以按业务划分

     

     5、这里可以找某台机器的最新数据,这是3.0版本之后加的过滤

     一些最新数据

     

    聚合图形这里,中文还没显示。等下改下

     

    准备新加一台机器node2


    node2上执行如下操作

    1
    2
    rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
    yum install  zabbix-agent  -y

    配置zabbix-agent配置文件

     主机名这里写成正确主机名

     过滤查看下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@linux-node2 ~]# vim /etc/zabbix/zabbix_agentd.conf
    [root@linux-node2 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
    PidFile=/var/run/zabbix/zabbix_agentd.pid
    LogFile=/var/log/zabbix/zabbix_agentd.log
    LogFileSize=0
    Server=192.168.58.11
    ServerActive=127.0.0.1
    Hostname=linux-node2.nmap.com
    Include=/etc/zabbix/zabbix_agentd.d/
    [root@linux-node2 ~]# systemctl start zabbix-agent
    [root@linux-node2 ~]#

      

    页面上通过克隆加机器

     点进去,点击下面的Full clone

    输入如下信息

     

     

    模板这里要改,去掉snmp的模板,改成linux的模板

     添加之后如下

    都改成agent监控方式
    删除snmp的这台
    克隆添加node1

     

     
    学习画map
    画map图学习
    添加一台HOST

     添加链接

     

    连线,选中2个机器,按着ctrl键,点击link add
    上面的图需要update才能保存
    怎么让两个机器之间的线显示实时带宽呢
    选中2个机器,点击右边的编辑
    可以在标签里写监控项的值

     

    在主机的items,找宽带相关的配置,点击下面选中的
    点击上面选中的,看到了key

     

    复制两个key
    1
    2
    net.if.in[{#IFNAME}]
    net.if.out[{#IFNAME}]
     
    稍微修改下,加上主机名,然后加上last(0)后缀。表示最后一次的值
    1
    {linux-node2.nmap.com:net.if.out[eth0].last(0)}

      

    按ctrl选中2个主机,点击edit
    如下可以显示流量值
    现在就有值了,显示实时的带宽
    对于使用了负载均衡的网站或者其余相关的,可以把负载均衡连接后端服务器的的流量画出来

    监控事件和告警


    事件分触发器的事件,自动发现的事件等。还有内部的事件,自动注册的事件

     

    1、怎么通知Action
    2、通知给谁

    action不仅仅是告警,默认的动作是报警,还能配置下自动执行一些脚本。其实报警这个动作肯定是执行了脚本等实现的

    默认情况下通知的内容

     

    什么情况下通知
    怎么通知

     

     

    1-10 表示故障没修复,发10次
    0就表示60秒
    小心update按钮
    隔60秒,执行2-4
    这样就可以实现故障的升级机制

    报警媒介相关

    管理--用户--报警媒介
    下面2种不用看,很古老

     

    这就是3.0 比较高端的功能,在3.0 之前用户是不执行密码验证的
    3.0 之前你只能本地起一个postfix发邮件

     

     

    设置ssl连接方式发送和接收邮件

    配置用户使用email告警

     

     

    新人入职
    需要先创建用户组
    设置权限
    运维嘛,添加全部,读写权限

     

     

     

    添加用户
    记得选择用户组
    url可以让它登录后看到哪个界面

     

     

     

     

    1、创建用户组。 添加权限 权限只能按用户组分配
    2、创建用户 选择用户角色
    3、报警媒介
    4、Action 添加新主机后,要确认权限分配

     
     
    监控交换机等网络设备
     
    对已一个项目进行监控,大体分为下面步骤

    1、项目规划

    主机分组:
    交换机,Nginx,Tomcat,Mysql

    监控对象识别:
    1、使用snmp监控交换机
    2、使用IPMI监控服务器硬件
    3、使用Agent监控服务器
    4、使用JMX监控java
    5、监控MySQL
    6、监控Web状态
    7、监控Nginx状态

    监控网络设备,比如交换机的大体步骤

    1
    2
    3
    4
    5
    6
    1、对于交换机,需要在交换机上开启snmp
    config t
    snmp-server community public ro
    end
     
    2、zabbix上添加监控

      

    下面这里能使用中文,但是你做自动化的话,会很麻烦

     

    防火墙,路由器,交换机都可以使用这个模板
    设置宏,也就是设置团体名称
    为什么要设置呢,因为模板里的item里面用了宏
    监控完毕,它会做端口的自动发现,比如下图
    端口状态也会监控到。
    你插一根网线,报警,拔出网线,也报警
    vlan也会给你加上,下面是别人监控的网络设备的图
    别人的网络设备现网流量图

     

    IPMI监控在刚开始使用zabbix的时候使用,后来就不用了,因为IPMI台容易超时了,经常获取不到数,本身就那样
    后来改成自定义脚本了。通过ipmi命令获取,自定义key。现在这么做的

     通过zabbix监控交换机大体步骤

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1、对于交换机,需要在交换机上开启snmp
    config t
    snmp-server community public ro
    end
     
    2、zabbix上添加监控
       设置snmp interfaces
    3、关联监控模板
     
    IPMI:
      建议:使用自定义item,本地执行ipmitool命令获取数据

      

     

    监控JVM


    监控jvm可以通过java gateway来

    官网链接如下

     

    它比较独立,可以把它理解为和zabbix server完全没关系。因为agent没法监控java应用。就单独写了个java gateway。类似代理的模式,所以java gateway也不存数据

     

    运行它需要jdk环境因为它就是个java程序
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@linux-node1 ~]# yum install -y zabbix-java-gateway  java-1.8.0
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirror01.idc.hinet.net
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    Package zabbix-java-gateway-3.0.8-2.el7.x86_64 already installed and latest version
    Package 1:java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64 already installed and latest version
    Nothing to do

     

    编辑配置

    [root@linux-node1 ~]# vim /etc/zabbix/zabbix_java_gateway.conf
    监听的IP,默认就是4个0
    监听端口

    开启几个探测的进程,默认是5,可以设置和java应用数一致,或者是它的一半值

    超时时间,1-30 网络环境差的话,超时时间最好改长一点
    上面配置一般不需要修改,局域网环境嘛

     启动服务并设置开机启动

    1
    2
    3
    4
    [root@linux-node1 ~]# systemctl start zabbix-java-gateway.service
    [root@linux-node1 ~]# systemctl enable zabbix-java-gateway.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-java-gateway.service to /usr/lib/systemd/system/zabbix-java-gateway.service.
    [root@linux-node1 ~]#

      

     检查监听情况

    1
    2
    3
    4
    5
    6
    7
    [root@linux-node1 ~]# netstat -lntp | grep 100
    tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      2373/zabbix_agentd 
    tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      1500/zabbix_server 
    tcp6       0      0 :::10050                :::*                    LISTEN      2373/zabbix_agentd 
    tcp6       0      0 :::10051                :::*                    LISTEN      1500/zabbix_server 
    tcp6       0      0 :::10052                :::*                    LISTEN      18836/java         
    [root@linux-node1 ~]#

      

     检查java gateway进程和java版本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [root@linux-node1 ~]# ps aux | grep java
    zabbix    18836  1.2  0.9 3455096 37672 ?       Sl   13:42   0:00 java -server -Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -classpath
    lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:
    lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-3.0.8.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -Dzabbix.timeout=3
    -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
    root      18913  0.0  0.0 112644   964 pts/0    S+   13:43   0:00 grep --colour=auto java
    [root@linux-node1 ~]#
     
    [root@linux-node1 ~]# java -version
    openjdk version "1.8.0_121"
    OpenJDK Runtime Environment (build 1.8.0_121-b13)
    OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
    [root@linux-node1 ~]#

      

    配置zabbix server,关联java gateway
    vim /etc/zabbix/zabbix_server.conf
    所以说java gateway可以安装在任何计算机上
    预启动5个进程轮询它

     

    重启zabbix-server服务
    1
    2
    3
    [root@linux-node1 ~]# vim /etc/zabbix/zabbix_server.conf
    [root@linux-node1 ~]# systemctl restart zabbix-server.service
    [root@linux-node1 ~]#

      

    node2上下载安装tomcat和jdk。模拟被监控端
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    yum install -y   java-1.8.0
    cd /usr/local/src/
    wget  http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.36/bin/apache-tomcat-8.0.36.tar.gz
    tar xfz apache-tomcat-8.0.36.tar.gz
    mv apache-tomcat-8.0.36 /usr/local/
    ln -s /usr/local/apache-tomcat-8.0.36/ /usr/local/tomcat
     
     
    [root@linux-node2 src]# netstat -lntp | grep 8080
    tcp6       0      0 :::8080                 :::*                    LISTEN      8137/java          
    [root@linux-node2 src]#

      

     以上步骤可以总结为

    JMX:(使用zabbix java Gateway代理)
    1、安装 yum install -y zabbix-java-gateway java-1.8.0
    2、配置vim /etc/zabbix/zabbix_java_gateway.conf
    3、启动systemctl start zabbix-java-gateway
    4、检查端口和进程
    5、配置zabbix server关联java gateway
    6、重启zabbix server

    搜索jmx

     

     

    ####################################################################################

     
    使用JMX监控jvm
     
    vim /usr/local/tomcat/bin/catalina.sh
    添加如下内容
    1
    2
    3
    4
    5
    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
      -Dcom.sun.management.jmxremote.port=8888
      -Dcom.sun.management.jmxremote.ssl=false
      -Dcom.sun.management.jmxremote.authenticate=false
      -Djava.rmi.server.hostname=192.168.58.12"

    重启tomcat,查看监听情况
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    [root@linux-node2 src]# killall java
    [root@linux-node2 src]# killall java
    java: no process found
    [root@linux-node2 src]# /usr/local/tomcat/bin/startup.sh
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Tomcat started.
     
    看到8888端口已经起来了
    [root@linux-node2 src]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
    tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      6938/zabbix_agentd 
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd          
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1160/sshd          
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1251/master        
    tcp6       0      0 :::10050                :::*                    LISTEN      6938/zabbix_agentd 
    tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      8522/java          
    tcp6       0      0 :::56614                :::*                    LISTEN      8522/java          
    tcp6       0      0 :::8009                 :::*                    LISTEN      8522/java          
    tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd          
    tcp6       0      0 :::8080                 :::*                    LISTEN      8522/java          
    tcp6       0      0 :::22                   :::*                    LISTEN      1160/sshd          
    tcp6       0      0 :::8888                 :::*                    LISTEN      8522/java          
    tcp6       0      0 :::57945                :::*                    LISTEN      8522/java          
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1251/master        
    [root@linux-node2 src]#

      

     
    在电脑的jdk的bin目录下,找到jconsole
     
     
     
     
     
     
     
     
     
     
    点击update
     
    JMX的key可以在server上使用zabbix-get获取下
     
     
    1
    2
    3
    [root@linux-node1 ~]# zabbix_get -s 192.168.58.12 -k  jmx["java.lang:type=GarbageCollector,name=Copy",CollectionCount]
    ZBX_NOTSUPPORTED: Unsupported item key.
    [root@linux-node1 ~]#

      

     
    不知道为什么,开启debug看看
    debug是4
    [root@linux-node2 src]# vim /etc/zabbix/zabbix_agentd.conf
    这里需要改成4
     
    重启agent
    systemctl restart zabbix-agent.service
     
    看agent日志
    tail -f /var/log/zabbix/zabbix_agentd.log
    显示的并没太多有用信息
     先放这里
     
     
     
     
     
    zabbix监控Nginx
    监控过程如下

    1、开启Nginx监控
    2、编写脚本来进行数据采集
    3、设置用户自定义参数
    4、重启zabbix-agent
    5、添加item
    6、创建图形
    7、创建触发器
    8、创建模板

     
     
    下载这个脚本
    它不仅可以监控nginx,还可以监控memcached,redis,http状态
     
    tcp链接比较多的情况下,ss命令比netstat快
     脚本里面的命令
    1
    2
    3
    4
    5
    [root@linux-node2 src]# ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}'
    LISTEN 14
    ESTAB 4
    TIME-WAIT 30
    [root@linux-node2 src]#

    因为上面只显示当前的有数据的,所以下面多了个判断,没数据的项都显示0
    把这个函数的第一个参数复制给tcp_stat
    这个函数的第一个参数根据下面main里看到,是这个脚本的第二个参数
     
    考虑到一个机器可能起多个nginx,所以加个端口参数区分
    memcached的脚本这里的$1 和$2 分别是脚本的$2 和 $3
    nc其实是net cat
     
     
    修改zabbix-agent配置文件,让其包含.conf文件
    1
    [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
    原本下面文件包含这个目录下的所有文件,改一下,改成*.conf
     
     
    这样的话,sh脚本也可以放这个目录下了,然后不会被误认为配置文件而加载
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@linux-node1 ~]# cd /etc/zabbix/zabbix_agentd.d/
    [root@linux-node1 zabbix_agentd.d]# ls
    nginx.conf  userparameter_mysql.conf
    [root@linux-node1 zabbix_agentd.d]# rz -E
    rz waiting to receive.
    [root@linux-node1 zabbix_agentd.d]# ls
    nginx.conf  userparameter_mysql.conf  zabbix_linux_plugin.sh
    [root@linux-node1 zabbix_agentd.d]# chmod +x zabbix_linux_plugin.sh
    [root@linux-node1 zabbix_agentd.d]# ls
    nginx.conf  userparameter_mysql.conf  zabbix_linux_plugin.sh
    [root@linux-node1 zabbix_agentd.d]#
    改成下划线,对应监控脚本内容
    1
    2
    3
    [root@linux-node1 ~]# vim /usr/local/nginx/conf/nginx.conf
    [root@linux-node1 ~]# /usr/local/nginx/sbin/nginx -s reload
    [root@linux-node1 ~]#
    因为脚本里写的就是下划线,要对应上
    这里也可以更改,因为agent和nginx在一台机器上

    1
    2
    [root@linux-node1 ~]# /usr/local/nginx/sbin/nginx -s reload
    [root@linux-node1 ~]#
    通过命令简单获取成功
    1
    2
    3
    [root@linux-node1 zabbix_agentd.d]# ./zabbix_linux_plugin.sh nginx_status 8080 active
    1
    [root@linux-node1 zabbix_agentd.d]#
    新建自定义key文件,调用这个脚本
    1
    2
    3
    4
    5
    [root@linux-node1 zabbix_agentd.d]# cp nginx.conf linux.conf
    [root@linux-node1 zabbix_agentd.d]# vim linux.conf
    [root@linux-node1 zabbix_agentd.d]# cat linux.conf
    UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh "$1" "$2" "$3"
    [root@linux-node1 zabbix_agentd.d]#
    重启agent
    1
    2
    [root@linux-node1 zabbix_agentd.d]# systemctl restart zabbix-agent.service
    [root@linux-node1 zabbix_agentd.d]#
    这个脚本支持传参
    1
    2
    3
    [root@linux-node1 ~]# zabbix_get -s 192.168.58.11 -k linux_status[nginx_status,8080,active]
    1
    [root@linux-node1 ~]#
    zabbix_get成功,这样可以添加到web上了
    配置---模板---创建模板

    add之后,在模板里找到它,然后点进去,看到items等
    创建item
     
    更新间隔,30秒太频繁了,可以改成60秒一次,顺便创建一个叫Nginx Status的application
     
    点击add,添加成功
     
    点进去,克隆它
     
    把这几个都加上去

     
     
    依次,克隆加进去
     
    心得。我觉得可以把一些重要的模板克隆了,防止误操作,在模板上改东西
     
    加图形
     
     
    items选这4个就行了
     
     
     
    给linux-node1加这个模板
    可以导出这个模板给别人
     
    导出的模板需要自己改名,导出来默认都是同一个名字
     
     
     
    graph有数据了
     
     
     监控tcp的11种状态
     
     
    tcp 11种状态的模板
     
     
     
    node1加这个模板
     
    node2也加此模板
     
    它用的还是上面nginx那个脚本
    zabbix用户要能执行它,真正执行它的时候是zabbix执行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@linux-node1 zabbix_agentd.d]# pwd
    /etc/zabbix/zabbix_agentd.d
    [root@linux-node1 zabbix_agentd.d]# ll
    total 16
    -rw-r--r-- 1 root root   96 Mar 26 15:22 linux.conf
    -rw-r--r-- 1 root root  117 Mar 19 20:37 nginx.conf
    -rw-r--r-- 1 root root 1531 Mar  2 23:49 userparameter_mysql.conf
    -rwxr-xr-x 1 root root 2776 Jun 18  2016 zabbix_linux_plugin.sh
    [root@linux-node1 zabbix_agentd.d]#

      

     
     
    练习怎么加触发器
    先给nginx监控加触发器
     
    这里大于1,出于测试目的

    找到刚才创建的Nginx status
    打开页面,模拟问题。让连接数大于1
    自动发送了邮件告警
     

    邮件配置对的话,肯定能收到告警
    这里还看到了一个告警,Too many processes on linux-node2
    系统自带的触发器,阈值太低,修改下模板里的items里的阀值

    默认5分钟的平均值大于300就告警,改成600
     
    改成600
     
     
     
     
    Zabbix告警通知

    自定义告警脚本:
    1、放在 /usr/lib/zabbix/alertscripts
    2、需要支持3个参数,1 收件人,2 主题, 3内容
    3、执行权限
    4、web界面添加
    5、修改actions

     
    短信通道,阿里大鱼,一条0.045左右
     
    它有http的api。很方便
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    curl -X POST 'http://gw.api.taobao.com/router/rest'
    -H 'Content-Type:application/x-www-form-urlencoded;charset=utf-8'
    -d 'app_key=12129701'
    -d 'format=json'
    -d 'method=alibaba.aliqin.fc.sms.num.send'
    -d 'partner_id=apidoc'
    -d 'sign=DB9F439ACCF950E94514CDF0BF24DFB8'
    -d 'sign_method=hmac'
    -d 'timestamp=2017-03-26+16%3A25%3A33'
    -d 'v=2.0'
    -d 'extend=123456'
    -d 'rec_num=13000000000'
    -d 'sms_free_sign_name=%E9%98%BF%E9%87%8C%E5%A4%A7%E4%BA%8E'
    -d 'sms_param=%7B%5C%22code%5C%22%3A%5C%221234%5C%22%2C%5C%22product%5C%22%3A%5C%22alidayu%5C%22%7D'
    -d 'sms_template_code=SMS_585014'
    -d 'sms_type=normal'

      

     
    亿美软通短信平台比较古老了。现在很少用
    模拟下自己写的脚本发告警流程
    脚本放在下面目录下/usr/lib/zabbix/alertscripts
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@linux-node1 ~]# cd /usr/lib/zabbix/alertscripts
    [root@linux-node1 alertscripts]# ls
    [root@linux-node1 alertscripts]# vim sms.sh
    [root@linux-node1 alertscripts]# chmod +x sms.sh
    [root@linux-node1 alertscripts]# cat sms.sh
    #!/bin/bash
    ALERT_TO=$1
    ALERT_TITLE=$2
    ALERT_BODY=$3
     
    echo $ALERT_TO >> /tmp/sms.log
    echo $ALERT_TITLE >> /tmp/sms.log
    echo $ALERT_BODY >> /tmp/sms.log
    [root@linux-node1 alertscripts]#

      

     
    创建新的告警介质
    脚本需要加参数,从脚本里取,用大括号括起来,这3个参数分别是$1,$2,$3
     
     
     
     
    改action
     
     
    用户这里
     
     
    触发报警
     
     
     
     
    模拟发送成功,实际自己写的脚本就该这么个架构
    1
    2
    3
    4
    5
    [root@linux-node1 tmp]# tail -5 /tmp/sms.log
    xxxx38@qq.com
    PROBLEM: Nginx Active > 1
     Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*tus[nginx_status,8080,active]): 3
    [root@linux-node1 tmp]#

      

     
     
     
    Zabbix监控MySQL
    zabbix自带监控mysql的脚本,真正生产喜欢用的是percona的脚本
    percona也有自己的mysql,在某些方面它比官方的性能更好
    下面链接
     
     
     
    最早是由cacti改的,由于zabbix太火了。没支持zabbix的不行了,就要被淘汰。
    它使用php脚本连接mysql
    要监控mysql的话,agent端必须安装php和phpmysql
     
     
     
     
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm  -y
     
    [root@linux-node1 ~]# yum install percona-zabbix-templates php php-mysql -y
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirror01.idc.hinet.net
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    Package percona-zabbix-templates-1.1.7-2.noarch already installed and latest version
    Package php-5.4.16-42.el7.x86_64 already installed and latest version
    Package php-mysql-5.4.16-42.el7.x86_64 already installed and latest version
    Nothing to do
    [root@linux-node1 ~]#

      

     

    相关知识点
    1、php脚本用来采集数据
    2、shell调用这个php
    3、zabbix配置文件
    4、zabbix模板文件

     
    拷贝模板配置文件到zabbix配置文件目录下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@linux-node1 ~]# rpm -ql percona-zabbix-templates
    /var/lib/zabbix/percona
    /var/lib/zabbix/percona/scripts
    /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
    /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
    /var/lib/zabbix/percona/templates
    /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
    /var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.7.xml
    [root@linux-node1 ~]# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
    [root@linux-node1 ~]#

      

     
    查看
    1
    2
    3
    4
    5
    [root@linux-node1 ~]# cd /etc/zabbix/zabbix_agentd.d/
    [root@linux-node1 zabbix_agentd.d]# ls
    linux.conf  userparameter_mysql.conf          zabbix_linux_plugin.sh
    nginx.conf  userparameter_percona_mysql.conf
    [root@linux-node1 zabbix_agentd.d]#

      

    重启zabbix-agent
    1
    2
    [root@linux-node1 scripts]# systemctl restart zabbix-agent.service
    [root@linux-node1 scripts]#

      

     
    这个shell脚本是调用php脚本
    这个配置文件需要拷贝到agent下面
    这个模板文件用于导出zabbix server
     
    percona自带的模板不能用。
     
     
    查看此配置文件,都是一些自定义的key,key的值通过脚本获取
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@linux-node1 zabbix_agentd.d]# tail -10 userparameter_percona_mysql.conf
    UserParameter=MySQL.log-writes,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh hg
    UserParameter=MySQL.Query-time-count-04,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh op
    UserParameter=MySQL.Query-time-count-05,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh oq
    UserParameter=MySQL.Query-time-count-06,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh or
    UserParameter=MySQL.Query-time-count-07,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh os
    UserParameter=MySQL.Query-time-count-08,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ot
    UserParameter=MySQL.Query-time-count-09,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ou
    UserParameter=MySQL.Open-files,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ij
    UserParameter=MySQL.State-closing-tables,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh lq
    UserParameter=MySQL.running-slave,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
    [root@linux-node1 zabbix_agentd.d]#

      

     
    通过下面脚本获取key的value
     
    1
    2
    3
    4
    [root@linux-node1 zabbix_agentd.d]# cd /var/lib/zabbix/percona/scripts
    [root@linux-node1 scripts]# ls
    get_mysql_stats_wrapper.sh  ss_get_mysql_stats.php
    [root@linux-node1 scripts]#

      

    创建连接mysql的配置文件,由于root密码是空。所以这里也写的空
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [root@linux-node1 scripts]# cat ss_get_mysql_stats.php.cnf
    <?php
    $mysql_user = 'root';
    $mysql_pass = '';
    [root@linux-node1 scripts]#
    [root@linux-node1 scripts]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 9629
    Server version: 5.5.52-MariaDB MariaDB Server
     
    Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
     
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
     
    MariaDB [(none)]> exit
    Bye
    [root@linux-node1 scripts]#

      

     
    测试下此目录下脚本执行是否正常
    1
    2
    3
    [root@linux-node1 scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
    0
    [root@linux-node1 scripts]#

      

    注意此脚本默认配置。如果不符合需要更改。这里由于mysql是yum安装的,环境变量没问题,另外授权登录也是localhost
    1
    2
    3
    [root@linux-node1 scripts]# ll get_mysql_stats_wrapper.sh
    -rwxr-xr-x 1 root root 1251 Dec 10 02:22 get_mysql_stats_wrapper.sh
    [root@linux-node1 scripts]#

      

    这是监控脚本默认的地方,一些东西需要改,比如mysql全路径
    默认是localhost权限
     
    给node1添加模板
     
    脚本没问题,加入监控监控没问题
    脚本调用了php
    1
    2
    3
    [root@linux-node1 scripts]# ./get_mysql_stats_wrapper.sh gm
    1
    [root@linux-node1 scripts]#

      

     
     
     
    Zabbix-Web监控
     
    现在zabbix-get报错,因为原先是root权限执行的脚本,它会在tmp目录下生成下面文件。
    1
    2
    3
    4
    [root@linux-node1 scripts]# zabbix_get -s 192.168.58.11 -k MySQL.max-connections
    rm: cannot remove ‘/tmp/localhost-mysql_cacti_stats.txt’: Operation not permitted
    151
    [root@linux-node1 scripts]#

      

    重新授权下
    1
    2
    3
    4
    5
    6
    7
    8
    [root@linux-node1 scripts]# ll /tmp/localhost-mysql_cacti_stats.txt
    -rw-r--r-- 1 root root 1406 Mar 26 22:15 /tmp/localhost-mysql_cacti_stats.txt
    [root@linux-node1 scripts]# chown zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt
    [root@linux-node1 scripts]# ll /tmp/localhost-mysql_cacti_stats.txt
    -rw-r--r-- 1 zabbix zabbix 1406 Mar 26 22:15 /tmp/localhost-mysql_cacti_stats.txt
    [root@linux-node1 scripts]# zabbix_get -s 192.168.58.11 -k MySQL.max-connections
    151
    [root@linux-node1 scripts]#

      

     
     
     
    1
    2
    3
    4
    5
    6
    7
    8
    [root@linux-node1 ~]# curl --head http://192.168.58.12:8080/
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Type: text/html;charset=UTF-8
    Transfer-Encoding: chunked
    Date: Sun, 26 Mar 2017 15:14:17 GMT
     
    [root@linux-node1 ~]#

      

     
     
     
     
    它不依赖于agent,是server自己的
    创建一个web场景
     
     
     
    agent这里你可以选择一个浏览器
    以前也有浏览器,但是没3.0这么全
    默认使用agent了
     
    步骤这里
     
     
    add
    add之后
     
     
     
    认证相关
     
    认证不配置,点击add即可
     
     
     
    add之后
    系统默认没加触发器
     
     
     
    monitor---web看到如下
     
     
    这个step的里面下面的作用是,从它会默认从监控的页面里找匹配的字符串,匹配到了它返回OK
    假如你不想仅仅看状态的话,
    假如你还想看页面关键字
     
     
    开始手动加触发器,所以最好写个模板
     
     
    添加表达式
     
     
     
     
     
     
     
     
    停止tomcat主动触发告警,测试
     
    1
    2
    3
    4
    5
    6
    7
    8
    [root@linux-node2 ~]# /usr/local/tomcat/bin/shutdown.sh
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    [root@linux-node2 ~]# lsof -i:8080
    [root@linux-node2 ~]#

      


    服务器时间不对,导致报警没显示
     
     
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@linux-node1 ~]# date
    Mon Mar 27 08:45:34 CST 2017
    [root@linux-node1 ~]# systemctl restart ntpd
    [root@linux-node1 ~]# date
    Mon Mar 27 08:45:46 CST 2017
    [root@linux-node1 ~]# date
    Mon Mar 27 08:45:47 CST 2017
    [root@linux-node1 ~]# date
    Mon Mar 27 08:45:48 CST 2017
    [root@linux-node1 ~]# date
    Wed Mar 29 23:10:17 CST 2017
    [root@linux-node1 ~]#

      

     
     
    时间对了之后,再次刷新就显示了
     
    发送告警也OK
     
     
    这是现网用的action告警信息。删了很多
    保证70个字符以内
     
     
    状态:{TRIGGER.STATUS}
    主机: ({HOST.NAME1}
    监控项:{ITEM.KEY1}):{ITEM.VALUE1}
     
     
     
     
    模拟故障测试方法2,模拟404故障
    1
    2
    3
    4
    5
    [root@linux-node2 webapps]# mv ROOT ROOT2
    [root@linux-node2 webapps]# ls
    docs  examples  host-manager  manager  ROOT2
    [root@linux-node2 webapps]# mv ROOT2 ROOT
    [root@linux-node2 webapps]#

      

     
    告警很快下面这里告警比上面关闭tomcat导致端口不可达的告警快很多。模拟404这种发现问题立马告警
     
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@linux-node1 ~]# tail -f /tmp/sms.log
     Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*e=Runtime",Uptime]): 00:00:09
    525031638@qq.com
    PROBLEM: linux-node2 is not reachable
     Original ev* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*e=Runtime",Uptime]): 00:00:25
    525031638@qq.com
    状态:OK
     监控项:jmx["java.lang:type=Runtime",Uptime]):00:00:5
    525031638@qq.com
    状态:PROBLEM
     监控项:web.test.rspcode[tomcat web monitor,tomcat index]):40

      

     
     
    关于web监控的密码验证,可以post过去用户名和密码
     
     
     
     
     
    打印机没纸都可以监控,通过snmp
     
     
     
     
    Zabbix监控模式
     
    怎么看zabbix server能不能抗住,看队列就行了,看看item更新超时时间
     
     
     

    为什么使用主动模式
    1、监控主机多,性能跟不上,延迟大
    2、多机房,防火墙

    Zabbix轻松解决。Nagios不太好解决
    针对Agent来说
    1、被动模式
    2、主动模式,active

    当监控主机超过300+,建议使用主动模式

     
     
    改成主动模式,这里改成需要0
     
     
    如果你不设置主机名,它会根据item获取
    日志模式设置的地方。
    1
    2
    [root@linux-node2 webapps]# systemctl restart zabbix-agent.service
    [root@linux-node2 webapps]#

      

    网页制作主动监控模式模板

     
     
     
     
     
     
     
     link的模板去掉。link主动监控的模板
     
     
     
     
     
     
     

    add之后

     
     
     
     
     
     

    这里都变成active的了

     
     
     
     
     更改items为主动模式
     
     
     
     
     
     
     
     
     
     key的类型都变成active的了
     
     
     修改node2的模板为主动模式模板
     
     
     
     
     它的状态
     
     
     
     数据获取成功
     
  • 相关阅读:
    file.delete()删除文件失败
    Axure RP Extension for Chrome插件离线安装
    C#---EF映射MySQL
    C#--二维数组
    MySQL--增删改查分页存储过程以及事务
    C# --MVC实现简单上传下载
    配置SQLServer,允许远程连接
    C#——工厂模式
    C#--条形码和二维码的简单实现
    C#—接口和抽象类的区别?
  • 原文地址:https://www.cnblogs.com/wuhg/p/10476561.html
Copyright © 2011-2022 走看看