詳細検索

Chef5에서 기존 단계(munin, zabbix)에 대한 레시피를 작성하세요

아바타
글쓴이 komi

Chef5에서 기존 단계(munin, zabbix)에 대한 레시피를 작성하세요
日本語에서 번역 • 원문 보기

고마워. 이쪽은 코미야야.

이전 글에서 이어서 무닌, 자빅스 시술 레시피를 소개하겠습니다. 레시피는 이 글에서 끝납니다.
글 마지막에는 레시피를 어떻게 적용하는지 설명하겠습니다.

・무닌 레시피

# 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/사이트-요리책/무닌/레시피
# 터치 무닌-노드.rb 무닌-서버.rb 무닌-노드-DB.rb 무닌-노드-웹.rb
# vi munin-node.rb
    filename = "munin-node-rpm.tar" 
    cookbook_file "/tmp/#{filename}" do
      출처 "rpms/#{filename}" 
      모드 0644
    끝

    패키지 "perl-DBI" Do
      not_if "rpm -qa|grep perl-DBI" 
      액션 :설치
    끝

    스크립트 "install_munin-node" do
      not_if 'is/etc/munin/munin-node.conf' 
      통역사 "배쉬" 
      사용자 "루트" 
      코드 <-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=""> 참, :restart => 참
      행동 [ :가능, :시작 ]
    끝


# vi munin-server.rb
    filename = "munin-serv-rpm.tar" 
    cookbook_file "/tmp/#{filename}" do
      출처 "rpms/#{filename}" 
      모드 0644
    끝

    스크립트 "install_munin-serv" do(문자 "-serv)
      not_if 'is/etc/munin/munin.conf' 
      통역사 "배쉬" 
      사용자 "루트" 
      코드 <-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=""> 참, :restart => 참
      행동 [ :가능, :시작 ]
    끝

    cookbook_file "/var/www/html/munin/.htaccess" do
      출처 "var/www/html/munin/.htaccess" 
      모드 0644
    끝

# vi munin-node-web.rb
    스크립트 "link_plugins_web" do(문자 ""
      not_if 'Is' /etc/munin/plugins/apache_accesses 
      통역사 "배쉬" 
      사용자 "루트" 
      코드 <-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=""> 참, :restart => 참
      행동 [ :enable :restart ]
    끝

# vi 무닌-노드-db.rb
    스크립트 "link_plugins_db"
      not_if '/etc/munin/plugins/mysql_threads' 
      통역사 "배쉬" 
      사용자 "루트" 
      코드 <-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=""> 참, :restart => 참
      행동 [ :enable :restart ]
    끝

각 역할마다 다른 명령을 실행할 수 있는 방법이 있는지, 아니면 한 레시피로 할 수 있는지 궁금합니다. if로 할 수 있나요?
이번에는 어떻게 해야 할지 몰라서 웹과 데이터베이스 레시피를 따로 만들었어요.
이 레시피가 역할에 적용되는 순서는 munin-node.rb를 먼저 하지 않으면 모든 플러그인이 먼저 삭제됩니다. (레시피는 위에서 아래로 실행됩니다)

자빅스 레시피
・자빅스 에이전트

# 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 /루트/셰프 레포/사이트-요리책/자빅스/레시피
# 터치 자빅스-에이전트.rb 자빅스-프록시.rb
# vi zabbix-agent.rb 
    파일 이름 = "zabbix-rpm.tar" 
    cookbook_file "/tmp/#{filename}" do
      출처 "rpms/#{filename}" 
      모드 0644
    끝

    문자 "install_zabbix_agent"
      not_if 'is/etc/zabbix/zabbix_agentd.conf' 
      통역사 "배쉬" 
      사용자 "루트" 
      코드 <-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=""> 참, :restart => 참, :reload => 참
      행동 [ :가능, :시작 ]
    끝

    cookbook_file "/opt/bin/mem_monitor.sh"
      출처 "OPT/BIN/mem_monitor.sh" 
      모드 0755
    끝

zabbix_agentd.conf에는 호스트명과 IP 주소를 입력할 수 있는 공간이 있어서, 템플릿에 넣고 노드 값을 ohai에 넣었습니다.

오하이 가격을 꼭 확인하세요

# 오하이 IP주소
    [ 
      "10.0.0.93" 
    ]
# 오하이 호스트네임
    [ 
      "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
    ---
    > EnableRemoteCommands=1
    86c86
    < Server=127.0.0.1
    ---
    > 서버=<%= node['ipaddress'] %>
    109c109
    < Hostname=Zabbix server
    ---
    > Hostname=<%= node['hostname'] %>
    134c134
    < ListenIP=127.0.0.1
    ---
    > ListenIP=0.0.0.0
    265a266,268
    >
    > ##memory
    > UserParameter=mem.puse,/opt/bin/mem_monitor.sh

・자빅스-프록시
4406에서 zabbix용 mysql을 따로 실행하세요

# 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"
      출처 "etc/init.d/mysqld_4406" 
      모드 0755
    끝

    디렉터리 '/var/lib/mysql_4406/' do
      소유자 'MySQL' 
      그룹 'MySQL' 
      모드 '0755' 
      행동 :Create
    끝

    cookbook_file "/etc/my_4406.cnf"는
      출처 "etc/my_4406.cnf" 
      모드 0644
    끝

    서비스 "mysqld_4406"
      지원 :status => true, :restart => true, :reload => :true
      행동 [ :가능, :시작 ]
    끝

    data_bag1 = Chef::EncryptedDataBagItem.load('mysqluser','root')
    data_bag2 = Chef::EncryptedDataBagItem.load('mysqluser','zabbix')
    ROOT_PASSWORD = data_bag1['패스']
    ZABBIX_PASSWORD = data_bag2['패스']
    소켓='--소켓=/var/lib/mysql_4406/mysql.sock' 

    filename=zabbix-jp-release-5-6.noarch.rpm
    스크립트 "install_zabbix-프록시" do는
      not_if 'iss /etc/init.d/zabbix-proxy' 
      통역사 "배쉬" 
      사용자 "루트" 
      코드 <-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
      행동 [ :가능, :시작 ]
    끝

    cookbook_file "/etc/zabbix/zabbix_proxy.conf"는
      출처 "etc/zabbix/zabbix_proxy.conf" 
      모드 0644
      notifys :reload, 'service[zabbix-proxy]' 
    끝

요리책을 위한 구문 검사

# 칼 요리책 테스트 자빅스
# 칼 요리책 테스트 무닌

・레시피 적용법
단일 노드에 필요한 전체 레시피를 할당하고 싶다면(레시피는 미리 정의된 노드와 역할에서 적용됩니다)

# 칼 솔로 쿡 10.0.0.240

개별적으로 검사하고 싶다면(예: 부분 교정 후 빠르게 확인하고 싶을 때)

# 나이프 솔로 쿡 10.0.0.240 -o base_setting::sysctl,httpd::httpd-server

vagrant를 사용하면 vagrant provision이 제공되고, vagrantfile이 있는 곳에 해당 레시피가 적용됩니다.

셰프-솔로의 경우, 칼 명령어로 레시피를 병행해서 적용하는 것은 불가능해 보여서, 필요하다면 순서대로 돌리고 실행하는 것과 같습니다.
이번에는 웹서버가 제가 만든 레시피를 적용하는 데 약 2분, dbserver가 적용하는 데 5분이 걸렸습니다. 서버스펙을 사용한 테스트는 30초였습니다. (이것은 t1.micro 인스턴스입니다)

다음에는 마지막에 서버스펙을 이용한 테스트를 소개하겠습니다.
기대해 주세요.</-EOL></-EOL></-EOL></-EOL></-EOL>

Related Articles