Puppet 安裝dashboard
Puppet Dasshboard是由支持Puppet開發的公司Puppetlabs創建的,是Ruby on Rails程序。可以作爲一個ENC(外部節點分類器)以及一個報告工具,並且正在逐漸成爲一個包含許多Puppet新功能的集成界面,例如審計和資源管 理功能。 Puppet Dashboard是一個Ruby on Rails程序,用於顯示Puppet master和agent的相關信息。它允許你查看從一個或多個Puppet master彙總的圖形和報告數據。它同時從一個或者多個Puppet master上收集來自於Puppet agent的資產數據(主機的Fact和其他信息)。最後,它能作爲一個ENC來配置Puppet節點,並指定這些節點上的類和參數。
參考文檔:
http://kisspuppet.com/2014/10/20/puppet_learning_ext8/
http://ruby-on-rails-book.kejyun.com/install/install-passenger.html
1 前期準備工作
Puppet Dashboard(1.2.3)程序目前版本只能安裝在Ruby 1.8.x(Dashboard還不能工作在1.9.x下或者更新的版本下),只支持MySQL作爲數據庫後端。
Rake version 0.8.3 or newerMySQL database server version 5.xRuby-MySQL bindings version 2.7.x or 2.8.x
備註:更多詳細信息請參考:http://docs.puppetlabs.com/dashboard/
2 安裝相關軟件包
# yum install ruby-mysql mysql-server puppet-dashboard
3 配置Dashboard(包括與數據庫的結合部分)
3.1 創建管理Dashboard的MySQL數據庫賬號並授權
# /etc/rc.d/init.d/mysqld restart# chkconfig mysqld on# mysqladmin -uroot password ocean@mx#mysql uroot -pmysql> create database dashboard_production character set utf8;mysql> grant all on dashboard_production.* to 'dashboard'@'localhost' identified by "ocean@mx";mysql> flush privileges; #測試賬號是否創建成功mysql -udashboard -pocean@mx -e "show processlist";
3.2 優化數據庫配置文件my.cnf
# vim /etc/my.cnf[mysqld]# Allowing 32MB allows an occasional 17MB row with plenty of spare roommax_allowed_packet = 32M # /etc/rc.d/init.d/mysqld restart #重啓MySQL生效
3.3 編輯dashboard YAML配置文件(database.yml)來指定數據庫
# vim /usr/share/puppet-dashboard/config/database.ymlproduction: database: dashboard_production username: dashboard password: ocean@mx
encoding: utf8 adapter: mysql
...
3.4 填充數據庫
# cd /usr/share/puppet-dashboard/# rake gems:refresh_specs# rake RAILS_ENV=production db:migrate
#環境變量RAILS_ENV=production告訴Ruby on Rails我們工作在生產環境。每次你運行一個rake命令都需要使用合適的環境值來設置RAILS_ENV環境變量
3.5 查看是否導入成功
4 啓動並運行Dashboard(WEBrick方式)
WEBrick有助於快速使用Dashboard,不過它不能很好地進行擴展,並且當有許多Puppet agent向Dashboard進行報告時,它的性能會非常差,因此不推薦使用。
4.1 關閉httpd服務
# /etc/rc.d/init.d/httpd stop #之前配置過使用httpd運行puppetmaster,需要關閉
4.2 啓動puppetmaster服務
# /etc/rc.d/init.d/puppetmaster start
4.3 啓動puppet-dashboard服務
# /etc/rc.d/init.d/puppet-dashboard start #啓動dashboard Starting Puppet Dashboard: => Booting WEBrick=> Rails 2.3.17 application starting on http://0.0.0.0:3000 [ OK ]
4.4 通過瀏覽器訪問http://172.16.7.81:3000
5 啓動並運行Dashboard(Passenger方式)
5.1 使用Ruby Gem安裝Passenger
# yum install ruby-devel ruby-libs rubygems libcurl-devel# yum install httpd httpd-devel apr-util-devel apr-devel mod_ssl
# gem install passenger
# passenger-install-apache2-module
注:安裝過程會檢查所需要的依賴包,若果發生錯誤,請按照passenger的提示安裝
我這裏缺少OpenSSL包,所以需要再重新安裝
# yum install openssl-devel -y
重新安裝後再次執行passenger-install-apache2-module 安裝 Apache Passenger 套件即可,安裝的過程需要編譯apache 套件,所以需要一些時間
5.2 配置虛擬主機和passenger
# vim /etc/httpd/conf.d/passenger.confLoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so<IfModule mod_passenger.c> PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19 PassengerRuby /usr/bin/ruby PassengerHighPerformance on PassengerMaxPoolSize 12 PassengerPoolIdleTime 1500 PassengerStatThrottleRate 120 # RailsAutoDetect On</IfModule>Listen 8141<VirtualHost *:8141> DocumentRoot "/usr/share/puppet-dashboard/public/" <Directory "/usr/share/puppet-dashboard/public/"> Options None AllowOverride AuthConfig Order allow,deny allow from all </Directory> ErrorLog /var/log/httpd/dashboard.error.log LogLevel warn CustomLog /var/log/httpd/dashboard.access.log combined</VirtualHost>
5.3 啓動相關服務
# /etc/rc.d/init.d/puppetmaster stop #停掉puppetmaster服務Stopping puppetmaster: [ OK ]# /etc/rc.d/init.d/httpd restart
5.4 通過瀏覽器訪問測試
http://172.16.7.81:8141/
6 集成Puppet Dashboard
6.1 手工導入現有的報告(方式一)
# cd /usr/share/puppet-dashboard/# rake RAILS_ENV=production reports:import #導入已經存在的報告
備註:默認節點報告會在/var/lib/puppet/reports/ 產生,如果路徑發生變化,導入報告時需要在後面加上“REPORT_DIR=report路徑”,reports更改路徑可在puppet.conf中設置參數“reportdir = 新路徑”,這種方式不夠實時。
6.2 配置實施彙總puppet報告(方式二)
# 配置agent節點自動發送報告
[root@agent1 ~]# vim /etc/puppet/puppet.conf [agent]report = true #從2.7.0版本開始,報告系統會默認開啓,不需要配置…
# 配置master 報告彙總[root@master puppet-dashboard]# vim /etc/puppet/puppet.conf[main] reports = http
reporturl = http://172.16.7.81:8141/reports
#定義爲http報告處理器,除此之外還有store,log,tagmail,rrdgraph等報告處理器
#http報告處理器將puppet報告發送到一個HTTP URL和端口(Dashboard位置)。Puppet報告以被轉儲爲HTTP Poort形式的YAML格式進行發送。 [root@master ~]# /etc/rc.d/init.d/httpd restart
6.3 開啓後臺處理報告進程
#運行“Delayed Job Workers”,使其在後臺爲我們處理報告日志
[root@master puppet-dashboard]# rake RAILS_ENV=production jobs:work &[1] 20577
6.4 修改dashboard時區【master】
Dashboard默認時區爲UTC格式,我們這裏需要更改爲CST(Asia/Shanghai)格式
# vim /usr/share/puppet-dashboard/config/settings.ymltime_zone: 'Asia/Shanghai'…**備註**:設置的settings.yml會覆蓋掉config/environment.rb中對應的配置項(config.time_zone = 'UTC')
#/etc/init.d/httpd restart
6.5 顯示報告
通過http://172.16.7.81:8141及時查看節點更新的報告信息,可以看到兩個節點,默認顯示時間爲CST格式,除此之外還可以看到某一個節點在某一個時刻的更新報告和運行曲線圖。
6.6 刪除報告
刪除一個前的報告
[root@master puppet-dashboard]# rake RAILS_ENV=production reports:prune upto=1 unit=mon
刪除一天前的報告
[root@master puppet-dashboard]# rake RAILS_ENV=production reports:prune upto=1 unit=day
刪除效果如下:
7 自定義報告
7.1 編寫外部報告處理器
使用現有的被存儲的報告,就是那些yaml文件,可以通過設置puppet.conf中reports = store進 行收集。然後編寫一個外部的處理器來處理這些信息,例如繪圖或者將他們存儲在外部數據庫。這也是Puppet Dashboard中的報告輸入進程的工作原理。這些外部的報告處理器可以很簡單地使用Ruby進行編寫,以便使用Ruby反序列化YAML文件的能力以 及使用生成的對象。你可以使用任何支持導入第三方ymal數據的工具。
7.2 編寫內部報告處理器
編寫自定義報告處理器並將它添加到Puppet。和fact、函數、類型及提供者的插件不同,Puppet沒有提供一個自動分發自定義報告的方法。
7.2.1 現有報告處理器信息
7.2.2 自定義摘要報告處理器
7.2.2.1 進入reports目錄編寫自定義summary.rb報告處理器
# cd /usr/lib/ruby/site_ruby/1.8/puppet/reports# vim summary.rbrequire 'puppet'Puppet::Reports.register_report(:summary) do desc <<-DESC Send summary report information to the report directory. DESC def process client = self.host summary = self.summary dir = File.join(Puppet[:reportdir],client) client = self.host file = "summary.txt" destination = File.join(dir,file) File.open(destination,"w") do |f| f.write(summary) end endend
7.2.2.2 將報告處理器的名字加入puppet.conf中,並重新啓動httpd服務
# vim /etc/puppet/puppet.conf[main]reports = http,summary…# /etc/rc.d/init.d/httpd restart
7.2.2.3 使用mco命令觸發更新節點agent1
下面的這些涉及到 MCollective 事先配置好
mco puppet -v runonce mco facts -v --with-fact hostname='agent1'Discovering hosts using the mc method for 2 second(s) .... 1 * [ ============================================================> ] 1 / 1agent1.kisspuppet.com : OK {:summary=> "Started a background Puppet run using the 'puppet agent --onetime --daemonize --color=false --splay --splaylimit 30' command"}---- rpc stats ---- Nodes: 1 / 1 Pass / Fail: 1 / 0 Start Time: Fri Oct 04 12:54:50 +0800 2013 Discovery Time: 2005.27ms Agent Time: 1118.41ms Total Time: 3123.68ms
7.2.2.4 查看新生成的報告信息
# cd /var/lib/puppet/reports/agent1.jeffery.com/# cat summary.txt Changes: Total: 1Events: Total: 1 Success: 1Resources: Out of sync: 1 Changed: 1 Total: 15 Skipped: 6Time: Filebucket: 0.00 Package: 0.00 File: 0.11 Service: 0.12 Config retrieval: 1.29 Total: 1.52 Last run: 1380861882Version: Config: 1380861878 Puppet: 2.7.23
在整個報告處理器中,我們定義了一個叫做process的方法來承載處理器的核心邏輯。我們從報告中提取了一些信息:使用self.host方式提取了主機名,使用summary方式提取了變更的摘要。還可以使用self.logs和self.metrics方式來訪問報告中的日子以及度量值。 我們同時還將報告的摘要輸出了報告目錄下對應的以Puppet agent主機名命名的目錄中,報告目錄的位置是由reportdir配置的值來指定的,默認在/var/lib/puppet/reports/目錄下。
備註:更多報告處理器信息請訪問
現有報告處理器https://github.com/puppetlabs/puppet/tree/master/lib/puppet/reports報告參考 http://docs.puppetlabs.com/references/latest/report.html#http 報告及報告系統 http://docs.puppetlabs.com/guides/reporting.html