Ansible-playbook批量添加zabbix监控项目、同步配置信息(二)

前言

在上一篇教程中我们已经实现了使用ansible-playbook批量在远程主机上部署zabbix客户端并正常运行,现在我们再次通过ansible-playbook给客户端主机批量增加zabbix监控项目配置(创建监控项目示例:自动发现远程主机监听的TCP端口、监控远程主机的TCP连接数状态)。


Ansible-playbook 配置

在原有的基础目录上创建一个configure角色以及ansible的各个模块任务目录列表,通过ansible-playbook调用入口文件zabbix_configure.yml,使得configure能够调用各个模块功能来完成同步所有zabbix的配置

[[email protected] /etc/ansible/zabbix_rhel/zabbix_agent ]# tree roles/configure/
roles/configure/
├── files
│   └── zabbix_scripts
│       ├── discovery_tcp_port.sh
│       └── tcp_connect_status.sh
├── handlers
│   └── main.yml
├── meta
├── tasks
│   ├── 01-sync-clock.yml
│   ├── 02-allow-sudo.yml
│   ├── 03-sync-conf_files.yml
│   └── main.yml
├── templates
│   ├── Userparameter_script.conf
│   └── zabbix_agentd.conf
└── vars
    └── main.yml
 
7 directories, 10 files

[[email protected] /etc/ansible/zabbix_rhel/zabbix_agent ]# ls
roles  zabbix_configure.yml  zabbix_delete.yml  zabbix_install.yml

1、定义ansible程序入口调用文件

>> zabbix_configure.yml

---
- hosts: testhosts
  remote_user: root
  gather_facts: True
  roles:
    - configure

2、定义tasks任务列表

>> 同步时钟并添加计划任务(01-sync-clock.yml )

---
  - name: Install ntpdate software
    yum: name=ntpdate state=present
 
  - name: Synchronization clock cron job
    cron:
      name: Sync clock
      job: /usr/sbin/ntpdate {{ ntpserver }} &>/dev/null && hwclock -w
      minute: 30
      hour: 7
  - name: Restart crond
    service: name=crond state=restarted
 
  - name: Running ntpdate to synchronization time
    shell: /usr/sbin/ntpdate {{ ntpserver }} && hwclock -w

>> 定义允许zabbix用户使用sudo执行命令的task任务(02-allow-sudo.yml)

---
  - name: Add allow zabbix user to nopasswd exec sudo
    lineinfile:
      dest: /etc/sudoers
      regexp: "^zabbix"
      insertafter: "^root"
      line: "zabbix  ALL=(ALL)       NOPASSWD: ALL"
 
  - name: Add allow zabbix user to nopasswd exec sudo
    lineinfile:
      dest: /etc/sudoers
      regexp: "^Defaults:zabbix"
      line: "Defaults:zabbix    !requiretty"

修改zabbix用户允许使用sudo执行命令,并且不需要输入密码,该task任务可以重复执行,并且不会增加重复的配置

>> 定义同步所有zabbix配置文件的task任务(03-sync-conf_files.yml)

---
- name: Create zabbix scripts directory
  file: dest={{ zabbix_basedir }}/scripts state=directory owner=root group=root mode=0755 recurse=yes
 
- name: Copy zabbix monitor scripts
  copy: src=zabbix_scripts/ dest={{ zabbix_basedir }}/scripts/ owner=root group=root mode=0755
 
- name: Copy zabbix_agentd.conf file
  template: src=zabbix_agentd.conf dest={{ zabbix_basedir }}/etc/zabbix_agentd.conf
            owner=root group=root mode=0644
  notify: restart zabbix_agentd
 
- name: Copy Userparameter_script.conf file
  template: src=Userparameter_script.conf dest={{ zabbix_basedir }}/etc/zabbix_agentd.conf.d/Userparameter_script.conf
            owner=root group=root mode=0644
  notify: restart zabbix_agentd

>> 定义tasks任务列表调用接口文件(main.yml)

---
- include: 01-sync-clock.yml
- include: 02-allow-sudo.yml
- include: 03-sync-conf_files.yml

3、定义vars变量文件

在这里定义zabbix服务端主机名或IP地址,ntp服务器地址等

# cat roles/configure/vars/main.yml
ntpserver: 10.17.87.8
zabbix_basedir: /usr/local/zabbix
zabbix_server_ip: 10.17.81.120

4、定义handlers任务文件

handlers任务在同步配置文件时重启zabbix_agentd服务使配置生效

# cat roles/configure/handlers/main.yml 
---
- name: restart zabbix_agentd
  service: name=zabbix_agentd state=restarted

5、将zabbix脚本统一放到files/zabbix_scripts/目录下

# ls roles/configure/files/zabbix_scripts/
discovery_tcp_port.sh  tcp_connect_status.sh

>> discovery_tcp_port.sh为自动发现客户端主机TCP端口脚本

#!/bin/bash
#Author: HMLinux  Email: [email protected]
#port_array=`netstat -tnlp | sed -e ‘1,2d‘ -e ‘/-/d‘ | awk ‘{print $4}‘ | awk -F‘:‘ ‘{if($NF~/^[0-9]*$/) print $NF}‘ | sort -n | u
niq`
port_array=`netstat -ntlp | sed -e ‘1,2d‘ -e ‘/-/d‘ | awk ‘{print $4" "$NF}‘ | awk -F‘[:/ ]+‘ ‘($NF !~ /^[0-9]*$/) && ($2>18) {pri
nt $2" "$NF}‘ |sort -g|uniq`
tcp_ports=(`echo "$port_array"|cut -d" " -f1`)
proc_name=(`echo "$port_array"|cut -d" " -f2`)
length=${#tcp_ports[@]}
 
printf "{\n"
printf  ‘\t‘"\"data\":["
for ((i=0;i<$length;i++))
do
        printf ‘\n\t\t{‘
        printf ‘\n\t\t\t‘
        printf "\"{#TCP_PORT}\":\"${tcp_ports[$i]}\","
        printf ‘\n\t\t\t‘
        printf "\"{#TCP_NAME}\":\"${proc_name[$i]}\"}"
        if [ $i -lt $[$length-1] ];then
                printf ‘,‘
        fi
done
printf  "\n\t]\n"
printf "}\n"

>> tcp_connect_status.sh为监控客户端主机TCP连接状态脚本

#!/bin/bash
#Author: HMLinux  Email: [email protected]
parameter_l=$1
parameter_u=$(echo $parameter_l | tr ‘[:lower:]‘ ‘[:upper:]‘)
ptcp_status=$(/bin/netstat -an|awk ‘/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}‘ | awk ‘/‘‘‘$parameter_u‘‘‘/{print $2}‘)
case $parameter_l in
    listen)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    established)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    time_wait)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    syn_sent)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    syn_recv)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    closed)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    closing)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    close_wait)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    fin_wait1)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    fin_wait2)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
    lastack)
        if [ "$ptcp_status" == "" ];then
            echo 0
        else
            echo $ptcp_status
        fi
     ;;
 
     *)
        echo -e "\E[33mUsage: sh $0 [closed|closing|close_wait|syn_recv|syn_sent|fin_wait1|fin_wait2|listen|established|lastack|ti
me_wait]\E[0m"
esac

6、将zabbix相关的配置文件放到templates/目录下

# ls roles/configure/templates/
Userparameter_script.conf  zabbix_agentd.con

>> Userparameter_script.conf配置文件,该配置文件定义zabbix监控项目键值与脚本路径

# cat Userparameter_script.conf 
UserParameter=tcp.listen.port,sudo {{ zabbix_basedir }}/scripts/discovery_tcp_port.sh
UserParameter=tcp.connect.status[*],sudo {{ zabbix_basedir }}/scripts/tcp_connect_status.sh $1

>> zabbix_agentd.conf配置文件,该配置文件为zabbix客户端的主配置文件

Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}:10051
Hostname={{ ansible_default_ipv4.address }}
Include={{ zabbix_basedir }}/etc/zabbix_agentd.conf.d
UnsafeUserParameters=1

7、执行zabbix_configure.yml同步zabbix配置

# ansible-playbook zabbix_configure.yml

[[email protected] /etc/ansible/zabbix_rhel/zabbix_agent ]# ansible-playbook zabbix_configure.yml 
 
PLAY [testhosts] ***************************************************************

TASK [setup] *******************************************************************
ok: [10.17.83.33]
ok: [10.17.83.34]

TASK [configure : Install ntpdate software] ************************************
ok: [10.17.83.33]
ok: [10.17.83.34]

TASK [configure : Synchronization clock cron job] ******************************
ok: [10.17.83.33]
ok: [10.17.83.34]

TASK [configure : Restart crond] ***********************************************
changed: [10.17.83.33]
changed: [10.17.83.34]

TASK [configure : Running ntpdate to synchronization time] *********************
changed: [10.17.83.33]
changed: [10.17.83.34]

TASK [configure : Add allow zabbix user to nopasswd exec sudo] *****************
ok: [10.17.83.33]
ok: [10.17.83.34]

TASK [configure : Add allow zabbix user to nopasswd exec sudo] *****************
ok: [10.17.83.33]
ok: [10.17.83.34]

TASK [configure : Create zabbix scripts directory] *****************************
ok: [10.17.83.33]
ok: [10.17.83.34]

TASK [configure : Copy zabbix monitor scripts] *********************************
ok: [10.17.83.33]
ok: [10.17.83.34]

TASK [configure : Copy zabbix_agentd.conf file] ********************************
changed: [10.17.83.33]
changed: [10.17.83.34]

TASK [configure : Copy Userparameter_script.conf file] *************************
ok: [10.17.83.33]
ok: [10.17.83.34]

RUNNING HANDLER [configure : restart zabbix_agentd] ****************************
changed: [10.17.83.33]
changed: [10.17.83.34]

PLAY RECAP *********************************************************************
10.17.83.33                : ok=12   changed=4    unreachable=0    failed=0   
10.17.83.34                : ok=12   changed=4    unreachable=0    failed=0

8、查看同步情况

在ansible服务器上执行

>> 脚本同步

[[email protected] ~ ]# ansible testhosts -m shell -a "ls -l /usr/local/zabbix/scripts/"
10.17.83.33 | SUCCESS | rc=0 >>
total 8
-rwxr-xr-x. 1 root root  837 Jul  5 17:56 discovery_tcp_port.sh
-rwxr-xr-x. 1 root root 1937 Jul  6 18:07 tcp_connect_status.sh
 
10.17.83.34 | SUCCESS | rc=0 >>
total 8
-rwxr-xr-x. 1 root root  837 Jul  6 16:33 discovery_tcp_port.sh
-rwxr-xr-x. 1 root root 1803 Jul  5 17:21 tcp_connect_status.sh

>> 配置文件

[[email protected] ~ ]# ansible testhosts -m shell -a "cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/Userparameter_script.conf"
10.17.83.34 | SUCCESS | rc=0 >>
UserParameter=tcp.listen.port,sudo /usr/local/zabbix/scripts/discovery_tcp_port.sh
UserParameter=tcp.connect.status[*],sudo /usr/local/zabbix/scripts/tcp_connect_status.sh $1
 
10.17.83.33 | SUCCESS | rc=0 >>
UserParameter=tcp.listen.port,sudo /usr/local/zabbix/scripts/discovery_tcp_port.sh
UserParameter=tcp.connect.status[*],sudo /usr/local/zabbix/scripts/tcp_connect_status.sh $1

>> 执行同步过去的监控脚本

配置zabbix监控模版

1、创建监控TCP连接状态模板

Configuration-->Templates--> Create template-->

Ansible Linux Templates-TCP connect status-->Items-->Create Item

2、创建自动发现TCP监听端口模板

Configuration-->Templates--> Create template-->

Ansible Linux Templates-TCP listen ports-->Discovery rules--> Create discovery rule-->Discovery rules -->Item prototypes --> Create Item prototype

配置Zabbix自动发现规则

Configuration-->Actions-->Create action(Discovery)

>> 创建一个名字为Ansible-testhosts的自动发现规则(Action)

>> 添加自动发现IP地址范围

>> 添加链接的主机、监控模版(之前创建的两个监控模版)

完成zabbix配置

在配置完上面所有步骤之后,zabbix服务端就会根据自动发现规则自动添加监控主机与监控项目

>> 查看监控数据

>> 查看监控数据

>> 查看监控数据

END

此后我们仍然可以继续使用ansible管理zabbix远程客户端主机的配置文件、脚本同步、监控项目的添加等。

时间: 2024-10-12 12:31:43

Ansible-playbook批量添加zabbix监控项目、同步配置信息(二)的相关文章

Ansible playbook 批量修改服务器密码 先普通后root用户

fsckzy Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,root不能直接登录,需先登录普通用户,再切换到root. 首先在hosts 下面添加一个组[test],下面跟ip,每行一个. ansible基于ssh连接inventory中指定的远程主机时,将以此处的参数指定的属性进行: ansible_ssh_port 指定ssh 端口 ansible_ssh_u

添加自定义监控项目,配置邮件告警,测试告警,不发邮件的问题处理

添加自定义监控项目 例如需求:监控某台web的80端口连接数,并出图两步:1)zabbix监控中心创建监控项目:2)针对该监控项目以图形展现 对于第一步,需要到客户端定义脚本[[email protected] ~]# vim /usr/local/sbin/estab.sh#!/bin/bash##获取80端口并发连接数netstat -ant |grep ':80 ' |grep -c ESTABLISHED然后给他定义权限chmod 755 /usr/local/sbin/estab.sh

zabbix监控路由器所有接口信息

zabbix监控路由器所有接口信息 作者:尹正杰 1.首先在服务器端安装snmp工具 [[email protected] yinzhengjie]# yum -y install net-snmp-utils snmp-libs snmp-devel snmp 2.检测与路由器的连通性 [[email protected] yinzhengjie]# snmpwalk  -v 2c -c private 192.168.1.1 在执行此命令之前~你首先要确认你的路由器是否开启了snmp功能哟~

[Xcode10 实际操作]九、实用进阶-(8)实现App的Setting设置:添加和读取程序的配置信息

本文将演示如何实现添加和读取程序的配置信息. 在项目文件夹[DemoApp]上点击鼠标右键->[New File]创建一个设置束文件 ->[Settings Bundle]设置束: 如果想要通过设备的[设置]程序,来展示自定义的的偏好设置,必须先准备好一个设置束 ->[Next]->[Save As]:Setting.bundle保持默认的配置. ->保存默认的存储位置点击[Create] 在项目导航区多了一个设置束文件[Setting.bundle]. 点击下拉箭头,查看设

zabbix 安装-添加主机-监控项目-触发器-示警媒介类型-动作

Zabbix安装-创建主机-监控项目-触发器- 示警媒介类型 Zabbix 很强大,很全面,但相对来说,Nagios 要更轻量.灵活,特别是它的插件机制,你可以用自己熟悉的语言实现几乎任何自己想要实现的监控.Nagios 在图表方面相对较弱,如果只是希望实现监控及报警,Nagios 是个不错的选择,至于图表,你可以交给 cacti实现. Zabbix维护相对困难,Nagios维护相对容易,Cacti也是一样.但是Cacti的数据存储方式不是太好,过去的数据太模糊.Nagios的监控相对独立(插件

zabbix通过api批量添加web监控

zabbix 添加web监控始终是大问题,不能自动发现只能手动添加 写了个py脚本 #!/usr/bin/env python # -*- coding: utf-8 -*- import json import urllib2 import sys class zabbixtools:     def __init__(self):         self.url = "Zabbixserver"         self.header = {"Content-Type&

zabbix的添加自定义监控项目、配置邮件告警、测试告警

添加自定义监控项目 1. 需求:监控某台web服务器的80端口并发连接数,并设置图形. 2.分析需求: 在zabbix监控中心创建自定义监控项目; 针对该监控项目以图形展现; 3. 具体操作步骤: 在zabbix-agent端编辑自定义脚本 [[email protected] ~]# vim /usr/local/sbin/estab.sh 编辑脚本内容如下: #!/bin/bash ##获取80端口并发连接数 netstat -ant |grep ':80 ' |grep -c ESTABL

在zabbix上添加自定义监控项目、配置告警且发送告警邮件到指定邮箱

在zabbix上添加自定义监控项目 配置告警且发送告警邮件到指定邮箱 原文地址:http://blog.51cto.com/13515599/2104326

linux监控平台搭建(3)添加自定义监控项目、配置邮件告警、测试警报、不发邮件的问题处理

添加自定义监控项目 很多的监控项,我们都是在配置的模板中设置的,但是模板的选择是不能完全满足到我们生产中 的实际需求.所以我们可以自定义监控项目,通过编写Shell脚本或者python脚本,在脚本中获取数据库中所需业务的数,然后在通过在监控项里添加这个脚本,将脚本获取到的数目以图表的形势展现.这样就有利于运维人员及时发现和分析问题. 需求: 需求:监控某台web的80端口连接数,并出图 两步:1)zabbix监控中心创建监控项目:2)针对该监控项目以图形展现 对于第一步,需要到客户端定义脚本 1