• zabbix实现百台服务器的自动化监控--技术流ken


    前言

    最近有小伙伴通过Q联系到我说:公司现在有百多台服务器,想要部署zabbix进行监控,怎么实现自动化全网监控?

    本篇博客将讲解一个我工作时做的一个实际项目,现在写出来供大家以后参考使用。

    实现自动化全网监控,需要用到脚本,以及zabbix的自动注册或者自动发现的功能。以前也写过一篇关于两者的博客《分布式系统监视zabbix讲解八之自动发现/自动注册--技术流ken》,但是内容可能没有那么详尽,本篇博客将详细完整的演示如何使用zabbix实现百台服务器的自动化监控。

    zabbix自动注册

    活动的Zabbix agent可以自动注册到服务器进行监控。这种方式无需在服务器上手动配置它们。

    当以前未知的active agent要求检查时,会发生自动注册。

    该功能可能非常方便自动监控新的节点。一旦在集群中有一个新节点,Zabbix将自动启动主机监控,并进行性能和可用性数据的收集。

    Active agent自动注册还支持对被添加的主机进行被动检查的监控。当active agent要求检查时,提供它配置文件中定义的“ListenIP”或“ListenPort”配置参数,这些参数将发送到服务器。(如果指定了多个IP地址,则第一个将被发送到服务器。)

    服务器在添加新的自动注册主机时,使用接收到的IP地址和端口配置agent。如果没有接收到IP地址值,则使用传入连接的IP地址。如果没有接收到端口值,则使用10050。

    注:自动注册需要把agent运行在主动模式即 serveractive=服务器端地址

    zabbix自动发现

    自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法。例如,Zabbix可以在你的机器上自动开始监控文件系统或网络接口,而无需为每个文件系统或网络接口手动创建监控项。此外,可以配置Zabbix根据定期执行发现后的得到实际结果,来移除不需要的监控项。

    自动化分发密钥

    本篇博客将会是强调自动化,实现自动化的前提就是实现服务器与从节点的互信。

    下面的脚本将会完成密钥的自动化分发。

    #!/bin/bash
    #author:技术流ken
    #date:2018-12-2
    #desc: auto-deliver keys to clients
    . /etc/init.d/functions
    #下载expect
    yum install expect -y &>/dev/null
    if [ $? -eq 0 ];then
            echo -n "download expect"
            success
            echo ""
    else
            echo -n "download expect"
            failure
            echo ""
            exit 8
    fi
    #删除保存的秘钥信息
    if [ -f id_rsa -o -f id_rsa.pub -o known_hosts ];then
            rm -rf /root/.ssh/id*
            rm -rf /root/.ssh/known*
    fi
    #自动生成秘钥对
    /usr/bin/expect<<eof
    spawn ssh-keygen 
    expect {
    "(/root/.ssh/id_rsa)" {send 
    ;exp_continue}
    "passphrase" {send 
    ;exp_continue}
    "again" {send 
    }
    }
    expect eof
    exit
    eof
    #在各个节点分发秘钥
    for i in 2 7 8 9 10 11
    do
    ken=172.20.10.$i
    /usr/bin/expect<<eof
    spawn ssh-copy-id $ken
    expect {
    "yes/no" {send yes
    ;exp_continue}
    "password" {send o
    }
    }
    expect eof
    exit
    eof
    done

    自动化配置从节点

    现在我们已经为各个节点分发了密钥,如果还一个一个配置从节点真的是台low了。下面我就为大家提供两种解决方案。

    第一种:shell脚本

    #!/bin/bash
    #author:技术流ken
    #date:2018-12-2
    #desc:this script for downloading zabbix-agent for clients
    ip=172.20.10.
    for i in 2 7 8 9 10 11
    do
       ssh $ip$i yum install zabbix-agent -y  &>/dev/null
       scp /root/zabbix_agentd.conf $ip$i:/etc/zabbix/zabbix_agentd.conf &>/dev/null
       ssh $ip$i systemctl restart zabbix-agent &>/dev/null
    done

    第二种:ansible剧本

    - hosts: all
      tasks:
        - copy: src=/etc/yum.repos.d/zabbix.repo dest=/etc/yum.repos.d/
        - yum: name=zabbix-agent state=present
        - copy: src=/etc/zabbix/zabbix_agentd.conf dest=/etc/zabbix/zabbix_agentd.conf
        - service: name=zabbix-agent state=restarted

    zabbix自动注册实现全网监控

    第一步:执行分发密钥脚本

    [root@server ~]# bash keys.sh 
    [root@server ~]# cat keys.sh 
    #!/bin/bash
    #author:技术流ken
    #date:2018-12-2
    #desc: auto-deliver keys to clients
    . /etc/init.d/functions
    #下载expect
    yum install expect -y &>/dev/null
    if [ $? -eq 0 ];then
            echo -n "download expect"
            success
            echo ""
    else
            echo -n "download expect"
            failure
            echo ""
            exit 8
    fi
    #删除保存的秘钥信息
    if [ -f id_rsa -o -f id_rsa.pub -o known_hosts ];then
            rm -rf /root/.ssh/id*
            rm -rf /root/.ssh/known*
    fi
    #自动生成秘钥对
    /usr/bin/expect<<eof
    spawn ssh-keygen 
    expect {
    "(/root/.ssh/id_rsa)" {send 
    ;exp_continue}
    "passphrase" {send 
    ;exp_continue}
    "again" {send 
    }
    }
    expect eof
    exit
    eof
    #在各个节点分发秘钥
    for i in 2 7 8 9 10 11
    do
    ken=172.20.10.$i
    /usr/bin/expect<<eof
    spawn ssh-copy-id $ken
    expect {
    "yes/no" {send yes
    ;exp_continue}
    "password" {send o
    }
    }
    expect eof
    exit
    eof
    done

    第二步:准备zabbix-agent的配置文件

    需要修改三处:

    1. 主动模式,IP指向监控服务器端

    2.server执行服务器端

    3.注销掉hostname,修改为主机名自动获取

    [root@ken ~]# vim /etc/zabbix/zabbix_agentd.conf
       Server=172.20.10.6
       ServerActive=172.20.10.6
       # Hostname=
       HostnameItem=system.hostname

    第三步:配置ansible主机文件

    在该文件末行填写如下内容

    [7:11]表示7-11即7,8,9,11,12

    [root@server ~]# vim /etc/ansible/hosts 
    [ken]
    172.20.10.2
    172.20.10.[7:11]

    第四步:检查ansible剧本

    [root@server ~]# ansible-playbook --syntax-check auto_ins.yml 
    
    playbook: auto_ins.yml

    第五步:执行剧本

    第四步检查无误后即可进行执行

    [root@server ~]# ansible-playbook auto_ins.yml 
    
    PLAY [all] **************************************************************************************************************
    
    TASK [Gathering Facts] **************************************************************************************************
    ok: [172.20.10.9]
    ok: [172.20.10.8]
    ok: [172.20.10.2]
    ok: [172.20.10.10]
    ok: [172.20.10.7]
    ok: [172.20.10.11]
    
    TASK [copy] *************************************************************************************************************
    changed: [172.20.10.8]
    changed: [172.20.10.7]
    changed: [172.20.10.10]
    changed: [172.20.10.2]
    changed: [172.20.10.9]
    changed: [172.20.10.11]
    
    TASK [yum] **************************************************************************************************************
    ok: [172.20.10.7]
    ok: [172.20.10.2]
    changed: [172.20.10.8]
    changed: [172.20.10.9]
    changed: [172.20.10.10]
    changed: [172.20.10.11]
    
    TASK [copy] *************************************************************************************************************
    changed: [172.20.10.9]
    ok: [172.20.10.2]
    changed: [172.20.10.8]
    ok: [172.20.10.7]
    changed: [172.20.10.10]
    changed: [172.20.10.11]
    
    TASK [service] **********************************************************************************************************
    changed: [172.20.10.7]
    changed: [172.20.10.10]
    changed: [172.20.10.2]
    changed: [172.20.10.8]
    changed: [172.20.10.9]
    changed: [172.20.10.11]
    
    PLAY RECAP **************************************************************************************************************
    172.20.10.10               : ok=5    changed=4    unreachable=0    failed=0   
    172.20.10.11               : ok=5    changed=4    unreachable=0    failed=0   
    172.20.10.2                : ok=5    changed=2    unreachable=0    failed=0   
    172.20.10.7                : ok=5    changed=2    unreachable=0    failed=0   
    172.20.10.8                : ok=5    changed=4    unreachable=0    failed=0   
    172.20.10.9                : ok=5    changed=4    unreachable=0    failed=0   

    第六步:配置zabbix自动注册

    点击   配置>动作>自动注册>创建动作

    动作中只需填写一个名称

    条件中不需要填写任何东西

    操作中选择如下三项,然后点击添加即可

    这样就创建好了一个自动注册的策略

    第七步:查看主机

     等待大约十几秒钟之后就可以看到我们想要监控的主机已经自动添加进来了

    zabbix自动发现实现全网监控

    第一步:修改zabbix-agent的配置文件

    自动发现和自动注册客户端配置一样!!

    server以及serveractive后面的IP地址都指向zabbix的监控服务器端

    [root@ken ~]# vim /etc/zabbix/zabbix_agentd.conf
       Server=172.20.10.6
       ServerActive=172.20.10.6
       # Hostname=
       HostnameItem=system.hostname


    第二步:再次执行ansible剧本
    剧本无需任何修改
    [root@server ~]# ansible-playbook auto_ins.yml 
    
    PLAY [all] **************************************************************************************************************
    
    TASK [Gathering Facts] **************************************************************************************************
    ok: [172.20.10.2]
    ok: [172.20.10.8]
    ok: [172.20.10.9]
    ok: [172.20.10.10]
    ok: [172.20.10.7]
    ok: [172.20.10.11]
    
    TASK [copy] *************************************************************************************************************
    ok: [172.20.10.10]
    ok: [172.20.10.8]
    ok: [172.20.10.7]
    ok: [172.20.10.2]
    ok: [172.20.10.9]
    ok: [172.20.10.11]
    
    TASK [yum] **************************************************************************************************************
    ok: [172.20.10.10]
    ok: [172.20.10.2]
    ok: [172.20.10.7]
    ok: [172.20.10.9]
    ok: [172.20.10.8]
    ok: [172.20.10.11]
    
    TASK [copy] *************************************************************************************************************
    changed: [172.20.10.7]
    changed: [172.20.10.9]
    changed: [172.20.10.10]
    changed: [172.20.10.8]
    changed: [172.20.10.2]
    changed: [172.20.10.11]
    
    TASK [service] **********************************************************************************************************
    changed: [172.20.10.10]
    changed: [172.20.10.7]
    changed: [172.20.10.9]
    changed: [172.20.10.8]
    changed: [172.20.10.2]
    changed: [172.20.10.11]
    
    PLAY RECAP **************************************************************************************************************
    172.20.10.10               : ok=5    changed=2    unreachable=0    failed=0   
    172.20.10.11               : ok=5    changed=2    unreachable=0    failed=0   
    172.20.10.2                : ok=5    changed=2    unreachable=0    failed=0   
    172.20.10.7                : ok=5    changed=2    unreachable=0    failed=0   
    172.20.10.8                : ok=5    changed=2    unreachable=0    failed=0   
    172.20.10.9                : ok=5    changed=2    unreachable=0    failed=0   

    第三步:zabbix在web端添加自动发现

    点击创建发现规则

    输入你想要的名称

    需要检测的IP地址范围

    检查规则采用icmp ping的方式

    第四步:查看发现的主机
    点击检测中>自动发现 就可以看到已经检测到的主机了

    但是可以发现我们现在仅仅只是检测到了这些主机,还没有真正的进行监控

    第四步:配置发现动作
    点击配置>动作>自动发现>创建动作

    条件这里只需要输入名称即可

    条件这里需要输入你的检测的主机的IP范围

    操作这里添加如下规则即可。

    第五步:查看主机
    和自动注册不同,自动发现加入到主机的时间比较长,大概需要十几二十分钟,耐心等待即可。(自动注册只需要十几秒)
    可以发现所有的主机都已经被添加进了host里面进行了监控



  • 相关阅读:
    C# tcp发送十六进制数据
    WPF中通过AForge实现USB摄像头拍照
    借鉴过的别人的帖子之C#篇
    C# 连续的语音识别
    C# NAudio 录音
    AS3 水波纹
    ARM多核心集群服务器
    RK3399Pro Android Rock-X 人工智能开发系列(2)
    智能化连锁门店解决方案
    RK3399Pro Android Rock-X 人工智能开发系列(1)
  • 原文地址:https://www.cnblogs.com/kenken2018/p/10053220.html
Copyright © 2020-2023  润新知