本作品采用知识共享署名 3.0 非移植许可协议授权

许可。

http://creativecommons.org/licenses/by/3.0/legalcode

Tacker VNF 管理器中的应用监控 Zabbix 插件

启动板蓝图的URL

https://blueprints.launchpad.net/tacker/+spec/zabbix-plugin

在 Tacker VNF 管理器中开发一个 Zabbix 插件,用于监控当前 Tacker 监控驱动程序不支持的应用程序层参数。

问题描述

当前的 Tacker 监控驱动程序提供简单的监控功能,例如 Ceilometer 仅支持与硬件基础设施资源相关的参数(例如 CPU 或内存使用率)。Ping 和 http_ping 驱动程序也支持对 VNF 生存状态进行基本检查。为了保证 VNF 提供的网络服务的可用性和稳定性,需要在 VNF Tacker 管理器中集成另一种支持应用程序层参数的高级监控工具。

Zabbix 是最著名的监控工具之一,可以监控和跟踪各种类型的网络服务、应用程序、资源和服务器,以便快速通知管理员有关故障的信息。Zabbix 提供易于查看的简单 Web 页面和代理。

Zabbix 提供的监控目标如下。

  • cpu 内存 / 性能

  • 操作系统性能

  • 进程负载 / 数量

  • 交换空间 / 内存空间

  • FTP、HTTP、MySQL、NTP、POP、SSH、Telnet、SMTP 等应用程序状态

  • 自定义监控

Zabbix 提供的监控不仅包括 vnf 中的操作系统,还包括与应用程序相关的状态、内存占用、cpu 等。您可以通过 Zabbix 社区使用更多功能来创建所需的监控模板。

它还提供 API,为每个 VDU 提供准确且通用的监控功能。它通过代理收集数据,提供图形和地图等可视化监控,并根据收集的数据条件提供触发器和警报,以便在超过用户定义的阈值时及时通知。根据这些触发器,可以执行用户定义的命令以快速从故障中恢复。用户定义的命令可以通过 VDU 中的代理执行。

使用此功能,tacker 可以提供的 VNF 监控如下。

  • 应用程序监控

  • VNF 中的资源、网络监控

  • VNF 中应用程序内的故障管理和恢复

  • 执行预定义的命令

  • 可以图形化显示收集的数据

  • 可以设置自定义触发条件

拟议的变更

与 Zabbix 互操作需要模板策略、服务监控驱动程序和 Zabbix 插件。在 Tacker 中,VDU 的 IP 地址、名称等必须使用 API 请求传输到 Zabbix 服务器。此外,还需要通过 API 向服务器请求生成模板、项目、触发器、图形等用于监控。此外,应在 Tosca-Template 中定义服务监控策略,以允许用户定义有关监控应用程序、CPU 负载和状态的触发器通知的条件值。

Zabbix 可以使用安装在每个 VM 中的代理从 VNF 收集数据(CPU、RAM、磁盘、网络使用情况)。通过 Zabbix API,我们可以监控并从 Zabbix 控制面板获取所有信息,例如图形。

在 Tacker VNF 描述符中,用户通过用户数据定义 Zabbix 代理,还定义了 Zabbix 的策略和资源,例如阈值、将要监控的指标等。

Tacker 收集 VDU 的状态。如果 VDU 响应策略中的 Respwan 操作,或者需要为可扩展性创建额外的 VDU,则将有关附加 VDU 的信息注册为新的监控主机,方法是通过 Zabbix 插件向 Zabbix 服务器请求新 VDU 的 IP 信息。如果情况相反,则请求删除在 Zabbix 服务器中注册的现有 VDU 主机。

总体工作流程如下

+----------------------------+                      +----------------------------+
|                            |                      |                            |
|        Zabbix Web UI       |                      | Tosca_zabbix_template.yaml |
|                            |                      |                            |
+----------------------------+                      +--------------+-------------+
                                                                   |
                                                                   |
+----------------------------+               +---------------------v-------------------------+
|           Zabbix           |               |                    Tacker                     |
|                            |               |                                               |
|    +------------------+    |               | +-----------------------------------------+   |
|    |                  |    |               | |                   VNFM                  |   |
|    |  Zabbix Frontend |    |               | |                                         |   |
|    |                  |    |               | |  +---------------+   +---------------+  |   |
|    +------------------+    |               | |  |               |   |   Service     |  |   |
|                            |               | |  | Zabbix Plugin |   |   Monitoring  |  |   |
|    +------------------+    |         +----------+               <---+   Driver      |  |   |
|    |                  |    |         |     | |  |               |   |               |  |   |
|    |  Zabbix Server   | <------------+     | |  +---------------+   +---------------+  |   |
|    |                  |    |               | |                                         |   |
|    +------+-^----+---^+----+               | +-----------------------------------------+   |
|           | |    |   |     |               +-----------------------------------------------+
+----------------------------+
            | |    |   +-------------------------------------------------------+
            | |    |                                                           |
            | |    +-----------------------------------+                       |
            | +-------------------+                    |                       |
            |                     |                    |                       |
            |                     |                    |                       |
+------------------------------------------------------------------------------------------+
|           |                     |            NFVI    |                       |           |
| +--------------------------------------------------------------------------------------+ |
| |         |                     |            VNF     |                       |         | |
| | +---------------------------------------+  +---------------------------------------+ | |
| | |       |        VDU          |         |  |       |            VDU        |       | | |
| | | +-----v---------------------+-------+ |  | +-----v-----------------------+-----+ | | |
| | | |            Zabbix Agent           | |  | |           Zabbix Agent            | | | |
| | | +---------+--------------+----------+ |  | +---------+--------------+----------+ | | |
| | |           |              |            |  |           |              |            | | |
| | |          +v--------------v+           |  |          +v--------------v+           | | |
| | |          |     Scripts    |           |  |          |     Scripts    |           | | |
| | |          +----+---------^-+           |  |          +----+---------^-+           | | |
| | |               |         |             |  |               |         |             | | |
| | |      |--------v---------+------+      |  |      |--------v---------+------+      | | |
| | |      | Application  Or OS Info |      |  |      | Application  Or OS Info |      | | |
| | |      |          Or             |      |  |      |          Or             |      | | |
| | |      |       User Define       |      |  |      |       User Define       |      | | |
| | |      +-------------------------+      |  |      +-------------------------+      | | |
| | +---------------------------------------+  +---------------------------------------+ | |
| +--------------------------------------------------------------------------------------+ |
+------------------------------------------------------------------------------------------+

Zabbix 服务器请求内置在每个 VDU 中的 Zabbix 代理监控要收集的项目,Zabbix 代理执行嵌入项目的监控脚本。收集的数据由 Zabbix 代理发送到 Zabbix 服务器,Zabbix 服务器确定是否生成触发器。触发器可以根据收集数据的平均值等生成。

Tacker VNFM 需要具有服务监控驱动程序和 Zabbix 插件的 Zabbix 服务器来进行 API 请求。这允许监控 VDU。服务监控驱动程序从 Tosca 模板中提取服务监控策略并将其转换为字典,然后将其传递给 Zabbix 插件。Zabbix 插件首先发送令牌请求 API 到 Zabbix 服务器以接收令牌。

Zabbix 插件请求 Zabbix 服务器主机创建 API,包括 IP 地址,以注册生成的 VDU 作为监控主机。然后,它请求一个生成 API,其中包含触发器值和应用程序信息,以对每个 VDU 执行监控。所有这些过程都需要令牌。以下是服务监控策略的示例。

app_monitoring_policy:
  name: zabbix
  zabbix_username: Admin
  zabbix_password: zabbix
  zabbix_server_ip: 192.168.11.53
  zabbix_server_port: 80
  parameters:
    application:
      appname: apache2
      appport: 80
      app_status:
        condition: [down]
        actioname: cmd
        cmd-action: service apache2 restart
      app_memory:
        condition: [greater,22]
        actioname: cmd
        cmd-action: service apache2 stop
    OS:
      os_agent_info:
        condition: [down]
        actioname: cmd
        cmd-action: service zabbix-agent restart
      os_cpu_usage:
      os_proc_value:
        condition: [and less,30]
        actioname: cmd
        cmd-action: reboot
      os_cpu_load:
        condition: [greater,30]
        actioname: cmd
        cmd-action: reboot

我们可以在模板中输入 Zabbix 服务器的 ID / PASSWORD / IP / PORT,并使用此信息访问 zabbix 服务器(例如令牌)以执行监控操作。

  • zabbix_username & zabbix_password & zabbix_server_ip & zabbix_server_port:分别表示从 Zabbix 进行身份验证所需的信息,zabbix 用户的 ID 和密码,以及 Zabbix 服务器的 IP 和端口号。

Zabbix 监控由 Tacker 管理的 VNF 内部。从 Zabbix 的角度来看,VNF 就是我们正在操作的物理服务器。

因此,它监控 VNF 内部操作系统的 CPU / 内存和应用程序,并通知和修复故障的发生。所有这些都可以通过 Zabbix Web 通过 VNF 内部监控进行验证。Tacker 可以通过 Zabbix 运行稳定的 VNF。

这些服务监控策略应单独为每个 VDU 设置。这是因为每个 VDU 希望监控的范围和应用程序可能不同。参数分为应用程序和 VNF 内部操作系统监控。

  • name:开源监控工具的名称。

  • application & OS:有关应用程序和 VNF OS 相关监控的信息。

  • appname & appport:指定监控的应用程序和端口信息。

  • app_status & app_memory:它显示应用程序的状态和应用程序的内存(以字节为单位)。

  • os_cpu_usage & os_proc_value & os_cpu_load:cpu 表示 I / O 吞吐量、使用率和正在运行的进程数。

  • os_agent_info:os_agent_info 可以检查 zabbix 代理的状态。

输入有关 zabbix 服务器的多个身份验证信息,并从 zabbix 插件调用它与 Zabbix 服务器通信。结果,tacker 可以向 Zabbix 服务器发出各种监控请求。从安全角度来看,这是高效的。

可以为每个监控项目定义详细的比较值和相应的操作。这会在发生项目问题时通知您,并相应地定义其他操作。您可以通过在发生故障时执行定义的动作来提高 VNF 应用程序操作的稳定性。

可以为每个监控目标设置的详细信息如下。

  • condition: [comparison, value]

条件由比较和值组成。比较包括大于、小于、大于等于和小于等于,zabbix 根据与基线值的比较确定项目是否发生故障。

  • actioname: [action name]

  • cmd-action: [在 VNF 中执行的命令]

当前操作支持 cmd,并且将来会添加 respawn、scale 操作。如果条件中指定的条件为 true,则在 VNF 内部执行 cmd-action。

允许您响应故障执行操作。Zabbix 提供的操作包括远程命令、脚本执行等。这些命令可以设置为通过 Zabbix-agent 或通过 Zabbix-server 运行。使用 zabbix 提供的脚本执行来执行 cmd。

如果您选择 cmd,则必须定义 cmd-action。这是通过 zabbix-agent 在 vnf 中执行的 cmd - action 命令。总之,每个 cmd 的执行方式如下。

  • cmd:zabbix 服务器通过 vnf 中的 zabbix 代理自动执行操作,具体操作由用户 cmd-action 决定。

VDU 可以在其自身镜像上安装 Zabbix Agent,或者通过 Tosca 模板的用户数据会话创建自动监控环境。以下是用户数据中使用的脚本示例。

user_data: |
    #!/bin/bash
    sudo apt-get -y update
    sudo apt-get -y upgrade
    sudo apt-get -y install zabbix-agent
    sudo apt-get -y install apache2

    sudo sed -i "2s/.*/`ifconfig [Interface name in VNF] | grep ""\"inet addr:\"""| cut -d: -f2 | awk ""\"{ print $1 }\"""`/g" "/etc/hosts"
    sudo sed -i "s/Bcast/`cat /etc/hostname`/g" "/etc/hosts"
    sudo sed -i "3s/.*/[Zabbix server's IP Address]\tmonitor/g" "/etc/hosts"
    sudo /etc/init.d/networking restart
    sudo echo 'zabbix ALL=NOPASSWD: ALL' >> /etc/sudoers

    sudo sed -i "s/# EnableRemoteCommands=0/EnableRemoteCommands=1/" "/etc/zabbix/zabbix_agentd.conf"
    sudo sed -i "s/Server=127.0.0.1/Server=[Zabbix server's IP Address]/" "/etc/zabbix/zabbix_agentd.conf"
    sudo sed -i "s/ServerActive=127.0.0.1/ServerActive=[Zabbix server's IP Address:Port]/" "/etc/zabbix/zabbix_agentd.conf"
    sudo sed -i "s/Hostname=Zabbix server/Hostname=`cat /etc/hostname`/" "/etc/zabbix/zabbix_agentd.conf"

    sudo service apache2 restart
    sudo service zabbix-agent restart

使用 apt-get 安装 Zabbix-agent。此外,在安装 zabbix-agent 后,使用 sed 命令替换配置文件。此过程在 VDU 初始化过程中执行。

通过此过程,Zabbix 提供了一个稳定的监控功能,允许 Tacker 为每个 VDU 设置详细的监控范围和目标,并为 VDU 提供的应用程序提供更稳定的支持。

如果同时使用应用程序监控策略和当前监控策略,则根据当前监控策略发生 respawn 或 scale 操作,现有的 respawn 或 scale 操作将按原样进行。但是,当这些操作发生时,应用程序监控策略不起作用。在当前提案的范围内,用户必须选择当前监控策略或应用程序监控策略。如果 repawn、scale 操作添加到与当前监控策略分离的应用程序监控级别,则可以解决此问题。

备选方案

提供 API 的开源监控工具(例如 nagios)

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要作者和联系方式。

主要负责人

工作项

  1. 监控_driver 中的 Zabbix-plugin

  2. 用于调用 Zabbix-plugin 的 VNFM 中的插件

  3. 用于接收来自 Zabbix 服务器的警报的警报接收器中的附加功能

  4. 在 tacker.conf 中定义用于从 Zabbix-plugin 请求 Zabbix 服务器的服务器 IP 地址、端口、ID、密码。

  5. 从 utils、translate_template 中提取模板中定义的 app_monitoring_policy

依赖项

  • Zabbix-Server 安装

  • Zabbix-Agent 安装

测试

  • 为 vnf 服务监控添加功能测试

  • Zabbix 中 VNF 故障恢复和检测的性能测试

  • 基于整体工作流程测试的服务监控策略

文档影响

参考资料