背景
使用ansible最终目标都是形成ansible-playbook和playbook脚本便于批量配置管理目标服务器群。
但在写脚本之前通常需要快速验证各个steps的是否正常可用,每次在ide工具中修改playbook经过上传、执行等几个步骤都比较费时间。因此可以先用ansible而不是ansible-playbook命令快速验证相关steps是否正常可用。最终再去汇总统一的playbook脚本。
需求
已有环境:
- 一台 zabbix-server6.4,安装在RockyLinux9上。
- 一套3节点K8S集群,安装在CentOS 7.6上,其上运行了测试应用(容器运行时使用的是docker而不是containerd)。
- 均可访问外网。
目标:
- zabbix-server配置自动发现,当监听到20050端口时,创建主机并关联Linux和Docker模板。
- 先用ansible命令对该3台服务器安装zabbix-agent2,并修改配置(端口监听、server地址)。
- 最后通过ansible-playbook形成playbook脚本归到自己的运维项目中。
实际操作
Ansible配置需要被监控的目标机器。
创建一个最简单的目标服务器列表文件:
vim 431081.ini
[all]
10.43.10.81
10.43.10.82
10.43.10.83
检查是否安装了zabbix-agent2
ansible -i 431081.ini all -m ping -k
ansible -i 431081.ini all -m shell -a "rpm -qa |grep zabbix"
ansible -i 431081.ini all -m shell -a "yum search zabbix-agent2"
ansible -i 431081.ini all -m shell -a "yum install -y zabbix-agent2"
ansible命令不方便在目标机器上远程执行涉及“换行”的创建文件的操作,因此现在ansible本机上创建zabbix-agent2的repo文件,然后再通过copy模块复制到目标机器上。
创建zabbix-agent2仓库文件。
cat <<EOF >zabbixAgent2.repo
[zabbixAgent2]
name=Zabbix Official Repository - $basearch
baseurl=https://repo.zabbix.com/zabbix/6.4/rhel/7/\$basearch/
enabled=1
gpgcheck=0
EOF
将本地仓库文件复制到目标机器,使用yum模块安装,使用shell模块检查安装情况。
ansible -i 431081.ini all -m copy -a "src=/root/zabbixAgent2.repo dest=/etc/yum.repos.d/" -k
ansible -i 431081.ini all -m shell -a "ls -l /etc/yum.repos.d/" -k
ansible -i 431081.ini all -m yum -a "name=zabbix-agent2 state=present" -k
ansible -i 431081.ini all -m shell -a "rpm -qa |grep zabbix-agent2" -k
安装成功后,通过sed命令修改zabbix-agent2的配置文件,关键配置为:监听端口、server地址。然后启动服务即可。
ansible -i 431081.ini all -m shell -a "sed -i 's/^ServerActive=127.0.0.1/ServerActive=10.42.40.43/' /etc/zabbix/zabbix_agent2.conf"
ansible -i 431081.ini all -m shell -a "sed -i 's/^Server=127.0.0.1/Server=10.42.40.43/' /etc/zabbix/zabbix_agent2.conf"
ansible -i 431081.ini all -m shell -a "sed -i '/### Option: ListenPort/a\ListenPort=20050' /etc/zabbix/zabbix_agent2.conf" -k
ansible -i 431081.ini all -m shell -a "cat /etc/zabbix/zabbix_agent2.conf |grep -v ^#|grep -v ^$" -k
ansible -i 431081.ini all -m service -a "name=zabbix-agent2 state=started enabled=yes" -k
在web界面配置zabbix自动发现及关联动作
创建自动发现规则,如下图:
创建发现动作,自动关联监控模板,如下图
检查自动发现规则是否生效,等待监控主机的自动创建。
若存在问题,则从server端、agent端的日志进行排查。
问题
问题一:无法获取docker相关监控数据。
监控项中,无法取得docker模板中的数据,原因是docker.sock没有操作权限。
修改权限即可。
ansible -i 431081.ini all -m shell -a "ls -l /var/run/docker.sock" -k
ansible -i 431081.ini all -m shell -a "chmod 777 /var/run/docker.sock" -k
ansible -i 431081.ini all -m shell -a "ls -l /var/run/docker.sock" -k
问题二:zabbix-server异常关闭
问题表现:因为K8S集群上运行的应用容器很多,导致单台监控主机存在5-6千个监控项,因此zabbix-server默认的缓存太小,导致server出现内存溢出报错并停止运行,重启zabbix-server也依然报错。
解决:修改zabbix-server的配置文件后,重新启动zabbix-server即可。
##结束