一、创建ansible roles目录
[root@ansible ~]# mkdir -p ansible/roles/zabbix/{files,handlers,tasks,templates,vars}
二、编写各个文件
2.1 tasks目录中的文件
[root@ansible ~]# cat ansible/roles/zabbix/tasks/main.yaml - include: /root/ansible/roles/sysinit/tasks/epel.yml - include: install.yaml - include: create_dir.yml - include: copy_scripts.yml - include: configure.yaml - include: start.yaml [root@ansible ~]# cat /root/ansible/roles/sysinit/tasks/epel.yml - name: CentOS7 Yum Epel copy: src=/root/ansible/roles/sysinit/files/epel-7.repo dest=/etc/yum.repos.d/epel-7.repo when: ansible_distribution_major_version == "7" - name: CentOS6 Yum Epel copy: src=/root/ansible/roles/sysinit/files/epel-6.repo dest=/etc/yum.repos.d/epel-6.repo when: ansible_distribution_major_version == "6" [root@ansible ~]# cat /root/ansible/roles/sysinit/files/epel-7.repo [epel] name=Extra Packages for Enterprise Linux 7 - $basearch baseurl=http://mirrors.aliyun.com/epel/7/$basearch failovermethod=priority enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [epel-debuginfo] name=Extra Packages for Enterprise Linux 7 - $basearch - Debug baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=0 [epel-source] name=Extra Packages for Enterprise Linux 7 - $basearch - Source baseurl=http://mirrors.aliyun.com/epel/7/SRPMS failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=0 [root@ansible ~]# cat /root/ansible/roles/sysinit/files/epel-6.repo [epel] name=Extra Packages for Enterprise Linux 6 - $basearch baseurl=http://mirrors.aliyun.com/epel/6/$basearch failovermethod=priority enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [epel-debuginfo] name=Extra Packages for Enterprise Linux 6 - $basearch - Debug baseurl=http://mirrors.aliyun.com/epel/6/$basearch/debug failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 gpgcheck=0 [epel-source] name=Extra Packages for Enterprise Linux 6 - $basearch - Source baseurl=http://mirrors.aliyun.com/epel/6/SRPMS failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 gpgcheck=0 [root@ansible ~]# cat ansible/roles/zabbix/tasks/install.yaml - name: Install zabbix22-agent yum: name=zabbix22-agent state=present when: ansible_distribution_major_version == "6" - name: Install zabbix40-agent yum: name=zabbix40-agent state=present when: ansible_distribution_major_version == "7" [root@ansible ~]# cat ansible/roles/zabbix/tasks/create_dir.yml - name: create dir file: path=/etc/zabbix/zabbix_agentd.d/ state=directory [root@ansible ~]# cat ansible/roles/zabbix/tasks/copy_scripts.yml - name: copy tcp conn status scripts copy: src=tcp_conn_status.sh dest=/etc/zabbix/ mode=755 [root@ansible ~]# cat ansible/roles/zabbix/tasks/configure.yaml - name: Configure zabbix-agent7 template: src=zabbix_agentd.conf.j2 dest=/etc/zabbix_agentd.conf when: ansible_distribution_major_version == "7" notify: restart zabbix-agent - name: Configure zabbix-agent6 template: src=zabbix_agentd_6.conf.j2 dest=/etc/zabbix_agentd.conf when: ansible_distribution_major_version == "6" notify: restart zabbix-agent [root@ansible ~]# cat ansible/roles/zabbix/tasks/start.yaml - name: Start zabbix-agent service: name=zabbix-agent state=started enabled=yes
2.2 handlers目录
[root@ansible ~]# cat ansible/roles/zabbix/handlers/main.yml - name: restart zabbix-agent service: name=zabbix-agent state=restarted
2.3 templates目录
[root@ansible ~]# cat ansible/roles/zabbix/templates/zabbix_agentd.conf.j2 PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server={{ zabbix_server }} Hostname={{ ansible_eth0['ipv4']['address'] }} Include=/etc/zabbix/zabbix_agentd.d/*.conf UnsafeUserParameters=1 UserParameter=tcp.status[*],/etc/zabbix/tcp_conn_status.sh $1 [root@ansible ~]# cat ansible/roles/zabbix/templates/zabbix_agentd_6.conf.j2 PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server={{ zabbix_server }} Hostname={{ ansible_eth0['ipv4']['address'] }} Include=/etc/zabbix/zabbix_agentd.d/ UnsafeUserParameters=1 UserParameter=tcp.status[*],/etc/zabbix/tcp_conn_status.sh $1
2.4 files目录
[root@192-168-5-55 ~]# cat ansible/roles/zabbix/files/tcp_conn_status.sh #!/bin/bash #this script is used to get tcp and udp connetion status #tcp status metric=$1 tmp_file=/tmp/tcp_status.txt /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' > $tmp_file case $metric in closed) output=$(awk '/CLOSED/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; listen) output=$(awk '/LISTEN/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; synrecv) output=$(awk '/SYN_RECV/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; synsent) output=$(awk '/SYN_SENT/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; established) output=$(awk '/ESTABLISHED/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; timewait) output=$(awk '/TIME_WAIT/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; closing) output=$(awk '/CLOSING/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; closewait) output=$(awk '/CLOSE_WAIT/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; lastack) output=$(awk '/LAST_ACK/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; finwait1) output=$(awk '/FIN_WAIT1/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; finwait2) output=$(awk '/FIN_WAIT2/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; *) echo -e "e[033mUsage: sh $0 [closed|closing|closewait|synrecv|synsent|finwait1|finwait2|listen|established|lastack|timewait]e[0m" esac
2.5 vars目录
[root@ansible ~]# cat ansible/roles/zabbix/vars/main.yml zabbix_server: 192.168.5.237
3、执行文件入口和方法
[root@ansible ~]# cat ansible/zabbix-agent.yml - hosts: "{{ group }}" remote_user: root roles: - role: zabbix
# 为192.168.0.100安装zabbix-agent,此IP必须先在/etc/ansible/hosts文件中存在 [root@ansible ~]# ansible-playbook ansible/zabbix-agent.yml -e group=192.168.0.100