2013-03-15

自定义节点报告

正如在概述中介绍一样,MCollective可以用来撰写自定义设施报告。既然我们有节点的facts,classes和agents这些信息,它们都可以用来撰写自定义报告。mco inventory是一个通用的节点和网络报告工具,它还拥有基本的脚本执行功能。这是一项新兴的功能,脚本语言可能会变。


节点预览

对于给定节点可以运行mco inventory来获取完全信息。如下:

[root@master mcollective]# mco inventory master.example.com
Inventory for master.example.com:
   Server Statistics:
                      Version: 2.0.0
                   Start Time: Tue Jul 24 16:04:31 -0400 2012
                  Config File: /etc/mcollective/server.cfg
                  Collectives: mcollective, puppet, local
              Main Collective: mcollective
                   Process ID: 6822
               Total Messages: 11
      Messages Passed Filters: 11
            Messages Filtered: 0
             Expired Messages: 0
                 Replies Sent: 10
         Total Processor Time: 0.48 seconds
                  System Time: 0.13 seconds
   Agents:
      discovery       helloworld      package        
      process         rpcutil         service        
   Configuration Management Classes:
      default                        settings                      
   Facts:
      architecture => i386
      augeasversion => 0.10.0
      boardmanufacturer => LENOVO
      boardproductname => 284255C
  boardserialnumber => 1ZG6Y9AT0GJ

Collective列表

之前介绍了subcolletives概念,可以使用inventory应用程序来查看所有已知collectives.

[root@master mcollective]# mco inventory --list-collectives
   Collective                     Nodes
   ==========                     =====
   local                          1
   web                            1
   puppet                         2
   mcollective                    3
                 Total nodes: 3

Collective图表

同样可以为所有collectives创建一个dot格式图表.

[root@master mcollective]# mco inventory --collective-graph collective.dot
Retrieving collective info....
Graph of 3 nodes has been written to collective.dot
graph {
   subgraph "local" {
      "master.example.com" -- "local"
   }
   subgraph "mcollective" {
      "puppet.example.com" -- "mcollective"
      "web.example.com" -- "mcollective"
      "master.example.com" -- "mcollective"
   }
   subgraph "puppet" {
      "puppet.example.com" -- "puppet"
      "master.example.com" -- "puppet"
   }
   subgraph "web" {
      "web.example.com" -- "web"
   }
}

自定义报告

可以创建一些简短的脚本作为--script选项参数传递给mco inventory。

在报告中可以有以下可用数据:

|  变量  |             描述              |
|  time  |报告创建时间,通常是ruby时间对象|
|identity|          senderid             |
| facts  |        facts的哈希值          |
| agents |        代理的数组             |
|classes |       CF Classes的数组        |

Printf风格报告

根据文档介绍,将来会添加更多功能。目前为止可以通过hash类型来访问facts,agents和classes视为数组而identity视为string.

inventory do
    format "%s:\t\t%s\t\t%s"

    fields { [ identity, facts["lsbdistdescription"],facts["ipaddress_eth0"] ] }
end

输出

[root@master mcollective]# mco inventory --script inventory.mc  
puppet.example.com:     CentOS release 5.7 (Final)      10.217.12.211
master.example.com:     CentOS release 6.2 (Final)      10.217.12.170

Perl格式风格报告

使用这种风格需要先安装formatr gem。即:gem install formatr.一旦安装好就可以创建如下脚本:

formatted_inventory do
    page_length 20
    page_heading <<TOP
             Node Report @<<<<<<<<<<<<<<<<<<<<<<<<<
                        time
Hostname:         Puppet Versin:     Distribution:
-----------------------------------------------------------------------
TOP
    page_body <<BODY
@<<<<<<<<<<<<<<<< @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
identity,    facts["puppetversion"], facts["lsbdistdescription"]
                                @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                                facts["processor0"]
BODY
end

这里创建了自定义报告格式为:每页显示20个节点信息,有标题区域和每个节点会有两行报告信息。输出为:

[root@master mcollective]# mco inventory --script inventory1.mc
             Node Report Tue Jul 24 16:24:53 -0400
Hostname:         Puppet Versin:     Distribution:
-----------------------------------------------------------------------
master.example.com 2.6.16        CentOS release 6.2 (Final)
                                Intel(R) Core(TM)2 Duo CPU     T6670  @
puppet.example.com 2.6.13        CentOS release 5.7 (Final)
                                Intel(R) Core(TM)2 Duo CPU     T6670  @

这种报告虽然很丑但很简单方便。



blog comments powered by Disqus