使用saltstack部署zabbix监控mysql主从

使用saltstack部署zabbix监控mysql主从

使用saltstack部署zabbix监控mysql主从

使用saltstack部署zabbix监控mysql主从

思路

首先在/srv/salt/下面创建zabbix_mysql目录,然后创建init.sls.
需要注意的前提必须是zabbix agent已经安装部署.
复制我们自己监控创建的监控项目到客户端
重启zabbix agent

查看表结构

 ~/Desktop/salt > tree zabbix_mysql
zabbix_mysql
├── files
│   ├── mysql_grant.sh
│   ├── mysql_low_discovery.sh
│   ├── sudoers.sh
│   └── userparameter_discovery_mysql.conf
└── init.sls

1 directory, 5 files

zabbix discovery

 ~/Desktop/salt > cat  zabbix_mysql/files/userparameter_discovery_mysql.conf
UserParameter=zabbix_low_discovery[*],/bin/bash /opt/mysql_low_discovery.sh $1
UserParameter=mysql_stats[*],mysql -h localhost -P $1 -uzabbix -pzabbix -e "show global status"|grep "\<$2\>"|cut  -f2
UserParameter=mysql_stats_slave[*],mysql -h localhost -P $1 -uzabbix -pzabbix  -e "show slave status\G"|grep "\<$2\>"|awk '{if($NF=="Yes") {print 1} else {print 0}}'
 ~/Desktop/salt >

mysql授权

  ~/Desktop/salt > cat  zabbix_mysql/files/mysql_grant.sh
mysql -uroot -nse  "GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'zabbix'@'localhost' identified BY 'zabbix';"
mysql -uroot -nse  "Flush privileges;"
 ~/Desktop/salt >

discovery端口

  ~/Desktop/salt > cat  zabbix_mysql/files/mysql_low_discovery.sh
#!/bin/bash
#Fucation:mysql low-level discovery
#Script_name mysql_low_discovery.sh
mysql() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/[m]ysql/ && /0.0.0.0/ {print $5}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
              socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1`
                          printf '\t {\n'
                          printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
              socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1`
                          printf '\t {\n'
                          printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
$1
 ~/Desktop/salt >

sudoer授权文件

  ~/Desktop/salt > cat  zabbix_mysql/files/sudoers.sh
/bin/echo "zabbix ALL=(root) NOPASSWD:/bin/netstat" >>/etc/sudoers
/bin/sed -i "s/^Defaults.*.requiretty/#Defaults    requiretty/" /etc/sudoers
 ~/Desktop/salt >

主配置文件如下

### zabbix mysql config
userparameter_mysql:
  file.managed:
    - name: /etc/zabbix/zabbix_agentd.d/userparameter_discovery_mysql.conf
    - user: root
    - mode: 755
    - source: salt://zabbix_mysql/files/userparameter_discovery_mysql.conf

mysql_low_discovery:
  file.managed:
    - name: /opt/mysql_low_discovery.sh
    - user: root
    - mode: 755
    - source: salt://zabbix_mysql/files/mysql_low_discovery.sh

sudoers_manager:
  file.managed:
    - name: /opt/sudoers.sh
    - user: root
    - mode: 755
    - source: salt://zabbix_mysql/files/sudoers.sh
  cmd.run:
    - cwd: /opt/
    - names:
      - /bin/bash sudoers.sh
    - unless: /bin/cat /etc/sudoers| grep zabbix

mysql_grant:
  file.managed:
    - name: /opt/mysql_grant.sh
    - user: root
    - mode: 755
    - source: salt://zabbix_mysql/files/mysql_grant.sh
  cmd.run:
    - cwd: /opt/
    - names:
      - /bin/bash mysql_grant.sh
    - watch:
      - file: /opt/mysql_grant.sh

zabbix_agent:
  cmd.run:
    - cwd: /
    - names:
      - /sbin/service zabbix-agent restart
    - watch:
      - file: /etc/zabbix/zabbix_agentd.d/userparameter_discovery_mysql.conf

执行

执行之前先加test=True测试,如果没有问题去掉test=True执行
~/Desktop/salt > salt '10.208.9.216' state.apply test=True

See also