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节点,并指定这些节点上的类和参数。
1 前期准备工作
Puppet Dashboard(1.2.3)程序目前版本只能安装在Ruby 1.8.x(Dashboard还不能工作在1.9.x下或者更新的版本下),只支持MySQL作为数据库后端。
|
1
2
3
|
Rake version 0.8.3 or newer
MySQL database server version 5.x
Ruby-MySQL bindings version 2.7.x or 2.8.x
|
备注:更多详细信息请参考:http://docs.puppetlabs.com/dashboard/
2 安装相关软件包
|
1
|
[root@puppetserver nodes]# yum install ruby-mysql mysql-server puppet-dashboard |
3 配置Dashboard(包括与数据库的结合部分)
3.1 创建管理Dashboard的MySQL数据库账号并授权
|
1
2
3
4
5
6
7
8
9
10
11
|
[root@puppetserver rpms]# /etc/rc.d/init.d/mysqld restart[root@puppetserver ~]# chkconfig mysqld on[root@puppetserver rpms]# mysqladmin -uroot password 123.com
[root@puppetserver rpms]# mysql –p123.commysql> create database dashboard character set utf8;
mysql> grant all on dashboard.* to 'dashboard'@'localhost' identified by "123.com";
mysql> flush privileges;[root@puppetserver rpms]# mysql -udashboard -p123.com #测试账号是否创建成功…Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> |
3.2 优化数据库配置文件my.cnf
|
1
2
3
4
5
6
7
8
|
[root@puppetserver rpms]# vim /etc/my.cnf[mysqld]# Allowing 32MB allows an occasional 17MB row with plenty of spare room
max_allowed_packet = 32M…[root@puppetserver rpms]# /etc/rc.d/init.d/mysqld restart #重启MySQL生效Stopping mysqld: [ OK ]Starting mysqld: [ OK ] |
3.3 编辑dashboard YAML配置文件(database.yml)来指定数据库
|
1
2
3
4
5
6
7
8
|
[root@puppetserver rpms]# vim /usr/share/puppet-dashboard/config/database.ymlproduction:database: dashboardusername: dashboardpassword:123.com
encoding: utf8adapter: mysql… |
3.4 填充数据库
|
1
2
3
|
[root@puppetserver ~]# cd /usr/share/puppet-dashboard/[root@puppetserver puppet-dashboard]# rake gems:refresh_specs[root@puppetserver puppet-dashboard]# rake RAILS_ENV=production db:migrate #环境变量RAILS_ENV=production告诉Ruby on Rails我们工作在生产环境。每次你运行一个rake命令都需要使用合适的环境值来设置RAILS_ENV环境变量 |
3.5 查看是否导入成功
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
[root@puppetserver puppet-dashboard]# mysql -udashboard -p123.comWelcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.66 Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use dashboard;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changedmysql> show tables;+------------------------------+| Tables_in_dashboard |+------------------------------+| delayed_job_failures || delayed_jobs || metrics || node_class_memberships || node_classes || node_group_class_memberships || node_group_edges || node_group_memberships || node_groups || nodes || old_reports || parameters || report_logs || reports || resource_events || resource_statuses || schema_migrations || timeline_events |+------------------------------+18 rows in set (0.00 sec)
|
4 启动并运行Dashboard(WEBrick方式)
WEBrick有助于快速使用Dashboard,不过它不能很好地进行扩展,并且当有许多Puppet agent向Dashboard进行报告时,它的性能会非常差,因此不推荐使用。
4.1 关闭httpd服务
|
1
2
|
[root@puppetserver puppet-dashboard]# /etc/rc.d/init.d/httpd stop #之前配置过使用httpd运行puppetmaster,需要关闭Stopping httpd: [ OK ] |
4.2 启动puppetmaster服务
|
1
2
|
[root@puppetserver puppet-dashboard]# /etc/rc.d/init.d/puppetmaster startStarting puppetmaster: [ OK ] |
4.3 启动puppet-dashboard服务
|
1
2
3
4
|
[root@puppetserver puppet-dashboard]# /etc/rc.d/init.d/puppet-dashboard start #启动dashboardStarting Puppet Dashboard: => Booting WEBrick=> Rails 2.3.17 application starting on http://0.0.0.0:3000
[ OK ]
|
4.4 通过浏览器访问http://192.168.100.110:3000

5 启动并运行Dashboard(Passenger方式)
5.1 使用Ruby Gem安装Passenger
|
1
2
3
4
5
6
7
8
|
[root@puppetserver etc]# yum install ruby-devel ruby-libs rubygems libcurl-devel[root@puppetserver etc]# yum install httpd httpd-devel apr-util-devel apr-devel mod_ssl[root@puppetserver repos]# gem install --local passenger-4.0.19.gem #自动解决依赖关系,进入gem包目录进行安装
Building native extensions. This could take a while...
Successfully installed rake-10.0.1
Successfully installed daemon_controller-1.1.5
Successfully installed rack-1.5.2
Successfully installed passenger-4.0.19
|
5.2 配置虚拟主机和passenger
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@puppetserver puppet-dashboard]# 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 启动相关服务
|
1
2
3
|
[root@puppetserver ~]# /etc/rc.d/init.d/puppetmaster stop #停掉puppetmaster服务Stopping puppetmaster: [ OK ][root@puppetserver ~]# /etc/rc.d/init.d/httpd restart |
5.4 通过浏览器访问测试

6 集成Puppet Dashboard
6.1 手工导入现有的报告(方式一)
|
1
2
3
4
5
|
[root@puppetserver ~]# cd /usr/share/puppet-dashboard/[root@puppetserver puppet-dashboard]# rake RAILS_ENV=production reports:import #导入已经存在的报告
Importing 39 reports from /var/lib/puppet/reports in the background
Importing: 100% |###################################################################################| Time: 00:00:00
39 of 39 reports queued
|
备注:默认节点报告会在/var/lib/puppet/reports/ 产生,如果路径发生变化,导入报告时需要在后面加上“REPORT_DIR=report路径”,reports更改路径可在puppet.conf中设置参数“reportdir = 新路径”,这种方式不够实时。

6.2 配置实施汇总puppet报告(方式二)
|
1
2
3
4
5
6
7
8
9
10
|
[root@agent1 ~]# vim /etc/puppet/puppet.conf #配置agent节点自动发送报告 [agent]
report = true #从2.7.0版本开始,报告系统会默认开启,不需要配置
…[root@puppetserver puppet-dashboard]# vim /etc/puppet/puppet.conf[main] reports = http #定义为http报告处理器,除此之外还有store,log,tagmail,rrdgraph等报告处理器
reporturl = http://172.16.200.100:8141/reports #http报告处理器将puppet报告发送到一个HTTP URL和端口(Dashboard位置)。Puppet报告以被转储为HTTP Poort形式的YAML格式进行发送。
…[root@puppetserver public]# /etc/rc.d/init.d/httpd restart
|
6.3 开启后台处理报告进程
|
1
2
3
4
5
6
7
8
9
10
|
[root@puppetserver puppet-dashboard]# rake RAILS_ENV=production jobs:work & #运行“Delayed Job Workers”,使其在后台为我们处理报告日志[1] 28651
[root@puppetserver puppet-dashboard]# [Worker(host:puppetserver.kisspuppet.com pid:28651)] Starting job worker
[Worker(host:puppetserver.kisspuppet.com pid:28651)] Report.create_from_yaml_file completed after 0.2674
[Worker(host:puppetserver.kisspuppet.com pid:28651)] Report.create_from_yaml_file completed after 0.1725
[Worker(host:puppetserver.kisspuppet.com pid:28651)] Report.create_from_yaml_file completed after 0.1345
[Worker(host:puppetserver.kisspuppet.com pid:28651)] Report.create_from_yaml_file completed after 0.1772
[Worker(host:puppetserver.kisspuppet.com pid:28651)] Report.create_from_yaml_file completed after 0.1397
…[Worker(host:puppetserver.kisspuppet.com pid:28651)] 42 jobs processed at 5.9487 j/s, 0 failed ...
|
6.4 修改dashboard时区
Dashboard默认时区为UTC格式,我们这里需要更改为CST(Asia/Shanghai)格式
|
1
2
3
4
|
[root@puppetserver ~]# vim /usr/share/puppet-dashboard/config/settings.ymltime_zone: 'Asia/Shanghai'
…**备注**:设置的settings.yml会覆盖掉config/environment.rb中对应的配置项(config.time_zone = 'UTC')
|
6.5 显示报告
通过http://192.168.100.110:8141/ 及时查看节点更新的报告信息,可以看到两个节点agent1和agent2,默认显示时间为CST格式,除此之外还可以看到某一个节点在某一个时刻的更新报告和运行曲线图。


puppet dashboard

7 自定义报告
7.1 编写外部报告处理器
使用现有的被存储的报告,就是那些yaml文件,可以通过设置puppet.conf中reports = store进行收集。然后编写一个外部的处理器来处理这些信息,例如绘图或者将他们存储在外部数据库。这也是Puppet Dashboard中的报告输入进程的工作原理。这些外部的报告处理器可以很简单地使用Ruby进行编写,以便使用Ruby反序列化YAML文件的能力以及使用生成的对象。你可以使用任何支持导入第三方ymal数据的工具。
7.2 编写内部报告处理器
编写自定义报告处理器并将它添加到Puppet。和fact、函数、类型及提供者的插件不同,Puppet没有提供一个自动分发自定义报告的方法。
7.2.1 现有报告处理器信息
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[root@puppetserver ~] # ls /usr/lib/ruby/site_ruby/1.8/puppet/reports
http.rb log.rb rrdgraph.rb store.rb tagmail.rb[root@puppetserver reports]# cat http.rb #查看http报告处理器内容require 'puppet'
require 'net/http'
require 'uri'
Puppet::Reports.register_report(:http) do
desc <<-DESC
Send report information via HTTP to the `reporturl`. Each host sends
its report as a YAML dump and this sends this YAML to a client via HTTP POST.
The YAML is the body of the request.
DESC
def process
url = URI.parse(Puppet[:reporturl])
req = Net::HTTP::Post.new(url.path)
req.body = self.to_yaml
req.content_type = "application/x-yaml"
Net::HTTP.new(url.host, url.port).start {|http|
response = http.request(req)
unless response.kind_of?(Net::HTTPSuccess)
Puppet.err "Unable to submit report to #{Puppet[:reporturl].to_s} [#{response.code}] #{response.msg}"
end
}
end
end |
7.2.2 自定义摘要报告处理器
7.2.2.1 进入reports目录编写自定义summary.rb报告处理器
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@puppetserver ~]# cd /usr/lib/ruby/site_ruby/1.8/puppet/reports
[root@puppetserver 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
end
end |
7.2.2.2 将报告处理器的名字加入puppet.conf中,并重新启动httpd服务
|
1
2
3
4
5
6
7
|
[root@puppetserver ~]# vim /etc/puppet/puppet.conf[main]reports = http,summary…[root@puppetserver ~]# /etc/rc.d/init.d/httpd restartStopping httpd: [ OK ]Starting httpd: [ OK ] |
7.2.2.3 使用mco命令触发更新节点agent1
|
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@puppetserver~]#mcopuppet-vrunoncemcofacts-v--with-facthostname='agent1'
Discoveringhostsusingthemcmethodfor2second(s)....1
*[============================================================> ]1/1
agent1.kisspuppet.com:OK{:summary=> "StartedabackgroundPuppetrunusingthe'puppetagent--onetime--daemonize--color=false--splay--splaylimit30'command"}
----rpcstats----Nodes:1/1
Pass/Fail:1/0
StartTime:FriOct0412:54:50+08002013
DiscoveryTime:2005.27ms
AgentTime:1118.41ms
TotalTime:3123.68ms
|
7.2.2.4 查看新生成的报告信息
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@puppetserver ~]# cd /var/lib/puppet/reports/agent1.kisspuppet.com/
[root@puppetserver agent1.kisspuppet.com]# cat summary.txtChanges: Total: 1
Events: Total: 1
Success: 1
Resources:Out of sync: 1
Changed: 1
Total: 15
Skipped: 6
Time: Filebucket: 0.00
Package: 0.00
File: 0.11
Service: 0.12
Config retrieval: 1.29
Total: 1.52
Last run: 1380861882
Version: Config: 1380861878
Puppet: 2.7.23
|
在整个报告处理器中,我们定义了一个叫做process的方法来承载处理器的核心逻辑。我们从报告中提取了一些信息:使用self.host方式提取了主机名,使用summary方式提取了变更的摘要。还可以使用self.logs和self.metrics方式来访问报告中的日子以及度量值。
我们同时还将报告的摘要输出了报告目录下对应的以Puppet agent主机名命名的目录中,报告目录的位置是由reportdir配置的值来指定的,默认在/var/lib/puppet/reports/目录下。
本文转自凌激冰51CTO博客,原文链接:http://blog.51cto.com/dreamfire/1322552,如需转载请自行联系原作者
puppet报告系统Dashboard部署及配置详解的更多相关文章
- web缓存服务器varnish-4.1.6的部署及配置详解
web缓存服务器varnish-4.1.6的部署及配置详解 1.安装varnish4.1.6安装依赖 yum install -y autoconf automake jemalloc-devel l ...
- Keepalived部署与配置详解
Keepalive详解 工作原理 Keepalived本质就是为ipvs服务的,它也不需要共享存储.IPVS其实就是一些规则,Keepalived主要的任务就是去调用ipvsadm命令,来生成规则,并 ...
- Zabbix监控系统部署:配置详解
1. 全局配置 ListenPort ,监听端口 ,取值范围为1024-32767,默认端口10051 SourceIP,外发连接源地址 LogType,日志类型:单独日志文件,系统文件,控制台输出 ...
- Flume环境部署和配置详解及案例大全
flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本.HDF ...
- Linux系统下DNS主从配置详解
一.DNS概述DNS(Domain Name System),即域名系统.因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串. ...
- Ubuntu系统下静态DNS配置详解
1.DNS服务的简介: DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器.DNS中保存了一张域 ...
- linux下nginx部署以及配置详解
1.下载源码包解压编译 启动多个,请看:在linux系统下安装两个nginx以及启动 查看nginx包路径:http://nginx.org/download/,两种下载方式: 1.在官网下载使用Xf ...
- centos 6.4系统双网卡绑定配置详解
Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡(需要交换机支持),这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作. ...
- Flume NG 配置详解(转)
原文链接:[转]Flume NG 配置详解 (说明,名词对应解释 源-Source,接收器-Sink,通道-Channel) 配置 设置代理 Flume代理配置存储在本地配置文件.这是一个文本文件格式 ...
随机推荐
- MySQL 数据备份与同步
前段时间使用MySQL作为数据存储做了一个小项目.项目上线运行了几十天之后,数据已经越来越多,达到了100多M.用mysqldump每天备份全量数据然后传输到另外一台机器上这种方式进行数据备份,久而久 ...
- uni-app在线引入阿里字体图标库
第一步 在app.vue中引入阿里字体图标库 第二步 在任意页面使用就可以了 <view class="item" v-for="(value,index) in ...
- django 利用ORM对单表进行增删改查
牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...
- Python设计模式(4)-装饰模式
# coding=utf-8 # * 一般情况下,当一个基类写好之后,我们也许不愿意去改动,也不能改动,原因是# * 这样的在项目中用得比较久的基类,一旦改动,也许会影响其他功能模块,但是,# * 又 ...
- [一起面试AI]NO.9 如何判断函数凸或非凸
首先定义凸集,如果x,y属于某个集合M,并且所有的θx+(1-θ)f(y)也属于M,那么M为一个凸集.如果函数f的定义域是凸集,并且满足 f(θx+(1-θ)y)≤θf(x)+(1-θ)f(y) 则该 ...
- bootstrap-table 内容超出鼠标悬浮显示全部
.table th, .table td { text-align: center; vertical-align: middle !important; } table { width: 100px ...
- VulnHub靶场学习_HA: Avengers Arsenal
HA: Avengers Arsenal Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-avengers-arsenal,369/ 背景: 复仇者联盟 ...
- redis list 基本操作
写在前面的话 本篇笔记写在笔者刚工作时.如有问题,请指教. 简介 list是链表,redis list的应用场景很多,也是Redis 最重要的数据结构之一,比如微博的关注列表,粉丝列表,消息列表等功能 ...
- Jmeter命令行执行并生成HTML报告
前提:准备好jmeter脚本,找到jmeter配置文件查看生成的日志格式是否为csv,如果不是请改为csv 注意:使用命令执行jmeter脚本必须使用jmeter 3.0及以上版本1.使用命令行执行脚 ...
- 068.Python框架Django之DRF视图集使用
一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...