ansible-roles安装zabbix-agent(全、优文章)

1798人浏览 / 0人评论

一、目录结构

[root@jumpserver roles]# tree install_zabbix_agent/
install_zabbix_agent/
├── files
│   └── discovery_tcp_port.sh
├── handlers
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
│   └── zabbix_agentd.conf.j2
└── vars
    └── main.yml

5 directories, 5 files
 

二、yml文件内容

[root@jumpserver roles]# cat install_zabbix_agent/handlers/main.yml 
- name: restart zabbix-agent
  service: name=zabbix-agent state=restarted
 

[root@jumpserver roles]# cat install_zabbix_agent/handlers/main.yml 
- name: restart zabbix-agent
  service: name=zabbix-agent state=restarted
[root@jumpserver roles]# cat install_zabbix_agent/tasks/main.yml 
- name: centos7 download zabbix-agent
  #get_url: 
  #  url: https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm
  yum: 
    name: https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm
    state: present
  when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "7"
  register: install_status

- name: centos6 download zabbix-agent
  yum:
    name: https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm
    state: present
  when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "6"
  register: install_status
                
- name: get install_status
  debug: msg={{install_status}}

- name: config zabbix-agent
  template: src=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf mode=755
  
- name: start zabbix-agent
  service: name=zabbix-agent.service state=restarted enabled=yes

- name: inspect firewalld
  shell: systemctl status firewalld
  register: returnmsg
  ignore_errors: true

- name: config firewalld
  firewalld: port=10050/tcp permanent=yes state=enabled
  when: returnmsg.rc == 0 

- name: create DIR
  file: path={{ file_dir }} state=directory mode=755 owner=jumpserver group=root

- name: copy file
  copy: src=discovery_tcp_port.sh dest=/etc/zabbix/zabbix_agentd.d/script/ mode=755

- name: add zabbix-agent config
  lineinfile: dest=/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf line='UserParameter=discovery.tcpport[*],/etc/zabbix/zabbix_agentd.d/script/discovery_tcp_port.sh $1 $2'
  notify: restart zabbix-agent
 

文字讲解一下上面的内容哈:

1、使用rpm安装zabbix,先判断,如果是centos系统并且是centos7的,就执行cnetos7安装命令。

2、安装的结果以register定义到install_status变量中,然后使用debug模块进行输出。

3、推送配置文件,使用template推,因为配置文件里面有很多变量。

4、重启下zabix-agent,并加入开机自动起。

5、检查firewalld是否启动,如果没有启动就跳过firewalld开放端口。(使用的shell模块进行查看firewalld是否开启,将执行的结果写入到returnmsg这个变量中,并设置忽略错误)

6、判断firewalld设置的returnmsg变量,如果变量中rc数值==0就执行firewalld开通端口。(rc值等于0说明是正常的,如果rc等于3或者其他数值就是不正常的。)

7、创建目录。

8、推送脚本。

9、使用lineinfile模块对配置文件追加内容。

[root@jumpserver roles]# cat install_zabbix_agent/vars/main.yml 
zabbix_server_ip: 192.168.31.7
file_name: discovery_tcp_port.sh
file_dir: /etc/zabbix/zabbix_agentd.d/script/
 

[root@jumpserver roles]# cat install_zabbix_agent/templates/zabbix_agentd.conf.j2 
{% if ansible_all_ipv4_addresses == ansible_all_ipv4_addresses %}
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ ansible_default_ipv4.address }}
HostMetadata=linux
Include=/etc/zabbix/zabbix_agentd.d/*.conf
{% elif ansible_hostname == zabbix_server_ip %}
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/logs/zabbix/zabbix_agentd.log
LogFileSize=0
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ ansible_default_ipv4_address }}
HostMetadata=linux
Include=/etc/zabbix/zabbix_agentd.d/*.conf
{% endif %}
 

这个文件中可以看到,很乱,其实判断没用的哈,就是想测试一下这个判断好使不。结果还行,没报错。

[root@jumpserver roles]# cat zabbix.yml 
- hosts: test
  remote_user: jumpserver
  roles:
    - install_zabbix_agent
  tags: test
 

 

三、执行

[root@jumpserver roles]# ansible-playbook -i /etc/ansible/hosts -t test zabbix.yml --ask-vault-pass

完成。

四、小结

查看yum模块实例,进入之后按斜杠查询。

[root@jumpserver roles]# ansible-doc yum
 

查看系统变量

[root@jumpserver roles]# ansible -i /etc/ansible/hosts -m setup --ask-vault-pass|less 

指定值

[root@jumpserver roles]# ansible -i /etc/ansible/hosts test -m setup -a "filter=ansible_distribution_major_version" --ask-vault-pass
Vault password: 
192.168.30.136 | SUCCESS => {
    "ansible_facts": {
        "ansible_distribution_major_version": "7", 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}
 

输出的内容是json格式的,如果想取里面的就在后面加个.   然后接名称

有的时候一个列表中有多个值,想取里面某一个值的话。可以用python切片,【0】表示第一个值  【1】是第二个值

##有时候取主机信息取不出来,需要在yml文件中打开开关

gather_facts: true      ##和hosts对齐

 

变量名称:

过滤出指定的信息:例->ansible all -m setup -a "filter=ansible_os_family"

ansible_all_ipv4_addresses:仅显示ipv4的信息

ansible_devices:仅显示磁盘设备信息

ansible_distribution:显示是什么系统,例:centos,suse等

ansible_distribution_major_version:显示是系统主版本

ansible_distribution_version:仅显示系统版本

ansible_machine:显示系统类型,例:32位,还是64位

ansible_eth0:仅显示eth0的信息

ansible_hostname:仅显示主机名

ansible_kernel:仅显示内核版本

ansible_lvm:显示lvm相关信息

ansible_memtotal_mb:显示系统总内存

ansible_memfree_mb:显示可用系统内存

ansible_memory_mb:详细显示内存情况

ansible_swaptotal_mb:显示总的swap内存

ansible_swapfree_mb:显示swap内存的可用内存

ansible_mounts:显示系统磁盘挂载情况

ansible_processor:显示cpu个数(具体显示每个cpu的型号)

ansible_processor_vcpus:显示cpu个数(只显示总的个数)

ansible_python_version:显示python版本

https://www.ipcpu.com/2016/01/ansible-setup-when/                    setup

https://blog.csdn.net/weixin_39726347/article/details/87558200    setup

https://blog.csdn.net/weixin_43384009/article/details/105212722   判断

全部评论