고마워. 이쪽은 코미야야.
이전 글에서 이어서 무닌, 자빅스 시술 레시피를 소개하겠습니다. 레시피는 이 글에서 끝납니다.
글 마지막에는 레시피를 어떻게 적용하는지 설명하겠습니다.
・무닌 레시피
# 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>