ansible一键安装zabbix agent

文件目录结构:php

[root@szwpldb1081 zabbix]# tree
.
├── common
│   ├── config_zabbix_agent_systemd.yaml
│   ├── export_path.yaml
│   ├── install_dependences.yaml
│   ├── install_zabbix_agent.yaml
├── install_zabbix_agent.yaml
├── templates
│   ├── mysql_basic_monitor_templates.xml
│   ├── userparameter_percona_mysql.conf
│   ├── zabbix_agentd.conf
│   ├── zabbix-agent.service
└── vars
    └── zabbix.yaml

3 directories, 17 files

agent安装比较简单,配置也比较简单,主要是写好开机启动服务:html

[root@szwpldb1081 zabbix]# cat templates/zabbix-agent.service 
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/etc/zabbix/zabbix_agentd.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/run/zabbix/zabbix_agentd.pid
KillMode=control-group
ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s

[Install]
WantedBy=multi-user.target

把开机启动服务文件放到操做系统指定目录:mysql

[root@szwpldb1081 zabbix]# cat common/config_zabbix_agent_systemd.yaml 
---
  - name: config zabbix-agent systemd
    template:
      src: ../templates/zabbix-agent.service
      dest: /usr/lib/systemd/system/zabbix-agent.service

  - name: start zabbix-aget 
    systemd:
      name: zabbix-agent
      state: started
      daemon_reload: yes

  - name: config zabbix-agent start up on boot
    systemd:
      name: zabbix-agent
      enabled: yes
      daemon_reload: yes

设置zabbix客户端环境变量:c++

[root@szwpldb1081 zabbix]# cat common/export_path.yaml 
---
  - name: /etc/profile
    lineinfile:
      path: /etc/profile
      line: "export PATH=/usr/local/zabbix/bin/:$PATH"
      insertafter: EOF
      state: present

最主要是这个文件:sql

[root@szwpldb1081 zabbix]# cat common/install_zabbix_agent.yaml 
---
  - name: "create zabbix user"
    user:
      name: "zabbix"

  - name: "transfer {{zabbix_version}} to target host(s)."
    copy:
      src: "../../../sps/zabbix/{{zabbix_version}}"
      dest: /tmp/zabbix-4.2.1/
  
  - name: "transfer auto_install_agent.sh to target host(s)."
    copy:
      src: "../../../sps/zabbix/{{zabbix_version}}/auto_install_agent.sh"
      dest: "/tmp/{{zabbix_version}}/auto_install_agent.sh"
  
  - name: "install zabbix agent"
    shell: "bash /tmp/{{zabbix_version}}/auto_install_agent.sh"

  - name: "config zabbix-agent.conf"
    template:
      src: "../templates/zabbix_agentd.conf"
      dest: "/etc/zabbix/"

  - name: "config percona_item"
    template:
      src: "../templates/userparameter_percona_mysql.conf"
      dest: "/etc/zabbix/zabbix_agentd.conf.d/"

  - name: "remove temp files"
    file:
      path: "/tmp/{{zabbix_version}}"
      state: absent

其中本身用到的2个脚本 auto_install_agent.sh 与 userparameter_percona_mysql.conf 能够根据本身的实际状况来写,个人比较简单,由于zabbix自带的监控mysql比较简单,所以使用了pmm的一个插件,shell

不过官方如今已经很久没有维护了,不过如今还可使用最新的也是到1.18版本没有再更新了,我用来监控mysql8,没有问题,能够根据本身的状况来增长,都是php写的,看配置本身增添都很简单。vim

[root@szwpldb1081 zabbix]# cat /usr/local/mysqltools/sps/zabbix/zabbix-4.2.1/auto_install_agent.sh 
#!/bin/bash
cd /tmp/zabbix-4.2.1/zabbix-4.2.1/
rpm -ivh zabbix-agent-4.2.1-1.el7.x86_64.rpm
rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
\mv ss_get_mysql_stats.php /var/lib/zabbix/percona/scripts
chown zabbix.zabbix -R /var/lib/zabbix

个人每类的客户端都放一个目录,好比zabbix:bash

[root@szwpldb1081 zabbix]# ll /usr/local/mysqltools/sps/zabbix/zabbix-4.2.1
总用量 496
-rw-r--r--. 1 root root    243 12月 21 10:32 auto_install_agent.sh
-rwxr-xr-x. 1 root root   1308 12月 21 10:28 get_mysql_stats_wrapper.sh
-rw-r--r--. 1 root root  28296 1月  10 2018 percona-zabbix-templates-1.1.8-1.noarch.rpm
-rwxr-xr-x. 1 root root  60693 12月 21 10:28 ss_get_mysql_stats.php
-rw-r--r--. 1 root root 408336 4月  18 2019 zabbix-agent-4.2.1-1.el7.x86_64.rpm

个人看起来比较乱,能够把传输的单独写一个yaml文件,也能够分开写,个人的揉在一块儿了,看起来不那么好看,也能够全部的所有写一个脚本,而后yaml文件调脚本执行,看本身的需求。app

要说一下,若是监控的mysql不是默认端口3306,须要修改curl

vim /usr/local/mysqltools/sps/zabbix/zabbix-4.2.1/ss_get_mysql_stats.php  
265    $cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt" . ($port != 33601 ? ":$port" : '');

第265行的端口,好比个人是33601,我就改为了33601,要否则这默认是3306。

[root@szwpldb1081 zabbix]# cat vars/zabbix.yaml 
zabbix_version: "zabbix-4.2.1"
zabbix_server_ip: "x.x.x.x"
mysql_zabbix_password: "xxxx"

通常建议写一个文件,专门配变量,相似参数之类的,而后其余yaml文件读这个文件传到目标机器根据实际状况识别参数,这样比较灵活。

[root@szwpldb1081 zabbix]# cat common/install_dependences.yaml 
---
  - name: install gcc
    yum:
      name: gcc
      state: present

  - name: install gcc-c++
    yum:
      name: gcc-c++
      state: present

  - name: install libxml2-devel
    yum:
      name: libxml2-devel
      state: present

  - name: install curl-devel
    yum:
      name: curl-devel
      state: present

  - name: install unixODBC-devel 
    yum:
      name: unixODBC-devel 
      state: present

  - name: install net-snmp-devel
    yum:
      name: net-snmp-devel
      state: present

  - name: install OpenIPMI-devel
    yum:
      name: OpenIPMI-devel
      state: present

这是一些安装依赖,有的再安装操做系统配置的时候都装好了,我喜欢仍是把一些经常使用的依赖表单独弄一个文件,避免安装报错。

最后修改主调用文件里面的hosts:

[root@szwpldb1081 zabbix]# cat install_zabbix_agent.yaml 
---
  - hosts: tmphost
    remote_user: root
    become_user: root
    become: yes
    vars_files:
      - ../../config.yaml
      - ../../ansible/mysql/vars/mysql.yaml
      - vars/zabbix.yaml
    tasks:
      - name: install dependences
        import_tasks: common/install_dependences.yaml

      - name: install zabbix_agent
        import_tasks: common/install_zabbix_agent.yaml

而后执行:

[root@szwpldb1081 zabbix]# ansible-playbook install_zabbix_agent.yaml 

就能够把指定机器组,所有安装好zabbix agent,pmm zabbix插件在:PMM zabbix地址,使用这个插件须要先配置php环境,php配置另外一篇我直接一个脚本完成,就不配置这么多yaml文件了。

相关文章
相关标签/搜索