柴少鹏的官方网站 技术在分享中进步,水平在学习中升华

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

图片.png

博文来自: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就可以看到下面的页面。

图片.png

左侧可以看到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:所有类别上报报告的计数器。

查看各个节点的报告:

图片.png

图片.png

dashboard的安全管理

dashboard功能比较简单就作为一个简单的报告展示器就好了,如果使用的话。尽量再内网环境使用,将dashboard运行在ssl下防止内网监听数据。开启防火墙限制来源IP访问,通过HTTP自带的账户认证来限制。

至此关于dashboard的安装和简单使用,就讲解完毕了,主要目的是理清puppet任务报告上报的一个流程,和如何本地存储以及web展示。关于web框架上有一个很牛逼的框架foreman这才是我们要了解的重点。


作者:忙碌的柴少 分类:puppet系列 浏览:3047 评论:0
留言列表
发表评论
来宾的头像