Zabbix技术分享——腾讯云NAT网关监控

随着云计算的发展,越来越多的企业将业务迁移到公有云上。NAT网关作为云上网络访问的重要组件,其监控也尤为重要。本文将介绍如何利用Zabbix对腾讯云NAT网关进行监控,以保障业务的高可用。

1.   NAT网关介绍

NAT 网关(NAT Gateway)是一种支持 IP 地址转换服务,提供网络地址转换能力,主要包括SNAT(Source Network Address Translation,源网络地址转换)和DNAT(Destination Network Address Translation,目的网络地址转换)能力,可为私有网络(VPC内的资源提供安全、高性能的 Internet 访问服务。

NAT 网关分为公网 NAT 网关和私网 NAT 网关。公网 NAT 网关提供公网地址转换服务,而私网 NAT 网关提供私网地址转换服务。

NAT 网关支持高达99.99%的高可用性、5Gbps的带宽以及1000 万以上的并发连接数,其典型应用场景如下:

1. 大带宽、高可用的公网出口服务,例如:网络爬虫,访问 Internet 公共服务等。

2. 安全的公网出口服务,例如:云服务器需要与公网通信,但出于安全性考虑,不希望云服务器绑定公网 IP。


2.   监控前准备

本次监控方式通过Zabbix外部检查方式自动发现实例,监控项数据通过Zabbix采集器方式生成。将下面脚本上传至外部检查路径下。

:部署路径有差异,根据实际环境的外部检查路径放至脚本。

#!/usr/bin/python3
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.vpc.v20170312 import vpc_client, models
import sys
from os import popen
from zbxsend import ZabbixMetric, ZabbixSender
akey = sys.argv[1]
ckey = sys.argv[2]
region = sys.argv[3]
ZABBIX_SEND_ADDR = '/itops/zabbix/bin/zabbix_sender'
ZABBIX_SERVER_IP = '127.0.0.1'
ZABBIX_PORT = '10051'
def get_data(offset):
    params = {
        "Limit": 100,
        "Offset": offset
    }
    req.from_json_string(json.dumps(params))
    # 返回的resp是一个DescribeNatGatewaysResponse的实例,与请求对象对应
    resp = client.DescribeNatGateways(req)
    # 输出json格式的字符串回包
    res = resp.to_json_string()
    data = json.loads(res)
    disklist = data['NatGatewaySet']
    # 获取记录总条目数
    totalcount = int(data['TotalCount'])
    return totalcount,disklist
 
try:
    # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey
    # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
    cred = credential.Credential(akey,ckey)
    # 实例化一个http选项,可选的,没有特殊需求可以跳过
    httpProfile = HttpProfile()
    httpProfile.endpoint = "vpc.tencentcloudapi.com"
 
    # 实例化一个client选项,可选的,没有特殊需求可以跳过
    clientProfile = ClientProfile()
    clientProfile.httpProfile = httpProfile
    # 实例化要请求产品的client对象,clientProfile是可选的
    client = vpc_client.VpcClient(cred, region, clientProfile)
 
    # 实例化一个请求对象,每个接口都会对应一个request对象
    req = models.DescribeNatGatewaysRequest()
 
    totalcount,disklist = get_data(0) ## 获取100条以内的disk数据
    if totalcount > 100: ## 如果disk记录大于100,则将100往后的数据拼接至list

        if totalcount % 100 > 0:
            num = totalcount // 100 + 1
        else:
            num = totalcount // 100
        for i in range(num):
            if i == 0:
                continue
            else:
                disklist = disklist + get_data(i*100)[1]
 
    list_disk = []
    for i in disklist:
        nat_id = i['NatGatewayId']
        nat_name = i['NatGatewayName']
        nat_name = nat_name+nat_id
        list_disk.append({"{#NATID}":nat_id,"{#NATNAME}":nat_name})
        keys_list = list(i.keys())
        for key in keys_list:
            result = ZabbixSender(ZABBIX_SERVER_IP).send([ZabbixMetric(nat_id,key,str(i[key]))])
    print(json.dumps(list_disk))
 
 
except TencentCloudSDKException as err:
    print(err)

注意以下三处的值根据实际环境调整

ZABBIX_SEND_ADDRzabbix_sender路径

ZABBIX_SERVER_IPserver服务器IP地址

ZABBIX_PORTserver服务器端口



3.   监控模板制作

3.1. 新增自动发现规则用于自动发现NAT网关实例

U7WwpxQU655d54109a8cd.png

键值解释:

tencent.NAT.py:脚本名称,可自定义脚本名称,需要与外部检查路径下的脚本名称一致

{$ACCESS_KEY}SecretId

{$SECRET_KEY}SecretKey

可前往官网控制台 https://console.cloud.tencent.com/cam/capi 获取SecretIdSecretKey

{$REGION}:资源地域,表示操作的资源所属的地域

3.2.新增监控数据接收的监控模板

监控项名称入口:

uiFqyVOW655d54314952c.png

6P3IM6Ga655d544805030.png

1eUt4CId655d54661ea73.png

设置完成后,等待实例自动发现即可。


以上就是本期的Zabbix技术分享。

大家好,我是乐乐,专注运维技术研究与分享,关注我学习更多Zabbix等使用技巧,更多运维问题还可以到乐维社区留言提问。乐维社区是运维监控领域的垂直社区,专注打造Zabbix等技术栈的线上交流与共享平台,每周三下午,社区关联答疑群(如下图)还提供免费专家在线答疑,欢迎小伙伴们加入。

F1Ma3CDS6540d47b7b61a.png


你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
机灵小和尚
机灵小和尚

13 篇文章

作家榜 »

  1. 乐维君 397 文章
  2. YOHOHO 14 文章
  3. 机灵小和尚 13 文章
  4. 我是一只小菜鸡 12 文章
  5. 细雨闲花 11 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章