Drollery Medieval drollery of a knight on a horse

🏆 欢迎来到本站: https://xuchangwei.com/希望这里有你感兴趣的内容

flowery border with man falling
flowery border with man falling

Linux: Cloudforecast

CloudForecast

CloudForecast 简介

CloudForecast 的是一个系统管理员的工具或监控的框架,以监测服务器和其它资源,作为内部是使用了 Perl 和 RRDtool 加 Gearman 的分布调度支持,设计的主要目录是为了管理监控小型和大型企业中的服务器.也很合适二次开发.

这个软件的架构如下。使用了gearman 来任务调度,所以可以无限增加监控机器.

img_20240220_040934.png

git 的项目地址: http://github.com/kazeburo/cloudforecast

CloudForecast 安装

CloudForecast 相关依赖的安装:

在简短的介绍

安装这个软件前,需要 rrdtool 和 perl 还需要有 SNMP 的支持

# ubuntu 的安装
sudo apt-get install librrds-perl libsnmp-perl

# CentOS 的安装
sudo yum install net-snmp-perl

# rrdtool 的安装,需要使用 EPEL 的 rpm 扩展,见我另一个文章 yum 高级使用技巧
sudo yum install rrdtool-perl

CloudForecast 的安装

使用 git 下载这个项目的源码,在使用 cpanm 来安装依赖关系

$ git clone git://github.com/kazeburo/cloudforecast.git
$ cd cloudforecast
$ cpanm -l extlib --installdeps .

注:目录是本地目录,cpanm 安装到 extlib 目录,然后使用 local::lib 来加载进这个项目中的.

如果要监控 MySQL 的状态,这个模块是必须的 DBD::mysql.

配置CloudForecast

下面是配置文件,复制并编辑示例

配置文件

cp cloudforecast_sample.yaml cloudforecast.yaml

服务器列表文件

cp server_list_sample.yaml server_list.yaml

示例配置文件(cloudforecast_sample.yaml)

---
config:
# 如果您使用 gearman ,需要在这指定 germand 主机名和端口
  gearman_enable: 0
  gearman_server:
    host: localhost
    port: 7003
# RRD 的存放地址. 如果使用 / 就使用绝对路径
  data_dir: data
#如data_dir: /usr/local/cloudforecast/rra
# 监控配置文件条目
  host_config_dir: host_config

  component_config:
# SNMP 的一些设置 community 和 version 的信息
  SNMP:
    community: public   #snmp外部实用名字
    version: 2
# MySQL 监控的用户和密码
  MySQL:
    user: root
    password: ""
监控条目
[root@rabbit-hd-212216 cloudforecast]# ll  host_config/
total 16
-rw-r--r-- 1 root root 473 Nov  6  2015 basic.yaml
-rw-r--r-- 1 root root  95 Nov  6  2015 httpd8080.yaml
-rw-r--r-- 1 root root 113 Nov  6  2015 httpd.yaml
-rw-r--r-- 1 root root  75 Mar 22  2016 mysql.yaml

[root@rabbit-hd-212216 cloudforecast]# cat host_config/basic.yaml
---
# component_configはこの監視項目の設定内だけで利用されます。
# 部分的にSNMPのcommunity名が異なる場合などに利用できます
# resourceには、監視項目を追加してきます。実際の監視内容は、CloudForecast::Data::Foo で定義
# されています。「:」で区切った値はオプションとして定義モジュールに渡されます
component_config:
resources:
  - traffic:eth0
  - traffic:eth1
  - basic

[root@rabbit-hd-212216 cloudforecast]# cat host_config/httpd.yaml
---
component_config:
resources:
  - traffic:2:eth0
  - traffic:3:eth1
  - basic
  - http:80
  - memcached:11211

 [root@rabbit-hd-212216 cloudforecast]# cat host_config/mysql.yaml
---
component_config:
resources:
  #- traffic:2:eth0
  - mysql
  - innodb

示例服务器列表文件(serverlistsample.yaml)

--- #Dev
# --- #Hogeと書くことでサーバ一覧を区切ることができます
# config 是指主机需要配置什么监测项目
# 主机的配置是“IP地址[空格]主机名[空格]备注“
servers:
- config: basic.yaml
hosts:
- 192.168.55.10 dev1 develop
- 192.168.55.11 dev2 develop

servers:
- config: httpd.yaml
label: DB #小标题
hosts:
- 192.168.51.10 web1 web memcached
- 192.168.51.11 web2 web memcached
- config: mysql.yaml
hosts:
- 192.168.51.60 db1 mysql master
- 192.168.51.61 db2 mysql slave
- 192.168.51.62 db2 mysql slave
- config: basic.yaml
hosts:
- 192.168.51.90 batch1 batch

servers:
  - config: basic.yaml
    hosts:
      - 192.168.55.10 dev1 develop
      - 192.168.55.11 dev2 develop

--- #Production 名子可随意填写
servers:
  - config: httpd.yaml
    label: DB #小标题
    hosts:
      - 192.168.51.10 web1 web memcached
      - 192.168.51.11 web2 web memcached
  - config: mysql.yaml
    hosts:
      - 192.168.51.60 db1 mysql master
      - 192.168.51.61 db2 mysql slave
      - 192.168.51.62 db2 mysql slave
  - config: basic.yaml
    hosts:
      - 192.168.51.90 batch1 batch

启动CloudForecast

守护进程.对远程的资源和数据进行检索 每5分钟一次

./cloudforecast_radar -c cloudforecast.yaml -l server_list.yaml

Web 显示用的服务器 5000 的端口

./cloudforecast_web -p 5000 -c cloudforecast.yaml -l server_list.yaml

深入 CloudForecast

CloudForecast 由RRDTool工具包装而成、被设计作为信息检索的框架.

CloudForecast 一共有四个大的部分.

  1. 一个不断循环守护进程
  2. HTTPD 用来显示信息
  3. Gearman 的 worker 采集的信息
  4. Gearman 的 进行 RRD文件的更新工作

在比较小的规模的时候 ,可以不使用 Gearman 就能达到性能的要求,如果你想看看架构图,可以看这个 blog 上的显示的这个

1. 不断循环守护进程

$ ./cloudforecast_radar -r -c cloudforecast.yaml -l server_list.yaml

从启动开始每5分钟更新一次

  • -r 重新启动选项,重新启动时自动更新配置文件和库
  • -c 配置文件
  • -l 服务器列表

2. web server

$ ./cloudforecast_web -r -p 5000 -c cloudforecast.yaml -l server_list.yaml

查看图表,通过类 HTTPD

  • -p 指定 httpd 的 port
  • -o | -host httpd 的 Listen 主机 IP.默认为本机所有 IP
  • –allow-from 客户端IP/被访问的IP段,您可以指定多个 192.168.0.1 or 192.168.0.1/24 如果你不指定,就是不控制任何访问
  • –front-proxy 如果您前面使用的是反向代理,您可以指定多个,IP地址/ IP段.

3. 采集远程 snmp 的信息,通过 Gearman 来调度

$ ./cf_fetcher_worker -r -c cloudforecast.yaml -max-workers 2 -max-request-per-child 100 -max-exection-time 60

geamarn 调度 worker 进行远程信息检索采集

  • -max-worker prefork 多少个 worker 同来
  • -max-request-per-child 在处理时间的这个工作进程.如果处理的任务超过了这个数,这个进程重新启动
  • -max-exection-time 如果你的 worker 超时,停止掉 worker

4. Gearman 调度 worker进行 RRD 的文件更新

$ ./cf_updater_worker -r -c cloudforecast.yaml -max-workers 2 -max-request-per-child 100 -max-exection-time 60

Gearman 让 worker 对 RRD 文件写入信息

环境变量 CF_DEBUG=1 当这个成立时.输出调试日志

范例

img_20240220_041827.png
[root@rabbit-hd-212216 ~]# cat /usr/local/cloudforecast/cloudforecast.yaml
---
config:
# gearmanを利用する?合、enableを1にして、germandのhost名とportを指定します
  gearman_enable: 0
  gearman_server:
    host: localhost
    port: 7003
# rrdのファイルを?置する?所。「/」から始まると??パスとなります
  data_dir: /usr/local/cloudforecast/rra
# ???目の?定ファイルを?置するディレクトリ。「/」から始まると??パス
  host_config_dir: host_config

component_config:
# SNMPでデ?タを取得する?のオプション。communityとversion
  SNMP:
    community: public
    version: 2
# MySQLを??する?合のuser名とパスワ?ド
  MySQL:
    user: sql_read1
    password: "hd^R+O%ZU(5@oy#E"


[root@rabbit-hd-212216 ~]# cat /usr/local/cloudforecast/server_list.yaml
--- #Dev
# --- #Hogeと書くことでサーバ一覧を区切ることができます
# configはhost_config内の監視項目の設定ファイル名
# hostsは 「IPアドレス[space]ホスト名[space]コメント」です。コメント内にはスペースがあってもかまいません
servers:
  - config: basic.yaml
    hosts:
      - 10.132.41.88 nginx01 nginx01
      - 10.162.53.143  nginx02 nginx02
      - 10.132.28.169 pic01  pic01
      - 10.175.205.8 handler1 handler1
      - 10.132.83.125 handler2 handler2
      - 10.168.22.215 handler3 handler3
      - 10.51.33.223  handler4 handler4
      - 10.117.45.230 handler5 handler5
      - 10.117.40.155 handler6 handler6
      - 10.132.84.68 handler7 handler7
      - 10.47.94.79  handler8 handler8
      - 10.117.25.240 handler9 handler9
      - 10.51.30.157 handler10 handler10
      - 10.117.77.82 handler11 handler11
      - 10.51.32.26 handler12 handler12
      - 10.45.33.170 handler15 handler15
      - 10.26.199.53 handler16 handler16
      - 10.26.199.48 handler17 handler17
      - 10.47.132.41 handler27 handler27
      #- 10.252.101.75 hdweb hdweb

--- #MFS
servers:
  - config: basic.yaml
    hosts:
     - 10.162.57.46 mfs-master mfs-mater
     - 10.162.59.176 mfs-chunkserver1 mfs-chunkserver1
     - 10.51.4.0 mfs-chunkserver2 mfs-chunkserver2
     - 10.162.82.161 mfs-chunkserver3 mfs-chunkserver3
     - 10.117.6.87 mfs-chunkserver4 mfs-chunkserver4


--- #Elasticsearch
servers:
  - config: basic.yaml
    hosts:
      - 10.168.118.189 Elasticsearch01 Elasticsearch01
      - 10.168.28.38 Elasticsearch02 Elasticsearch02
      - 10.26.233.77 Elasticsearch03 Elasticsearch03

--- #Production
servers:
#  - config: httpd.yaml
#    label: Application Servers
#    hosts:
#      - 192.168.51.10 web1 web memcached
#      - 192.168.51.11 web2 web memcached
#  - config: httpd8080.yaml
#    hosts:
#      - 192.168.51.12 web3 mobile web
#      - 192.168.51.13 web4 mobile web
  - config: mysql.yaml
    label: DB
    hosts:
      - rdsjmlwvb.mysql.rds.aliyuncs.com db1 mysql master
#      - 192.168.51.61 db2 mysql slave
#      - 192.168.51.62 db2 mysql slave
#  - config: basic.yaml
#    label: ETC
#    hosts:
#      - 192.168.51.90 batch1 batch
--- #PC h5.cici.com
servers:
  - config: basic.yaml
    hosts:
       - 10.47.74.25 pc-haproxy01 pc-haproxy01
       - 10.252.101.75 pc-web01 pc-web01
       - 10.168.68.175 pc-web02 pc-web02
       - 10.24.255.220 pc-mysql01 pc-mysql01


[root@rabbit-hd-212216 ~]# cat   /usr/local/cloudforecast/host_config/basic.yaml
---
# component_configはこの監視項目の設定内だけで利用されます。
# 部分的にSNMPのcommunity名が異なる場合などに利用できます
# resourceには、監視項目を追加してきます。実際の監視内容は、CloudForecast::Data::Foo で定義
# されています。「:」で区切った値はオプションとして定義モジュールに渡されます
component_config:
resources:
  - traffic:eth0
  - traffic:eth1
  - basic
[root@rabbit-hd-212216 ~]# cat   /usr/local/cloudforecast/host_config/httpd8080.yaml
---
component_config:
resources:
  - traffic:2:eth0
  - traffic:3:eth1
  - basic
  - http:8080
[root@rabbit-hd-212216 ~]# cat   /usr/local/cloudforecast/host_config/httpd.yaml
---
component_config:
resources:
  - traffic:2:eth0
  - traffic:3:eth1
  - basic
  - http:80
  - memcached:11211
[root@rabbit-hd-212216 ~]# cat   /usr/local/cloudforecast/host_config/mysql.yaml
---
component_config:
resources:
  #- traffic:2:eth0
  - mysql
  - innodb
img_20240220_043336.png

snmp 安装

yum list all | grep snmp
yum install net-snmp.x86_64 -y
cd /etc/snmp/
cp snmpd.conf snmpd.conf.bak
cat snmpd.conf.bak |grep -vE '^$|^#' > snmpd.conf

配合使用cloudforse 的snmpd.conf配置

[root@datanode03 snmp]# vim snmpd.conf

#第一步,定义安全体名称,将一个共同体映射到一个安全体名称里:
#com2sec 是net-snmp中定义安全体名字的关键字,表示这一行定义一个安全体名字。
#sec.name: 安全体名称
#source:可以访问的ip地址范围,默认值"default”,即任何ip都可以访问。
#community:共同体名称
#
#       sec.name    souce            community
com2sec cici  10.161.212.216       public
com2sec cici  114.215.191.163      public
com2sec cici  10.161.171.134      public
#第二步,定义安全组,将安全体名称加进一个安全组中
#groupName  安全组名称
#securityModel 安全模型,可选值:v1,v2c,usm
#securityName  安全体名称
#
#      groupName    securityModel  securityName
group   ciciGroup v1           cici
group   ciciGroup v2c          cici
#第三步,定义视图,供安全组使用
#view.name  视图名
#incl/excl  对下面的MIB子树是包括还是排除(included/excluded)
#subtree    视图中所涉及的mib子树
#mask(optional)  掩码
#        view.name    incl/excl       subtree                    [mask]
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    systemview    included .1.3.6.1.2.1.2
view    all           included  .1                      80
#第四步,向安全组授权相应的视图
#group 安全组名
#context 上下文v1,v2中始终为空
#sec.model 安全模型,可选值:v1,v2,usm
#sec.level 安全级别  可选值:auth,noauth,priv,      v1,v2c中只能为noauth
#prefix 前缀。指定context如何与PDU中的context匹配,V3使用
#read   授权的读视图
#write  授权的写视图
#notif  授权的trap视图
#       group    context  sec.model  sec.level  prefix read write notif

access  ciciGroup ""      any       noauth    exact  all none none
view all    included  .1
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes

[root@datanode03 snmp]# systemctl start snmpd