puppet系列(五)报告系统及dashboard页面报告展示
一、报告系统
agent运行时会生成一份允许状态的报告、并通过Puppet::Transaction::Report类生成YAML格式从Agent推送到Master的指定目录下。
默认每次客户端执行完操作之后,都会上传一份报告。上传到/var/lib/puppet/reports/目录下面。以客户端的certname为名称生成一个目录,然后在此目录下面就是此客户端每次执行以时间生成的文件名,以.yaml为扩展,如:201704241622.yaml。默认就是/var/lib/puppet/reports目录,如果要更改上传目录,可以在master端的puppet.conf配置文件里,加入如:reportdir = /var/lib/puppet/reports 来更改上传报告的目录。
上一章,我的客户端配置文件中有这么一行:report_server = master.puppet,我们就一台master服务器,所以这里加不加都没事,如果我们的pupept服务器做了负载均衡,有多个master的话,那么我们的所有日志必然无法集中在一台服务器上面,所以这里又这个参数,就是为了应对master做了负载均衡,然而我们可以只向某一台服务器发送报告,做到上报信息上报集中汇总到一台服务器进行存储。
1.1 报告处理器(这里就简单阐述一下,有兴趣可以搜索资料了解一下,不是重点)
报告处理器的作用是将agent上报的日志根据用户的需求进行展示或警告。
store : 默认参数,将报告存放在磁盘上。
log : 将报告发送到系统的syslog .
tagmail : 通过邮件形式发送报告给接收者。
rrdgraph : 它利用Tobias Oetiker的RRD图形库生成图形来展示报告状态。
http : 将报告POST到指定的URL,通常与Dashboard仪器使用。
如果开启多个报告器用逗号分隔。如在服务端的puppet.conf添加:
[master]
reports = store,log #本地磁盘写一份报告,然后记录到rsyslog服务器中一份,然后可以通过syslog服务器集中到一起
syslogfacility = puppet #指定发送的设备用户
1.2 Puppet Dashboard安装
Dashboard适用海量服务器的管理场景,它的优势是可以通过Web方式查看现有Master/Agent的工作状态,通过ENC方式从Web端来管理Puppet节点和统计分析Agent上报的日志等。但是相对于Foreman功能要相对简单,但是配置和部署比较简单。
1.2.1 安装
第一步:yum安装相关辅助软件包
# yum install rubygems rubygem-rake mysql-server mysql-devel ruby-mysql -y
# yum install ruby ruby-devel ruby-irb ruby-rdoc ruby-ri -y
1.2.2 安装Dashboard
第一种方式(前提是我们已经添加了puppetlabs的yum源,这个在第一章有说):
# yum install puppet-dashboard -y #这种还是比较推荐的方式
第二种方式(通过编译安装的方式):
# wget downloads.puppetlabs.com/dashboard/puppet-dashboard-1.2.23.tar.gz
# tar zxf puppet-dashboard-1.2.23.tar.gz -C /var/www/html/ #解压到web目录下
1.3 配置Dashboard
第一步: 配置Mysql环境
在/etc/my.cnf里面加上一行:max_allowed_packet = 32M #默认此参数会限制mysql接收数据报的大小,有时在插入或更新mysql中的数据时就会被此参数限制而导致失败,所以应该修改辞职,设置32M或者更大。
另外设置默认字符集、连接字符集都是utf-8,这个在其他文章里已经介绍过了。这样我们创建数据库的时候就不用指定字符集了。
# /etc/init.d/mysqld restart #修改完然后重启mysql服务加载最新配置
# mysql -uroot -p #进入数据库
mysql> SHOW VARIABLES LIKE 'character%'; #查看一下当前默认的字符集
mysql> create database dashboard; #创建dashboard数据库
mysql> show create database dashboard; #可以检查一下创建数据库dashboard里的字符集是不是utf-8.
mysql> grant all privileges on dashboard.* to 'dashboard'@localhost identified by 'dashboard'; #对数据库进行授权
mysql> flush privileges; #刷新权限
mysql> exit #退出
# mysql -udashboard -pdashboard #测试一下账号密码是否能登录数据库
第二步:编辑dashboard YAML配置文件来指定数据库
dashboard配置文件通常存放在/usr/share/puppet-dashboard/config/目录中。
# vim /usr/share/puppet-dashboard/config/database.yml #此文件设置连接mysql的参数,里面有三种环境,都是独立的设置。
production: #我现在就一种环境,另外的development和test的配置就忽略了。
database: dashboard #数据库
username: dashboard #数据库用户
password: dashboard #数据库密码
encoding: utf8 #数据库连接字符集
adapter: mysql #访问数据库驱动
另外:/usr/share/puppet-dashboard/config/settings.yml文件是dashboard的环境配置,配置文件中包含市区设置、日志上报格式设置和自定义上报地址设置和Web页面翻页数等设置。
第三步:通过Rack填充数据库
# cd /usr/share/puppet-dashboard/
# rake RAILS_ENV=production db:migrate #导入数据库,rails本身不包含允许过程中的“环境”,需要通过RAILS_ENV=production设置rails的工作环境变量。同时也可以通过此环境变量来切换不同的工作环境。
# mysql -udashboard -pdashboard -D dashboard -e "show tables;" #查看一下是否填充成功,发现出现了很多表。
rake aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)
(See full trace by running task with --trace)
# rake gems:refresh_specs #如果出现如上错误;执行此命令然后重新导入数据库即可
# rake RAILS_ENV=production db:migrate
博文来自:www.51niux.com
第四步:运行Dashboard测试一下
# /usr/share/puppet-dashboard/script/server -e production -d #简单启动测试一下,看是否能启动,下面的输出表示启动了。
=> Booting WEBrick
=> Rails 2.3.17 application starting on http://0.0.0.0:3000
#-p :绑定端口,默认是0.0.0.0监听在3000端口
#-b : 绑定网卡接口
#-d : 以守护进程方式启动
#-e : 指定环境
#-P : rails程序的挂载目录
#-h : 查看帮助手册
浏览器查看:URL为http://doshboard的IP:3000
博文来自:www.51niux.com
第五步:Dashboadr与Nginx提升性能
由于puppet自带的Webrick性能不是很强,在管理的服务器比较多而服务器同时上报时就会触发Webrick的处理瓶颈,影响正常的请求,所以要替换Webrick,需要与nginx+passenger结合提升服务器的处理性能。
# cat /usr/local/nginx/conf/nginx.conf #加入下面一部分
server {
listen 3000;
server_name dashboard.puppet;
passenger_enabled on; #开启passenger功能。
passenger_set_cgi_param HTTP_X_CLIENT_DN $ssl_client_s_dn; #设置HTTP头信息,HTTP头信息主要为Agent证书访问提供认证功能
passenger_set_cgi_param HTTP_X_CLIENT_VERIFY $ssl_client_verify;
root /usr/share/puppet-dashboard/public; #指定了dashboard的发布目录
}
# kill -9 `ps -ef|grep dash|grep -v grep|awk {'print $2'}` #杀死我们手工启动的测试进程
# /usr/local/nginx/sbin/nginx #启动nginx服务
注:Dashboadr与Apache提升性能
# cat /etc/httpd/conf.d/passenger.conf
Listen 3000
<VirtualHost *:3000>
DocumentRoot /usr/share/puppet-dashboard/public/
ErrorLog /var/log/httpd/dashboard_error.log
CustomLog /var/log/httpd/dashboard_access.log combined
AddDefaultCharset UTF-8
RailsEnv production
<Location "/">
Options None
AllowOverride None
Order allow,deny
allow from all
</Location>
</VirtualHost>
# /etc/init.d/httpd restart
第六步:puppet master上面的操作:
# cat /etc/puppet/puppet.conf #新加下面两行,192.168.1.112就是我们的dashboard服务器IP。客户端是不需要做什么操作的,客户端只需要开启上传报告功能便可以了。
[master]
reports = store, http #如果只要http方法,那么客户端将报告传上来之后就直接交给了dashboard,本地不会留一份,加上store本地就会留一份报告。
reporturl = http://192.168.1.112:3000/reports/upload #http方式的url上传报告,192.168.1.112就是我们dashboard所在的服务器。Puppet报告以被转储为HTTP Poort形式的YAML格式进行发送。
# /usr/local/nginx/sbin/nginx -s stop #重启puppet端的masternginx服务,因为我们现在已经是nginx+passenger模式。
# /usr/local/nginx/sbin/nginx
第七步:导入agent的报告
第一种是手工导入的形式:
# cd /usr/share/puppet-dashboard/
# rake RAILS_ENV=production reports:import #导入已经存在的报告
#默认节点报告会在/var/lib/puppet/reports/ 产生,如果路径发生变化,导入报告时需要在后面加上“REPORT_DIR=report路径”,reports更改路径可在puppet.conf中设置参数“reportdir = 新路径”,这种方式不够实时。
另外:
puppet dashboard常用操作命令如下:
当puppet dashboard数据量过多的时候,需要优化数据库,可使用命令:
rake RAILS_ENV=production db:raw:optimize
清量dashborad一个月之前的数据。可以使用
rake RAILS_ENV=production reports:prune upto=1 unit=mon
备份puppet dashborad数据库,可以使用如下命令:
rake RAILS_ENV=production db:raw:dump
备份sql并输出到文件:
rake RAILS_ENV=production FILE=/my/backup/file.sql db:raw:dump
恢复puppet dashboard数据库,可以使用如下命令:
rake RAILS_ENV=production FILE=production.sql db:raw:restore
博文来自:www.51niux.com
第二种是推荐的方法:
doshboard服务器上面做的设置:
# vim /usr/share/puppet-dashboard/config/settings.yml #Dashboard默认时区为UTC格式,我们这里需要更改为CST(Asia/Shanghai)格式。设置的settings.yml会覆盖掉config/environment.rb中对应的配置项(config.time_zone = 'UTC'),不然web页面上显示的时间比咱们实际时间少8个小时,因为时区不对。
time_zone: 'Asia/Shanghai'
# cd /usr/share/puppet-dashboard/
# rake RAILS_ENV=production jobs:work & #运行此程序,使其在后台处理报告日志。然后客户端有新的报告上传的时候,会监测到然后传送给dashboard来web页显示报告。
1.3 dashboard的简单使用讲解
查看汇总信息:
访问URL:IP:3000就可以看到下面的页面。
左侧可以看到puppet报告的计数器。计数器中包含了7中上报状态,他们的分别是:
Unresponsive: 无响应,由于agent自身的原因,没有向puppet汇报本身的状态。master如果遇到此状态,默认1小时内不会再处理agent的上报请求,可以修改settings.yaml中的no_longer_cutoff来更改默认时间。
Pending : 报告等待处理状态。报告已经到达Master,但处理进程delayed job已经在运行中。
Failed:agent最后运行失败的状态。
Changed :Agent最后运行状态成功,并通过catalog变更了服务器上的状态。
Unchanged : Agent最近一次上报成功,但是Catalog并没有任何变更信息。
Unreported:Agent没有上报报告。
All:所有类别上报报告的计数器。
查看各个节点的报告:
dashboard的安全管理
dashboard功能比较简单就作为一个简单的报告展示器就好了,如果使用的话。尽量再内网环境使用,将dashboard运行在ssl下防止内网监听数据。开启防火墙限制来源IP访问,通过HTTP自带的账户认证来限制。
至此关于dashboard的安装和简单使用,就讲解完毕了,主要目的是理清puppet任务报告上报的一个流程,和如何本地存储以及web展示。关于web框架上有一个很牛逼的框架foreman这才是我们要了解的重点。