詳細検索

Escreva receitas para etapas existentes no Chef5 (munin, zabbix)

Avatar
por komi
4 min de leitura

Escreva receitas para etapas existentes no Chef5 (munin, zabbix)
Traduzido do 日本語 • Ver original

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>

Related Articles