Obrigado. Esta é a Komiya.
Continuando do artigo anterior, vou apresentar a receita do procedimento munin-zabbix. A receita termina neste artigo.
No final do artigo, descreveremos como aplicar a receita.
Receita ・Munin
# CD /opt/src/rpms
# mkdir -p /root/chef-repo/site-cookbooks/munin/files/default/rpms
# mkdir -p /root/chef-repo/site-cookbooks/munin/files/default/var/www/html/munin
# mkdir /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/plugin-conf.d
# cp -p /etc/munin/munin.conf /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/
# scp -Cp xxx-web01:/etc/munin/munin-node.conf /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/
# cp -p /var/www/html/munin/.htaccess /root/chef-repo/site-cookbooks/munin/files/default/var/www/html/munin/
# cp -p /etc/munin/plugin-conf.d/munin-node /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/plugin-conf.d/
# tar cf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-node-rpm.tar ./munin-node-rpm/
# tar tf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-node-rpm.tar ./munin-node-rpm/
# tar cf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-serv-rpm.tar ./munin-serv-rpm/
# tar tf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-serv-rpm.tar ./munin-serv-rpm/
# CD /root/chef-repo/site-cookbooks/munin/receitas
# touch munin-node.rb munin-server.rb munin-node-db.rb munin-node-web.rb
# vi munin-node.rb
nome do arquivo = "munin-node-rpm.tar"
cookbook_file "/tmp/#{nome do arquivo}" fazer
fonte: "rpms/#{nome do arquivo}"
Modo 0644
fim
Pacote "Perl-DBI" DO
not_if "rpm -qa|grep perl-DBI"
ação :install
fim
script "install_munin-node" fazer
not_if 'ls /etc/munin/munin-node.conf'
Intérprete "Bash"
"Root" do usuário
code <-EOL
cd /tmp
tar xf /tmp/#{filename}
rpm -i /tmp/munin-node-rpm/perl-Dig*
rpm -i /tmp/munin-node-rpm/perl-{C*,H*,I*,L*,N*,X*,li*}
rpm -i /tmp/munin-node-rpm/perl-DBD-Pg*
rpm -i /tmp/munin-node-rpm/munin-*
cp -p /etc/munin/munin-node.conf{,.org}
EOL
end
cookbook_file "/etc/munin/munin-node.conf" do
source "etc/munin/munin-node.conf"
mode 0644
end
script "link_plugins" do
not_if 'ls /etc/munin/plugins/tcp'
interpreter "bash"
user "root"
code <-EOL rm="" -f="" tc/munin/plugins/*="" ln="" -s="" sr/share/munin/plugins/cpu="" tc/munin/plugins/cpu="" ln="" -s="" sr/share/munin/plugins/if_err_="" tc/munin/plugins/if_err_eth0="" ln="" -s="" sr/share/munin/plugins/if_="" tc/munin/plugins/if_eth0="" ln="" -s="" sr/share/munin/plugins/iostat="" tc/munin/plugins/iostat="" ln="" -s="" sr/share/munin/plugins/load="" tc/munin/plugins/load="" ln="" -s="" sr/share/munin/plugins/memory="" tc/munin/plugins/memory="" ln="" -s="" sr/share/munin/plugins/tcp="" tc/munin/plugins/tcp="" ln="" -s="" sr/share/munin/plugins/df="" tc/munin/plugins/df="" eol="" end="" service="" "munin-node"="" do="" supports="" :status=""> true, :restart => true
Ação [:enable, :start]
fim
# vi munin-server.rb
nome do arquivo = "munin-serv-rpm.tar"
cookbook_file "/tmp/#{nome do arquivo}" fazer
fonte: "rpms/#{nome do arquivo}"
Modo 0644
fim
script "install_munin-serv" do
not_if 'ls /etc/munin/munin.conf'
Intérprete "Bash"
"Root" do usuário
código <-EOL tar="" xf="" mp/#{filename}="" rpm="" -i="" mp/munin-serv-rpm/*="" cp="" -p="" tc/munin/munin.conf{,.org}="" eol="" end="" cookbook_file="" "/etc/munin/munin.conf"="" do="" source="" "etc/munin/munin.conf"="" mode="" 0644="" end="" service="" "munin-node"="" do="" supports="" :status=""> verdadeiro, :reiniciar => verdadeiro
Ação [:enable, :start]
fim
cookbook_file "/var/www/html/munin/.htaccess" fazer
fonte: "var/www/html/munin/.htaccess"
Modo 0644
fim
# vi munin-node-web.rb
Script "link_plugins_web" fazer
not_if 'ls /etc/munin/plugins/apache_accesses'
Intérprete "Bash"
"Root" do usuário
código <-EOL ln="" -s="" sr/share/munin/plugins/apache_accesses="" tc/munin/plugins/apache_accesses="" ln="" -s="" sr/share/munin/plugins/apache_processes="" tc/munin/plugins/apache_processes="" eol="" end="" service="" "munin-node"="" do="" supports="" :status=""> verdadeiro, :reiniciar => verdadeiro
Ação [ :enable, :reiniciar ]
fim
# vi munin-node-db.rb
Script "link_plugins_db" fazer
not_if 'ls /etc/munin/plugins/mysql_threads'
Intérprete "Bash"
"Root" do usuário
código <-EOL ln="" -s="" sr/share/munin/plugins/mysql_queries="" tc/munin/plugins/mysql_queries="" ln="" -s="" sr/share/munin/plugins/mysql_slowqueries="" tc/munin/plugins/mysql_slowqueries="" ln="" -s="" sr/share/munin/plugins/mysql_threads="" tc/munin/plugins/mysql_threads="" eol="" end="" cookbook_file="" "/etc/munin/plugin-conf.d/munin-node"="" do="" source="" "etc/munin/plugin-conf.d/munin-node"="" mode="" 0644="" end="" service="" "munin-node"="" do="" supports="" :status=""> verdadeiro, :restart => verdadeiro
Ação [ :enable, :reiniciar ]
fim
Estou me perguntando se existe uma forma de executar comandos diferentes para cada função ou fazer isso em uma única receita. Dá para fazer isso com if?
Dessa vez eu não sabia como fazer isso, então fiz receitas separadas para web e base de dados.
A ordem em que é aplicado ao papel é que, se você não fizer o munin-node.rb primeiro, todos os plugins serão excluídos primeiro. (As receitas são executadas de cima a baixo)
Receita Zabbix
・zabbix-agent
# mkdir -p /root/chef-repo/site-cookbooks/zabbix/files/default/opt/bin
# mkdir -p /root/chef-repo/site-cookbooks/zabbix/templates/default/etc/zabbix
# mkdir -p /root/chef-repo/site-cookbooks/zabbix/files/default/{etc,rpms}
# CD /opt/src/rpms
# tar cf /root/chef-repo/site-cookbooks/zabbix/files/default/rpms/zabbix-rpm.tar ./zabbix-rpm/
# tar tf /root/chef-repo/site-cookbooks/zabbix/files/default/rpms/zabbix-rpm.tar ./zabbix-rpm/
# scp -Cp xxx-web01:/etc/zabbix/zabbix_agentd.conf /root/chef-repo/site-cookbooks/zabbix/templates/default/etc/zabbix/
# cp -p /opt/bin/mem_monitor.sh /root/chef-repo/site-cookbooks/zabbix/files/default/opt/bin/
# CD /root/chef-repo/site-cookbooks/zabbix/receitas
# touch zabbix-agent.rb zabbix-proxy.rb
# vi zabbix-agent.rb
nome do arquivo = "zabbix-rpm.tar"
cookbook_file "/tmp/#{nome do arquivo}" fazer
fonte: "rpms/#{nome do arquivo}"
Modo 0644
fim
script "install_zabbix_agent" fazer
not_if 'ls /etc/zabbix/zabbix_agentd.conf'
Intérprete "Bash"
"Root" do usuário
código <-EOL tar="" xf="" mp/#{filename}="" rpm="" -i="" mp/zabbix-rpm/repo-rpm/*.rpm="" ln="" -sf="" sr/share/zabbix-jp-release/zabbix-jp-1.8.repo="" tc/alternatives/zabbix-jp-release="" rpm="" -i="" mp/zabbix-rpm/*.rpm="" cp="" -p="" tc/zabbix/zabbix_agentd.conf{,.org}="" eol="" end="" template="" '/etc/zabbix/zabbix_agentd.conf'="" do="" owner="" 'root'="" group="" 'root'="" source="" 'etc/zabbix/zabbix_agentd.conf'="" end="" service="" "zabbix-agent"="" do="" supports="" :status=""> verdadeiro, :restart => verdadeiro, :reload => verdadeiro
Ação [:enable, :start]
fim
cookbook_file "/opt/bin/mem_monitor.sh" fazem
fonte "opt/bin/mem_monitor.sh"
Modo 0755
fim
Zabbix_agentd.conf tem um lugar para escrever o nome do host e o endereço IP, então eu coloco no template e coloco o valor do nó em ohai.
Certifique-se de conseguir o preço com Ohai
# Endereço Ohai
[
"10.0.0.93"
]
# Nome de host ohai
[
"xxx-stg01"
]
# vi /root/chef-repo/site-cookbooks/zabbix/templates/default/etc/zabbix/zabbix_agentd.conf
# diff /etc/zabbix/zabbix_agentd.conf.org /root/chef-repo/site-cookbooks/zabbix/templates/default/etc/zabbix/zabbix_agentd.conf
63c63
< # EnableRemoteCommands=0
---
> ComandosDeRemotas=1
86c86
< Server=127.0.0.1
---
> Server=<%= node['ipaddress'] %>
109c109
< Hostname=Zabbix server
---
> Nome do host=<%= nó['nome do host'] %>
134c134
< ListenIP=127.0.0.1
---
> ListenIP=0.0.0.0
265a266.268
>
> ##memory
> UserParameter=mem.puse,/opt/bin/mem_monitor.sh
・zabbix-proxy
Execute o MySQL para Zabbix separadamente no 4406
# mkdir -p /root/chef-repo/site-cookbooks/zabbix/files/default/etc/init.d
# cp -p /etc/init.d/mysqld_4406 /root/chef-repo/site-cookbooks/zabbix/files/default/etc/init.d/
# cp -p /etc/my_4406.cnf /root/chef-repo/site-cookbooks/zabbix/files/default/etc/
# mkdir -p /root/chef-repo/site-cookbooks/zabbix/files/default/etc/zabbix
# cp -p /etc/zabbix/zabbix_proxy.conf /root/chef-repo/site-cookbooks/zabbix/files/default/etc/zabbix/
# vi zabbix-proxy.rb
cookbook_file "/etc/init.d/mysqld_4406" fazem
fonte: "etc/init.d/mysqld_4406"
Modo 0755
fim
diretório '/var/lib/mysql_4406/' do
Proprietário 'MySQL'
Grupo 'MySQL'
modo '0755'
Ação :Criar
fim
cookbook_file "/etc/my_4406.cnf"
fonte: "etc/my_4406.cnf"
Modo 0644
fim
Serviço "mysqld_4406" fazer
suporta :status => true, :restart => true, :reload => :true
Ação [:enable, :start]
fim
data_bag1 = Chef::EncryptedDataBagItem.load('mysqluser','root')
data_bag2 = Chef::EncryptedDataBagItem.load('mysqluser','zabbix')
ROOT_PASSWORD = data_bag1['passar']
ZABBIX_PASSWORD = data_bag2['passar']
socket='--socket=/var/lib/mysql_4406/mysql.sock'
Nome do Arquivo=Zabbix-JP-Release-5-6.noarch.rpm
script "install_zabbix-proxy" fazer
not_if 'ls /etc/init.d/zabbix-proxy'
Intérprete "Bash"
"Root" do usuário
code <-EOL
wget http://www.zabbix.jp/binaries/relatedpkgs/rhel5/x86_64/#{filename}
rpm -Uvh #{filename}
yum -y install --enablerepo=zabbix-jp zabbix-proxy zabbix-proxy-mysql
/usr/bin/mysqladmin -u root #{socket} password #{ROOT_PASSWORD}
mysql -u root #{socket} -p#{ROOT_PASSWORD} -e "drop database test;"
mysql -u root #{socket} -p#{ROOT_PASSWORD} -e "create database zabbix_proxy;"
mysql -u root #{socket} -p#{ROOT_PASSWORD} -e "grant all privileges on zabbix_proxy.* to zabbix@localhost identified by "#{ZABBIX_PASSWORD}";"
mysql -u root #{socket} -p#{ROOT_PASSWORD} -e "DELETE FROM mysql.user WHERE password='';"
mysql -u root #{socket} -p#{ROOT_PASSWORD} -e "flush privileges;"
mysql -u zabbix #{socket} -p#{ZABBIX_PASSWORD} zabbix_proxy < /usr/share/doc/zabbix-proxy-1.8.16/schema/mysql.sql
mysql -u zabbix #{socket} -p#{ZABBIX_PASSWORD} zabbix_proxy < /usr/share/doc/zabbix-proxy-1.8.16/data/data.sql
mysql -u zabbix #{socket} -p#{ZABBIX_PASSWORD} zabbix_proxy < /usr/share/doc/zabbix-proxy-1.8.16/data/images_mysql.sql
EOL
end
service "zabbix-proxy" do
supports :status => true, :restart => true, :reload => :true
Ação [:enable, :start]
fim
cookbook_file "/etc/zabbix/zabbix_proxy.conf" faz isso
fonte: "etc/zabbix/zabbix_proxy.conf"
Modo 0644
notifica :reload, 'service[zabbix-proxy]'
fim
Teste de Sintaxe para Livros de Receitas
# Teste de livros de receitas com faca Zabbix
# Teste de livro de receitas com faca Munin
・Como aplicar receitas
Se você quiser atribuir toda a receita necessária para um único nó (a receita será aplicada a partir do nó e função predefinidos)
# Cozinheiro Solo de faca 10.0.0.240
Se quiser testar individualmente (por exemplo, quando quiser verificar rapidamente após correção parcial)
# Knife Solo Cook 10.0.0.240 -O base_setting::sysctl,httpd::httpd-server
Se você usar vagrant, receberá provisão vagrant e provisão (receita aplicada) no local onde o vagrantfile está localizado.
No caso do chef-solo, aplicar receitas com comandos de faca não parece ser possível em paralelo, então, se necessário, é como girá-las e executá-las em ordem.
Levou cerca de 2 minutos para o servidor web e 5 minutos para o servidor de dados aplicar a receita que criei desta vez. O teste com o serverspec foi de 30 segundos. (Esta é uma instância t1.micro)
Na próxima vez, vou apresentar o teste com o serverspec no final.
Por favor, aguarde por isso.</-EOL></-EOL></-EOL></-EOL></-EOL>