前言:由于公司服务器较多,因此需要对多台主机做监控很麻烦,由此又踩了个坑。

以下环境是Zabbix 2.4版本。


* 一、实现多主机密钥登陆


* 二、使用ansible对多主机进行安装agent


* 三、Zabbix添加自动发现


一、实现多主机密钥登陆

Zabbix server 创建密钥:

[root@test ~]# ssh-keygen -t rsa 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/meihua/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/meihua/.ssh/id_rsa.
Your public key has been saved in /home/meihua/.ssh/id_rsa.pub.
The key fingerprint is:
38:41:a2:fb:a0:1f:d8:4f:97:5c:dd:74:aa:af:c3:dd meihua@mh-test4
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
|    . .          |
|   . o           |
|  .   .     . .  |
|   .   o . o o   |
|  o   o S . o    |
| + o . +   .     |
|o o o +  ... .   |
| . + .    o.. E  |
|  . .     .o.    |
+-----------------+

        

使用脚本将密钥传递给每个主机: 

          由于密码是在TXT中记录好的,新建一个文件导入即可

#!/bin/env bash
#
source /etc/profile
while read A;do
   IP=$(echo $A|awk '{print $1}')           * 取出主机IP
   passwd=$(echo $A|awk '{print $3}')       * 取出主机密码
   /usr/bin/expect <<EOF                    * expect交互式键入
   set timeout -1                           * 设置永不超时
   spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $IP   
   expect { 
# 对从未访问的主机键入yes
      -re "Are you sure you want to continue connecting (yes/no)?" {  
          send "yes\r"   
          exp_continue
      }
# 将密码进行键入
      -re "password:" {
          send "$passwd\r"
          exp_continue
      }
   }
   expect eof
EOF
done < user.list
# vim user.list
172.16.1.100  root   ABCDEFGHIJK
172.16.2.100  root   ABCDEFGHIJK
172.16.3.100  root   ABCDEFGHIJK
172.16.4.100  root   ABCDEFGHIJK


二、使用ansible对多主机进行安装agent

# cat /etc/ansible/hosts   * 将agent的IP写入hosts文件
[zabbix_user]
172.16.1.100
172.16.2.100
172.16.3.100
172.16.4.100
# tree
.
├── ansible.cfg
├── hosts
├── hosts.bak
├── roles
│   └── zabbix
│       ├── files          * 将需要安装的软件包及zabbix_agent的配置文件放置files下
│       │   ├── zabbix-2.4.7-1.el6.x86_64.rpm
│       │   ├── zabbix-agent-2.4.7-1.el6.x86_64.rpm
│       │   ├── zabbix_agentd.conf
│       │   ├── zabbix-get-2.4.7-1.el6.x86_64.rpm
│       │   └── zabbix-sender-2.4.7-1.el6.x86_64.rpm
│       ├── handlers
│       │   └── main.yml
│       └── tasks
│           └── main.yml
└── zabbix.yml
# cat /etc/ansible/roles/zabbix/handles/tasks/main.yml
- name: Create file directory                           * 创建包存放目录
  file: path=/packages/zabbix/ state=directory 
- name: Copy The Zabbix agent packages to destination   * 将包复制过去
  copy: src={{ item }} dest=/packages/zabbix/ 
  with_items:
     - zabbix-agent-2.4.7-1.el6.x86_64.rpm
     - zabbix-2.4.7-1.el6.x86_64.rpm
     - zabbix-sender-2.4.7-1.el6.x86_64.rpm
     - zabbix-get-2.4.7-1.el6.x86_64.rpm
- name: install local files                             * 通过yum安装
  yum: name={{ item }} state=present
  with_items:
     - /packages/zabbix/zabbix-get-2.4.7-1.el6.x86_64.rpm
     - /packages/zabbix/zabbix-2.4.7-1.el6.x86_64.rpm
     - /packages/zabbix/zabbix-sender-2.4.7-1.el6.x86_64.rpm
     - /packages/zabbix/zabbix-agent-2.4.7-1.el6.x86_64.rpm
- name: local file synchronization                      * 将配置文件复制过去
  copy: src=zabbix_agentd.conf dest=/etc/zabbix/zabbix_agentd.conf
  notify:  
     - restart local server
- name: start local Server                              * 启动zabbix-agentd
  service: name=zabbix-agent state=started
# cat /etc/ansible/roles/zabbix/handlers/main.yml       * 配置文件变更时重启
- name: restart local server
  service: name=zabbix-agent state=restarted
# ansible-play /etc/ansible/zabbix.yml                  * 执行即可

     

  三、Zabbix添加自动发现

       坑:由于公司主机较多,因此需要通过Zabbix Discovery进行添加,减少工作量。但此时遇到了第一个  “坑——B类地址自动发现”。

       通常都习惯了Zabbix的自动发现是C类的,因此B类地址需要特殊的设置方式,配置方法如下:


自动发现IP添加:

       C类添加方式:

                 192.168.0.1-254

       B类添加方式:

                 192.168.0-16.0-254         (注:地址范围数目大小要小于64K)

       掩码添加方式:

                  192.168.0.0/24                 (注:掩码仅支持16-30)


=== 配置自动发现Configuration——》Discovery

wKiom1dME36BTttyAACMxj9xHTk026.png=== 选择添加规则

wKioL1dMCy7iOX9UAABwfmos_EI007.png

=== 选择添加host操作

wKioL1dMC0Pyul4ZAABfovbvxzg163.png

=== 完成自动发现

wKiom1dMEx3TdO1JAAGGeU79jb4037.png


脚本写的比较烂,但是能实现就好,就是自动发现的B类地址要查看以下官方文档,其他还算是正常工作。